CLAUDE.md
Schema for LLM wiki maintenance. Obsidian is the IDE; Claude is the programmer; this vault is the codebase.
What This Repo Is
Obsidian personal knowledge base ("second brain") backed by Git. Not software project — no build steps, tests, package managers. Content in Markdown, synced to GitHub via Obsidian Git plugin (auto timestamped backup commits).
Remote: git@github.com:vatsal30/Obsidian_backup.git
Content Organization
Rebuilt 2026-07-28 into 5 top-level life-area folders (was: technical-domain folders + a catch-all Private/). Private/ no longer exists — everything it held now lives in one of the 5 folders below, or in Archive/. Each folder has its own index.md with a recommended reading order; read that before working inside it.
| Directory | Purpose | Priority |
|---|---|---|
Interview Prep/ | 6 folders (Content, Behavioral & Past Projects, Job Switch, Monthly Plan, Resume, + Weekly/Daily Tracker) + 2 root files (Dashboard.md, Main Plan.md) + Coach.md — restructured 2026-07-29 around these 6 things, no incidental wrapper folders | Highest — accountability-critical |
Learning/ | Go, Python, SQL, AWS, FrontEnd, AI & ML — general career-upskill reference, split from Interview Prep's interview-curated material (some intentional overlap) | Career upskill |
Private/Finance/ | Investment trackers (2 portfolios), bank statements, monthly broker-export workflow. Self-documented — see Private/Finance/README.md. Human-owned. The one folder kept under a Private/ wrapper (financial data), by user request. | Personal |
Projects/ | Personal side projects (e.g. Personal Portfolio/) | Personal |
Life/ | Lifestyle, travel, general planning & logging — goals, year-in-review, health, experiences/entertainment, quick links | Personal |
raw/ | Immutable source documents (unchanged) | — |
Archive/ | Superseded/deferred content, never deleted — Deferred/, Pre-May11-Plan-Summary/, Stale Flagged <date>/, Log Archive/ | — |
Interview Prep/ — 6 folders, 2 root files, no incidental nesting
Rule: nothing gets a wrapper subfolder just for taxonomy. Reorganized 2026-07-29 around what the content actually is, not a technical-domain split. Content/DSA/ and Content/System Design/ are flat internally too (numbered technique files, concept files — no Techniques for Interviews/ or Concepts/ sub-subfolders). Only Content/ itself stays deeply nested by category (Backend/Frontend/System Design — ~150 files, genuinely needs it, has its own index.md).
| Item | What it is |
|---|---|
| [[Interview Prep/Dashboard]] | The single daily entry point. Read first, always. Links to the interactive web dashboard (Artifact — pace gauges, live checkboxes, month view; checkbox state is localStorage-only, not synced back to the vault). |
| [[Interview Prep/Main Plan]] | Strategy layer — goal, hours budget, funnel math, hard rules. Rarely changes. |
Content/ | Everything to read — DSA, System Design (Concepts/HLD/LLD/DDIA/Databases), Go, Python, Databases-SQL, Frontend |
Behavioral & Past Projects/ | STAR stories + war-story source docs |
Job Switch/ | Company target list + application tracker |
Monthly Plan/ | One active month at a time — completed-summary + new plan + weekly-checklist pointers |
Coach.md | Compressed current-state file — current week pointer, positioning, non-DSA checklist, historical scorecard log. Updated by /coach retro and /coach scorecard. |
Resume/ | Latest resume (.tex source + PDF) |
Weekly Tracker/, Daily Tracker/ | Detail layer — Monthly Plan and Dashboard point into these, they don't duplicate them |
Coach/ | Symlink to the Claude memory dir (project_current_week, project_dsa_sd_curriculum, project_job_switch_2026) |
File Conventions
Frontmatter — all notes use YAML frontmatter:
---
title: "Title"
category: "Category"
date: "YYYY-MM-DD"
tags: ["tag1", "tag2"]
---
Naming — Title Case or PascalCase (e.g., Dynamic Programming.md, JavaScript.md). Diagrams use Excalidraw format (.excalidraw.md).
.gitignore excludes .obsidian/workspace.json, .obsidian/workspace-mobile.json, .trash/, .DS_Store.
Git Workflow
- Obsidian Git auto-commits with messages like
vault backup: YYYY-MM-DD HH:MM:SS - Manual commits:
chore: ...,feat: ... - Don't amend automated backup commits
Mermaid Diagrams
- Use
<br/>for line breaks inside node labels — never\n - Example:
Node[Line 1<br/>Line 2]✅ —Node[Line 1\nLine 2]❌
Installed Community Plugins
- obsidian-tasks-plugin — tasks use
- [ ]syntax with due dates (📅 YYYY-MM-DD) - obsidian-excalidraw-plugin — diagrams as
.excalidraw.mdfiles - obsidian-local-rest-api — vault via local HTTP API (port 27123 default)
- calendar — daily/weekly notes integration
- table-editor-obsidian — GFM table editing
- obsidian-importer — import from other formats; no ongoing structural impact
- vscode-editor — VS Code keybindings in Obsidian
- obsidian-style-settings — theme customization; no content impact
Three-Layer Wiki Architecture
Layer 1 — Raw Sources (raw/): Immutable. Web clips, articles, papers, PDFs. LLM reads, never modifies. Frontmatter: source_url, date_clipped, ingested: true/false.
Layer 2 — Wiki (Interview Prep/ + Learning/): LLM-owned. Domain notes + cross-domain synthesis pages (now filed inside Learning/ and Interview Prep/ rather than a separate synthesis/ folder). LLM creates and updates. Human reads.
Layer 3 — Schema (this file): Conventions + workflows. Human + LLM co-evolve over time.
Navigation files (always update):
index.md— catalog of all pages, one-line summary per page. Read first when querying.log.md— append-only operation history. Format:## [YYYY-MM-DD] action | description.
Operations
Ingest
When user drops a source in raw/ and says "process this":
- Read source file
- Discuss key takeaways with user
- Write summary page in
Interview Prep/orLearning/as appropriate (cross-domain → a synthesis page, e.g.Learning/Tech Stack Overview.md) - Update relevant existing pages (add cross-refs, update synthesis pages)
- Set
ingested: truein source frontmatter - Update
index.md— add new page, incrementpage_count - Append to
log.md:## [date] ingest | Source Title
One source may touch 5–15 wiki pages. That's expected.
Query
When user asks a question against the wiki:
- Read
index.mdfirst — find relevant pages - Read those pages
- Synthesize answer with
[[page]]citations - If answer is valuable (comparison, analysis, new connection) → file it as new wiki page
- Update
index.mdif new page created - Append to
log.md:## [date] query | Question summary
Lint
When user says "lint the wiki" or "health check": Check for:
- Orphan pages (no inbound
[[links]]) - Stale claims superseded by newer content
- Concepts mentioned across pages but lacking own page
- Missing cross-references between related pages
- DSA/SD gaps vs job switch plan milestones
- Synthesis pages that need updating from new domain content
Append to log.md: ## [date] lint | Issues found: N
Wiki Page Frontmatter
Domain pages (anything inside Interview Prep/ or Learning/):
---
title: "Title"
category: "Category"
date: "YYYY-MM-DD"
tags: ["tag1", "tag2"]
---
Synthesis pages (filed inside Learning/ or Interview Prep/):
---
title: "Title"
type: "synthesis"
category: "synthesis"
date: "YYYY-MM-DD"
last_updated: "YYYY-MM-DD"
tags: ["synthesis", "topic1", "topic2"]
source_count: N
---
Raw sources (raw/):
---
title: "Article Title"
type: "source"
source_url: "https://..."
source_type: "article|paper|podcast|video"
date_clipped: "YYYY-MM-DD"
ingested: false
wiki_pages_updated: []
---
Directory Map (updated 2026-07-28)
| Directory | Owner | Purpose |
|---|---|---|
raw/ | Human adds, LLM reads | Immutable source documents |
raw/assets/ | Auto (Obsidian) | Downloaded images from clipped articles |
Interview Prep/ | LLM | Content, Behavioral & Past Projects, Job Switch, Monthly Plan, Coach.md, Main Plan.md, Dashboard.md, Resume, Weekly/Daily Tracker. Highest priority. |
Learning/ | LLM | Go, Python, SQL, AWS, FrontEnd, AI & ML — general reference notes + cross-domain synthesis pages |
Private/Finance/ | Human | Investment trackers, bank statements — self-documented in Private/Finance/README.md |
Projects/ | Human | Personal side projects |
Life/ | Human | Goals, year-in-review, health, experiences, quick links |
Archive/ | Both (never delete, only add) | Superseded/deferred content — Deferred/, Pre-May11-Plan-Summary/, Stale Flagged <date>/, Superseded Trackers <date>/, Log Archive/, Interview Prep/Content/_archive/ |
Synthesis Pages
LLM-maintained cross-domain pages. Update when domain content changes.
| Page | When to update |
|---|---|
Interview Prep/Coach.md | New DSA pattern, SD problem, weekly review done, behavioral stories refined |
Learning/Tech Stack Overview.md | New skill added, cert achieved, project shipped |
Learning/Concurrency Deep Dive.md | New Go/Python concurrency notes |
Learning/LLM & AI Stack.md | New AI/ML content, work experience notes |
LLM Ownership Rules
LLM owns: Interview Prep/ (all of it — Content, Behavioral & Past Projects, Job Switch, Monthly Plan, Coach.md, Dashboard, Weekly/Daily Tracker retro data), Learning/ (all of it), index.md updates, log.md appends, per-folder index.md files.
Human owns: Private/Finance/, Projects/, Life/, raw/ (source selection), this CLAUDE.md schema, Archive/ (LLM may only add to it — auto-archive flagged stale content, never delete, never edit existing archived content).
LLM never modifies: Files in raw/ (except setting ingested: true), .obsidian/, .gitignore, anything already inside Archive/ (add-only).
On every write — MANDATORY, NO EXCEPTIONS:
- Append to
log.md:## [YYYY-MM-DD] action | description— do this LAST, after all other writes - Check if
index.mdneeds updating (new page → add entry + incrementpage_count) - Check if any synthesis pages need updating
Exemptions (no log required): writes to log.md itself, CLAUDE.md, raw/, Private/, Projects/, Life/.
Enforcement: .claude/hooks/log_enforcer.py blocks (exit code 2) any .md write outside the exempt paths that isn't followed by a log.md append — self-enforced by the LLM in response to the hook's reminder, not an automatic block on the write itself. Violation = incomplete task.