Skip to content
All builds

PithQuote Saver (Chrome)

What it does for you

A private home for highlighted passages, their context, and the way back to the source.

Pith screenshot

Screenshots

Pith screenshot 1

In more detail

Pith is a Chrome extension for saving highlighted passages along with where they came from. You can tag, pin, annotate, group, and search what you saved, then jump back to the exact spot on the source page. Think of it as a private commonplace book that keeps the context and the way back.

Honest limits

The extension was never installed and run in a real Chrome profile. The service worker and Chrome APIs were tested with fixtures only, and capture wasn't tried against a set of real-world page layouts. Collections can't be renamed or removed yet. No remote calls, no publishing, no paid services.

How I built it

Pith was on the Codex list in 00-system/capstone-split.md. An earlier interrupted session had already left the quote core, a safe view layer, the capture script, the service worker, and most of the tests in the folder. Codex ran that suite, kept what passed, and finished the missing pieces: the quote board, the popup, the settings page, a standalone demo, and the local server. About 0.12 hours this session, with the earlier core work not counted. No subagents were used.

I set the ownership boundary, minimal permissions, and no publishing. The capture script is injected only after you click, through activeTab, so the extension doesn't sit on every page. Page text is rendered as text nodes, never parsed as HTML. Like every Codex build, it finished by writing a LOG-ENTRY.json in its own folder, and Claude Code merged it after re-running the checks and auditing the extension permissions.

The same board runs inside the extension and as a standalone demo with its own sample library, so screenshots never touch a real user's saved quotes. Exports go to JSON, CSV, and Markdown.

What I learned

  • Reading fresh storage before each save doesn't stop two writers from overwriting each other. A Web Lock now wraps the whole read-modify-write across extension contexts, with a regression test for concurrent saves.
  • A security test has to look at real tags. One check was flagging harmless quote text that happened to contain the word "onerror." It now inspects actual attributes and confirms text-node creation.
  • A demo can use the real extension UI while keeping its sample data isolated from the user's library.
  • Pins change sort order, so browser tests should find a record by its ID, not assume the newest card is on top.

What carried forward

Pith is built on a core that already existed and already passed its tests, which is the reuse the split file was designed around. It follows the shared house rules (tested pure module, serve.mjs on 5158, ?demo=1, dark and light themes). #59 took the same approach of one UI mounted in both the extension and a standalone demo. No later project imports Pith's code.

If I took it further

Test capture on a fixed set of real page layouts in a dedicated extension-testing browser, and add collection rename and remove before calling collection management done.

#058 Built with Codex September 23, 2026 230 automated checks

Want one like this?