Archie Labs — Equine Management SaaS.
Building a complete equine management SaaS from scratch — 585 TypeScript files, 20 modules, hexagonal architecture.
Context
Archie Labs needed a complete management SaaS for the equine industry: farm operations, financials, breeding records, billing, inventory. The existing market tools were either incomplete or built for the US/EU market without LATAM tax and accounting support.
When I joined, the team had a Figma prototype and a backend stub. The frontend needed to be built end-to-end across 20 functional modules.
Constraints
The architecture had to be hexagonal — every UI module isolated from infrastructure, with ports and adapters so the business logic could be tested without React. Compliance was non-negotiable: P&L, Balance Sheet, Cash Flow with audit trail. Some workflows had to scan and OCR invoices to auto-fill records. WCAG 2.1 AA across every screen.
Approach
I started by mapping every entity in the domain (horse, owner, farm, transaction, invoice) and their relationships. Then I worked module by module, shipping each behind a feature flag so the team could review independently.
The UI stack: shadcn/ui as the component primitives, custom forms, custom tables, custom charts. Forms were the heaviest part — long, conditional, with cross-field validation. I built a forms layer that consumed JSON schemas.
Solution
Outcome
Production codebase shipped in 16 months
The platform shipped on schedule. Compliance audit passed in the first round. Adoption inside the pilot farms was higher than the team had projected — owners were entering data themselves rather than relying on the office staff.
Reflection
Hexagonal sounded heavy at first; I underestimated how much it would pay off when the backend rewrote core flows mid-project. shadcn/ui was the right call for an opinionated team — for a less senior team I'd consider Mantine or MUI to remove the "design every primitive yourself" burden.
What I'd do differently: invest more upfront in the forms abstraction. We rebuilt it twice. A schema-driven layer from day one would have saved months.