Agency Manager Surface Map
Purpose
This document maps the current shipped surface ownership in the repo.
It is no longer a speculative IA sketch. Use it to distinguish:
- what is already live
- what is partially live
- what still belongs to the next build step
URL Grounding
The public URL rules remain unchanged:
orgroutes live on the app host without/orgin the public URLportalroutes live on the tenant host without/portalin the public URLplatformroutes remain under/platform
Use appRoutes as the canonical route contract.
Org Surface
Purpose
The org surface is now the live agency workspace for client accounts, delivery, billing operations, commercial records, and the shared drive.
Hard product rule:
clients/[clientId]is the simple consolidated home for a single client's world- top-level sidebar workspaces are advanced operational views across the same client-owned records
- those sidebar workspaces do not create separate ownership domains
Current live areas
overview
Status: live.
What it is today:
- org operations dashboard summary
- organization/subscription summary
- settings and portal quick links
What it is not yet:
- the longer-horizon reporting drill-in surface for trends, finance, and operational exceptions
analytics
Status: next route to add.
What it should do:
- sit in the org sidebar as a dedicated reporting workspace
- give agency managers graphs, trend lines, and attention views for delivery, utilization, revenue, receivables, and billing health
- complement
overviewinstead of turningoverviewinto a giant reporting dump
clients
Status: live.
What it does today:
- lists visible client accounts
- creates client accounts
- edits core client-account fields inline
- shows assigned staff for each client account
- lets owners update
clientAccessAssignments
What also exists now:
- client detail workspace through
clients/[clientId] - client-local sections for people, projects, time, drive, contracts, billing, and activity
Architectural rule:
The client detail workspace is the plain-language home for one client's complete operating context.
Users should not need to leave it just to understand what exists for that client.
Important naming note:
The route folder is now clients, which matches the shipped client-account model.
projects
Status: live, list-first.
What it does today:
- lists projects across visible client accounts
- creates projects
- shows status, visibility, summary, and target date
What also exists now:
- project detail workspace through
projects/[projectId] - draft and published project update workflow
Important behavior rule:
If a file belongs to a project, users should be able to upload or retrieve it from the project workspace without detouring through the global Drive workspace.
What is still missing:
- only the next layer of workflow depth after the current consistency pass
time
Status: live, list-first.
What it does today:
- lists recent time entries across visible client scope
- logs draft time entries
- links entries to client accounts and optional projects
What is still missing:
- team-vs-own workflow split
- approval and lock workflow depth
billing
Status: live, access-gated.
What it does today:
- lists invoice records
- lists subscription records
- launches Stripe-backed invoice and subscription authoring
- supports invoice and subscription detail routes
- includes the backend Stripe foundation for agency connection state, webhook sync, and hosted billing portal entry points
What is still missing:
- richer invoice and subscription operational visibility and reporting
Important behavior rule:
Billing attachments belong to billing surfaces first. The global Drive workspace may index or retrieve them later, but it should not be the required entrypoint for billing-specific file work.
quotes
Status: live, billing-adjacent.
What it does today:
- lists client-account-scoped quote records
- creates draft quotes through Stripe-backed flows
- finalizes and cancels quotes from the org surface
What is still missing:
- deeper commercial workflow polish and clearer follow-through from quote acceptance into longer-lived client-account context
contracts
Status: live, first-class commercial/legal workspace.
What it does today:
- lists contract records tied to client accounts and optional projects
- supports contract detail routes with contract-owned authored content
- keeps contracts as a first-class operational queue and legal workflow instead of treating them as just another collaboration artifact inside Drive
What is still missing:
- deeper contract lifecycle polish and tighter coordination with quotes, approvals, signatures, and client acknowledgments
Important behavior rule:
Contract attachments belong to contract flows first. The global Drive workspace may help retrieve them later, but contracts remain the owning operational context.
drive
Status: live.
What it does today:
- acts as a global drive finder across visible clients
- supports folder, upload, and doc creation in the drive model
- owns the shared file and authored-doc collaboration surface instead of deferring to the legacy
documentstable - is the place for exchange, requests, uploads, and collaboration artifacts rather than the source-of-truth workflow for contracts or billing
Important positioning rule:
Drive is the advanced file-centric operational view across one or many clients.
It is not the universal place users must visit every time a feature involves a file.
What is still missing:
- nested folders, richer metadata, and request-driven collaboration depth
portals
Status: live.
What it does today:
- gives agency staff a cross-client operational view of portal readiness and access state
- exposes queue-switched portal management instead of burying portal state inside the client list
What is still missing:
- portal-side self-service people management on top of the multi-company grant model
settings
Status: live from the earlier org-access/settings work.
This area remains the home for org admin, access, and configuration. It is not the center of the new client-work slice.
Org areas not yet live
analytics- deeper invoice and subscription operational polish
Portal Surface
Purpose
The portal is live as a client-facing workspace, but it is still intentionally narrower than the org workspace.
Current live areas
overview
Status: live.
Current focus:
- portal session and access state
- recent activity snapshot
- billing and account status summaries
- quick visibility into current delivery and shared files
projects
Status: live.
Current focus:
- client-visible project list
- project status, published updates, approved billable time, and shared file counts
projects/[projectId]
Status: live.
Current focus:
- project drill-in with published updates, shared files, and recent activity
billing
Status: live.
Current focus:
- current client billing snapshot
- invoice and subscription visibility
- portal-safe billing actions layered on Stripe-backed state
files
Status: live.
Current focus:
- shared client-visible document library
activity
Status: live.
Current focus:
- portal-safe recent activity feed
- account/profile/settings activity filters
settings
Status: live.
Current focus:
- account and support configuration flows
support
Status: live.
Current focus:
- support request workspace
Portal areas not yet live
- richer client response loops for requests, approvals, and acknowledgments
- deeper billing self-service beyond the current Stripe-backed visibility and actions
Platform Surface
Purpose
Future multi-agency operator workspace.
This surface has not changed materially as part of the org client-work slice.
Placement Rules
Client accounts
- authored and managed in
org - not yet projected into a dedicated portal client-work IA
Projects
- authored in
org - surfaced in portal project list and project drill-in routes
Time
- owned by
org - no dedicated portal time surface planned in the current phase
Billing
- operated in
org - projected into a live portal billing workspace with Stripe-backed summaries and actions
Drive and shared artifacts
- authored in
org - surfaced through the live portal files route
- should stay the shared collaboration layer for general files, docs, ad hoc collection, and request-driven exchanges
- should not take ownership away from contracts, billing, projects, or other feature-specific artifact flows
- should remain the cross-client and cross-context file-operations surface rather than the universal upload choke point
Current Route Direction
Org
org/(dashboard)/overviewlive org operations dashboard summary routeorg/(dashboard)/analyticsplanned org reporting workspace for agency performance, finance, and billing attentionorg/(dashboard)/clientslive client-accounts surfaceorg/(dashboard)/portalslive cross-client portal operations workspaceorg/(dashboard)/projectslive projects surfaceorg/(dashboard)/timelive time surfaceorg/(dashboard)/quoteslive quotes workspaceorg/(dashboard)/billinglive billing workspaceorg/(dashboard)/contractslive contracts workspaceorg/(dashboard)/drivelive drive finder and collaboration workspaceorg/(dashboard)/settings/*org admin and configuration
Portal
portal/(dashboard)/overviewlive client account homeportal/(dashboard)/projectslive client-visible projects surfaceportal/(dashboard)/projects/[projectId]live client project drill-inportal/(dashboard)/billinglive client billing workspaceportal/(dashboard)/fileslive shared files workspaceportal/(dashboard)/activitylive recent activity surfaceportal/(dashboard)/settingslive account/settings surfaceportal/(dashboard)/supportlive support workspace
IA Rule
Do not document future portal client-work routes as if they already exist. The next phase should extend the current portal shell, not pretend that parity is already shipped.
The org surface is for management.
The portal surface is for clarity.