Corporate portals
A small product surface (three controllers, modest route count) that nonetheless represented a meaningful share of revenue. Enterprise clients with multiple ongoing engagements got a client-branded sub-experience — a custom subdomain or path, a custom logo and accent color, and a focused view onto just their own boards and deliverables.
This is the closest thing Currnt has to multi-tenancy. It’s a thin one: clients live in the same database, the same monolith renders them, and the “branding” is a small set of overrides applied at request time based on a host or path lookup.
What it covers
- Client landing —
/c/:clientor a custom subdomain that resolves to the same controller. Displays the client’s logo, accent color, contact, and list of their boards. - Their boards — the same board-view machinery as the public site, scoped to the client’s engagements only.
- Deliverables library — finished board summaries, available as in-page reading or PDF export.
- Member directory — the client’s own employees who have access; managed by a designated client admin.
Representative routes
| Method | Path | Handler | Notes |
|---|---|---|---|
| GET | /c/:client | CorporateController.home | Branded landing for this client. |
| GET | /c/:client/boards | CorporateController.boards | List of this client's active and past boards. |
| GET | /c/:client/boards/:slug | CorporateController.boardDetail | Branded view; same board engine underneath. |
| GET | /c/:client/deliverables | DeliverableController.list | All shipped board summaries. |
| GET | /c/:client/deliverables/:id.pdf | DeliverableController.pdf | Server-side PDF generation. |
| GET | /c/:client/members | CorporateController.members | Visible to client admin only. |
| POST | /c/:client/members/invite | CorporateController.inviteMember | Adds employee with client-scoped role. |
Headline flow: client analyst → exported deliverable
Step 1: Client analyst hits client subdomain (or /c/:client direct).
Step 2: CorporateController.home resolves the client by host or :client param,
loads the client's branding bundle (logo, accent, contact).
Step 3: User lands on branded home; sees grid of their active boards.
Step 4: Clicks a board → CorporateController.boardDetail with the same view
machinery as the member-facing board engine, just wrapped in their
brand chrome.
Step 5: When the board is closed and a summary is published, it appears in
/c/:client/deliverables.
Step 6: Click "Export PDF" → server-side PDF generation hits the same
Twig view but with a print stylesheet, sent inline as attachment.