REQ-01
Active organization context
A user may belong to several organizations, but each request must use one explicit active workspace.
Co-founded product · Started March 2024
A systems-analysis case study for a finance product with separate organization workspaces, transaction flows, banking connections, subscription events, and controlled account-data access.
Live Site ↗Problem and scope
Expenra is organized around businesses rather than individual accounts. Each organization has its own users, transactions, connected bank accounts, and subscription state.
A user can belong to several organizations and move between them while the application keeps data and permissions within the active workspace.
My scope
Functional requirements
The central analysis problem was not the dashboard itself. It was keeping workspace context, financial data, service events, and assistant access consistent across the product.
REQ-01
A user may belong to several organizations, but each request must use one explicit active workspace.
REQ-02
Transactions, connected accounts, subscription state, and reports must remain within the active organization.
REQ-03
Stripe and Plaid events must be verified and validated before they change account or transaction data.
REQ-04
The assistant may request approved server-side tools but must not query the database without organization and access checks.
REQ-05
Unauthenticated or unauthorized requests must not reach organization pages or private financial data.
Workflow
01
Identify the active organization and load only the data and permissions attached to it.
02
Create, categorize, and review transactions within the active organization.
03
Handle billing and banking events through verified Stripe and Plaid flows.
04
Use dashboards or approved assistant tools without crossing organization boundaries.
Solution coverage
01
Separate data and access for each organization, with switching for users who belong to several.
02
Views for recording, categorizing, and reviewing financial activity.
03
Stripe Checkout, plan access, and verified billing-event handling.
04
Plaid account linking and transaction synchronization through validated service events.
05
A streamed chat interface that uses server-side tools to answer questions from account data.
06
Redis-backed sessions and error reporting through Sentry.
Acceptance checks
The release checks focused on organization separation, authorization, webhook trust, and controlled access to account data.
Integration analysis
Stripe manages checkout and subscription events. Plaid manages bank connections and transaction updates. Incoming events are verified and validated before the application changes account data.
Access-control decision
The assistant does not connect directly to the database. It requests approved server-side tools, and those tools apply the same organization and access checks used by the rest of the application.
System context
Application
Next.js, React, TypeScript, Tailwind CSS
Data
MongoDB, Mongoose, organization-scoped access
Services
Stripe, Plaid, LLM APIs, Redis, Sentry
Delivery
Git, CI checks, Vercel deployment
More work