Files
captoys/diigo-cache
dckc be796d9d0d diigo-cache: the public page is an h-feed of h-entry bookmarks
Microformats are the public page's API for other sites (potluck
first): each bookmark is an h-entry with u-bookmark-of, p-name,
p-summary, a p-category per tag (linked to a tag search),
dt-published (bookmarked) and dt-updated (last edited). Prev/next
links carry rel=prev/next, so a reader can follow a filter's pages.
Tests parse the page with microformats-parser to pin the contract.

Generated-by: Claude Opus 5.5
2026-10-09 01:49:40 -05:00
..

diigo-cache

Your diigo bookmarks, cached in a workerd worker, with a public page you can filter by week: /public/<you>?in=2026-W41. Your diigo session cookie is stored in one Durable Object and nowhere else.

Getting started

pnpm install
pnpm dev   # → http://localhost:8787/

Then, in the browser:

  1. mint the diigo session at webapp: paste the Cookie header from diigo.com (devtools, any logged-in request).
  2. wire it, mode public. Save the cache id it shows (the password-manager button does this).
  3. open this cache → fill, and watch it walk your bookmarks.
  4. Visit /public/<your diigo username>?days=7.

Bookmarks you hold, a page anyone can read

  • Filter by date and search: ?days=7, ?in=2026-W41 (ISO week, UTC), ?after=2026-01-01&before=2026-02-01, ?by=created, and ?q= with words, "phrases", #tags, -negation, and gmail-style newer_than:7d. Add Accept: application/json for JSON.
  • Private stays private: the public cache drops private bookmarks before storing anything, so it never holds them.
  • Ids are capabilities: the cache id is a bearer key you keep in your password manager. It rides URL fragments and POST bodies, never a path or query string, so it stays out of logs and history.
  • Cheap to read: pages come from Durable Object SQLite storage, and a fill job in the background fetches each diigo page once.

Design, tests, and deploying: CONTRIBUTING.