Skip to content
louay_amor~
Sep – Oct 2026client work

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

  1. 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.

  2. 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.

  3. 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
PDF
quittances, student cards

stack

Frontend

  • Next.js 16
  • Route groups
  • PDF generation

Backend

  • NestJS
  • Prisma
  • PostgreSQL
  • Redis

Infrastructure

  • JWT tenant claims
  • Mail
  • SMS

Operations

  • Cloudflare DNS
  • Docker