We will be undergoing planned maintenance on Oct 7th 6:00AM UTC / Oct 7th 2:00AM ET

Inspiration

Most diary apps hand you a blank page, and a blank page is where diaries go to die. DiaryMate hands you a conversation instead. The idea was to make journaling feel like sitting down at a small desk in a quiet room with someone who asks one good question at a time, and then to let the day end as one real page in a real book.

What it does

By day — the desk. You leave short one-line "fragments" of your day with a character. No AI is involved here: the character simply answers back with a short line. Three fragments a day are free.

At night — Make a page. The companions you chose look back over what you left, ask a few short questions (you can answer with a tap, type, or skip), and the day becomes a single paper page. Your companions each add a line of their own under it, and the page joins your book.

Six original characters. Pick up to four; the day's host rotates in the order you picked them. The same day reads differently depending on who you tell it to.

Quiet by design. The room shifts with morning, afternoon and night. Nothing moves without a cause — motion only happens when you leave a fragment, turn a page, or finish a day — and reduced-motion is respected. The interface is fully bilingual (Japanese / English) and switches in one tap.

Private by default. Everything you write is stored only on the device. Text reaches our server only when a Premium subscriber taps Make a page, More, Deepen or Rewrite — and the server keeps nothing. If the AI can't be reached, the app says "No AI" on screen and continues on its built-in script instead of faking a reply.

Monetization (RevenueCat)

We drew the paywall along the cost line, not along an arbitrary feature list.

  • Free costs us nothing per user. The free plan never calls a server: three fragments a day, a scripted two-exchange evening conversation that still produces a finished page, one added note a day, and the last three days of the book. It works in airplane mode.
  • Premium is exactly the part that costs money: the AI. One monthly subscription with a 7-day free trial turns the evening conversation into a real AI conversation (up to four exchanges), unlocks "Deepen" on any fragment, AI rewrite and copy of a finished page, unlimited fragments and notes, and every page you've ever written.
  • The paywall appears at the moment of intent, never on launch: the lock on a fragment's Deepen mark, the fourth fragment of the day, "More" in the conversation, Rewrite/Copy on a page, or a day older than three in the book.
  • When a trial or subscription ends, the app falls back to the complete free mode — never to a wall — so a lapsed user keeps their habit and their pages, and meets the paywall again only at a moment of intent.

RevenueCat handles the offering (default / $rc_monthly), the premium entitlement, the StoreKit introductory offer and restore. We used RevenueCat's Test Store to drive the whole purchase → unlock → AI → lapse flow in the iOS Simulator before ever touching a sandbox account.

How we built it

Vite + React 19 + TypeScript inside a Capacitor 8 iOS shell; IndexedDB for on-device storage; the RevenueCat Capacitor SDK for purchases; a small Vercel function that relays Premium conversations to an LLM through OpenRouter with schema-constrained output, rate limiting at two layers, and no storage. The free plan runs on a local script engine that doubles as the visible fallback when the AI is unreachable.

Quality is enforced by machines, not by hope: a layout harness measures 276 screen/size/language cases for overlapping or clipped elements, axe runs on every state (0 violations), and 3,000+ unit checks cover the free-tier rules, companion rotation, the paywall states and the API contract.

Development was heavily assisted by AI coding agents, with a human making every product call.

Challenges we ran into

  • Disciplining AI calls. It is tempting to call the model everywhere. We ended up with a hard rule — never on leaving a fragment, only on explicit taps — and a free plan that must make zero network calls, verified by a test that watches the network.
  • Being honest about degradation. A diary that silently swaps AI for canned text feels like a lie. The "No AI" mark took several rounds to get right without being alarming.
  • A web stack that has to feel native. Keyboard and viewport behaviour in WKWebView, the Dynamic Island, and 6.9-inch layouts all needed device-level fixes.
  • First-time App Review. As a new developer account we were asked for a physical-device recording and a full written walkthrough; answering it well became part of shipping.

Accomplishments that we're proud of

  • A free plan that is a complete product on its own and costs nothing to serve.
  • A paywall people meet only when they reach for the thing it sells.
  • An interface where almost every explanatory sentence was removed and the app still explains itself.

What we learned

Put the paywall where the cost is and the value is obvious, and both the unit economics and the user's trust get simpler. And: test purchases end-to-end early — RevenueCat's Test Store made that possible without waiting on App Store Connect.

What's next for DiaryMate

A yearly plan; server-side entitlement verification; more companions unlocking over time; and a monthly edition that turns your pages into a short illustrated story.

Built With

Share this project:

Updates

Submission history