Back to Notes

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.

DirectoryPurposePriority
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 foldersHighest — 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 linksPersonal
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).

ItemWhat 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.mdCompressed 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.md files
  • 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":

  1. Read source file
  2. Discuss key takeaways with user
  3. Write summary page in Interview Prep/ or Learning/ as appropriate (cross-domain → a synthesis page, e.g. Learning/Tech Stack Overview.md)
  4. Update relevant existing pages (add cross-refs, update synthesis pages)
  5. Set ingested: true in source frontmatter
  6. Update index.md — add new page, increment page_count
  7. 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:

  1. Read index.md first — find relevant pages
  2. Read those pages
  3. Synthesize answer with [[page]] citations
  4. If answer is valuable (comparison, analysis, new connection) → file it as new wiki page
  5. Update index.md if new page created
  6. 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)

DirectoryOwnerPurpose
raw/Human adds, LLM readsImmutable source documents
raw/assets/Auto (Obsidian)Downloaded images from clipped articles
Interview Prep/LLMContent, Behavioral & Past Projects, Job Switch, Monthly Plan, Coach.md, Main Plan.md, Dashboard.md, Resume, Weekly/Daily Tracker. Highest priority.
Learning/LLMGo, Python, SQL, AWS, FrontEnd, AI & ML — general reference notes + cross-domain synthesis pages
Private/Finance/HumanInvestment trackers, bank statements — self-documented in Private/Finance/README.md
Projects/HumanPersonal side projects
Life/HumanGoals, 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.

PageWhen to update
Interview Prep/Coach.mdNew DSA pattern, SD problem, weekly review done, behavioral stories refined
Learning/Tech Stack Overview.mdNew skill added, cert achieved, project shipped
Learning/Concurrency Deep Dive.mdNew Go/Python concurrency notes
Learning/LLM & AI Stack.mdNew 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:

  1. Append to log.md: ## [YYYY-MM-DD] action | description — do this LAST, after all other writes
  2. Check if index.md needs updating (new page → add entry + increment page_count)
  3. 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.