Write Home — speak a letter; it arrives in ink.
The other four products on this page are B2B. This one is my grandmother.
The people most worth writing to are the least likely to be reached by another app: the letter has to arrive on paper, in pen, in the mail, and nothing about receiving one can require the recipient to own, install or understand anything. So the product is a two-minute voice memo on the sender’s side and an envelope on the other, with a machine and the postal service in between.
Two decisions carry it. The first is that the AI edits and never authors — it tightens what you actually said to fit the card and shows you the diff, because a note your grandmother can tell was written by a model is worth less than no note. Letter content is never stored at all.
The second is that the reply is already in the box. No return envelope: the pen writes a code at the foot of the note, and the recipient talks their answer at a URL that is already paid for. A gift that only travels one way is a card; one that comes back is correspondence.
The hardest constraint here was never the pen. It was building a checkout a 78-year-old completes on an iPad — which is why the buying flow is a plain form that works with JavaScript switched off, and why the page where a recipient hands over their address needs no JavaScript either.
Visit writehome.ink
- A framework-free core the phone will share Formats, capacities, the enhancement prompt, the diff and the brand geometry live in a package with no React, no SDKs and no secrets — so the Expo app, when it comes, imports the same rules rather than reimplementing them a second time in a second language.
- Voice in, ink out Dictation through the phone’s own recognizer, then an AI pass that edits rather than authors — it tightens what you said to fit the card and shows you the diff. Without a key it falls back to a local tidy and tells you. Letter content is never stored: the letters table is metadata only, by design.
- The reply is already in the box No return envelope goes in the mail. The pen writes a code at the foot of the note, and the recipient talks their reply at a URL that is already paid for — the thing that turns a one-way gift into correspondence.
- Built for a 78-year-old on an iPad Gift checkout is a plain form POST that completes with JavaScript switched off, and so is the page where a recipient hands over their address. The hard constraint wasn’t the pen; it was the buyer.
- Address entry that takes seconds Places autocomplete as the sender types, then USPS CASS validation of what they picked. Nothing is stored, and without the key the app falls back to typing six fields.
- Recovery by phone without storing a phone number An HMAC of the number under a server secret, linked to book codes; the texted code is hashed, ten minutes, five tries. A sender gets their postage back on a new phone, and the database never holds the number that did it.
- One module decides what may reach the outside world Three environments told apart by a single variable, and every outbound path — mail, the pen vendor, live-mode payments, the database — asks the same guard first. On a preview, email goes to one test inbox with the real recipients noted in the body, the letter vendor is never called, and a live payment key is refused outright.
- A database branch per pull request Created by the Neon integration when the PR opens, deleted when it closes, swept weekly. A preview build whose connection string resolves to the production host refuses to run, and the app repeats the check at runtime rather than trusting the build.
- A support line that is a real phone number Toll-free and messaging-verified: calls ring a human for twenty seconds then take a transcribed voicemail, texts and voicemails arrive as email, and every webhook is signature-checked. No menu, no auto-reply.
- 89 tests Across 11 files, with no database and no keys.
Register · Write Home
Built over one month: 66 features, 48 pull requests, every one reviewed.
github.com/productdetroit- Work items delivered
- 66Stories and tasks closed Done in Jira, in production.
- Median idea → live
- 2hoursMedian created → resolved, all issue types.
- Spec → shipped
- 7hoursMedian epic lifetime: Confluence spec to production.
- Specs written
- 12Problem, data model, architecture decision — before code.
- Epics complete
- 8/24Done of created. The rest are sequenced, not stalled.
- Pull requests merged
- 48
- Production deploys
- 88
- Lines of code
- 23,313
- Reviewed by me
- 100%