Info Architecture Migration Plan

Implements the structure defined in /info-architecture-for-this-site.md.

Jobs to Be Done (JTBD)

Two audiences: self (personal knowledge base + retrieval) and general public (readers finding essays via search or sharing). Both matter; they pull in different directions.

J1: Fast capture — zero friction, zero decisions

"I have an idea / link / fragment / full essay. I want it saved immediately with no overhead."

  • Modes: desktop editor, Claude agent, copy-paste from web
  • Rule must be simple enough for Claude to follow without asking
  • No decision about type, folder, or status at capture time
  • Add metadata later, not now

J2: Public reading — polished essays surfaced for strangers

"Someone lands on the site. What should they see?"

  • Blog/essays feed = finished, intentional work only
  • Distinction from notes: polish and completeness, not topic or length
  • Notes are public too but not prominently surfaced — a reader who finds one should be fine, but they're not the shop window

J3: Personal retrieval — find my own stuff fast

"I wrote something about X six months ago. Where is it?"

  • Search is primary
  • Backlinks and related: frontmatter are secondary
  • Recent changes feed serves this too (what was I working on?)

J4: Recent changes — what's new or updated

"What have I added or changed lately?"

  • Serves both self (navigation, memory) and public (signal of activity)
  • Driven by git commit date or updated: frontmatter field — TBD

These jobs drive the tag/metadata decisions below.

Goal

Collapse false taxonomy folders into root. Result: flat structure with /logs and /projects as the only permanent special-purpose folders.

Metadata / Tagging Design

Folder location no longer signals type. Tags do instead — additive, composable, no forced exclusivity (same reason Wikipedia uses categories not folders).

Key frontmatter fields:

FieldPurpose
created:Date first written
updated:Drives "recent changes" feed
tags:List — see tag vocabulary below

Tag vocabulary

TagMeaning
postFinished, polished — appears on blog feed
stubFragment or WIP — don't surface prominently
bookmarkLink/clipping from elsewhere

Tags compose freely: a file can be [post, stub] while being revised, or [bookmark, post] if a clipping grew into an essay.

  • Blog page = filter tags contains post
  • Recent changes = sort by updated: or git commit date
  • No tag required at capture — add later

Capture rule (for humans and AI agents):

Create file at root. Filename = topic slug (no date). Add created: in frontmatter. Done. Tags can be added later.

Audit Findings

Folder inventory

FolderFilesNotes
post/666WordPress-era blog posts. 589 have wordpress: frontmatter. 620 have slug:. These are the bulk of public URL history.
ref/34Dated notes (no WordPress history). Safe to move to root.
nonfiction/9WordPress provenance (slug:, wordpress:). Need redirects before move.
works/5Book reviews/notes. No index file. No WordPress frontmatter apparent. Low risk.
clippings/6Article titles as filenames. No WordPress history. Move to root with type: bookmark.
research/10Nested deep: research/economics/papers/, research/economics/notes/, research/economics/teaching/. Treat as topic folder, keep as-is.
misc/4alternative-management.md, investing-reading-list.md, note-taking-software.md, index.md. Move to root.
writings/1Just index.md — nav link target, currently a stub page. Keep as nav stub or redesign.
speaking/2archive.md, index.md. Not in nav. Low priority.
blog/2index.md + all.md — these are Flowershow page templates, not content. index.md uses <List dir="/post" pageSize={30} />.
book/1index.md only. Nav link target. Keep.
content/0Empty. Delete.
papers/0 mdContains PDFs and other assets — holdovers from past. URLs may matter. Leave as-is, assess separately.

How the blog feed currently works

blog/index.md contains <List dir="/post" pageSize={30} /> — Flowershow MDX component that reads from /post/. Moving posts to root requires changing this to filter by type: post frontmatter instead. This is the key technical change.

/about, /now, /tao, /writings, /projects, /book, /blog, /newsletter, /contact

/writings and /blog are nav links. Both need to keep working after migration (either via redirect or kept as index stubs).

Redirect situation

  • post/ URLs are the biggest risk: 620 files with slugs, many with WordPress history. These live at /post/slug currently. Target after migration: /slug.
  • Redirects: mix of Flowershow config + Cloudflare. Scale is the constraint, not mechanism.
  • Existing redirect log exists — check before adding new ones.

Folders to Kill

FolderActionRisk
ref/Move to rootLow — no public URL history
nonfiction/Move to root + redirects from /nonfiction/slugMedium — WordPress provenance
works/Move to rootLow
clippings/Move to root, add type: bookmarkLow
misc/Move to root (minus index.md)Low
speaking/Assess; likely move archive.md to rootLow
content/Delete (empty)None
papers/Delete (empty)None
post/Big lift — keep folder but change blog mechanism to filter by type: post; OR mass-move + bulk redirectsHigh

Folders to Keep

FolderReason
logs/Correct structure, date = identity
projects/Correct structure
tao/Leave for now
wto/Large topic, size management
research/Deep topic nesting, keep as-is
about/Functional site section
book/Nav target
blog/Keep as nav stub; update List component to use type: post filter instead of dir="/post"
writings/Nav target — redesign or redirect

Redirects

  • Flowershow + Cloudflare (mix fine)
  • Check existing redirect log before adding
  • Add redirects before or simultaneously with file moves — never after
  • post/ is the big one: 620 potential redirects /post/slug/slug

Steps

Filename convention for moved files

Natural language, Wikipedia-style. When moving a file:

  • Rename to natural title if currently kebab: superintelligence-bostrom-2014.mdSuperintelligence.md
  • No type suffix: Anna Karenina.md not Anna Karenina Book.md
  • No date/author suffix: goes in frontmatter
  • Existing kebab files at root: leave as-is (not worth migrating)

1. Quick wins (low risk, do now)

  • Delete empty folder: content/ (was already gone)
  • Move ref/ files (34) to root
  • Move clippings/ (6) to root, add tags: [bookmark] to frontmatter
  • Move works/ (5) to root; renamed superintelligence-bostrom-2014.mdSuperintelligence.md
  • Move misc/ content files to root — lesson learned: misc/index.md had real content (aphorisms, fragments); restored as misc.md
  • Note: always check index.md files for real content before deleting

2. Metadata + blog mechanism redesign

  • Replace <List dir="/post"> in blog/index.md with "under construction, use search" notice
  • Update List component to filter by tags: [post] — blocked: Flowershow has no clean tag-filter listing yet. Revisit when available via obsidian-bases
  • Write capture rule for AGENTS.md
  • Recent changes feed — deferred, no good mechanism yet

3. Medium-risk moves

  • Move nonfiction/ (8 files) to root — redirects added to config.json
  • Create nonfiction.md index page at root so /nonfiction still resolves
  • speaking/ — leave as-is. Has proper custom landing page (index.md with video/logos/buttons). Functional site section, not false taxonomy. archive.md references a CSV that doesn't exist yet anyway.

4. Big lift — post/ folder — DEFERRED

620 files, 589 with WordPress provenance, all with public URL history. Cost of bulk redirect generation + verification outweighs benefit right now. Blog listing is already "under construction" so no urgency. Revisit when blog mechanism (tag-filter listing) is solved — at that point a scripted mass-move with redirect generation makes sense.

5. Cleanup

  • Update info-architecture-for-this-site.md if decisions changed
  • Verify site builds

Out of Scope (for now)

  • tao/ — leave as-is
  • research/ — deep topic structure, leave
  • wp-content/ — separate cleanup task

Risk Summary

ActionRisk
Delete empty foldersNone
Move ref/, clippings/, works/, misc/Low
Move nonfiction/Medium (redirects needed)
Redesign blog mechanismMedium (test build after)
Move post/ to rootHigh (bulk redirects, defer)