The iPhone is the main way in. Its share extension saves a capture to the app’s shared container and hands it to a background upload, and creates are idempotent, so a capture sent twice is stored once. A Chrome extension sends the rendered page, which means articles behind a login still get extracted, and the Mac app has a quick-capture shortcut. Every client generates its own IDs, keeps a local SQLite copy and pulls a change feed, so the apps open instantly and work offline.
The server is TypeScript on Effect, with Postgres and pgvector, running in Docker on a homelab VM and reachable only over Tailscale. A worker processes each item. Articles go through Readability, X posts through oEmbed, screenshots through OCR, and YouTube through its captions. Audio and video without captions go to Whisper on my desktop’s GPU, which transcribed 41.6 seconds of speech in 0.85 seconds when I measured it. Claude Haiku suggests tags, a summary, entities, related items and dated events.
Search ranks full-text matches together with embeddings from a local Qwen3 model, and Ask Herid streams answers from Claude Sonnet with citations back to the items. Agents can reach the library through an MCP endpoint, and every Monday a digest covers last week’s threads and an older item that connects to them.
