Dashboard-first information architecture
Every role lands on a single overview: outstanding tasks, recent updates, and documents needing attention. Deep links exist, but the home state answers the first question.
Portal
A remote services team needed one place for clients to complete onboarding, see project status, and retrieve documents—without turning Slack into the system of record.
Status lived in threads. Documents lived in shared drives with unclear versions. New clients asked the same onboarding questions repeatedly. Support staff spent hours answering ‘where are we?’ instead of doing delivery work.
Every role lands on a single overview: outstanding tasks, recent updates, and documents needing attention. Deep links exist, but the home state answers the first question.
Client, delivery lead, and admin see different nav density. We avoided a mega-menu that exposed internal tools to clients.
Required documents are checklist items with states (missing, submitted, approved). That gave ops a queue instead of a folder full of mystery PDFs.
Next.js App Router with authenticated route group. Prisma models for projects, memberships, documents, and activity events. Auth.js sessions gate every portal route. File metadata lives in Postgres; binaries in object storage referenced by signed URLs.
We shipped the portal shell, membership invites, document checklist, and activity feed first. Email notifications fire on state changes that require client action. Editors update onboarding copy through a structured content path so engineering is not on the critical path for wording tweaks.
Onboarding became a checklist instead of a scavenger hunt. Status questions dropped because the portal showed the same truth the team used internally. Document handoff gained a reviewable trail.
Phase two candidates: finer notification preferences, richer file preview, and optional client-side commenting on documents.
Screenshots
Tell us about the workflow, the tools involved, and what “done” means for the first release.
Discuss a client portal