← Back to Daily Builds

Daily build note · April 28, 2026

MissedWire: AI Missed-Call Text Recovery for Home Services

An AI-powered SMS follow-up product that detects missed calls for home service businesses (HVAC, plumbing, electrical, landscaping) and fires a personalized text response in under 60...

Local Business Automation Runnable local MVP built Live public demo

What shipped

Built a runnable local MVP for MissedWire that proves the core missed-call recovery loop:

  • onboarding page for a home-service business
  • local customer and missed-call persistence in SQLite
  • Twilio-style voice webhook for missed calls
  • SMS generation layer with local template fallback and optional Anthropic support
  • outbound SMS delivery layer with local demo logging and optional Twilio support
  • inbound SMS webhook for caller replies
  • owner notification layer with local demo logging and optional Resend support
  • dashboard showing missed calls, SMS state, replies, and a manual converted toggle
  • smoke test covering the full sandbox flow

Architecture

  • Python standard library only: chosen to keep the MVP runnable without installing dependencies.
  • SQLite instead of Supabase/Postgres: faster local setup and easy inspection of state.
  • WSGI app with direct route handling: small surface area and easy to test in-process.
  • Provider abstraction in missedwire/sms.py: makes demo mode the default while allowing live API upgrades by setting env vars.
  • Shared-number-first onboarding: intentionally simplified to match the brief's night-one scope, while still auto-assigning unique demo numbers locally.

Trimmed scope

Deliberately left out to preserve coherence and keep the MVP runnable:

  • Stripe subscriptions and trials
  • authentication and multi-tenant access control
  • per-customer Twilio number provisioning
  • Supabase auth and row-level security
  • A2P 10DLC registration workflow
  • background jobs, retries, and webhook signature verification
  • production deployment config

Limitations

  • The local server uses wsgiref and is not production-ready.
  • In demo mode, outbound SMS and owner alerts are simulated rather than delivered.
  • The dashboard is intentionally thin and assumes one active local operator context.
  • The app processes the SMS send inline during the webhook request rather than dispatching to a queue.
  • There is no carrier-forwarding wizard or call-forwarding validation flow yet.

Verification

  • python3 -m py_compile app.py missedwire/*.py scripts/smoke_test.py
  • python3 scripts/smoke_test.py

The smoke test passed in-process. Binding a localhost port was not permitted in this sandbox, so live socket verification was not possible here, but the app includes a normal python3 app.py server entrypoint for local use.

Suggested next steps

  1. Replace SQLite with Postgres or Supabase and add proper customer auth.
  2. Add Twilio signature validation and idempotency protection for webhook retries.
  3. Move SMS generation and delivery into a background job worker so webhook responses stay fast.
  4. Add real Twilio number provisioning and per-customer routing.
  5. Add Stripe billing and trial gating.
  6. Add carrier-specific call forwarding instructions and a test-setup flow.