A schema-driven form platform
Replaced one-off form builds with a configurable platform — new forms ship as reviewed config, not new code.
- Role
- Frontend Engineer (platform lead)
- Timeframe
- Multi-quarter initiative
- Stack
- React · TypeScript · JSON Schema · REST API design · Relational DB schema design
- Designed the full stack — DB schema, REST contracts, and the rendering client — so a form is data, not code.
- Versioned configurations with a production approval workflow and one-click rollback to a previous version.
- Multi-region delivery across APAC, EU, and US from a single source of truth.
- Migrated a long tail of legacy forms onto the platform and consolidated the component library with no user-facing disruption.
An abstract case study. Details are generalised; no employer or confidential figures are included.
The problem
A large commerce platform collected regulatory information from users across many jurisdictions. Each form was its own hand-coded React build: bespoke validation, bespoke conditional logic, bespoke submission wiring. Every new jurisdiction meant another from-scratch implementation, and every change to a live form meant a code change, a review, and a deploy. Delivery time scaled linearly with the number of forms — exactly the wrong shape for a surface that only ever grows.
The approach
I treated a form as data, not code. The platform has three layers I designed end-to-end:
- A schema — a typed, declarative description of a form: fields, types, conditional visibility, validation rules, layout, and localisation keys.
- REST contracts + a relational schema — so configurations are stored, queried, and served like any other first-class entity.
- A rendering client — one React/TypeScript engine that takes a schema and produces a fully working multi-step form: conditional logic, validation, review step, and submission.
flowchart LR
Author[Author edits schema] --> Draft[Draft version]
Draft --> Review{Approval workflow}
Review -- approved --> Live[Published version]
Review -- rejected --> Draft
Live --> Render[Rendering client]
Render --> User[User-facing form]
Live -. rollback .-> Prev[Previous version]
What made it production-grade
The hard part of a configuration platform is not rendering — it’s change safety. Configs are versioned; a production release goes through an approval workflow; and a bad release can be rolled back to a previous version without a deploy. That governance is what let a compliance-critical surface move from “every change is an engineering project” to “most changes are reviewed configuration.”
Outcome
New forms went from bespoke engineering builds to authored, reviewed configuration — a step-change in delivery time. Legacy forms were migrated onto the platform and the shared component set was consolidated, all without user-facing disruption. The platform became the default path for new forms.
Related notes: React 19’s form primitives are the kind of building blocks a renderer like this leans on.