Start the rebuild: note schema, vault kit and data migration

Phase 1 of the functional design plan.

- Move the old site into legacy/, unchanged, for reference. It still
  builds from there until cutover.
- Add packages/schema: the one definition of all 20 note types, with
  field titles and descriptions, note and vault checks, and JSON Schema
  export so later editing tools and the MCP server share it.
- Add vault-kit: Obsidian templates generated from the schema, and the
  Site guide for 24.01_PersonalWebsite.
- Add tools/migrate: turns the legacy JSON, collections, store data and
  page text into 545 Site folder notes and 84 images, and checks the
  result with the schema.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aSbo2D1qP8cMFQCykf7kx
This commit is contained in:
Claude
2026-10-11 18:40:55 +00:00
parent 4ded4b277b
commit a2f723ca2d
324 changed files with 11538 additions and 7556 deletions
@@ -0,0 +1,14 @@
---
type: "board-game"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
bggId:
blurb:
howItPlays: [] # optional. Like engine building, social deduction, co-op.
owned: true # optional
wantToPlay: false # optional
lastPlayed: # optional
---
<!-- Optional longer thoughts. -->
@@ -0,0 +1,13 @@
---
type: "campaign"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
system: # optional. Leave out for a playtest of an unreleased game.
status: # one of: active, playtest, paused, finished
schedule: # optional. Like Thursdays, every other week.
platform: # optional. Like Foundry VTT.
blurb: # optional
---
<!-- Optional campaign notes for the page. -->
@@ -0,0 +1,9 @@
---
type: "card-game"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
stance: # Like Main event, Collecting, Getting into.
blurb: # optional
order: # optional
---
@@ -0,0 +1,13 @@
---
type: "craft"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
status: # one of: Practicing, Learning, Getting into, Paused
blurb: # optional
station: # optional
tools: [] # optional
order: # optional
---
<!-- What you make with it, for the craft page. -->
@@ -0,0 +1,11 @@
---
type: "deck"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
game:
format: # optional. Like Commander.
archidektId: # optional
listUrl: # optional. For games not on Archidekt.
take: # optional. One line on the deck.
---
@@ -0,0 +1,16 @@
---
type: "experience"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
company:
role:
start:
end: # optional. Leave out while it is your current role.
location: # optional
focus: # optional. One line under the role.
bullets: []
tech: [] # optional
---
<!-- Optional longer notes; the resume uses the bullets. -->
@@ -0,0 +1,18 @@
---
type: "library-item"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
medium: # one of: book, light novel, webnovel, manga, manhwa, video game, anime, TV, movie
state: # one of: now, up next, played, finished, caught up, dropped
creator: # optional
group: # optional. Where it sits in the list, like Cosmere, Marvel Cinematic Universe or Prestige Drama.
year: # optional
platform: # optional. Video games only, like Steam or PlayStation 5.
verdict: # optional. A short review. No score.
note: # optional. Context, like where you are or how you came to it.
progress: # optional. Like 16/18 volumes. Synced from PersonalReader when linked.
anilistId: # optional. Links the item to PersonalReader's progress.
---
<!-- Optional longer thoughts. -->
@@ -0,0 +1,12 @@
---
type: "make"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
craft:
date: "{{date:YYYY-MM-DD}}" # optional
photos: [] # optional
blurb: # optional
---
<!-- Optional story of the make. -->
@@ -0,0 +1,10 @@
---
type: "page"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
page: # The page address this text belongs to, like /about.
lede: # optional. The one line under the page title.
---
<!-- The page's introduction. -->
@@ -0,0 +1,17 @@
---
type: "post"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
date: "{{date:YYYY-MM-DD}}"
topic: # one of: Making, Tabletop, Library, Work and tech, Life
postType: "article" # optional. one of: article, build log, case study
summary: # One or two sentences for lists and link previews.
pinned: false # optional. Takes the top slot on the Blog.
employer: # optional. Case studies only. Leave out for personal projects.
role: # optional. Case studies only.
period: # optional. Case studies only, like 2021 to now.
tech: [] # optional
---
<!-- The post itself. -->
@@ -0,0 +1,18 @@
---
type: "product-line"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
category: # one of: Tabletop, Paper, Leather
mode: # one of: made to order, in stock
channel: # one of: here, Etsy, Patiun.com, coming soon
channelUrl: # optional. For Etsy or Patiun.com lines.
summary:
icon: # optional
order: # optional
slots: # optional. Made to order lines only.
quantity: # optional. In stock lines only.
priceTiers: []
---
<!-- Optional longer description for the product page. -->
@@ -0,0 +1,9 @@
---
type: "station"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
where: # Like the work counter and filament wall.
goodFor: # optional
order:
---
@@ -0,0 +1,11 @@
---
type: "status"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
kind: # One of the kinds listed in Now/_kinds.
date: "{{date:YYYY-MM-DD}}"
subject: # optional. The note this status is about, if there is one.
note: # optional
pinned: false # optional
---
@@ -0,0 +1,9 @@
---
type: "tabletop-system"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
state: # one of: running, played, want to run, want to play, want to try
blurb:
order: # optional
---
@@ -0,0 +1,9 @@
---
type: "tool"
title: "{{title}}"
publish: false # Only notes set to true appear on the site.
created: "{{date:YYYY-MM-DD}}" # optional
kind: # one of: printer, cutter, casting, finishing, material, other
station: # optional
blurb: # optional
---