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

1. Quick wins (low risk, do now)

  • Delete empty folder: content/
  • Move ref/ files to root
  • Move clippings/ to root, add type: bookmark to frontmatter
  • Move works/ to root
  • Move misc/ content files to root (drop index.md)

2. Metadata + blog mechanism redesign

  • Confirm type: values and what each surfaces
  • Update blog/index.md List component to filter by type: post instead of dir="/post"
  • Decide how "recent changes" feed works (git date vs updated: field)
  • Write capture rule for AGENTS.md

3. Medium-risk moves

  • Move nonfiction/ to root — add redirects from /nonfiction/slug/slug
  • Move speaking/archive.md to root

4. Big lift — post/ folder

Options:

  • A. Keep /post/ folder — just change blog mechanism to type: post filter. Zero URL breakage. Clean separation of legacy from new.
  • B. Move to root — mass move + 620 bulk redirects. Cleaner long-term but high effort.

Recommendation: Option A first. Change the mechanism, leave files in place. Migrate individual posts to root over time as they're touched.

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)