- /
- About/
About
The AI landscape moves fast. It’s easy to be overwhelmed by noise, or to miss slow-moving structural shifts because no single article captures them — they only become visible when you read across weeks and topics simultaneously. Zeitgeist is a personal attempt to fix that: a curated intelligence digest that tracks a small set of topics I care about, runs an intermittent gather cycle, and presents what’s new in a form I can review from my phone in five minutes. The review step is the point — reading is passive, but marking observations as keep, dismiss, or action forces a decision and feeds back into the system.
Architecture #
The backbone is a Flask application (epistemic-rag). Five journal types feed this site: Topics (keyword-driven per-domain tracking), Creators (per-person output tracking), Quests (single-question synthesis), Signals (analytical re-reading of Topics material), and Reviews (the human curation layer over all of it).
Content generation started as an interactive Claude Code skill (/journal run) — a human driving Claude through each gather step by hand, session by session. As the system matured, this became util_scripts/journal_pipeline/: a standalone Python script that invokes an LLM (Gemini, using its built-in Google Search grounding) on demand for each due topic/quest/creator/signal, runs unattended on a schedule, and needs no Claude Code session running to operate. The interactive skill is retained as a manual/audit fallback, not the primary path.
This wasn’t the only design considered. Early options weighed a thin Python wrapper still shelling out to claude -p per step, versus a fuller agent built on the Claude Agent SDK with its own tool-use loop, versus the current shape: deterministic Python structure with the LLM called only for actual generation. The last won once Gemini’s search grounding removed the need for a separate search API. Full pipeline automation — including auto-merging and deploying without human review — was tried first, then deliberately walked back to a PR-gated staged rollout after review: the gate isn’t just about running unattended, it also catches malformed or poorly-synthesized output before it reaches the live site.
At the end of each run, flagged meta-observations are aggregated into a Review document. A pre-processing script (build_zeitgeist_site.py) injects Hugo front matter into all journal and review files, builds this static site with Hugo, and deploys it to Cloudflare Pages. Cloudflare Access currently gates the site behind an email OTP.
There are two ways to feed something back into the system directly from the site. Every page carries a free-text note button — write anything, attributed to an email if you choose to give one. Review pages additionally carry verdict buttons (keep / dismiss / action / other) against each flagged observation — the same decision the review document itself is structured around, just usable directly from the page. Both are drained back into the pipeline at the start of the next gather run.