What shipped
- A focused local MVP for a home-service AI receptionist.
- Dependency-free Node server in
src/server.js. - Local JSON persistence in
src/db.js. - Prompt builder for contractor-specific AI receptionist scripts in
src/services/prompt.js. - Demo/live integration adapters in
src/services/integrations.js. - Transcript generation and parsing in
src/services/callParser.js. - Browser UI in
public/for onboarding, call testing, and lead management. - Smoke verification in
scripts/smoke.js. - Environment template in
.env.example.
Architecture
- Used plain Node.js and browser JavaScript instead of Next.js, Supabase, Prisma, Tailwind, and shadcn because this build must run without network installs or external secrets.
- Kept the core product loop end-to-end: contractor setup -> agent/demo number provisioning -> inbound call completion -> SMS summary -> lead dashboard.
- Used
data/demo-db.jsonas a transparent local store so a human can inspect and reset state easily. - Isolated Retell/Twilio/Stripe seams behind small adapter functions so demo mode can be replaced incrementally with live integrations.
- Bound the server to
127.0.0.1by default for local-only development.
Trimmed scope
The brief's production stack was intentionally reduced for this sandbox:
- No Next.js App Router.
- No Supabase Auth or Postgres schema.
- No Prisma.
- No real Stripe Checkout session.
- No Twilio number purchase.
- No Retell call answering in demo mode.
- No Calendly OAuth.
- No email notifications.
- No Vercel deployment.
These were trimmed to keep the MVP coherent, runnable, and inspectable inside an empty build directory.
Limitations
- Demo mode simulates voice calls rather than answering real phone calls.
- Retell live provisioning is a best-effort adapter and still needs a production Retell LLM/voice configuration review.
- Twilio live SMS is implemented, but phone purchase and voice forwarding remain mocked.
- Stripe billing is represented as mock trial IDs.
- Authentication is not implemented; the dashboard is a local sandbox.
- The transcript parser is deterministic and intentionally simple; production should use a structured LLM extraction step with validation.
Verification
Ran:
``bash node --check src/server.js node --check public/app.js node --check scripts/smoke.js npm run smoke ``
The smoke check passed and verified:
- Tenant onboarding creation.
- Demo Retell agent ID creation.
- Demo Twilio number assignment.
- Simulated emergency transcript generation.
- Lead parsing and persistence.
- Contractor SMS preview generation.
- Lead status update to
booked.
The build sandbox denied listening sockets, so browser-server launch could not be kept running from this session. The app is still runnable locally with npm run dev in a normal shell.
Suggested next steps
- Replace JSON persistence with Supabase tables matching the brief.
- Finalize Retell agent payloads against the active Retell API and configure a tested hosted LLM prompt.
- Implement Twilio number search, purchase, and voice webhook forwarding.
- Add Stripe Checkout and subscription webhooks.
- Add magic-link auth for contractor dashboards.
- Add a real Retell webhook signature check and structured transcript extraction.
- Run a pilot with one contractor using manually verified Retell/Twilio setup before automating number purchase.