ENDA Partner Portal
I make tenant-based systems simple not messy folders or loginsEach partner gets only what they need—branded login, scoped accounts, documents
problem
The challenge: deliver a branded console for each partner without breaking shared security or making extra app copies
I kept identity clean and made new partner onboarding easy
- Branded logins for each partner page
- All accounts and documents scoped and secure
- Shared backend for mail SMS messaging reused everywhere
- No cross-partner leaks or confusion
pipeline
decisions
Branding from a config map, not per-partner page trees.
tradeoffNew partners are hard-coded entries instead of self-service uploads.
outcomeAdding a partner is a config row and a slug. Unknown slugs 404 instead of rendering.
Authenticate partner scope against the token, not against display branding.
tradeoffA login must know which partner it belongs to.
outcomeA mismatch between session and URL slug is rejected with 401, with no cross-partner leak.
Generate receipts and student documents from templates rather than hand-filling PDFs.
tradeoffUpfront template work per document type.
outcomeQuittances and student cards stay consistent and cannot drift from what the database says.
results
- consoles live
- 1
- agencies
- 110
- see Gamma Academy
- cross-tenant leaks
- 0
- documents
- quittances, student cards
stack
Frontend
- Next.js 16
- Route groups
- PDF generation
Backend
- NestJS
- Prisma
- PostgreSQL
- Redis
Infrastructure
- JWT tenant claims
- SMS
Operations
- Cloudflare DNS
- Docker