Skip to main content

Solution Pack: Production SaaS Dashboard

What this solution demonstrates

This solution pack shows what a strong answer to capstone-production-saas-dashboard looks like. It is not the only valid architecture. It is a calibrated example of decision quality, artifact depth, and review evidence.

Architecture summary

Decision: build a modular frontend monolith with feature-owned slices, a shared platform layer, a governed design system, server/BFF-owned data contracts, URL-owned shareable state, and route-specific rendering strategies. Avoid microfrontends until team/release independence creates enough value to justify operational cost.

Route rendering matrix

RouteStrategyData ownerClient interactivityBudget focus
/loginstatic or SSR shellauth serviceminimalLCP and security headers
/dashboardserver shell with streamed/panel dataBFFdashboard cards and notification islandLCP, panel failures
/customers/:idserver composition with client tabscustomer BFFtabs, notes, related recordsdata freshness and authorization
/ordershybrid shell plus client-heavy tableorder search APIfilters, table, saved viewsINP and stale response ordering
/exports/:jobIdserver shell plus polling/SSE islandexport serviceprogress, cancel, retryreliability and idempotency

State ownership

StateLocationReason
tenant and role contextserver session/BFF responseauthorization cannot rely on browser state
filters and search paramsURLshareable, restorable, support-debuggable
server dataquery/cache layer bound to BFF contractsfreshness and invalidation are server-aware
table selectioncomponent or feature storetransient interaction
export jobserverside-effecting workflow and audit
notification read/unread optimistic stateclient overlay plus server reconciliationresponsive UX with correction path
user density preferencepreference storecross-session UI setting

ADR bundle

ADR 1: Modular monolith over microfrontends

Context: multiple teams ship into one dashboard, but they share release, design system, auth/session, and route shell.

Decision: use feature-owned modules inside one deployable frontend. Enforce boundaries with import rules and ownership. Revisit microfrontends only when independent deployment, runtime isolation, or organizational boundaries outweigh shared-platform simplicity.

Consequences:

  • simpler observability and release coordination
  • lower runtime integration cost
  • requires strong module governance
  • fewer independent team deployments

Verification:

  • boundary violation count
  • feature lead time
  • cross-feature import exceptions
  • dashboard release incident rate

ADR 2: URL state for shareable filters

Context: support and finance users share filtered views and support needs reproducible bug reports.

Decision: filters, pagination, and stable sort state live in URL. Transient table UI remains local.

Consequences:

  • better shareability and debugging
  • longer URLs for complex filters
  • requires validation of obsolete/invalid query params

Verification:

  • invalid query param handling tests
  • support reproduction success
  • stale response ordering tests

ADR 3: Export job reliability

Context: exports can take minutes and may continue after navigation.

Decision: exports are server-owned jobs with idempotency keys, progress status, cancellation, retry, and notification on completion.

Consequences:

  • reliable side effects
  • more backend workflow complexity
  • clearer support/debugging path

Verification:

  • duplicate submit test
  • timeout and retry test
  • job status telemetry
  • cancellation audit event

Failure matrix

FailureUXArchitecture controlSignal
dashboard panel API timeoutpanel error, rest of page usablepanel-level boundariespanel error rate
stale response after rapid filterslatest filter result winsabort/sequence requestsstale overwrite test
permissions change mid-sessionprotected actions fail closedserver authorization and session refreshauthorization denial metric
export job failsretryable job stateidempotency and job trackingexport failure rate
notification optimistic update rejectedlocal state reconcilesserver acknowledgementreconciliation count
large table causes INP regressiontable remains responsivevirtualization or pagination budgetp75 INP by table route

Quality gates

GateEvidence
Performanceroute budgets, Web Vitals/RUM dashboard, trace for table interaction
Accessibilitykeyboard walkthrough for filters, table, dialogs, notifications
Securityserver authorization proof, sensitive telemetry review
Reliabilitypanel degradation matrix and export idempotency tests
Observabilityrelease, route, tenant class, experiment, trace id correlation
Ownershipfeature owner map and exception register

Launch plan

  1. Internal dogfood for dashboard and customer detail.
  2. Beta tenant cohort for dashboard home and order search.
  3. Export workflow behind separate flag.
  4. Notifications optimistic state behind role-limited flag.
  5. Review RUM, errors, accessibility findings, and support tickets weekly during beta.
  6. Promote to GA only after quality scorecard is green/yellow with owners for all yellow rows.

Portfolio summary

This capstone demonstrates architecture breadth: route rendering, data contracts, state ownership, modular boundaries, performance budgets, accessibility gates, security posture, export reliability, observability, and governance. A strong portfolio submission should include the diagrams, ADRs, failure matrix, budget table, review packet, and launch scorecard.