← İşler

Senior Full-Stack Engineer — Multi-Tenant SaaS Platform

Bütçe: - HOURLY / PART_TIME ⭐ 5.00 (7) United States

react-js, node.js

Job Description Overview We are building a production-grade, multi-tenant SaaS platform for a field operations company operating nationwide across multiple US time zones. The platform serves 14 distinct portals across web and mobile, connecting field workers, managers, clients, and residents in real time. Architecture is fully pre-decided and documented — you are building, not designing. This is a focused, well-scoped engagement with detailed technical specifications ready to hand over on day one. The right candidate will move fast, write clean TypeScript, and operate independently with minimal hand-holding. ________________________________________ Platform Scope 14 portals serving 7 distinct user roles, split across: • 3 mobile PWAs — offline-first, installable, bilingual (English + Spanish) • 11 web portals — 1440px desktop, data-dense, real-time dashboards Core technical requirements: • Multi-tenant middleware with subdomain-based tenant resolution and Redis caching • Real-time GPS tracking pipeline feeding a live operations dashboard • Geofence detection using PostGIS spatial queries (ST_Contains) on a PostgreSQL 15 database • Building-level collection tracking with Redis presence sets (SADD/SREM/SCARD pattern) • Offline-first service worker with IndexedDB queue and background sync • Role-based access control (7 roles, strict per-portal enforcement) • JWT + TOTP two-factor authentication (NextAuth v5) • Direct-to-S3 photo uploads via presigned PUT URLs (never through the server) • BullMQ job queue for multi-channel announcement fan-out (push + email + in-app) • Timezone-aware cron jobs (node-cron, per-community IANA timezone) • Stripe multi-tenant billing with immediate proration • WCAG 2.1 AA compliance throughout Infrastructure: • Vercel (Next.js) + two separate Railway services (Socket.io real-time server + cron server) • Upstash Redis, AWS S3, Twilio SMS, SendGrid email, Google Maps API ________________________________________ Tech Stack Layer Technology Framework Next.js 14 App Router, TypeScript strict mode Database PostgreSQL 15 + PostGIS, Prisma ORM Auth NextAuth.js v5 — JWT + TOTP 2FA Real-time Socket.io (Railway) Job queue BullMQ Cache Upstash Redis Storage AWS S3 (presigned URLs only) Payments Stripe Maps Google Maps API + Geometry library Styling Tailwind CSS + Shadcn/ui + Framer Motion State TanStack Query + React Server Components Tables TanStack Table Forms React Hook Form + Zod i18n next-intl Push web-push (VAPID) + Twilio fallback Hosting Vercel + Railway ________________________________________ What Is Provided You will receive on day one: • Complete Prisma schema (47 tables, fully designed) • CLAUDE.md master build rules file (works with Claude Code) • Comprehensive architecture decisions document covering every major technical choice • Portal-by-portal spec files for all 14 portals • Session-by-session build prompts if using Claude Code as your assistant • Answers to any clarifying questions within 24 hours You are not being asked to design or architect anything. You are being asked to execute a well-defined plan with expert precision. ________________________________________ Engagement Details • Type: Fixed-price milestones • Timeline: 18 working days target across 6 parallel build sessions • Communication: Async daily updates + two scheduled check-ins per week • Location: Remote, any timezone • Start: Immediate upon agreement ________________________________________ Demo Requirement — Required to Be Considered Before submitting a proposal, build and submit a small demo demonstrating the following in a single Next.js 14 App Router project: 1. Multi-tenant middleware — subdomain extracted from the request host, looked up in a mock Redis store, injected as a header, and returned 404 for unknown subdomains 2. PostGIS geofence check — a single API route that accepts [lat, lng] and returns whether the point is inside a hardcoded polygon using a raw ST_Contains query via Prisma $queryRaw 3. Real-time update — a Socket.io connection where clicking a button on one browser tab updates a counter on another tab in under 500ms The demo does not need to be polished. It needs to be correct. Include a README with setup instructions. A public GitHub repo is required — no zip files. This demo is the first filter. Proposals without a working demo link will not be reviewed. ________________________________________ Ideal Candidate You are the right fit if: • You have shipped at least one multi-tenant SaaS product in production • You have worked with PostGIS or another spatial database in a production environment • You have built offline-first PWAs with service workers and background sync • You are comfortable with Socket.io real-time architecture at scale • You think in TypeScript — strict mode, no any, Zod-validated boundaries • You have deployed to Vercel and Railway (or similar split-service architecture) • You can read a schema and spec file and build without being walked through every line • You are available for a 30-minute video call within 3 days of submitting your proposal You are not the right fit if: • You need UI/UX direction — design specs are provided • You have not worked with multi-tenant middleware before • You primarily work in React without Next.js App Router experience • Your PostGIS experience is limited to reading documentation ________________________________________ Your Proposal Should Include 1. Your bid — total fixed price or hourly rate with estimated total hours 2. Demo link — GitHub repo URL (required) 3. Relevant experience — brief description of the most similar project you have shipped, including tech stack and your specific role 4. One technical answer — explain in 3–5 sentences how you would handle the following: A GPS ping arrives from a mobile device every 10 seconds. You need to check whether the collector is inside any of 20 polygon geofences for their community, update a Redis presence set, and emit a WebSocket event — all within the same request cycle. What does your implementation look like and what are the failure modes?
Upwork'te aç