Project visibility, approval workflows, job requests, invoices, and your team — all behind a secure, client-scoped login.
Clients authenticate through their own cookie-based session system, completely isolated from your internal staff login. No JWTs, no shared tokens.
Every API query is automatically scoped to the authenticated client's data. There is no parameter to override, no way to see another client's projects.
Staff access portal management through the agency dashboard using JWT auth. Clients use cookie auth at /portal. Two systems, zero overlap.
Clients sign in at /portal/login with their own credentials. Completely separate from staff auth.
HttpOnly cookie-based authentication. No tokens in localStorage, no XSS attack surface.
Every page and API endpoint checks permissions like canViewInvoices, canApproveWork, and canSubmitRequests before rendering.
All database queries filter by the authenticated client ID. No clientId parameter needed — it is implicit.
Every page is designed for a specific client need — no feature bloat, no confusion.
The client's home base — active projects, pending approvals, recent notifications, and their assigned team members.
Upload deliverables for client review — creative assets, copy decks, campaign strategies. Clients can approve, request revisions, or leave comments directly in the portal.
Every action is tracked with timestamps and user attribution. No more email chains, no lost feedback, no ambiguous sign-offs.
Attach files, creative assets, or documents to an approval step for client review.
Clients can approve the work, request revisions with specific feedback, or leave inline comments.
Every approval, revision, and comment is timestamped and attributed. Complete accountability.
See which approvals are pending, in review, approved, or need changes — at a glance.
Clients can submit job requests for new work or support tickets for issues — directly from the portal. No more email threads or lost Slack messages.
Each request has a built-in message thread where clients and staff can exchange updates. Internal notes stay hidden from clients, visible only to your team.
Staff manage all requests from the agency dashboard — assign team members, link to projects, set priorities, and track resolution times.
Job requests for new work (projects, revisions, strategy) and support tickets for issues (billing, access, bugs).
Each type has its own categories — design, development, content for jobs; billing, access, feedback for support.
Built-in message thread per request. Clients and staff exchange updates without leaving the portal.
Staff can leave internal notes that are invisible to the client — perfect for handoff context and team coordination.
Clients see their assigned project managers on the dashboard with email and phone contact buttons.
The project detail page shows all team members assigned to tasks — controlled by the show_team_members setting.
Click any invoice to see the full line-by-line breakdown — descriptions, quantities, prices, and amounts.
Overdue invoices show exact days overdue with color-coded badges — 30d, 60d, and 90+ day aging buckets.
Full invoice detail opens in a slideover — subtotals, tax, discounts, payments, and outstanding balance at a glance.
Control exactly what each client can see and do. Permissions are checked on every API call and enforced at the UI level — nav items are hidden when access is denied.
Controls whether the client can see their billing history and download invoices.
Determines if the client can submit approval responses — approve, revise, or comment.
Allows the client to leave comments on projects and deliverables.
Controls whether the client can submit job requests and support tickets.
A branded portal that makes your agency look polished — and keeps clients in the loop without the email back-and-forth.
Get Started