← Projects

Words Per Day

active

astro typescript privacy pwa cloudflare

Words Per Day is a quiet room for a daily writing habit. You pick a number of words, show up, and watch a single line fill toward the goal. That’s the whole app: no folders, no formatting toolbar, nothing to manage.

What it’s trying to achieve

Most writing tools optimise for output or for organisation. This one optimises for the hardest part, which is simply starting, every day. The aim is a low, humane bar (a word count you choose), a calm surface that gets out of the way, and a gentle sense of momentum from a streak and a progress line. It should feel less like software and more like a desk by a window.

Just as important is what it refuses to do. There are no accounts, no ads, no trackers, and no analytics of any kind. Your writing is yours: it’s saved only in your browser, and there’s no server for it to be sent to.

Highlights

  • Local first, private by default. Every word, your name, and your settings live in this browser via localStorage. Nothing is uploaded, because there’s nowhere to upload it to.
  • A focused writing surface. An auto-growing page, autosave, a progress line to the day’s goal, a streak that doesn’t punish an in-progress day, and an iA Writer style focus highlight that dims everything but the sentence or paragraph you’re in.
  • Yours to take with you. Export any day as Markdown or plain text, print a clean copy, and (coming next) back up or restore everything as a single file.
  • Made calm. Light and dark themes, a handful of self-hosted fonts, four text sizes, and an optional paper texture behind the page.
  • A quiet sense of company. An optional solidarity panel shows how many people are writing right now, and a daily count of who showed up, with no identities and no accounts.

How it’s built

Static Astro output, hand-written CSS, and a small amount of TypeScript, with no UI framework. Fonts are self-hosted, so no third party ever sees a request. It’s deployed to GitHub Pages behind Cloudflare, and one tiny first-party Cloudflare Worker powers the anonymous solidarity count. It shares its sumi-e design language with this site, so the two feel of a piece.