Skip to content

pentasir/compendium

Repository files navigation

Compendium icon

Compendium

license MIT data stays on your device network requests zero account none runs web and desktop

A daily reflection that stays on your device. One entry a day. You have to be here to write it.

Most journaling apps are write-only. You put thoughts in and nothing comes back. Compendium is built on a different premise: most of what we think today is a recurrence of yesterday. So instead of a feed of notes, it keeps a record of how your thinking moves over time, and quietly shows you the loops you didn't know you were in.

It is local-first by design. There is no account, no server, and no network call anywhere in the code. Your entries live in your browser's IndexedDB, on your machine, and nowhere else.

The idea in one line

A timeline of your recurring thoughts, so you can see whether your thinking is moving or circling.

A look inside

First run. Compendium asks for one thing, the day you were born, so it can place each entry against the age you were when you wrote it. That date never leaves your device.

The onboarding screen

The daily ritual. One free-form entry a day with a single prompt, "What's on your mind today?", a quiet guidance note, and a reminder that no one is reading this but you.

The writing screen

The archive. A heatmap of your writing life, year by year, with the age you were down the left, a month axis across the top, and cell intensity by how much you wrote.

The heatmap archive

What you keep returning to. Recurring words surface on their own; click one to see every day you wrote about it, each with the word in context, and read any of them in full. The premise made visible: are you moving, or circling?

A recurring theme and the days it appears

Threads, over time. Behind the list, every recurring word becomes a thread along a shared timeline. A thought that clusters is a phase you moved through; one that runs the whole width is a loop you keep circling.

Recurring thoughts plotted over time

The thread. Clicking a day opens its month as a string of beads; hovering previews the day.

The month thread

The reader. Any past day, read back in full.

Reading a past entry

What it does

  • One entry per day. A single free-form writing surface that asks "What's on your mind today?" No tags, no fields, no structure. Just thought.
  • You have to be present. You can only write today's entry, today. There is no backdating, no importing, no bulk entry, and the timestamp is set by the device rather than by you. The constraint is the point: it is a wind-down ritual, not a backlog to clear.
  • Themes emerge. You don't assign them. Recurring topics surface on their own from your own words.
  • Your history becomes a map. A GitHub-style heatmap of your writing life (years stacked, with the age you were on each), drilling down to a day-by-day timeline and to a timeline of the themes you keep returning to.

Privacy model

Your thoughts never leave your device. This is not a policy, it is an architecture:

  • No backend. No authentication. No analytics.
  • The code makes zero network requests. You can verify this yourself, which is part of why it is open source.
  • The service worker caches only the app's code for offline use. It never touches your entries.
  • A manual Markdown export (one file per day, with frontmatter, readable in Obsidian or any editor) gives you a backup and a way to move your data, entirely under your control.

Running it

It is a static site with no build step.

cd compendium
python3 -m http.server 8000
# open http://localhost:8000

To install it as an app, open it in a browser and choose "Install" or "Add to Home Screen." It then works fully offline.

Desktop app

Compendium also builds as a native desktop app with Tauri, which wraps the exact same code in the operating system's own webview (no bundled Chromium, so the installer is only a few megabytes). The web app at the repo root is untouched and still has no build step; the desktop tooling lives in src-tauri/, and a generated, gitignored dist/ holds a clean copy of the app shell for bundling.

On the desktop, each day is stored as a real Markdown file in a folder you choose (your vault), readable in Obsidian or any editor. The web version keeps IndexedDB; the same code picks its storage backend at runtime.

Compendium running as a native macOS app

Prerequisites: Rust and Node. Then:

npm install
npm run tauri build
# produces Compendium.app and a .dmg under src-tauri/target/release/bundle/

The build is unsigned, so on another Mac the first launch needs a right-click then "Open."

Status

Built in phases. See BUILDSTORY.md for the full design log and rationale.

  • Phase 1: the writing ritual. First-run setup, today-only entry, autosave, read-back.
  • Phase 2: the heatmap home. A year-by-year grid with the age you were down the left, cell intensity by entry length, and a read-only view of any past day.
  • Phase 3: the thread drilldown. Clicking a day opens its month as a string of day-beads, with a preview on hover and the full entry on click.
  • Phase 4: local pattern detection. Recurring themes surfaced from your own words, with no AI; click one to read every day you wrote about it, in context.
  • Themes over time. A timeline where each recurring word is a thread across the months, so a glance tells you whether a thought is a phase you moved through or a loop you keep circling.
  • Markdown backup. Export every entry as Obsidian-compatible Markdown (a .zip of one file per day) and import it back, merging without overwriting. Local-first, so this is also how you move between devices.
  • Phase 5: polish and deploy. PWA install niceties and a final calm pass.

Deferred: an optional AI reflection layer (a one-time unlock) that reads patterns across time. The core never depends on it.

Stack

Vanilla HTML, CSS, and JavaScript. IndexedDB for storage. PWA for offline and install. No framework, no build step, no dependencies. A Tauri (Rust) wrapper builds the same code as a native desktop app; that is the only part with a toolchain, and it does not touch the web build.

License

MIT. There are no secrets to protect, and open source is what lets anyone confirm the privacy promise is real.

About

A local-first daily reflection app. One entry a day, stored as Markdown you own. Web PWA and native desktop (Tauri).

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors