Scope
- Lesson file:
docs/projects/journal-search-summarize/index.md (LLM/RAG skeleton per rag-notes: 5 steps, StepChecklist + Socratic questions per step, 6-provider table, opencode blurb, badges, ProjectProgressCheckbox).
- Example folder:
examples/journal-search-summarize/
main.py — CLI with index, search '<query>', and summarize START END (dated, citation-audited LLM summary); --interactive optional.
data/journal/ — 12 committed dated sample entries (YYYY-MM-DD.md, ~2.5 weeks: work, running, a side-project, a trip plan, a family birthday).
data/sample_queries.json — 6 example queries with ground-truth notes.
notebook.ipynb (12 cells, journal embedded inline, getpass + 6-provider selection), pyproject.toml, uv.lock, .env.example (6-provider), .gitignore, .python-version, README.md.
- Registration:
docs/projects/journal-search-summarize/_category_.json (position 26), plus first-entry inserts in src/data/projects.ts, docs/projects/index.mdx, and src/pages/index.tsx (tags: AI Agents, Retrieval-Augmented Generation).
- Badges/notebook: Colab/Kaggle/Binder badges point at
main paths in the lesson.
Framing note
Teaches that a personal, unstructured journal — with recurring topics and no fixed vocabulary — is exactly where embeddings + a small LLM beat both grep and reading everything. Honest framing: LLM summaries can flatten nuance or overgeneralize, so the summarize command forces the model to cite a [YYYY-MM-DD] date per bullet and prints an audit trail mapping every cited date back to its source entry — same 'no invented facts' discipline as the changelog work.
Scope
docs/projects/journal-search-summarize/index.md(LLM/RAG skeleton perrag-notes: 5 steps, StepChecklist + Socratic questions per step, 6-provider table, opencode blurb, badges, ProjectProgressCheckbox).examples/journal-search-summarize/main.py— CLI withindex,search '<query>', andsummarize START END(dated, citation-audited LLM summary);--interactiveoptional.data/journal/— 12 committed dated sample entries (YYYY-MM-DD.md, ~2.5 weeks: work, running, a side-project, a trip plan, a family birthday).data/sample_queries.json— 6 example queries with ground-truth notes.notebook.ipynb(12 cells, journal embedded inline, getpass + 6-provider selection),pyproject.toml,uv.lock,.env.example(6-provider),.gitignore,.python-version,README.md.docs/projects/journal-search-summarize/_category_.json(position 26), plus first-entry inserts insrc/data/projects.ts,docs/projects/index.mdx, andsrc/pages/index.tsx(tags: AI Agents, Retrieval-Augmented Generation).mainpaths in the lesson.Framing note
Teaches that a personal, unstructured journal — with recurring topics and no fixed vocabulary — is exactly where embeddings + a small LLM beat both grep and reading everything. Honest framing: LLM summaries can flatten nuance or overgeneralize, so the summarize command forces the model to cite a
[YYYY-MM-DD]date per bullet and prints an audit trail mapping every cited date back to its source entry — same 'no invented facts' discipline as the changelog work.