Full Stack Web-Developer
Worldwide
Overview: Architecture Gap Analysis (Current Monolith vs. Target Microservices) The current codebase operates as a single Next.js modular monolith deployed on a single domain. While functionally rich, it lacks physical service boundaries, independent deployability, distributed infrastructure, and dedicated subdomains specified in the target architecture. --- 1. Frontend & Domain Separation * Unified Domain & Path Routing: Everything runs under the primary domain (www). Portals are split by URL paths (/admin, /vendor, /partner, /agent/visa) rather than distinct subdomains (admin., vendor.). * Single Deployment Artifact: Public, user, admin, and vendor frontends build and deploy as a single Next.js application. * No Subdomain Traffic Splitting: DNS and next.config.mjs do not route or isolate traffic by portal. * Responsive Web Only: No dedicated mobile app frontend or native API layer, despite future mobile support requirements. --- 2. Backend & API Layer * Colocated API Endpoints: User APIs (/api/*) and admin/vendor logic live on the main domain rather than standalone hosts (api. or backend.). * Implicit Gateway Layer: Lacks a dedicated API Gateway. Traffic relies strictly on Vercel Edge rules and src/proxy.ts middleware. * Monolithic API Execution: Approximately 180 route handlers run inside a single Next.js process instead of isolated domain APIs (Auth, Booking, Payment, Search, Wallet, Notifications). * Missing Infrastructure Standards: * No Service-to-Service Auth: Zero internal token exchange or inter-service security patterns. * No API Versioning: Endpoints lack formal versioning prefixes (e.g., /v1/). * Tightly Coupled Scaling: API capacity cannot be scaled independently by domain or load profile. --- 3. Microservices & Modular Boundaries The following target services exist strictly as internal utility libraries or route handlers inside the monolith: * Auth Service: Embedded in nextauth.ts and shared utility modules. * User Service: Intermingled across customer and admin API routes. * Booking Service: Flights, hotels, trains, visas, and cabs share a single codebase. * Payment Service: Payment logic resides in route handlers and shared helper files. * Search Service: In-process execution within the primary Next.js runtime. * Notification Service: In-app and email dispatch logic embedded in handlers. * Wallet Service: Customer, partner, and vendor wallets share one database and app logic. * Inventory Service: Vendor inventory (hotels, cabs) is managed inside monolith routes. * Earning & Payout Service: Partner/vendor payouts executed via inline route handlers. * Document Service: File processing handled inline via s3-upload.ts. * Review Service: Reviews are directly coupled to core database schemas. * CMS Service: Admin routes coupled with cms-server.ts. * Audit Log Service: Synchronous database writes via a shared utility library. * Reports / Analytics Service: Direct in-process query execution during admin requests. --- 4. Database Layer * Single Instance & Shared Schema: One shared PostgreSQL database (DATABASE_URL) without read/write splitting or a read replica setup. * No Database-per-Service: Complete schema shared across all domains, preventing logical and physical isolation. * Unmanaged Migration History: Uses db push and manual SQL scripts instead of versioned prisma migrate history. * Runtime Schema Creation: Tables created dynamically on application boot (ensure*Schema), posing operational risks in production. * Disaster Recovery: No documented automated backups, point-in-time recovery, or failover plans in source control. --- 5. Shared Infrastructure & Async Processing * Missing Distributed Cache: @upstash/redis is listed in package.json but unintegrated; no shared caching layer exists. * No Message Broker / Task Queue: Lacks asynchronous queues (BullMQ, RabbitMQ, Kafka, or SQS). Background operations rely on cron endpoints. * Synchronous Workflows: Emails, reports, refunds, and notifications run synchronously inside HTTP requests. * Mocked Integrations: * SMS: Cab notifications write directly to server logs (cab-workflow-notifications.ts). * Push Notifications: Lacks FCM, APNs, or Web Push integrations. * Edge & Network Limitations: * Lacks explicit CDN configurations for static assets beyond basic provider defaults. * Lacks a dedicated Load Balancer / Gateway tier. * File storage (S3/R2) operates via local utilities rather than a managed storage microservice. --- 6. Observability, Security & Monitoring * Observability Void: No integration for Prometheus, Grafana, ELK, or distributed APM tracing (e.g., OpenTelemetry, Datadog). * Missing Error Tracking: Sentry is referenced in codebase comments but not wired into application runtime. * Unstructured Logging: Logging depends on standard console.log / console.error without centralized log shippers. * Edge Security: No Web Application Firewall (WAF) configuration or dedicated DDoS mitigation policies. * Stateful Rate Limiting: src/lib/rate-limit.ts uses local in-memory state, failing across multi-instance or serverless deployments. * Network Isolation: Zero network segmentation between internal services or backend endpoints. --- 7. Scalability & Deployment Mechanics * Monolithic Build Pipeline: Single package.json build process; updating one line requires redeploying the entire system. * Real-time Server Coupling: Socket.IO requires a persistent server (server.ts), conflicting with serverless deployment models and microservice patterns. * No Orchestration Layer: Lacks Docker Compose, Kubernetes, or container orchestration manifests. * Single-Region Risk: No redundancy or multi-region failover strategy configured. --- Summary Architectural Divergence Target Architecture: Subdomain Frontends - Current Codebase: Single Next.js Monolith Target Architecture: API Gateway - Current Codebase: Middleware Proxy (src/proxy.ts) Target Architecture: Isolated Microservices - Current Codebase: ~180 Route Handlers Target Architecture: Database-per-Service - Current Codebase: Single Shared PostgreSQL DB Target Architecture: Async Event Broker/Queue - Current Codebase: Synchronous Cron Endpoints Bottom Line: The target architecture specifies a distributed, highly scalable microservices platform with clear domain isolation, dedicated subdomains, asynchronous event processing, and isolated infrastructure. The current codebase is a feature-rich modular monolith. While it works as a unified application, transitioning to the target state requires extracting domain services, decoupling the database, implementing an event broker, and configuring dedicated infrastructure.
- Not SureHourly
- 1-3 monthsDuration
- IntermediateExperience Level
- Remote Job
- Complex projectProject Type
Skills and Expertise
Activity on this job
- Proposals:5 to 10
- Last viewed by client:yesterday
- Interviewing:0
- Invites sent:0
- Unanswered invites:0
About the client
- India7:34 AM
Explore similar jobs on Upwork
How it works
Create your free profileHighlight your skills and experience, show your portfolio, and set your ideal pay rate.
Work the way you wantApply for jobs, create easy-to-by projects, or access exclusive opportunities that come to you.
Get paid securelyFrom contract to payment, we help you work safely and get paid securely.
About Upwork
- 4.9/5(Average rating of clients by professionals)
- G2 2021#1 freelance platform
- 49,000+Signed contract every week
- $2.3BFreelancers earned on Upwork in 2020
Find the best freelance jobs
Growing your career is as easy as creating a free profile and finding work like this that fits your skills.
Trusted by