An interactive archive of 52 planning, productivity and cognitive-bias laws. Every law is explained in plain language, illustrated with a diagram, and turned into a short checklist you can actually run today.
Live: https://plan-archive.vercel.app · Stack: React 18 · TypeScript · Vite
- 52 laws across 5 categories — time & scheduling, goals & priorities, execution & habits, systems & projects, bias & organisations.
- Try it, don't just read it. Each law ships with 3–4 concrete checklist
items. Progress is stored in
localStorage, per law and in aggregate. - 18 hand-built SVG diagrams. No raster images: the illustrations scale to any size, take the category accent at render time, and cost about as much bandwidth as a single JPEG for all 52 cards.
- 17 languages in the UI, detected from the browser and overridable from the picker in the top-right. Arabic renders right-to-left.
- One layout, two shapes. Desktop gets a rail / canvas / inspector split; below 900px the rail becomes a chip strip and the inspector becomes a sheet.
npm install
npm run dev # http://localhost:5173
npm run build # type-check, then build to dist/
npm run preview # serve the production buildNode 18 or newer.
The repository is zero-config for Vercel — vercel.json pins the framework
preset and adds the SPA rewrite plus immutable caching on hashed assets.
- Push to GitHub.
- In Vercel, Add New → Project and import the repository.
- Accept the detected settings (
vite· buildnpm run build· outputdist). - Deploy.
Or from the CLI:
npx vercel --prodsrc/
├─ data/
│ ├─ laws.ts # language-neutral: id, category, diagram, attribution
│ └─ content/
│ ├─ en.ts # translatable: title, summary, body, checklist
│ ├─ ko.ts
│ └─ index.ts # locale resolution + English fallback
├─ i18n/
│ ├─ ui.ts # UI strings for 17 locales
│ └─ index.tsx # browser detection, persistence, <html lang/dir>
├─ components/
│ ├─ Visual.tsx # the 18 SVG diagrams
│ ├─ LawCard.tsx # a card on the canvas
│ ├─ Inspector.tsx # detail panel + checklist
│ ├─ Sidebar.tsx
│ └─ LanguageMenu.tsx
└─ App.tsx
The split between laws.ts and content/ is the important part: adding a
language never touches the catalogue, so a translation can never reorder,
duplicate or drop a law.
detectLocale() checks, in order: the ?lang= query parameter, the stored
choice, then navigator.languages. Matching runs most-specific first, so
zh-Hant-TW lands on zh-TW, pt-BR degrades to pt, and anything unknown
falls through to English.
Content resolution is separate and per-law: a locale bundle may be partial, and any law it is missing renders in English with a notice in the inspector. That means a translation can be merged as soon as it starts being useful.
UI only — add a LocaleMeta entry and a UiStrings block in
src/i18n/ui.ts. That's the whole change; law text falls back to English.
Full translation — add src/data/content/<locale>.ts exporting a
LocaleContent, then register it in BUNDLES in src/data/content/index.ts.
To bootstrap a draft:
ANTHROPIC_API_KEY=sk-... npm run translate -- jaThe script batches the English source through the Anthropic API and writes the file for you. Treat the output as a first draft — these laws have established names in most languages, and a wrong one is worse than leaving it in English.
- Append an entry to
LAWSinsrc/data/laws.tswith a category and one of the 18VisualIdvalues. - Add the matching entry to
src/data/content/en.ts, and to any other bundle you can write.
Nothing else needs to change — counts, filters and progress are all derived.
Keyboard-navigable throughout with visible focus rings, aria-selected on the
language list, a labelled progress bar in the checklist, Escape to close the
inspector, and prefers-reduced-motion respected. Colour is never the only
carrier of meaning — category accents are always paired with a text label.
Law summaries are original write-ups. Attribution for each law (author and year, where one is agreed) appears in the inspector.
MIT. See LICENSE.
기획·생산성·인지 편향과 관련된 52가지 법칙을 설명과 다이어그램, 그리고 바로 실행해 볼 수
있는 체크리스트로 정리한 사이트입니다. 브라우저 언어를 감지해 17개 언어 UI를 제공하며,
우측 상단에서 직접 바꿀 수도 있습니다. 진행률은 브라우저의 localStorage에만 저장됩니다.
npm install && npm run dev번역을 추가하려면 src/i18n/ui.ts에 UI 문자열을, src/data/content/에 본문 번역을
넣으면 됩니다. 본문은 로케일별로 부분 번역이 가능하며, 빠진 항목은 영어로 대체됩니다.