Architecture Overview
This document provides a high-level overview of the Enterprise Business OS architecture.
System Architectureβ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENT LAYER β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β Browser β β Mobile App β β CLI β β Webhooks β β
β β (React) β β (Future) β β (Future) β β (Inbound) β β
β ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ β
βββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββΌβββββββββββββββββ
β β β β
βΌ βΌ βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EDGE / CDN LAYER β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Vercel Edge Network β β
β β β’ Static Asset Caching β’ Edge Middleware β’ Geographic Routing β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β APPLICATION LAYER (Next.js 16) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ β
β β Middleware β β App Router β β API Routes β β
β β β β β β β β
β β β’ Rate Limiting β β β’ SSR/SSG Pages β β β’ REST Endpointsβ β
β β β’ Auth Check β β β’ i18n (en/id) β β β’ Webhook Recv β β
β β β’ RBAC β β β’ Error Bounds β β β’ File Upload β β
β ββββββββββ¬βββββββββ ββββββββββ¬βββββββββ ββββββββββ¬βββββββββ β
β β β β β
β ββββββββββββββββββββββΌβββββββββββββββββββββ β
β βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β SERVICE LAYER β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ β β
β β β AuthServiceβ βBillingServ β β AIService β βProjectServ β β β
β β β β β β β β β β β β
β β β β’ Login β β β’ Stripe β β β’ Gemini β β β’ CRUD β β β
β β β β’ OAuth β β β’ Usage β β β’ RAG β β β’ Tasks β β β
β β β β’ JWT β β β’ Invoices β β β’ Agents β β β’ Members β β β
β β ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DATA LAYER β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββ β
β β PostgreSQL β β Upstash Redis β β File Storage β β
β β (Neon/Supa) β β β β (Vercel Blob) β β
β β β β β β β β
β β β’ Users/Teams β β β’ Rate Limiting β β β’ Documents β β
β β β’ Projects β β β’ Session Cache β β β’ Invoices (PDF) β β
β β β’ Invoices β β β’ PII Mappings β β β’ Avatars β β
β β β’ Audit Logs β β β β β β
β ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EXTERNAL SERVICES β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ
β β Stripe β β Google AI β β Resend β β PostHog β β Sentry ββ
β β β β (Gemini) β β β β β β ββ
β β β’ Payments β β β’ Chat β β β’ Emails β β β’ Analyticsβ β β’ Errors ββ
β β β’ Subs β β β’ Embeddingsβ β β’ Transact β β β’ Events β β β’ Traces ββ
β ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ ββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Directory Structureβ
src/
βββ app/ # Next.js App Router
β βββ [locale]/ # i18n routes (en, id)
β β βββ auth/ # Authentication pages
β β βββ dashboard/ # Protected dashboard
β β βββ page.tsx # Landing page
β βββ api/ # API routes
β βββ auth/ # Auth endpoints
β βββ projects/ # Project CRUD
β βββ webhooks/ # Stripe, custom webhooks
β βββ ai/ # AI endpoints
β
βββ components/ # React components
β βββ ui/ # Design system (shadcn-style)
β βββ dashboard/ # Dashboard-specific
β βββ landing/ # Marketing pages
β βββ providers/ # Context providers
β
βββ services/ # Business logic
β βββ authService.ts # Authentication
β βββ billingService.ts # Stripe + usage
β βββ aiService.ts # AI integrations
β βββ ...
β
βββ lib/ # Utilities
β βββ auth-helper.ts # JWT verification
β βββ logger.ts # Structured logging
β βββ rate-limit.ts # Upstash rate limiting
β βββ db/ # Database utilities
β
βββ db/ # Database
β βββ schema.ts # Drizzle schema
β βββ index.ts # Connection
β
βββ schemas/ # Zod validation
β βββ invoice.ts
β βββ team.ts
β βββ project.ts
β
βββ types/ # TypeScript types
βββ index.ts # Shared types
Data Flowβ
Authentication Flowβ
User β Login Form β API /auth/login β AuthService
β
βΌ
Validate Credentials
β
βΌ
Generate JWT Token
β
βΌ
Set HttpOnly Cookie
β
βΌ
Redirect to Dashboard
Multi-Tenancy Query Flowβ
API Request (with JWT)
β
βΌ
Middleware
Extract teamId from JWT
β
βΌ
Service Layer
All queries include: WHERE teamId = ?
β
βΌ
Database
Indexed on teamId for performance
Billing Flowβ
User Action (AI Token Usage)
β
βΌ
BillingService.checkQuota()
ββ Quota OK? βββ¬ββ NO β Return Error
β
YES
β
βΌ
Execute Action
β
βΌ
BillingService.trackUsage()
β
βΌ
Update usage_billings table
β
βΌ
Check Upsell Triggers
Technology Decisionsβ
| Component | Choice | Rationale |
|---|---|---|
| Framework | Next.js 16 | Full-stack, edge-ready |
| Database | PostgreSQL + Drizzle | Type-safe, performant |
| Auth | Custom JWT | Edge-compatible, no vendor lock |
| Payments | Stripe | Industry standard |
| AI | Google Gemini | Cost-effective, fast |
| Caching | Upstash Redis | Serverless-friendly |
| Resend | Developer-friendly | |
| Monitoring | Sentry + PostHog | Error + Product analytics |