Gate 1 prototype · Digital Receptionist · redone to the prototype standard · September 22, 2026

Two tabs, because the product has two jobs.

The receptionist prototype was rebuilt to the RippleCore prototype standard. The change that drove it: the first redo copied Meeting Studio's three tabs, and MJ's own note is that the receptionist "should not have; it needs whatever its own work needs." Today and All calls are the same list of calls, filtered, so they are one tab, not two. The product has two jobs: work the Calls that still need a person, and tune how Bella works in Settings. Everything else follows the standard: two colors, records open in the middle, fields edit in place, buttons measured against Time and Billing, and one honest problem in the seed. Open it. The links here are private until MJ shares them.

This round: redone to the prototype standard

One row per rule, and what the rebuild did about it.

The ruleWhat changed
As few tabs as the product allowsThe first redo had three tabs (Today, All calls, Settings), copied from Meeting Studio. Today and All calls are one list filtered, so they became one tab, Calls, with the needs-you count on it. Two page tabs: Calls and Settings.
Records open in the middleThe first redo opened the caller, the question and the article in a right-hand drawer. They are centered windows now (720px), never a drawer.
Tabs, never stepsThe call record is two plain tabs, Summary and Recording, with a count on Summary when something is owed. No numbered steps.
Cards are three lines, actions beside themThe owed items (a callback, a question) are a title, one meta line and the button on the right. No header row, no left accent bar.
Edit in placeThe question and article answers are a textarea that saves as you type; Settings fields and switches save on change with a toast. Every Save button is gone.
Two colors, no amberRed is needs-you and primary buttons; green is done, handled, called back, published; everything else is grey. The first redo's amber (a promise overdue, a waiting-on-a-yes, a text-failed warning) is gone, in part because those states are not real (below).
No initials circles, no left barsRemoved everywhere: the teammate and caller circles, the red left border on cards and the selected row. Selection is a grey fill; state is a pill or a count.
Buttons: measure, do not copyMeasured on the shipped Time and Billing page on 6200, signed in as the QA user: 40 / 34 / 28px, 3px corners, secondary white with a dark border. Noted: the shipped button renders no shadow today, so this one does not either (the standard's table says a soft shadow; the shipped app has drifted from it).
Honest dataThe first redo seeded a booking Bella made, two confirmation texts she failed to send, and an approval to change a contact's number. The backend check found none of those can come from a call. They are out; the one real problem is that text messaging is not registered, so she can not text at all.

The first redo, and this one, side by side

Out of 10SimpleHonestStandard
First redothree tabs, right drawer, amber, invented states6a rollup page and a Waiting tab it did not need4booking, texts and an approval no call can make5copied Meeting Studio's shape
This onetwo tabs, centered windows, two colors8one list, one record, one Settings9every state is one the worker returns9derived from the receptionist's own work

See both: the first redo (three tabs) and the September 13 version Matt was originally sent are kept, untouched, so nothing already looked at moves.

Open it

Same seeded day. Use it: call back, answer a question she could not, set up texting, tune Settings. The Live today switch in the review bar tags each control with its route.

These are private links until MJ shares them from the Share menu.

What goes in: click it together

Every piece of the prototype, its verdict against the routes on origin/main, and In / Later / Out per row. Picks stay in this browser; Copy the list gives plain text for Slack. It starts on the recommendation.

Backend check against main

Read from the receptionist worker at origin/main (e1a038b6f, September 20) and the v3 receptionist pages (40589ea, September 21), fetched read-only. The one fact that shapes the table: the phone agent's tool catalog (services/mcp/voice-catalog.ts) is twelve tools, and none of them books, texts, tags, or changes a contact. So the appointments, texting and approval routes are all real code with no way for a call to reach them.

FeatureVerdictThe route on main
The list, the record, the recording, live and take-overFrontend onlyGET /calls, /calls/:id, /calls/:id/recording, /calls/active, POST /calls/:id/transfer. Drawn differently, nothing new.
The question she could not answer, Answer itFrontend onlysave_question writes the row with the call id; PUT /knowledge-base/:id publishes. The drafted answer text is the one small backend add for Wave 2.
Set up text messaging, ResubmitFrontend onlyGET /phone/10dlc/status, POST /phone/10dlc/campaign.
All of SettingsFrontend onlyThe phone lifecycle, phone/settings, contractors/profile, voices, knowledge-base, customer-skills, autonomy-policy, diagnostics.
Email a known caller, the teammate pickerFrontend onlyPOST /dashboard/contacts/:id/send-email, GET /api/team?fields=picker.
Match a caller to the CRM at call timeSmall backendThe read exists (GET /api/pm/people/lookup/:phone); writing calls.contact_id at call create is one column and a lookup in incoming.ts.
Needs-a-callback that a person can clear (Done)BackendThe call_followups table (call, owner, due, closed_by) and three routes. Until then Needs you is derived, not clearable.
Bella books, texts or proposes a change on a callBackendThree new tools in voice-catalog.ts: a booking tool with a free-slot read, a send-text tool behind the send_sms gate, and a propose-a-change tool that queues update_contact with the call id.
Open calls roll up into To Do's; the block listBackendA my-work source over call_followups; a route to list and remove a blocked number.

Ideas we tried and dropped

Sample data, illustrative only, seeded with one real problem (text messaging is not registered). Built to the RippleCore prototype standard (September 22, 2026), on the live v3 chrome, the decided Rippler bar, Ubuntu, and the June 2026 DataRipple tokens. Buttons measured on the shipped Time and Billing page on 6200. Routes read from origin/main read-only on September 22. Run locally with node mockups/receptionist-refresh/_serve.mjs then http://127.0.0.1:4650/; add ?clean=1 to hide the review bar. The prototype and these links are private until MJ shares them.