The DotEvolve platform is a multi-product SaaS suite built on a shared identity and tenancy layer — the Central Portal.
Full System Architecture
graph TB
subgraph End_Users
EU[End-User\nportal.dotevolve.net]
end
subgraph Admins
SA[Super Admin\nadmin.dotevolve.net]
TA[Tenant Admin\nadmin.dotevolve.net]
end
subgraph Central_Portal
AP[Admin Portal\nReact 19 / Vercel]
EP[End-User Portal\nReact 19 / Vercel]
PA[Portal API\nNode.js / Heroku]
SB[Supabase Auth\nJWT IdP]
CR[(Central Registry\nSupabase PostgreSQL)]
end
subgraph Foot_Factory
FFC[foot-factory.dotevolve.net\nClient App]
FFA[foot-factory-admin.dotevolve.net\nAdmin Dashboard]
FFAPI[foot-factory-api.dotevolve.net\nNode.js / MongoDB]
end
subgraph dot_cOS
COSFE[cos.dotevolve.net\nFrontend]
COSAD[cos-admin.dotevolve.net\nAdmin Dashboard]
COSGW[cos-api.dotevolve.net\nAPI Gateway]
COSWS[cos-workflow.dotevolve.net\nWorkflow Service]
end
subgraph Infrastructure
VER[Vercel API]
CF[Cloudflare DNS]
RZP[Razorpay\nBilling]
end
SA --> AP
TA --> AP
EU --> EP
AP --> PA
EP --> PA
PA --> SB
PA --> CR
PA --> VER
PA --> CF
PA --> RZP
SB -->|JWT| FFC
SB -->|JWT| FFA
SB -->|JWT| COSFE
SB -->|JWT| COSAD
FFC --> FFAPI
FFA --> FFAPI
FFAPI -->|plan limits| PA
COSFE --> COSGW
COSAD --> COSGW
COSGW --> COSWS
Products
| Product |
URL |
Description |
| Admin Portal |
admin.dotevolve.net |
Tenant and user management for Super_Admin and Tenant_Admin |
| End-User Portal |
portal.dotevolve.net |
App launcher for end users |
| Foot Factory |
foot-factory.dotevolve.net |
Factory operations management |
| dot-cOS |
cos.dotevolve.net |
Corporate compliance automation |
Roles
| Role |
Scope |
Description |
super-admin |
Platform-wide |
Full access across all tenants and apps |
tenant-admin |
Per-tenant |
Manages users and app assignments within their tenant(s) |
user |
Per-app per-tenant |
Standard end-user access to specific apps |
Request Flow — Admin Operation
sequenceDiagram
participant A as Admin Portal
participant PA as Portal API
participant SB as Supabase Auth
participant CR as Central Registry
A->>PA: POST /api/v1/tenants (Bearer JWT)
PA->>SB: Validate JWT (public key)
SB-->>PA: { app_metadata: { activeRole: "super-admin" } }
PA->>PA: Role check: super-admin ✓
PA->>CR: INSERT INTO tenants (...)
CR-->>PA: Tenant created
PA->>PA: Trigger subdomain provisioning
PA-->>A: 201 Created
Request Flow — App Request
sequenceDiagram
participant App as App Frontend
participant API as App Backend
participant SB as Supabase Auth
participant DB as App Database
App->>API: GET /api/v1/data (Bearer JWT)
API->>SB: supabase.auth.getUser(token)
SB-->>API: { app_metadata: { activeTenantId } }
API->>API: Scope all queries to activeTenantId
API->>DB: Query WHERE tenantId = activeTenantId
DB-->>API: Tenant-scoped data
API-->>App: 200 OK