strategy ยท 2026-05-20 ยท dare.co.uk filing-system framework

Filesystem spine โ€” no spine, some spine, complete spine + the HTML sidecar question

A recurring issue Dan named today: filesystems that mix categories, statuses, entities, and events at the same hierarchy level. Three levels of spine + when HTML sidecars help / hurt. Generalized from this morning's insurance-claim folder audit; applicable to audrey-archive, vehicle receipts, client deliverables, anywhere file volume grows past ~50.

Continue this framework in claude.ai

TL;DR

The recurring issue Dan named today

Looking at Dan's 4TB drive insurance-claim folder this morning:

~/Drive4TB/insurance-claim/ No spine
  • Scans
  • Loan Depot
  • Payouts
  • PA Insurance
  • Missing Item Receipts
  • Excluded Property Contents
  • Status
  • Submitted Property Contents
  • Submissions
  • Contents
  • Shed Structure
11 folders. Each adds context the others don't share. Nothing nests.
~/Drive4TB/insurance/ Some spine
  • homeowners
  • liberty-mutual
  • claim_046414618
  • Scans
  • Loan Depot
  • Payouts
  • Contents (all 3 statuses still mixed)
  • Status
  • Shed Structure
Top-level nests cleanly. Inside each claim, the no-spine shape comes back.
~/Drive4TB/insurance/ Complete spine
  • homeowners
  • liberty-mutual
  • policy_H3V-281
  • claim_046414618_2021-07-29_storm
  • 00-index.md cockpit
  • 10-correspondence
  • 20-estimates
  • 30-invoices
  • 40-payouts
  • 50-contents
  • 60-structure
  • 80-loan-servicer
  • 99-inbox
Insurer โ†’ policy โ†’ per-claim. Numbered sections; statuses live in metadata.

The three levels of spine

Level 1 โ€” No spine

Flat list at the top level. Folders are a mix of categories, statuses, entities, events, and objects. Nothing nests; everything is one click from the root. Common signs:

Trade-offs. Fast to start. Familiar pattern (the Desktop "just dump it here" pattern at scale). Survives ~20 files; breaks past ~50. Future-you will not remember why you made those choices.

Level 2 โ€” Some spine

One or two levels of nesting around a clear top-level concept (insurer โ†’ policy, or year โ†’ month), but inside the nested folder the no-spine pattern re-emerges. Common signs:

Trade-offs. Better than no-spine because new top-level entries fit cleanly. But the second-level chaos compounds: every n-th claim repeats the same flat-list-of-disparate-things pattern, so reorganizing is Nร— the work.

Level 3 โ€” Complete spine

Every level of nesting answers a different conceptual question. Each folder name says "I am a kind of X" where X is consistent within its level. Common signs:

Trade-offs. Most work to design (~30 min for an insurance claim). Easiest to navigate, hardest to outgrow, supports tooling on top.

Eight principles for climbing to complete spine

  1. Numbered prefixes (10-, 20-, 30-...). Alphabetical = logical order. New categories slot in between existing ones (15- goes between 10- and 20-) without renaming everything.
  2. Per-event isolation. The same property can have multiple claims; mixing them is the most common future-pain. claim_<id>_<date>_<cause>/ as the unit of isolation.
  3. Category โ‰  status. "Submitted / Excluded / Missing" aren't categories of contents โ€” they're states. One contents/ directory; state in _state.json or filename suffix. Anything that's a STATE goes into metadata, not folder structure.
  4. Filename convention: <YYYY-MM-DD>_<vendor>_<purpose>.pdf. Sortable chronologically, scannable for "what is this."
  5. Inbox at the leaf. 99-inbox/ is where new scans land before being filed. The pipeline picks up from there.
  6. Auto-generated cockpit at each significant root. 00-index.md (or 00-cockpit.html) summarizes the claim โ€” totals, outstanding actions, deadlines. Regenerated from filesystem state + structured metadata.
  7. Entity folders where it makes sense. 30-invoices/tree-removal/, 80-loan-servicer/loan-depot/ โ€” group by the thing-being-paid-for or the party-being-dealt-with. "Loan Depot" deserves its own subfolder under 80-loan-servicer/, not a top-level slot competing with the claim itself.
  8. Status as file, not folder. If you have a folder called "Status", it's either a markdown file (70-status.md at the claim root) or it's metadata in a JSON sidecar. Status changes; folder names shouldn't.

The HTML sidecar question โ€” when does it help?

The bigger move beyond "complete spine" is layering a generated HTML cockpit on top of the filesystem. The pa.gf.cx claim-cockpit sketch is exactly this โ€” a per-claim landing page (00-index.html) generated from the filesystem state + JSON sidecar + analyst output, surfaced behind CF Access.

This is high-leverage but not free.

Pros

  • Cockpit, not file browser. "What do I do next" surfaces above "where is X."
  • Auto-regenerable. Re-run the renderer when filesystem changes; cockpit stays current without manual updates.
  • Surfaces what Finder can't: totals, deadlines, status, action sequences, outstanding amounts.
  • Mirrors the sidecar pattern. JSON-as-data + HTML-as-view is the same architectural shape as the ingest โ†’ render pipeline already shipping.
  • Multi-stakeholder share. Audrey, an adjuster, a contractor โ€” anyone you grant access โ€” sees the same authoritative view.
  • Searchable. Add Ask-Opus search box (Phase C of cockpit sketch) and the cockpit answers questions, not just shows files.
  • Editorial voice. The smart-advocate framing carries through; not a process-bureaucrat directory listing.

Cons

  • Two sources of truth risk. If filesystem and cockpit drift (last regenerate was a month ago), the cockpit silently misleads.
  • Maintenance cost. Adding a new category means updating the renderer alongside the filesystem.
  • Finder muscle memory. Browser โ‰  file picker; old habits resist routing through HTML.
  • One URL vs. many files. HTML cockpit lives at a single URL; the files themselves still live in directories. Knowing which to open when matters.
  • Browser dependency. Offline-on-a-plane recovery requires the source files anyway โ€” the cockpit becomes the secondary surface.
  • Premature on small collections. Below ~50 files, the renderer + style sheet is more work than just opening the folder.

The recommendation โ€” when sidecars help vs hurt

Use HTML sidecars when: (a) the file count is >~50, (b) the data is time-sensitive (deadlines exist), (c) multiple stakeholders need the same authoritative view, or (d) the cockpit would surface metrics the filesystem can't (totals, days-remaining, action-rank).

Skip HTML sidecars when: file count <20, single-user, low-stakes, all-evergreen content. A markdown 00-index.md is enough at this scale.

The rendering rule: only layer sidecars on complete-spine filesystems. Putting a cockpit on a no-spine tree just photographs the chaos in HTML; nothing useful comes through.

Where this applies beyond insurance

DomainLikely current spineMove
Insurance claims (today's case)No spineInsurer โ†’ policy โ†’ claim โ†’ numbered sections + cockpit at each claim root
Vehicle records (Honda HRX, Z665, Ardisam, Billy Goat โ€” already nested under codes.json)Some spineAlready partly there via pa/equipment/<slug>.html + receipts/. Lift to per-entity cockpits when service-log grows past ~20 entries.
audrey product archive (the 100s-of-documents signal)No spine, but high volume comingDesigner/collection/year/piece โ†’ receipts + photos + correspondence per piece. Cockpit per collection.
Property / mortgage docsNo spine likelyProperty โ†’ year โ†’ category (closings, refi, tax, insurance) โ†’ numbered sections
Client deliverables (dare consulting)Project-flat, no event-isolationClient โ†’ engagement (with date+phase) โ†’ numbered sections + a per-engagement cockpit
Personal finance / taxYear-flat (common)Year โ†’ entity (LLC vs personal) โ†’ category โ†’ month โ†’ docs. Cockpit at year-root.

Migration path โ€” for today's insurance claim

Concrete steps to climb from no-spine to complete-spine in ~30 minutes:

  1. Create the destination tree: ~/Drive4TB/insurance/homeowners/liberty-mutual/policy_H3V-281-240408-75/claim_046414618_2021-07-29_storm/
  2. Create the numbered sections: 10-correspondence, 20-estimates, 30-invoices/{tree-removal,electrician,dumpster,structural}, 40-payouts, 50-contents, 60-structure/{shed,fencing,kennel}, 70-photos, 80-loan-servicer/loan-depot, 99-inbox
  3. Move existing folders into slots:
    • Scans โ†’ 99-inbox/ (raw incoming; pipeline will consume from here)
    • Loan Depot โ†’ 80-loan-servicer/loan-depot/
    • Payouts โ†’ 40-payouts/
    • PA Insurance โ†’ this IS Liberty Mutual; rename to 00-policy-docs/ or merge into root
    • Missing + Submitted + Excluded Property Contents โ†’ all collapse into 50-contents/ with state in _state.json
    • Status โ†’ 70-status.md at the claim root
    • Submissions โ†’ if it's correspondence, into 10-correspondence/; if it's the same as Payouts, merge into 40-payouts/
    • Contents โ†’ 50-contents/
    • Shed Structure โ†’ 60-structure/shed/
  4. Generate the first 00-index.md from the existing claim sidecar (~/Code/home-projects/pa/home-insurance/claims/_bulk-source/2026-05-20-bulk-scan-19-pages.json) โ€” pulls insurer, total paid, outstanding amounts, deadlines, action ranking
  5. (Optional) Generate the HTML cockpit alongside 00-index.md if you want the pa.gf.cx surface to mirror the filesystem

The closing aphorism

A folder is a promise about what's inside. A no-spine filesystem is a promise broken with every new folder. A complete-spine filesystem promises the structure will absorb the next file. The cockpit on top is the receipt that says: I kept the promise.

dare.co.uk strategy note ยท 2026-05-20 ยท filesystem-spine framework ยท generated by Claude with Dan Triggered by Dan's 4TB insurance-claim folder audit. Generalizable to insurance / vehicles / audrey-archive / property-docs / client-engagements / personal-finance. ~50+ files = complete-spine + cockpit; below = markdown index is enough.