The problem
One person shipping one product needs eight tools: an editor, a host, a screen recorder, a video editor, a slide tool, streaming software, a CRM and a support inbox. That's eight logins, eight learning curves, and $130–335 a month. Most ideas don't die because they were bad — they die because the person holding them ran out of energy (or money) on tool six.
What I built
ProtoLive collapses those eight into three rooms sharing one database, one identity and one balance to create an all-in-one founder application.
Live — describe what you want (film, 3D world, game, app, portfolio, e-commerce shop, etc.); agents write it while a preview runs. Cast — put the thing on a stage, on camera, multicast to several platforms at once. Desk — everyone who watched, signed up, or bought lands in one CRM where the user can create e-mail campaigns, manage their social media posts, and more.
How it works
Every AI call from any room passes through one edge function. It verifies the session, resolves which agent and model should serve the request, checks the plan is permitted to spend, reserves credits under a row lock, calls the provider, measures actual usage from the provider's own response, reconciles the reservation, refunds the difference, and writes a row recording cost against charge. A failed provider call refunds in full. That loop runs without me — it is the business.
Intent classification happens with a regex and no model call at all, which is what lets the free tier feel instant at zero cost.
What I learned
Tool permission has to be a check in code, not a request in a prompt. Early on
agents were asked to "stay in your lane" in their system prompt. Prompt text is
a suggestion. Now TOOLS_FOR_ROLE is enforced in the gateway.
Challenges
The hardest was billing integrity. An early version took the plan tier from the request body — pay for the cheapest, receive the most expensive. Fixing it meant resolving the tier from the Stripe price actually paid, and adding a database trigger so a bad webhook cannot grant credits to an account whose plan cannot hold them. Three independent checks, because one is not enough.
The second was mobile. The editor called its bundler inside the React render
body with files in the dependency array, so every keystroke ran a full
synchronous transform and tore down the preview iframe. On a phone that is an
OOM. Debouncing, a content-hash memo for stable iframe identity, a per-file
transform cache and enforced byte budgets fixed it.
Built With
- bunny
- css
- gemini
- grok
- javascript
- netlify
- openai
- react
- render
- rust
- supabase
- tauri
- typescript
Log in or sign up for Devpost to join the conversation.