Three days after ranting about chat interfaces, I am building FlowForm, a conversational form tool powered by LLMs. Yes, I am aware of the irony. I think conversation works here because there is a form schema underneath it.
FlowForm takes a schema, a set of fields with types and validations, and wraps it in natural language. The user thinks they are having a conversation, but underneath, every response maps to a typed field. Names go in the name field, emails get validated, and phone numbers get formatted. The LLM collects structured data through the conversation; the schema determines what belongs in each field.
The architecture is straightforward. You define your form schema in JSON. FlowForm generates an initial prompt, collects responses turn by turn, validates each one against the schema, and asks follow-ups when validation fails. The LLM handles the natural language part. The schema determines whether the data is valid.
I built it because at Yooga we deal with restaurant onboarding. Owners need to fill out 30+ fields. Tax IDs, bank accounts, menu categories, operating hours. A traditional form is a wall of inputs that makes people close the tab. A pure chatbot would hallucinate half the data. FlowForm sits in the middle.
The core is framework-agnostic TypeScript. The pluggable LLM integration works with Claude API, OpenAI, or local models. The validation layer uses Zod schemas so you get type safety end to end.
Handling edge cases has been harder than integrating the LLM. A user might give two fields in one message, correct an earlier answer, or go off topic. Someone will paste a block of text and expect it to be parsed. I need a strategy for each case; sending everything to the LLM does not resolve what the application should do with it.
The core library works and there is a CLI demo, with React and Vue adapters in progress. It is open source under the MIT license. I will share the repo link once I clean up the docs.
My complaint about "every app is a chat app" was about replacing interfaces that already work. Long, boring forms that nobody wants to fill out are a case where I think the existing interface fails. That is why I want to try conversation here.