RIFF · Product Status

Path to Revenue

What it takes to turn RIFF — a working AI voice agent — into a paid after-hours answering service, priced like a night-shift worker: $1 / hour on shift (8pm–8am = $12 a night, unlimited calls).

Status update · 2026-06-18 · figures illustrative, pending verified vendor pricing

RIFF already answers real phone calls: Telnyx routes the call, Gemini Live handles the voice, and a deterministic state machine drives the conversation through YAML-defined flows (booking, inquiries, message-taking). The conversation engine is production-grade. The business wrapper around it — billing, multi-tenant accounts, message hand-off, secrets/auth — is the work that stands between today and the first paying customer.

The model: a night-shift worker at $1/hour

You hire RIFF for a shift the way you'd hire a person — $1 for every hour it's on the line, billed for the window, not per call or per minute. A typical 8pm–8am shift is 12 hours = $12. The customer pays for coverage (hours staffed); RIFF only spends money on the talk minutes when calls actually come in. That gap is the margin.

$12
a full 8pm–8am night, unlimited calls
~$0.15
illustrative cost per coverage-hour VERIFY
~35 min
talk-minutes per staffed hour before $1/hr loses money

At moderate volume the margin is large; the live risk is a single line that rings nonstop. The companion spreadsheet (riff_cost_per_hour.csv) recalculates all of this from real numbers as soon as vendor prices are filled in.

How $12/night sits against the market

No competitor prices per shift-hour — the "hire a worker for the night" framing is open whitespace. The two flanks:

AlternativeWhat you payCatch
Live human / answering service$250–$720/mo, or $15–25/hrPer-minute meter + night surcharge; one 10-min 2am call ≈ $20–30
Budget AI bots (Rosie, Dialzara)$29–$49/moCheaper sticker, but cap you at 60–250 min/mo
RIFF$1/hr ($12/night)Dedicated coverage for the window, unlimited calls

Positioning: not the cheapest sticker — the cheapest dedicated worker. The value line: one after-hours call to a human service can cost a whole RIFF night. Lead with reliability (won't hallucinate, takes accurate messages), not price — research shows "too cheap" reads as "untrustworthy" for calls people care about. Competitor pricing verified on vendor sites, June 2026.

Where RIFF stands today

CapabilityStatusNotes
Voice conversation engineReadyTelnyx + Gemini Live + deterministic FSM, ~4,800 tests
Flow authoring (YAML)ReadyBooking, inquiry, message-taking flows exist
Calendar / SMS providersReadyPluggable, degrade gracefully when down
Secrets & configPartialLocal .env (not committed); needs a prod secret store
ObservabilityPartialOn-disk logs; no central dashboard or alerts
Human message hand-offStubThe core answering-service job — must be finished
Multi-tenant accountsMissingSingle business / number / calendar today
Auth on control planeMissingCall transcripts readable without auth
Usage metering & billingMissingTokens measured internally; no per-customer billing

P0 Blockers — can't take money without these

  1. Verify unit economicsFill the cost model with real Telnyx + Gemini Live prices. Confirms $1/hr clears cost. Everything else depends on this answer.
  2. Multi-tenancyA tenant_id on every session, per-tenant config (flow, business name, calendar, phone-number routing), tenant-scoped storage. Serve customer #2 without a code change.
  3. Secrets off the laptopProd secret store + key rotation; stop reading a shared dev .env in production.
  4. Auth on the web / control planeBearer-token auth; scope every transcript read by tenant. Today anyone on the network can read calls.
  5. Finish human message hand-offReliably take a message and deliver it (SMS/email) or escalate emergencies. This is the actual product, not a nice-to-have.

P1 Required for a reliable paid service

  1. Graceful shutdown & call drainingA deploy mid-call must not drop a customer. Add SIGTERM/SIGINT handlers that drain active calls.
  2. Observability you can debug at 3am/healthz, structured logs shipped somewhere queryable, alerts on call errors and degraded providers.
  3. Usage metering → billingPer-tenant call-minute accounting; wire Stripe. Can't bill hours you can't count.
  4. Concurrency / load sheddingDecide behavior past the call ceiling (currently hardcoded at 5): queue, busy, or scale.
  5. CI gateRun the ~4,800-test suite on every PR so "tests pass" is enforced, not assumed.
  6. Live confirmation-gate stall — FIXED (B-319)On live calls the FSM does not advance out of read_back after the agent reads the order back (the response_emitted transition is not evaluated on the live turn_complete), so the caller's confirming "yes" lands in a state that can't confirm and the call sits silent ~50s. Fire response_emitted after the agent's live turn.
  7. Fix phone verification turn-taking (B-318)On real calls the agent submits the caller's confirmation "yes" as the SMS code (it sends the text and verifies in the same turn, never waiting for the digits) and allows only one attempt — so verification reliably fails. Validate the code before submitting, separate the turns, raise max attempts. The "yes" issue.

P2 Scale & polish — after first customers

  1. Deployment artifactReal Dockerfile + compose so a new box isn't manual.
  2. Distributed session storeMove SQLite → Postgres for multi-instance HA.
  3. Self-serve tenant onboardingA flow-authoring UI so you're not hand-writing YAML per customer.
  4. ComplianceCall-recording consent, data retention, PII handling. Varies by state.

Cost-optimization lever: Qwen cascade

Today's voice path uses Gemini Live native audio — the most natural-sounding option, but priced on audio tokens (the dominant cost). An alternative path already partly built in RIFF: a cascade of speech-to-text → text LLM → text-to-speech.

NEXT Model both paths side-by-side in the cost sheet (Scenario A: Gemini Live · Scenario B: Qwen cascade) once live Qwen/DashScope pricing is confirmed.

Immediate next step

Pull live vendor pricing (Telnyx inbound per-minute, Gemini Live audio tokens, Qwen/DashScope tokens) into riff_cost_per_hour.csv. That single number — cost per coverage-hour — tells us whether $1/hr is a business or a hobby, and whether the Qwen cascade is worth building.