Inspiration
My mom reads Cantonese better than English. So every few weeks there's a pile of mail waiting for me at her place. Medi-Cal renewals, insurance notices, something from the county that looks scary but usually isn't.
Each letter is three pages long and says one thing: here's a date, here's an amount, do this. Finding that one thing takes 20 minutes. Explaining it to her takes another 20.
I built Dutiful because I was tired of being my family's translation layer, and because I knew I wasn't the only one. When I started asking around, I found two groups doing the exact same unpaid work:
- Bilingual adult kids handling their parents' paperwork
- People with ADHD staring at a pile of envelopes they can't make themselves open One of them put it better than I could: "It's not that I can't read them. Opening them means finding out what I have to do, and that part feels huge."
What it does
You take a photo of a letter. Dutiful tells you:
- What it is, in plain language
- The due date and the amount, if there is one
- The one thing you actually need to do next
- And often the best answer of all: nothing needed Then it sets a reminder so the letter doesn't end up back on the counter.
If someone else in your family needs to know, Dutiful writes them a short message explaining it in English, Spanish or Chinese, so you're not the only person who understands what's going on. They don't have to install anything.
Letters are filed by person, so your mom's mail, your dad's mail and your own don't turn into one pile.
Live on the App Store since September 22, 2026.
How we built it
Native iOS in SwiftUI, with a small Python service doing the model work. I'm a product designer, not an engineer, so a lot of this was learning as I went.
| Layer | What I used |
|---|---|
| Extraction | Gemini 3.8 Flash via Vertex AI |
| Plain-language rendering and translation | Gemini 3.5 Flash Lite |
| App | Swift, SwiftUI, Vision, UserNotifications, EventKit |
| Subscriptions | RevenueCat + StoreKit |
| Messaging | OneSignal |
| Backend | Python, standard library only |
| Waitlist | Vercel |
Why Gemini for OCR. I tried a few options and Gemini handled real mail best: folded pages, bad lighting, photos taken at an angle on a kitchen table. It also reads long multi-page letters without falling over.
Two models, two jobs. Extraction and explanation are separate calls with separate models. Extraction has to be accurate. Explanation has to be kind. Those are different problems.
Identical requests are cached, so a letter reads exactly the same way every time you scan it. When someone is anxious, consistency matters more than variety.
Challenges we ran into
Getting the tone right for scared people. A medical bill is not a neutral document. Early versions surfaced the amount first, which made every letter feel like bad news. Now the app leads with what the letter is and whether anything is actually required.
Making a machine write like a person. Official letters are written to be legally airtight, not readable, and a model will happily copy that register. So the rules live in code, not hope:
- The summary follows one fixed shape: "A [kind of letter] from [sender] about [the subject in everyday words]."
- Key facts are capped at two, under 15 words each
- A risk is stated once. Never "may" and "possible" in the same sentence
- Dates, amounts and names are preserved exactly, and strength is preserved too. "Must" stays "must"
- No form numbers, codes or acronyms saved (IRS, DMV, Medicare numbers, etc.)
- Target reading level: words a 12-year-old knows, roughly 7th grade
- That last one is measured, not assumed. The test suite computes Flesch-Kincaid grade level on generated summaries.
Translation isn't the product. My first interviews assumed language was the core problem. Then I talked to someone with no language barrier at all who still said "I don't know what I'm signing off on." Reminders beat translation for two of three people I interviewed. That changed the roadmap.
Knowing what not to build. Dutiful never tells you whether you qualify for a benefit or what a policy means. It organizes and explains, then points you back to the issuer. Every feature idea had to pass that line, and a few good ones didn't make it.
Trust. One interviewee had already walked away from another product over an AI training consent clause. People are handing this app their parents' medical bills, so that shaped what gets stored and what doesn't.
Accomplishments that we're proud of
- Shipped to the App Store as a solo designer who mostly learned to build during this
- Real strangers are using it on their real mail
- The send-to-family feature works the way I wanted. My mom gets a message in Chinese explaining her letter, and nobody has to install anything for that to happen
- The writing is enforced, not hoped for. A readability gate in the test suite is not a normal hackathon feature
- I did the unglamorous part too: customer interviews, a discovery tracker, a real GTM launch plan, instead of only building
- The app says "nothing needed" when nothing is needed, which turned out to be the thing people react to most
What we learned
Reminders beat translation. Two of three interviewees ranked reminders first, including one with zero language barrier.
The elder never operates the app. There is one operator, the adult child. The output reaches the parent by text or the family group chat.
Relief is the product. Someone in an ADHD community explained it perfectly: 99% of mail creates no new task, and what they want is to stop feeling bad about the pile. That is a very different promise from "extract your due dates."
Emotion shows you where the market is. I asked the same question in a caregiving community and an ADHD community. The caregivers politely described systems they had already built. The ADHD thread got 597 views and stories about panic within half an hour. Same problem, completely different heat.
Investors pushed back that people hate paperwork but won't pay to fix it. That's a fair challenge and I don't have the full answer yet. It's what I'm testing next, with a real price in front of real users rather than a survey.
What's next for Dutiful
- An ADHD-first onboarding. Batch scanning for a whole pile, no shame mechanics, relief up front
- Answer the willingness-to-pay question honestly, with a real price and real users
- Inbox and PDF input. Bills quietly go paperless, and a camera can't photograph an email
- Search. "Where is that thing" is its own panic, separate from reading the letter
- Free letter-help workshops with SF senior organizations, in English and Cantonese, so the families who need this most can get it in person
- More interviews, especially on the ADHD side, which I only started reaching last week
Built With
- accessibility
- app-store-connect
- eventkit
- figma
- gemini-3-flash
- google-gemini
- i18n
- ios
- llm
- localization
- ocr
- onesignal
- prompt-engineering
- python
- revenuecat
- storekit
- swift
- swiftui
- testflight
- usernotifications
- vercel
- vertex-ai
- vision-framework
- xcode

Log in or sign up for Devpost to join the conversation.