Find the lending rule your staff will need before the next borrower asks. Understudy rehearses equipment requests, changes one fact at a time and shows whether the desk lacks evidence or an instruction.
Inspiration
A borrower asks for a camera that is already on loan. Another camera is available, but the handbook never says whether staff can offer a substitute. A desk can have plenty of documentation and still lack that one decision. I built Understudy to make the gap visible before it becomes a live request.
What it does
An operator records equipment, borrowers and explicit lending rules, then rehearses a request. Understudy changes one fact at a time: borrower verification, eligibility, maintenance status, requested equipment or previous renewal count. Each comparison shows the changed fact, the resulting answer and the rules checked. Rehearsals do not change committed loans.
The distinction matters. Verifying a borrower needs evidence; deciding whether substitutions are allowed needs an instruction. The operator chooses that instruction, then rehearses again. A confirmation rule permits the substitute when the borrower agrees and asks for consent when confirmation is absent.
Renewal comparisons similarly reveal whether another extension needs a rule. The private operator workspace also supports inventory imports, loans, component returns and durable receipts. Concurrent requests cannot check out the same item twice, and retrying a committed request returns its existing receipt.
How I built it
This Alexa+ entry uses the permitted self-hosted MCP route: the official TypeScript SDK, protocol 2025-11-25 and Streamable HTTP. The browser makes real calls to inspect_desk and probe_request; the private endpoint also supports read_receipt.
React, TypeScript and Vinext provide the interface, with Cloudflare D1 and Drizzle for the operator's persistent records. Codex supported development. Grouped navigation and progressive detail were inspired by 21st.dev and implemented in the app's existing typography and colors.
The evaluator applies explicitly configured rules. It does not infer policy from handbook prose with an LLM. No Alexa+ distribution, Echo connection or AWS runtime is claimed.
Challenges
The core challenge was separating an instruction gap from missing evidence without treating either as permission to proceed. Read-only rehearsal tools also needed isolation from the real lending workspace.
Persistent operations required a different boundary: inventory changes and receipts must remain consistent across concurrent requests and retries. The implementation uses transactional records and revision checks, while the public demonstration remains an isolated fictional desk.
Accomplishments
The current release passed 38 domain, SQLite, MCP and demonstration tests, TypeScript checks, lint and a production build. HTTP checks verified MCP negotiation, consent boundaries, private-data isolation and the D1-backed lending lifecycle.
The published 104-second demonstration uses fresh actual browser captures of the substitution rehearsal, with fictional equipment and borrowers, real MCP calls and edited reading holds. The current source additionally includes renewal-count comparisons. The demonstration cannot lend real equipment or access private committed receipts.
Alongside this entry, I contributed event-history pagination and webhook connection cleanup to the official Ring sample. The pagination contribution and connection-cleanup contribution include regression tests and linked forks for review. These are the additional Open Source contributions; Understudy remains an Alexa+ project.
What I learned
An assistant can identify where a decision is missing without being authorized to make that decision. Comparing one changed fact at a time makes the boundary inspectable: the operator can see why a request passes, fails or needs an instruction.
What's next
Test the rehearsal workflow with equipment-desk operators and learn which comparisons help them prepare a shift. No customer usefulness study is claimed. Alexa+ distribution can be evaluated when the relevant developer tools become available.
Run and judge it
Source and setup · Judge walkthrough · Friction log
The fictional demonstration runs locally with Node.js 22.13+ and needs no credentials, cloud account or database setup. Follow the judge guide for the exact start command and /demo route. The README separately covers local D1 setup for the full operator workspace.
Built With
- cloudflare-d1
- codex
- drizzle
- model-context-protocol
- react
- typescript
- vinext
Log in or sign up for Devpost to join the conversation.