Gate 1 prototype · Digital Receptionist · redone to the prototype standard · September 22, 2026
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.
One row per rule, and what the rebuild did about it.
| The rule | What changed |
|---|---|
| As few tabs as the product allows | The 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 middle | The 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 steps | The 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 them | The 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 place | The 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 amber | Red 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 bars | Removed 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 copy | Measured 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 data | The 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. |
| Out of 10 | Simple | Honest | Standard |
|---|---|---|---|
| First redothree tabs, right drawer, amber, invented states | 6a rollup page and a Waiting tab it did not need | 4booking, texts and an approval no call can make | 5copied Meeting Studio's shape |
| This onetwo tabs, centered windows, two colors | 8one list, one record, one Settings | 9every state is one the worker returns | 9derived 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.
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.
One list of calls, defaulting to the six that still need a person. Pick one and its record is on the right: what happened, what is owed, the recording.
Open CallsAmanda asked a question Bella could not answer, and needs a callback. Answer it once and Bella reads it on every call after.
Open Amanda's callSeven sections behind the routes that exist. Is she working? shows the one failing check, and Set it up resubmits the texting registration.
Open SettingsThese are private links until MJ shares them from the Share menu.
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.
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.
| Feature | Verdict | The route on main |
|---|---|---|
| The list, the record, the recording, live and take-over | Frontend only | GET /calls, /calls/:id, /calls/:id/recording, /calls/active, POST /calls/:id/transfer. Drawn differently, nothing new. |
| The question she could not answer, Answer it | Frontend only | save_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, Resubmit | Frontend only | GET /phone/10dlc/status, POST /phone/10dlc/campaign. |
| All of Settings | Frontend only | The phone lifecycle, phone/settings, contractors/profile, voices, knowledge-base, customer-skills, autonomy-policy, diagnostics. |
| Email a known caller, the teammate picker | Frontend only | POST /dashboard/contacts/:id/send-email, GET /api/team?fields=picker. |
| Match a caller to the CRM at call time | Small backend | The 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) | Backend | The 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 call | Backend | Three 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 list | Backend | A my-work source over call_followups; a route to list and remove a blocked number. |
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.