← projects

$ 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.