$ cat projects/vimo.mdx
Vimo — Child Care Exchange
Childcare SaaS platform; running an LLM-assisted JSP → React migration with Claude Code, building a shared component library, and consolidating auth on Keycloak.
React · TypeScript · NX · Vite · Chakra UI · Redux Toolkit · RTK-Query · Keycloak · 2024 · live
Daffodil Software · Feb 2024 – Present
Vimo is a childcare SaaS platform with a long history — meaning a lot of the codebase started life as JSP. My job since joining the project has been to drag it forward into a modern React + TypeScript stack without stopping the world for the rest of the team.
what I've owned
- LLM-assisted JSP → React migration using Claude Code. Designed and led the migration pipeline end to end: parses each JSP page, extracts business logic, produces a React component scaffold for a human to finish. Cuts manual migration effort roughly in half. This is the most fun I've had at work in a long time.
- Shared React component library inside an NX monorepo. Owned the architecture — design tokens, accessibility primitives, and the form layer that everything else builds on. Used across multiple apps under the Vimo umbrella.
- Centralised auth (Keycloak / RBAC) consolidating what used to be several bespoke login flows. Multi-role, multi-tenant access control without the duct tape.
- Common providers / hooks for cross-cutting concerns (feature flags, telemetry, error surfaces) — measurably reduced per-feature build time across the team.
- Code review + mentorship on the FE side. Maintained consistency across the project as the team grew.
what I've learned
- Migrations aren't about the rewrite, they're about how you keep features shipping during the rewrite. The migration is the easy part; not breaking the team is the hard part.
- Tooling beats discipline. A boring shared library nobody has to think about is worth far more than five style guides.
- LLMs are extraordinary leverage for repetitive code work. The interesting human-judgement work hasn't gone anywhere, but the typing has.
what I'd do differently
- I'd invest in the migration prompts' eval harness earlier. I tuned them by feel for the first month. A small set of golden test pages catching regressions automatically would have saved weeks.
- I'd publish the shared component library's contract (props, accessibility behaviour, visual snapshots) before adding the second consumer. Standards drift fastest in week three.