Inspiration
Building business applications often involves a long journey from understanding requirements to delivering working software. While AI coding tools have made development faster, they still leave important questions unanswered: Can we trust the generated code? Can we review every decision? What happens when we need to modify or regenerate an existing application without breaking things?
We wanted to solve this gap. Our idea was to combine the speed of AI with the reliability of traditional software engineering. Instead of allowing AI to generate applications blindly, we envisioned a system where AI assists with planning, humans make the decisions, and a deterministic engine builds the actual software. That's how Redwood was born.
What it does
Redwood transforms user stories and structured business requirements into fully working applications, including the frontend, backend APIs, database and automated tests.
At the heart of Redwood is a spreadsheet-style Builder that acts as a central workspace for designing applications. Users can define roles, user stories, data models, screens, endpoints and workflows.
AI suggests the necessary components, but nothing gets applied automatically. Users can accept, reject or edit every suggestion. Once approved, everything becomes part of a structured specification that Redwood uses to generate the application.
A live preview allows users to see their application evolve as they modify the specification.
How we built it
We built Redwood as a TypeScript monorepo using:
- Frontend: React 18 and Vite 5
- Backend: Hono and WebSockets
- Database: SQLite
- Validation: Zod
- AI Integration: Nebius and OpenAI-compatible endpoints
- UI: shadcn-style React components
- Testing: Vitest
The architecture is divided into specialised packages for specifications, validation, screen planning, database migrations, UI components, AI suggestions and code generation.
One of our most important architectural decisions was separating AI-assisted planning from actual code generation. AI operates within predefined closed lists, while a rule-based generator converts the approved specification into application files.
This makes generation deterministic: the same specification always produces the same application.
Challenges we ran into
One of our biggest challenges was making AI predictable. Unrestricted AI generation can introduce inconsistencies and make applications difficult to maintain. We addressed this through closed-list suggestions, validation and human approval.
Another major challenge was handling application regeneration. We didn't want developers to lose their custom code whenever the specification changed. We introduced a separate "custom/" directory and safeguards to protect existing implementations.
Database migrations were another challenge. For example, renaming a field should preserve existing data rather than accidentally deleting it. We designed migration mechanisms to handle such changes safely and stop destructive operations unless explicitly permitted.
Maintaining traceability between original user stories, accepted specifications and generated application components was also an important part of the engineering process.
Accomplishments that we're proud of
We're proud to have built a working end-to-end system that takes user stories through AI-assisted planning and human approval all the way to a generated application with a live preview.
Some highlights include:
- A custom spreadsheet-style Builder with copy/paste, undo/redo, dropdowns and inline suggestions.
- Deterministic application generation without AI.
- Traceability between user stories and generated screen components.
- Safe database migrations and custom code preservation.
- Role-based access control and automated permission testing.
- 213 passing automated tests and a clean typecheck.
- A generated Bus Fleet application with admin and driver roles, passing its own 29 tests.
What makes us especially proud is that Redwood is not just an idea or a UI prototype. Its complete workflow is already running end to end.
What we learned
We learned that building with AI is not simply about generating more code or generating it faster. Predictability, accountability, maintainability and control are equally important.
We also understood the importance of separating decision-making from execution. AI can help people explore possibilities and structure requirements, but critical decisions should remain transparent and reviewable.
Building Redwood also gave us practical experience in designing modular architectures, integrating AI models, building deterministic systems, handling database migrations and testing complex permission structures.
What's next for Redwood
We want to take Redwood further into the world of enterprise software development.
Our focus is on expanding supported UI components, layouts, themes and validation capabilities, improving AI-assisted editing and making it easier to bring existing business requirements into the Builder.
We also want to strengthen Redwood's ability to handle increasingly complex business workflows while preserving existing data, custom code and application behaviour.
Our long-term vision is to make Redwood a reliable bridge between business requirements and maintainable software, where AI helps design, humans stay in control, and engineering ensures the result is predictable.
Built With
- ai
- code-generation
- database-migrations
- deterministic-systems
- developer-tools
- enterprise-software
- full-stack
- generative-ai
- hono
- llms
- low-code-development
- monorepo
- nebius
- node.js
- openai-compatible-api
- react
- role-based-access-control
- shadcn/ui
- sqlite
- tailwind-css
- typescript
- vite
- vitest
- websockets
- zod
Log in or sign up for Devpost to join the conversation.