Built a vibe coding platform for creating websites
Overview
I built Breba App — a vibe coding platform that lets non-technical founders create and publish landing pages through a conversational AI interface. No coding required: founders describe what they want, and agents build, edit, and deploy the site.
The platform is built on a concept called DisC (Documentation is Code): natural language instructions are executed by an AI agent the same way an interpreter executes code. The platform handles everything from file management to GitHub Pages deployment, keeping non-technical users fully in control without exposing any of the underlying complexity.
Architecture
Agent System
- Chat Agent — the conversational entry point. Asks clarifying questions, gathers requirements, and coordinates the overall session flow using LangGraph.
- Coder Agent — receives the output from the Chat Agent and writes or modifies the site's code directly. Handles all file generation and iteration.
- Summarizer agents — after each session, dedicated agents update a shared
AGENTS.mdfile that keeps agent context current across sessions. - Multimodal routing — at runtime, the system decides whether an uploaded image should be interpreted as a user instruction or included directly as part of the customer's deliverable.
- Deterministic orchestrator — replaced an earlier nondeterministic multi-turn design to reduce output variability. Non-technical users need consistent, predictable results.
Performance & Communication
- JSON-RPC — used for agent-to-frontend communication. Structured JSON messages keep serialization overhead minimal and latency low.
- Event-driven multi-agent architecture — agents emit and react to events asynchronously rather than waiting on synchronous responses, reducing perceived latency for the user.
- Static frontends with WebSockets and JSON-RPC — no heavy framework on the client; the combination keeps the UI lightweight and highly responsive.
- FastAPI — handles server-side routing, API endpoints, and WebSocket connections.
- Chainlit — powers the conversational chat interface between the user and the agent system.
File System
- In-memory filestore — all active file reads and writes happen in memory, enabling extremely fast updates during editing sessions.
- Linked data layers — MongoDB stores user data; Cloudflare R2 / AWS S3 persists the in-memory filestore so nothing is lost between sessions.
- Versioned file storage — the R2 filesystem is versioned, not just backed up. Users can roll back their site to any previous state.
Publishing
- Inline editing — a bridge is dynamically injected into the site at build time, enabling best-in-class inline editing where changes reflect immediately without a full rebuild cycle.
- Automated GitHub Pages deployment — uses the GitHub API directly, so users can publish with one click and no knowledge of git or the command line.
What Was Removed and Why
Several capabilities were built and later cut. Each removal was a deliberate tradeoff.
- Act Agent — designed as a dynamic backend to let users add server-side functionality (form handling, interactive actions) directly to their pages. Removed due to security concerns around exposing backend execution to user-controlled inputs.
- Image generation — removed after users generated inappropriate content. No guardrail at the time was reliable enough to keep it in production.
- Tavily web search — removed when the platform's scope narrowed from dynamic web applications to landing pages. Web search was no longer needed for the focused use case.
- A2A protocol with a synchronous Kafka message broker — too operationally complex for this project's scale. Replaced with simpler event-driven messaging that achieves the same coordination with far less overhead.
- Nondeterministic multi-turn orchestrator — replaced by a deterministic orchestrator. Non-technical users need predictable output; variability created confusion and eroded trust.
- Live HTML preview streaming — evaluated and removed. It added implementation complexity but provided no meaningful user benefit outside of demos.