Skip to main content

Cross-Feature Surface Audit

Purpose

This audit reviews the current org and portal surfaces through one lens:

  • where cross-feature linkage is already strong
  • where it is weak or partial
  • where it is missing
  • where it risks becoming noisy

Use this document to guide refinement work without reopening the core domain model.

Read this together with ../product/client-operating-model.md and ../product/cross-feature-link-matrix.md.

Audit Rubric

  • strong the page links adjacent features in a way that helps the next job
  • weak the page has the right ownership, but the cross-feature follow-through is still thin
  • missing the page should surface a relationship or next action and does not yet
  • noisy risk the page could easily over-link or imply the wrong ownership model if not constrained

Cross-Feature Patterns Already Working Well

These patterns are emerging correctly across the repo.

1. Client account is the obvious anchor

Strong evidence:

  • client detail now owns people, projects, time, drive, contracts, billing, and activity
  • invoices and subscriptions link back to the client account instead of hiding behind a generic billing hub
  • portal access is moving through client contacts and client-account grants, not a parallel client directory

2. Projects are useful but not mandatory

Strong evidence:

  • billing can run from the client account without requiring project setup
  • drive can exist at the client level without a project
  • time may reference a project, but the client account remains valid on its own

3. Commercial records are separating correctly

Strong evidence:

  • quotes, contracts, invoices, and subscriptions all exist as distinct commercial records
  • invoices and subscriptions now have separate top-level operational routes
  • contracts are no longer Drive-owned

4. Portal is acting more like a projection layer

Strong evidence:

  • portal billing, files, and projects are client-safe projections of org truth
  • multi-company grant work is steering the portal away from one-membership-equals-one-company assumptions

Org Surface Audit

PageCurrent cross-feature qualityWhat is workingWhat is weak, missing, or noisyNext refinement
overviewstrongGood operational snapshot that links out to clients, invoices, and time without pretending to be the whole productDrive, contracts, and commercial provenance are still lighter than billing/time signalsAdd typed attention lanes for collaboration and legal/commercial work without collapsing them into one umbrella status
analyticsweakCorrectly separated from overview as the reporting drill-inStill sparse as a cross-feature command surface and does not yet connect all tracks consistentlyAdd drill-ins by track: delivery, receivables, recurring revenue, billing attention, and later collaboration signals
clients liststrongCorrect anchor-first workspace; makes clients the main entry into all other tracksThe list still under-expresses how each client is being run across delivery, commercial, and collaborationAdd compact account-mode signals such as project-led, recurring-billed, and active shared-drive usage when those signals are reliable
clients/[clientId] overviewstrongBest current hub for the full operating graph because it sits on the anchorCould still be clearer about recommended next actions across tracksAdd deliberate next-step actions based on account state rather than generic edit buttons
clients/[clientId]/peoplestrongCorrectly keeps people and portal access tied to the client companyBilling/contact-role relationships are still light; signer, finance-contact, and approver semantics are not yet explicitAdd company-role cues only where they meaningfully affect billing, contracts, or portal workflows
clients/[clientId]/projectsstrongCorrectly shows projects as client-owned delivery unitsCommercial and collaboration context around each project is still sparseAdd selective signals for linked contract, linked recurring coverage, and shared-drive activity when explicit
clients/[clientId]/timeweakCorrect client-account-scoped work logTime-to-billing follow-through is still mostly implied rather than surfacedAdd reviewed billable totals and invoice-readiness cues without auto-converting time into finance truth
clients/[clientId]/drivestrongCorrect collaboration home inside the client workspaceRequest flows, folder depth, and project-linked retrieval still need depthAdd request-centric actions, destination clarity, and clearer project-linked organization
clients/[clientId]/contractsstrongCorrectly keeps contracts out of Drive and inside the client commercial spineCross-links to quotes, subscriptions, and invoices are not yet standardizedShow governed project, source quote, recurring-service context, and billing impact only when explicit
clients/[clientId]/billingstrongStrongest current cross-feature surface; combines client anchor, billing identity, invoices, and subscriptions wellTime-informed billing, contract linkage, and quote follow-through are still partialMake this the canonical commercial hub for the client by showing quote and contract adjacency when useful
clients/[clientId]/activityweakGood candidate for a unified event projectionRisks becoming noisy if delivery, billing, portal, and collaboration events are mixed without strong typingKeep activity grouped by domain event type and link back to the owning record, not just the feed item
projects listweakCorrect delivery workspace with its own jobStill light on commercial and collaboration cross-signalsAdd compact tags for client, contract coverage, recent shared updates, and billable work posture where explicit
projects/[projectId] overviewweakStrong delivery-first detail view with updates and time adjacencyCollaboration and commercial context still feel secondary or partialAdd explicit but narrow side links to linked client drive items, linked contract scope, and billing context when present
projects/[projectId]/timestrongGood delivery-to-time linkStill mostly one-way; billing consequences are not visible enoughSurface reviewed billable totals and invoice-readiness cues without turning the page into billing
projects/[projectId]/updatesstrongCorrect project-to-portal projection loopStill light on related drive and contract contextAllow updates to reference deliverables, requests, or commercial milestones when explicit
time entriesstrongCorrect queue-switched operational list; time already feeds billing rollups conceptuallyCommercial follow-through is still not surfaced enough in the workspaceAdd explicit reviewed-billable-to-invoice recommendations and client/account coverage signals
time/timerstrongCorrect utility route rather than a separate workspaceLimited commercial and collaboration awareness while timingAdd light project/client/contract hints only when they reduce mistakes, not as mandatory structure
invoicesstrongCorrect top-level operational queue with client linkage and status queuesSource-of-work context is still too thin: quote, contract, subscription, and time lineage are not standardizedShow why the invoice exists when known, not just what its Stripe state is
invoices/[invoiceRecordId]weakStrong client anchor and billing actionsMissing clearer provenance and follow-through to linked quote, project, contract, or subscription when presentAdd a commercial provenance block with only explicit links
subscriptionsstrongCorrect top-level recurring-service queue separated from invoicesService context is still thinner than it should beMake the recurring service more legible: what the client is paying for, what governs it, and what work it often funds
subscriptions/[subscriptionRecordId]weakStrong status/action surfaceMissing plan history, quote/contract handoff, and clearer delivery linkage when applicableAdd history and origin context without making projects mandatory
quotesstrongCorrect bridge between commercial intent and downstream billingRelationship to contracts and ongoing service still needs clearer handoff languageStandardize how accepted quotes lead to contracts, invoices, or subscriptions
quotes/[quoteRecordId]weakGood commercial detail surface with links to invoice/subscription when they existMissing stronger contract handoff and client-facing lifecycle cuesAdd explicit origin/outcome block: proposed, accepted, invoiced, converted to recurring, contracted
contractsstrongCorrectly treated as a first-class legal/commercial queue rather than a Drive bucketStill not fully integrated with the rest of the commercial spineStandardize quote, subscription, invoice, and project adjacency where explicit
contracts/[contractId]weakStrong separation from Drive; contract-owned attachments are correctClient-commercial follow-through is still partialAdd deliberate related-record blocks for governing quote, covered project, and related billing context
drive global finderstrongCorrectly acts as a retrieval surface, not the main ownership surfaceRisks becoming noisy if it starts surfacing arbitrary commercial linksKeep it client-first and project-aware; do not reintroduce commercial ownership through convenience links
portalsstrongCorrect separate control plane for access and readinessStill light on how portal state intersects with billing, files, and active delivery for a given clientAdd compact cross-track readiness signals per client account
portals/[clientId]/*weakCorrect per-client portal operational viewStill needs richer links back into the client’s billing, files, and delivery truthAdd “open related client workspace” handoffs and cross-track readiness summaries
settings/billingstrongCorrectly separates agency SaaS billing/configuration from client billing operationsLittle issue here; the separation is the valueKeep this surface configuration-only and avoid operational records here

Portal Surface Audit

PageCurrent cross-feature qualityWhat is workingWhat is weak, missing, or noisyNext refinement
overviewstrongGood comprehension-first projection of active work, billing state, and recent client-safe eventsCould be better at showing next actions across all three tracksAdd clearer prompts for what needs client action now: pay, upload, review, acknowledge
projectsstrongCorrect delivery projection with client-safe status and updatesCommercial and collaboration context around a project is still limitedAdd related shared files and governing commercial cues only when explicit
projects/[projectId]strongGood project drill-in with delivery focusShared artifacts and request loops can still deepenAdd clearer deliverable, file-request, and acknowledgment paths
billingstrongCorrectly projects invoice and subscription truth into the portalQuotes and contracts are not yet part of the client-facing commercial storyDecide which pre-billing and governing commercial records belong in the portal and add only those
filesstrongCorrect projection of the shared driveRequest workflow and upload-back loops still need more prominenceMake requests, return uploads, and “what changed” more task-shaped
activityweakGood candidate for a unified client-safe event streamRisks becoming noisy if it becomes a generic dump of unrelated eventsKeep activity typed by delivery, billing, and collaboration classes
settingsweakCorrect home for client-safe account controlsCompany-grant versus identity-scoped settings still need sharper separationDistinguish identity settings from selected-company settings more clearly
supportweakCorrect place for client help contextStill not deeply wired into project, billing, or request contextLet support entry start from the current company and, when appropriate, current project/billing/request context

Highest-Value Refinements

If the goal is to improve cross-feature coherence without reopening the whole model, prioritize these.

1. Standardize commercial provenance

On quote, contract, invoice, and subscription detail, always show explicit origin and outcome links when they exist.

Examples:

  • source quote
  • governing contract
  • linked project
  • produced invoice
  • produced subscription

2. Make client detail the canonical hub

Client detail should remain the place where all three tracks can be understood together.

That means strengthening:

  • next actions
  • account mode clues
  • track health summaries

3. Keep project pages delivery-first but commercially legible

Project pages should not become billing pages.

They should still show when a project is:

  • covered by recurring service
  • tied to a contract
  • generating billable work likely to surface commercially

4. Keep drive collaboration-owned

Do not solve commercial linkage by pushing more commercial records into Drive.

Instead:

  • keep project and client retrieval strong
  • keep requests explicit
  • keep commercial artifacts in their own domains

5. Turn portal from visibility-only into response-loop support

The portal already projects truth well enough to support:

  • payments
  • file uploads
  • request fulfillment
  • acknowledgment of delivery milestones later

That is the next meaningful cross-feature layer.

Ranked Implementation Checklist

  1. Land commercial provenance blocks on quote, invoice, subscription, and contract detail using only explicit relationships.
  2. Land stronger client-detail cross-track next actions on the overview tab so the client account becomes the real operating hub.
  3. Add project-level commercial context cues: linked contract, recurring coverage, and invoice posture only when explicit.
  4. Add time-to-billing readiness signals in client and project time surfaces without auto-collapsing time into finance truth.
  5. Standardize commercial origin and outcome summaries in client billing so quotes, contracts, invoices, and subscriptions read as one spine.
  6. Add client-level operating-mode signals in the clients collection once those heuristics are reliable.
  7. Add portal-side response-loop actions for pay, upload, and request fulfillment.
  8. Expand analytics into track-specific drill-ins for delivery, recurring revenue, receivables, and billing attention.