Inspiration
We've all felt the frustration: you have 24 hours to build, but spend the first 8 on auth boilerplate, database setup, and deployment configs before touching actual features. Every hackathon, every side project, same story—70% setup, 30% product. We got curious: what if you could just talk to your computer and watch a working app materialize? Our solution was to create EchoMe: voice-driven development that turns "build me a task tracker with dark mode and google login" into deployed, production-ready code, so you can focus on what makes your idea unique, not npx create-next-app for the hundredth time.
What it does
EchoMe turns conversations into deployed web apps. you describe what you want—"build a task tracker with dark mode and google login"—and watch a complete, production-ready react/next.js app materialize with real routing, data models, auth, and ui components you can edit, export, and ship.
- Voice → app: you describe features ("task tracker with dark mode and google login"). EchoMe turns that into a live preview and a real project.
- Real code generation: produces a clean react/next.js codebase (tailwind), not screenshots. you can export, edit, and re-import.
- Component-aware building: chooses and composes accessible components (forms, tables, modals, charts) and binds them to state.
- Data modelling: infers entities from your description ("task, project, user"), creates schemas, seed data, and crud routes.
- Auth in one line: adds email/password or oauth (google/github) per your prompt. actions & workflows: hooks buttons to server actions (e.g., "generate pdf invoice", "send email on submit").
- Templates as starting points: landing page, website, portfolio, blog, ecommerce, photography—then customize by voice.
- Deployment built-in: one command to ship to vercel (or export a zip). iterate conversationally: say "make the cta primary, add pricing section, swap hero image, shorten copy" → instant diffs.
- Source-of-truth history: every change is a patch; you can inspect, revert, or cherry-pick. plugin surface: bring your own component library, rest/graphql endpoint, or design tokens; EchoMe will honor them when generating.
How it works (under the hood)
- Understand: Transcribes your voice, extracts requirements (entities, pages, actions, constraints).
- Plan: Generates a build plan (routes, components, data layer, dependencies) and a typed schema.
- Build: Creates code, runs checks (type, a11y, layout), renders a live preview.
- Refine: Applies your follow-ups as structured diffs against the codebase.
Tech notes: React/Next.js app scaffold, Tailwind, shadcn/ui, server actions, file-based routing, Zod for schemas, lightweight ORM adapter. Model-agnostic codegen pipeline.
How we built it
- Next.js, Tailwind, shadcn/ui for the studio interface: Clean, fast, component-driven.
- ElevenLabs (TTS): turns system updates into natural speech back to the user.
- API (Next.js on Vercel Functions): orchestrates everything — parses prompts, calls codegen, pushes builds, triggers deploys.
- Claude Code: generates/edits the app’s codebase from the user’s description.
- Daytona: hosts the working repo/workspace and runs preview builds.
- Vercel: production hosting for the generated app.
- Supabase: app-side auth, Postgres, and file storage.
Challenges we ran into
1) Clean isolation between our studio code and user-generated projects
Problem: We needed a way to keep EchoMe's studio (UI + API) totally separate from each user's generated repo—while still letting users peek, edit, and deploy easily.
What we tried:
- Monorepo with apps/studio + apps/generated/* (messy boundaries, leaky tooling).
- Git submodules / nested repos (UX pain, brittle CI).
- Ephemeral containers (Codespaces/WebContainers) with in-browser FS (great DX, limits on build/deploy hooks).
Decision: Daytona workspaces per project: isolated repo, reproducible builds, simple Git surface.
Why it worked:
- True process/file isolation from our studio code.
- Git-first workflow (branch per change, diffs, PRs).
- Easy handoff to Vercel deploys.
Lesson: Treat generated code as a first-class repo in its own sandbox. Our studio only orchestrates.
2) Daytona API limits → keep preview DB local (not Supabase)
Constraint: We couldn't make lots of outbound calls from the workspace reliably, so wiring a live external DB (e.g., Supabase Postgres) during preview added flakiness.
Workaround:
- Use local DB in preview (SQLite/Drizzle or Prisma) with seed data.
- Generate a dual-target data layer:
- Preview: SQLite file + local adapters.
- Deploy: Supabase Postgres + Storage, env-injected at build on Vercel.
- Stub Supabase calls behind a thin repository interface so switching backends is config-only.
Result: Stable previews with zero external dependencies; seamless flip to Supabase on deploy. Lesson: Decouple "preview runtime" from "prod runtime." Keep the seam at configuration + adapters.
3) Sneaky preview bug: code wrote to one dir, preview read another
Symptom: Codegen completed, commits looked fine, but the preview never reflected changes.
Root cause: We were writing files to repo/app/ while the preview process served repo/ (or vice versa). Classic path drift.
How we found it: Old-school terminal spelunking: pwd, cd, ls -la, git status, cat pages/_app.tsx —and comparing workspace logs to preview server CWD.
Fixes:
- Standardized workspace layout: single repo root (/workspace/app), preview always runs from there.
- Added a pre-preview sanity check: verify expected files exist, print CWD, and assert package.json path.
- Logged absolute paths for all file writes; blocked preview if mismatch.
Lesson: Make paths explicit and verifiable. Add guardrails that fail fast with actionable logs.
What's next for EchoMe
A few ideas come to mind
- Performance optimization, cut codegen time, smarter caching for repeated operations, and faster preview refresh.
- Get Daytona premium to allows us to make external api calls to set up Supabase for users' projects, instead of a project having a local database.
- Bring your own component library (chakra, material-ui), design tokens, or api schemas. EchoMe should adapt to your stack, not force you into shadcn/tailwind if you don't want it.
- Collaborative mode, multiple people voice-editing the same project simultaneously. Perfect for pair programming or live client demos where you're iterating together in real-time.
Built With
- claude
- daytona
- elevenlabs
- next.js
- shadcn
- supabase
- tailwind
- vercel


Log in or sign up for Devpost to join the conversation.