All products

Write Home — speak a letter; it arrives in ink.

writehome.ink · in active development · consumer

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
Write Home’s homepage: “Say it out loud. It arrives in ink.” beside a handwritten note and its stamped envelope
Write Home — the promise stated in one line, and the product photographed as what it actually is: a note in pen and a stamped envelope, not a screen.
  • 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%

Open to senior product roles in B2B enterprise SaaS.

Thirty years of judgment, now with no queue in front of it.

joe@productdetroit.com