Solo-owning a healthcare compliance SaaS frontend for a year
Sole frontend owner of a live healthcare compliance platform for a year — architecture, design system, performance, test infrastructure, CI/CD and security, on a codebase that grew to roughly 225,000 lines.
Embedded Senior Frontend Engineer — sole frontend owner
~12 months
6.2s
→
1.1s
4,886 kB
→
113 kB
11 min
→
2.8 min
~15 min
→
~2 min
The product helps healthcare organizations track regulatory compliance — clinicians upload documents, an AI pipeline extracts and matches rules against them, and staff work through per-chapter checklists in real time. There was no dedicated frontend lead when the engagement started; ownership of architecture, delivery, performance and infrastructure sat with one person for the full year.
The challengeThis wasn't a green-field build. Across roughly 1,750 commits, fixes outnumbered new features by nearly two to one — the signature of a live product under constant stakeholder feedback, not a demo. On top of that steady iteration, the main dashboard had degraded to 6+ seconds to feel usable, the local test suite crashed unpredictably partway through every run, and there was no design system — just ad-hoc component usage spreading further with every new page.
Approach
Owned the frontend architecture end-to-end: a layered pages → hooks → API-service structure, a centralized API client with automatic response-envelope unwrapping, a query-key factory to prevent cache collisions across 44 hooks, and a full RBAC/entitlement system mapped to roughly 400 backend permissions.
Diagnosed the dashboard's real bottleneck instead of accepting the default explanation. "Slow backend" turned out to be three unrelated problems stacked together: a 1,000-record client-side fetch computing one number, a 2.4MB unconditional request, and a silent double-unwrap bug in the API client that made the loading guard permanently true.
Root-caused a non-deterministic local test crash to a leaking Web Worker rather than writing it off as flaky infrastructure — the fix, plus switching the DOM test environment, cut suite runtime by 75%.
Built a change-aware CI test gate using import-graph analysis instead of the industry-default choice between "run everything" and "run only same-folder tests" — neither of which was accurate for a codebase this size.
What shipped
Shipped a dedicated dashboard analytics endpoint with the backend team, removed the redundant client-side fetch, gated the unconditional rules request, and fixed the double-unwrap — three root causes, one coordinated fix.
Designed and built a full design system from scratch: CSS custom-property tokens across 4 palettes and 3 density modes, a shared component library, and Storybook coverage with Chromatic visual regression testing.
Authored three GitHub Actions pipelines solo: a quality gate (lint, typecheck, tests, security audit), a nightly full-regression run with Slack alerting, and automated AI-assisted code review on every PR.
Built a coverage ratchet that blocks any PR from silently reducing test coverage — it directly surfaced a live production bug where an added case status was falling through to "Unknown" undetected for weeks.
Delivered major product systems solo end to end: the core compliance-checklist module (AI-driven document analysis with real-time job polling), a 7-tab API cost analytics dashboard, real-time WebSocket chat, a fuzzy-search command palette, and Stripe-based subscription billing.
Scale of ownership
1,758
Commits (non-merge)~225,000
Lines of TypeScript88
Pages363
Reusable components286
Test files897+
Passing tests at handoverThe surface symptom pointed away from the real cause almost every time — a slow dashboard blamed on the backend, random test crashes blamed on flakiness, a two-click navigation bug blamed on React rendering. In every case, the fix only arrived after discarding the obvious explanation and reading one layer deeper. At handover: ten technical documentation pages, roughly 500 non-essential files removed from the repository, and every open dependency PR triaged with written rationale — so the next owner didn't need the previous one in the room.
Have a codebase or product with similar problems?
Tell me what you're working on and where you're stuck. I'll determine whether I can help.
Discuss a Project