Design Projects Coding Projects Writing Experiments / Arts About Resume / CV ↗

Sutra Library· 经库

A minimal reading app for Chinese Buddhist sutras — written for readers who want to understand the text, without streaks, counters, or ambient chant tracks getting in the way.

Six sutras at launch, every character hand-verified, offline-ready as a PWA with cross-device sync.

Timeline
2025 · Ongoing
Role
Solo · Design + Development
Stack
React 19 · TypeScript · Supabase · PWA
The real product, rendered at phone size — scrolling, long-press, theme toggle all work inline.Open in new tab ↗

01.The Problem

A reader wants to open the Heart Sutra on their phone. Today there are two options, both wrong.

Option one is a scanned PDF: archaic characters, no pinyin, no glosses. The reader stops on the second line — is 般若 pronounced bān ruò or bō rě? — and loses the thread.

Option two is a "practice app": streak counters, chant tallies, ambient music, a merit leaderboard. The text becomes a scorecard; reading becomes a game.

How might a sutra app respect the text and serve only comprehension?

02.Design Decisions

Three decisions define the product. Each is a "why", not a feature.

  • Per-character pinyin, not per-line. Sutra rhythm lives in the single character — flattening pinyin to the line obscures the cadence. All Buddhist-specific readings are hand-verified (般若 as bō rě, not bān ruò).
  • Long-press for definitions, not tap. On a scrolling page, taps misfire constantly — every accident breaks flow. Long-press preserves immersion for readers who don't need the gloss, and rewards the ones who do.
  • Counting features collapsed by default, not surfaced. Chant counters are real practice, but putting them on the first screen turns text into score. The feature is present — just folded away. The app never nudges.

03.Scope & Implementation

Six sutras at launch, from the 260-character Heart Sutra (《心经》) to the 17,394-character Kṣitigarbha Sutra (《地藏经》) — spanning first-time readers to long-form practitioners.

The app ships as a PWA so it works offline — a product decision, not a tech one: reading tends to happen on commutes, at bedside, or inside temples, where network is unreliable. A Supabase backend with Google OAuth syncs reading position, bookmarks, and settings across devices; Zustand holds local interaction state.

04.What I Deliberately Didn't Build

Subtraction takes more discipline than addition. Three features looked obvious and were cut on purpose:

  • Comments and community. Reading a sutra is a private act — group reactions introduce performance, make people wonder whether they're "reading it right".
  • Push notifications. "You haven't chanted today" reminders turn a voluntary practice into an obligation, and that betrays the whole premise.
  • Paid unlocks. Core features stay free forever — no subscription, no membership tier. Canonical texts should not sit behind a paywall.

05.Reflections & Next Steps

Shipping solo forces scope discipline — every feature has to answer does this help a reader understand the text? and if it doesn't, it gets cut.

Content curation turned out to be 50% of the real work and 0% of the lines of code: cross-checking pinyin against traditional Buddhist readings, punctuating Classical Chinese, proofreading variant characters. The engineering was the easy half. For a content product, content quality is product quality — the code is just a pipe that delivers text to the reader.

Next: partnering with a Buddhist academy or research group to expand the library while holding the "every character hand-verified" bar; and a study mode that surfaces the character gloss in a side pane without fragmenting the reading column.