Ship an app or web product from scratch

Hotari

A habit-tracking RPG. Log what you did; an AI "scribe" writes a note on your day, and a skill tree and five attributes make your growth visible. Live on the App Store as Hotari, and in mainland China as 萤火轨迹.

Background

Plenty of people put in the work every day and still can’t see themselves getting better. Hotari turns what you did into skills, attributes and a short AI-written note — a two-minute check-in each night. No streaks, no guilt.

What I did

Everything, solo: product, design, engineering, testing and release. iOS and web share one Expo codebase; the backend is Hono on PostgreSQL; subscriptions run through RevenueCat. The global and mainland China versions are listed separately.

Problems and solutions

  • Subscription entitlements: webhooks and the reconciliation endpoint share one sync function, with RevenueCat as the single source of truth. Purchases that didn’t carry over after switching accounts were fixed by re-querying on transfer events.
  • “The model judges, the code computes”: the AI only picks a tier; code computes the points. A typical day went from +60 to +12, so the numbers stay meaningful.
  • One codebase, two regions: separate bundle IDs and servers; the China build carries ICP filing, PIPL-compliant legal text and AI-generated-content labels.
  • Four languages: every copy key is covered by a parity test, and the AI personas are rewritten per language (Japanese keeps its politeness levels).
  • Performance: found that DeepSeek’s thinking mode was silently on in the Node SDK (about 20× slower), and cut a 42.2 MB font download from the web first load.

Stack

Expo SDK 54 · React Native · TypeScript · Hono · Drizzle ORM · PostgreSQL · RevenueCat · Stripe · DeepSeek · Sentry · Mixpanel · Docker · Caddy · GitHub Actions

Screenshots

← Back to home