About
Fix Your Firm helps owners of overloaded tax firms get their practice back. The Control Room is the internal tool our delivery team uses to do that work. It is service software, not a dashboard someone buys.
- Diagnose capacity. Editable preparation, review, and admin assumptions feed a deterministic model of what the firm can responsibly deliver in a filing window. The math is reproducible; AI never sets the numbers.
- Segment the client book. Relationships get retain, investigate, reprice, rescope, reschedule, or release candidates, with A through D tiers and minimum-fee-aware reprice suggestions.
- Decide in batches. A guided queue works the lowest realized rate first, in finishable batches of three, five, or eight. Bulk selection can triage but cannot bulk-approve.
- Model the scenario before acting. Immutable scenario snapshots show projected revenue, workload, deficit, and revenue per hour, with expected, downside, and upside cases kept separate from actual outcomes.
- Track the fall fee letters. Aggregate fee events record letters sent, wording version, composition by fee band, and outcomes. Counts only. No client names, no message bodies.
Honest status: this is an operator alpha. The live registry and fee-event instrumentation are in production for our client firms. The capacity, segmentation, scenario, and action-batch modules run against synthetic firm profiles until their real-data contracts are approved. Firm owners do not log in yet.
How I built it
- Started from the data boundary, not the features. The app accepts firm metadata and aggregate counts. Taxpayer, tax-return, and firm-customer data are excluded by design, which keeps §7216 out of scope for now.
- Forced row-level security in Postgres. Every query sets organization and firm context inside a transaction. The app refuses any superuser or bypass-capable database login, and a separate integration suite proves cross-tenant reads and writes fail.
- Deterministic core, human approval on every consequential step. System recommendation, operator decision, and recorded owner response are three separate states. Nothing flows to an action batch without an approved operator action.
- Ephemeral intake. An admin can extract firm-only fields from one uploaded form into a draft. The file is not stored and no AI provider touches it.
- Built with Claude Code as the engineering team. Domain, tenant-shape, capacity, CSV, recommendation, scenario, and persistence logic each carry their own tests.
Stack
Next.js 16React 19TypeScriptClerk OrganizationsPostgres on RailwayDrizzle ORMVercelVitest