{
  "version": 1,
  "site": "https://twocents.page",
  "sections": [
    {
      "id": "paths",
      "title": "Learning paths",
      "blurb": "Each course is a stack of books turned into lessons and quizzes you do at your own pace. Your progress stays in your browser.",
      "url": "https://twocents.page/paths/"
    },
    {
      "id": "labs",
      "title": "Labs",
      "blurb": "Experiments. Some are finished and some are half-baked. Each card says which, and you can fork any of them.",
      "url": "https://twocents.page/labs/"
    },
    {
      "id": "skills",
      "title": "Skills and tools",
      "blurb": "Tools I built for this site, and skills you can add to your own agent. Each one installs in one line.",
      "url": "https://twocents.page/skills/"
    }
  ],
  "items": [
    {
      "slug": "founding-school",
      "kind": "static",
      "title": "Founding School",
      "description": "13 books on how people learn and how schools get built, turned into a self-paced course. You finish by designing a school, with every claim tagged as evidence, hypothesis or value.",
      "url": "https://twocents.page/paths/founding-school/",
      "section": "paths",
      "series": "learning-paths",
      "status": "playable",
      "take": {
        "kind": "download",
        "command": "curl -fsSL https://twocents.page/paths/founding-school/ -o founding-school.html"
      },
      "published": "2026-10-03",
      "updated": "2026-10-03",
      "featured": 1,
      "meta": {
        "modules": 11,
        "hours": 16
      },
      "builtFrom": {
        "repo": "https://github.com/kbhardwaj/scratch",
        "branch": "claude/education-institution-design-hucfay",
        "skill": ".claude/skills/curriculum-designer",
        "command": "python3 .claude/skills/curriculum-designer/app/build.py <course-dir> --standalone",
        "path": "school-design-course"
      }
    },
    {
      "slug": "games-and-norms",
      "kind": "static",
      "title": "Games and Norms",
      "description": "11 books on why people cooperate and what keeps groups working, turned into a self-paced course. You finish by writing a cooperation plan for a group you're in.",
      "url": "https://twocents.page/paths/games-and-norms/",
      "section": "paths",
      "series": "learning-paths",
      "status": "playable",
      "take": {
        "kind": "download",
        "command": "curl -fsSL https://twocents.page/paths/games-and-norms/ -o games-and-norms.html"
      },
      "published": "2026-10-03",
      "updated": "2026-10-03",
      "featured": 2,
      "meta": {
        "modules": 12,
        "hours": 15
      },
      "builtFrom": {
        "repo": "https://github.com/kbhardwaj/scratch",
        "branch": "claude/education-institution-design-hucfay",
        "skill": ".claude/skills/curriculum-designer",
        "command": "python3 .claude/skills/curriculum-designer/app/build.py <course-dir> --standalone",
        "path": "games-and-norms-course"
      }
    },
    {
      "slug": "curriculum-designer",
      "kind": "static",
      "title": "curriculum-designer",
      "description": "An agent skill. Give it a topic or a reading list and it writes a self-paced course, with a question to try before each lesson, quizzes that show where you went wrong, and review cards. It made both courses on this site.",
      "url": "https://twocents.page/skills/curriculum-designer/",
      "section": "skills",
      "series": "agent-skills",
      "status": "playable",
      "take": {
        "kind": "install",
        "command": "claude plugin marketplace add kbhardwaj/curriculum-designer && claude plugin install curriculum-designer@kbhardwaj"
      },
      "published": "2026-10-03",
      "updated": "2026-10-03",
      "featured": 9,
      "builtFrom": {
        "repo": "https://github.com/kbhardwaj/curriculum-designer",
        "branch": "main",
        "path": "skills/curriculum-designer"
      }
    },
    {
      "slug": "bayes",
      "kind": "draft",
      "title": "Bayes & base rates",
      "description": "You tested positive. How worried should you be? Count 1,000 people and see why a 90% accurate test doesn't mean a 90% chance you're sick.",
      "url": "https://twocents.page/p/bayes/",
      "section": "labs",
      "series": "truth-seeking",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-bayes"
      },
      "published": "2026-07-18",
      "updated": "2026-07-18",
      "featured": 3,
      "review": "https://twocents.page/r/p-bayes",
      "pages": []
    },
    {
      "slug": "survivorship-bias",
      "kind": "draft",
      "title": "Where would you armor the bomber?",
      "description": "Abraham Wald's bomber problem as a puzzle. Place armor on the damage map, then see why the holes you can see are the ones that don't matter.",
      "url": "https://twocents.page/p/survivorship-bias/",
      "section": "labs",
      "series": "truth-seeking",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-survivorship-bias"
      },
      "published": "2026-07-18",
      "updated": "2026-07-18",
      "featured": 5,
      "review": "https://twocents.page/r/p-survivorship-bias",
      "pages": []
    },
    {
      "slug": "mom-test",
      "kind": "draft",
      "title": "Why customers lie in interviews",
      "description": "Five interview questions that get you polite lies, and what to ask instead. Based on Rob Fitzpatrick's The Mom Test: ask about their life instead of your idea.",
      "url": "https://twocents.page/p/mom-test/",
      "section": "labs",
      "series": "truth-seeking",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-mom-test"
      },
      "published": "2026-07-18",
      "updated": "2026-07-18",
      "review": "https://twocents.page/r/p-mom-test",
      "pages": []
    },
    {
      "slug": "idea-autopsy",
      "kind": "draft",
      "title": "Try to kill your startup idea",
      "description": "A template that makes you do the killing. Score each assumption by how bad it would be if wrong and how little proof you have, then test the riskiest first.",
      "url": "https://twocents.page/p/idea-autopsy/",
      "section": "labs",
      "series": "truth-seeking",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-idea-autopsy"
      },
      "published": "2026-07-18",
      "updated": "2026-07-18",
      "tags": [
        "writing"
      ],
      "review": "https://twocents.page/r/p-idea-autopsy",
      "pages": []
    },
    {
      "slug": "preference-falsification",
      "kind": "draft",
      "title": "When everyone pretends to agree",
      "description": "A crowd simulator based on Granovetter and Kuran. Watch a belief that everyone privately rejects survive, because everyone waits for someone else to speak first.",
      "url": "https://twocents.page/p/preference-falsification/",
      "section": "labs",
      "series": "truth-seeking",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-preference-falsification"
      },
      "published": "2026-07-18",
      "updated": "2026-07-18",
      "review": "https://twocents.page/r/p-preference-falsification",
      "pages": []
    },
    {
      "slug": "distribution-plays",
      "kind": "draft",
      "title": "Seven ways to get seen without followers",
      "description": "Seven ways to get a product seen without an audience, from Melvin Luu's essay: MCP servers, AI answer engines, free tools, programmatic SEO, shareable artifacts, buying a newsletter and affiliates.",
      "url": "https://twocents.page/p/distribution-plays/",
      "section": "labs",
      "series": "distribution",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-distribution-plays"
      },
      "published": "2026-07-18",
      "updated": "2026-07-18",
      "tags": [
        "writing"
      ],
      "review": "https://twocents.page/r/p-distribution-plays",
      "pages": [
        "https://twocents.page/p/distribution-plays/aeo",
        "https://twocents.page/p/distribution-plays/affiliates",
        "https://twocents.page/p/distribution-plays/buy-newsletter",
        "https://twocents.page/p/distribution-plays/free-tools",
        "https://twocents.page/p/distribution-plays/mcp",
        "https://twocents.page/p/distribution-plays/pseo",
        "https://twocents.page/p/distribution-plays/shareable-artifacts"
      ]
    },
    {
      "slug": "schelling-segregation",
      "kind": "draft",
      "title": "How a city splits up when nobody wants it to",
      "description": "Schelling's segregation model. Everyone is happy to live as a minority on their block, and the city still splits up. Move one slider and find the tipping point.",
      "url": "https://twocents.page/p/schelling-segregation/",
      "section": "labs",
      "series": "complex-systems",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-schelling-segregation"
      },
      "published": "2026-07-22",
      "updated": "2026-07-22",
      "review": "https://twocents.page/r/p-schelling-segregation",
      "pages": []
    },
    {
      "slug": "yard-sale-model",
      "kind": "draft",
      "title": "A fair game that ends with a few people owning everything",
      "description": "The yard-sale model of wealth. 100 households make fair coin-flip trades, and a few end up owning everything every time. Turn on a 2% tax and a middle class appears.",
      "url": "https://twocents.page/p/yard-sale-model/",
      "section": "labs",
      "series": "complex-systems",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-yard-sale-model"
      },
      "published": "2026-07-22",
      "updated": "2026-07-22",
      "featured": 4,
      "review": "https://twocents.page/r/p-yard-sale-model",
      "pages": []
    },
    {
      "slug": "build-a-link-in-bio",
      "kind": "draft",
      "title": "Build a link-in-bio page",
      "description": "One evening with your AI agent. A single-file plan, four prompts that change as you pick features, and the mistakes agents tend to make.",
      "url": "https://twocents.page/p/build-a-link-in-bio/",
      "section": "labs",
      "series": "build-plans",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-build-a-link-in-bio"
      },
      "published": "2026-07-22",
      "updated": "2026-07-22",
      "review": "https://twocents.page/r/p-build-a-link-in-bio",
      "pages": []
    },
    {
      "slug": "build-a-habit-tracker",
      "kind": "draft",
      "title": "Build a habit tracker",
      "description": "Build a habit tracker with your AI agent. A single-file plan that saves to the browser, step-by-step prompts, and a fix for the midnight time zone bug before your agent writes it.",
      "url": "https://twocents.page/p/build-a-habit-tracker/",
      "section": "labs",
      "series": "build-plans",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-build-a-habit-tracker"
      },
      "published": "2026-07-22",
      "updated": "2026-07-22",
      "featured": 7,
      "review": "https://twocents.page/r/p-build-a-habit-tracker",
      "pages": []
    },
    {
      "slug": "build-a-waitlist-page",
      "kind": "draft",
      "title": "Build a waitlist page",
      "description": "Build a waitlist page with your AI agent in an evening. The promise, proof and ask above the fold, a form backend you don't have to build, step-by-step prompts, and a stranger test for your pitch.",
      "url": "https://twocents.page/p/build-a-waitlist-page/",
      "section": "labs",
      "series": "build-plans",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-build-a-waitlist-page"
      },
      "published": "2026-07-22",
      "updated": "2026-07-22",
      "review": "https://twocents.page/r/p-build-a-waitlist-page",
      "pages": []
    },
    {
      "slug": "oh-my-pi-model-routing",
      "kind": "draft",
      "title": "oh-my-pi vs Claude Code: which model for which job",
      "description": "oh-my-pi (omp) is a fork of pi and an alternative to Claude Code. Sign in with subscriptions you already pay for and send cheap work to cheap models.",
      "url": "https://twocents.page/p/oh-my-pi-model-routing/",
      "section": "labs",
      "series": "agent-stacks",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-oh-my-pi-model-routing"
      },
      "published": "2026-07-23",
      "updated": "2026-07-23",
      "review": "https://twocents.page/r/p-oh-my-pi-model-routing",
      "pages": [
        "https://twocents.page/p/oh-my-pi-model-routing/prompts",
        "https://twocents.page/p/oh-my-pi-model-routing/routing",
        "https://twocents.page/p/oh-my-pi-model-routing/setup",
        "https://twocents.page/p/oh-my-pi-model-routing/traps",
        "https://twocents.page/p/oh-my-pi-model-routing/what-you-get"
      ]
    },
    {
      "slug": "hermes-community-manager",
      "kind": "draft",
      "title": "Hermes as a community manager",
      "description": "A build plan for running one Hermes agent across Discord, Slack and WhatsApp as your community manager: markdown memory, agent-written skills for member notes, a rewards job you approve, and the auth traps marked.",
      "url": "https://twocents.page/p/hermes-community-manager/",
      "section": "labs",
      "series": "agent-stacks",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-hermes-community-manager"
      },
      "published": "2026-07-23",
      "updated": "2026-07-23",
      "review": "https://twocents.page/r/p-hermes-community-manager",
      "pages": [
        "https://twocents.page/p/hermes-community-manager/architecture",
        "https://twocents.page/p/hermes-community-manager/prompts",
        "https://twocents.page/p/hermes-community-manager/setup",
        "https://twocents.page/p/hermes-community-manager/traps",
        "https://twocents.page/p/hermes-community-manager/what-you-get"
      ]
    },
    {
      "slug": "hermes-research-intern",
      "kind": "draft",
      "title": "Hermes as a research intern",
      "description": "A build plan for a Hermes research intern that sends you a report in Telegram every morning. It writes its own scrapers, runs them in a locked-down Docker sandbox, and remembers what it already told you.",
      "url": "https://twocents.page/p/hermes-research-intern/",
      "section": "labs",
      "series": "agent-stacks",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-hermes-research-intern"
      },
      "published": "2026-07-23",
      "updated": "2026-07-23",
      "review": "https://twocents.page/r/p-hermes-research-intern",
      "pages": [
        "https://twocents.page/p/hermes-research-intern/architecture",
        "https://twocents.page/p/hermes-research-intern/product-spec",
        "https://twocents.page/p/hermes-research-intern/prompts",
        "https://twocents.page/p/hermes-research-intern/setup",
        "https://twocents.page/p/hermes-research-intern/traps",
        "https://twocents.page/p/hermes-research-intern/what-you-get"
      ]
    },
    {
      "slug": "hermes-cicd-healer",
      "kind": "draft",
      "title": "Hermes fixes failed CI runs",
      "description": "A build plan for a Hermes agent that fixes failed CI runs. A GitHub webhook hands it the failure, it reproduces it in a Docker sandbox, fixes the code, reruns the tests and opens a PR for your team to review.",
      "url": "https://twocents.page/p/hermes-cicd-healer/",
      "section": "labs",
      "series": "agent-stacks",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-hermes-cicd-healer"
      },
      "published": "2026-07-23",
      "updated": "2026-07-23",
      "featured": 8,
      "review": "https://twocents.page/r/p-hermes-cicd-healer",
      "pages": [
        "https://twocents.page/p/hermes-cicd-healer/architecture",
        "https://twocents.page/p/hermes-cicd-healer/product-spec",
        "https://twocents.page/p/hermes-cicd-healer/prompts",
        "https://twocents.page/p/hermes-cicd-healer/setup",
        "https://twocents.page/p/hermes-cicd-healer/traps",
        "https://twocents.page/p/hermes-cicd-healer/what-you-get"
      ]
    },
    {
      "slug": "hermes-news-pipeline",
      "kind": "draft",
      "title": "Hermes turns news into drafts",
      "description": "A build plan for a Hermes news desk. It watches the web and X on a schedule, splits research, summaries and fact-checks across subagents, and sends drafts to Telegram. A person still presses publish.",
      "url": "https://twocents.page/p/hermes-news-pipeline/",
      "section": "labs",
      "series": "agent-stacks",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-hermes-news-pipeline"
      },
      "published": "2026-07-23",
      "updated": "2026-07-23",
      "review": "https://twocents.page/r/p-hermes-news-pipeline",
      "pages": [
        "https://twocents.page/p/hermes-news-pipeline/architecture",
        "https://twocents.page/p/hermes-news-pipeline/product-spec",
        "https://twocents.page/p/hermes-news-pipeline/prompts",
        "https://twocents.page/p/hermes-news-pipeline/setup",
        "https://twocents.page/p/hermes-news-pipeline/traps",
        "https://twocents.page/p/hermes-news-pipeline/what-you-get"
      ]
    },
    {
      "slug": "hermes-smart-home",
      "kind": "draft",
      "title": "Hermes runs Home Assistant",
      "description": "A build plan for running Hermes on top of Home Assistant: the four real HA tools, event watching with cooldowns, and a nightly job that sums up your household's patterns in a 2,200-character memory.",
      "url": "https://twocents.page/p/hermes-smart-home/",
      "section": "labs",
      "series": "agent-stacks",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-hermes-smart-home"
      },
      "published": "2026-07-23",
      "updated": "2026-07-23",
      "review": "https://twocents.page/r/p-hermes-smart-home",
      "pages": [
        "https://twocents.page/p/hermes-smart-home/architecture",
        "https://twocents.page/p/hermes-smart-home/product-spec",
        "https://twocents.page/p/hermes-smart-home/prompts",
        "https://twocents.page/p/hermes-smart-home/setup",
        "https://twocents.page/p/hermes-smart-home/traps",
        "https://twocents.page/p/hermes-smart-home/what-you-get"
      ]
    },
    {
      "slug": "hermes-family-os",
      "kind": "draft",
      "title": "Hermes as a family assistant",
      "description": "A build plan for one Hermes install the whole household talks to: the family group chat as the front door, a profile per person, scheduling that sorts out clashes, a shared grocery list and Home Assistant.",
      "url": "https://twocents.page/p/hermes-family-os/",
      "section": "labs",
      "series": "agent-stacks",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-hermes-family-os"
      },
      "published": "2026-07-23",
      "updated": "2026-07-23",
      "review": "https://twocents.page/r/p-hermes-family-os",
      "pages": [
        "https://twocents.page/p/hermes-family-os/architecture",
        "https://twocents.page/p/hermes-family-os/product-spec",
        "https://twocents.page/p/hermes-family-os/prompts",
        "https://twocents.page/p/hermes-family-os/setup",
        "https://twocents.page/p/hermes-family-os/traps",
        "https://twocents.page/p/hermes-family-os/what-you-get"
      ]
    },
    {
      "slug": "get-feedback-on-ai-generated-page",
      "kind": "draft",
      "title": "How do I get human feedback on an AI-generated web page?",
      "description": "How to get feedback on a page an AI built: share a live link, let people pin notes on the exact spot, and hand the notes to your agent. No Figma and no login.",
      "url": "https://twocents.page/p/get-feedback-on-ai-generated-page/",
      "section": "skills",
      "series": "review-loop",
      "status": "playable",
      "take": {
        "kind": "install",
        "command": "claude mcp add --transport http twocents https://twocents.page/mcp"
      },
      "published": "2026-07-25",
      "updated": "2026-07-25",
      "review": "https://twocents.page/r/p-get-feedback-on-ai-generated-page",
      "pages": []
    },
    {
      "slug": "design-feedback-without-figma",
      "kind": "draft",
      "title": "How to get design feedback without Figma",
      "description": "How to get design feedback without Figma: review the page where it lives. A picker to choose the right method, and why your least technical reviewer catches the most.",
      "url": "https://twocents.page/p/design-feedback-without-figma/",
      "section": "skills",
      "series": "review-loop",
      "status": "playable",
      "take": {
        "kind": "install",
        "command": "claude mcp add --transport http twocents https://twocents.page/mcp"
      },
      "published": "2026-07-25",
      "updated": "2026-07-25",
      "review": "https://twocents.page/r/p-design-feedback-without-figma",
      "pages": []
    },
    {
      "slug": "share-a-prototype-with-a-client",
      "kind": "draft",
      "title": "How to share a prototype with a client for comments",
      "description": "How to get a client's comments on a prototype: send a live link, ask them to pin notes instead of writing an email, and turn a vague reaction into a list of fixes. Includes a message you can send.",
      "url": "https://twocents.page/p/share-a-prototype-with-a-client/",
      "section": "skills",
      "series": "review-loop",
      "status": "playable",
      "take": {
        "kind": "install",
        "command": "claude mcp add --transport http twocents https://twocents.page/mcp"
      },
      "published": "2026-07-25",
      "updated": "2026-07-25",
      "review": "https://twocents.page/r/p-share-a-prototype-with-a-client",
      "pages": []
    },
    {
      "slug": "review-a-landing-page-before-launch",
      "kind": "draft",
      "title": "How to review a landing page before you launch it",
      "description": "How to check a landing page before launch: a checklist for the obvious misses, then the one check you can't do yourself, a stranger's first look.",
      "url": "https://twocents.page/p/review-a-landing-page-before-launch/",
      "section": "skills",
      "series": "review-loop",
      "status": "playable",
      "take": {
        "kind": "install",
        "command": "claude mcp add --transport http twocents https://twocents.page/mcp"
      },
      "published": "2026-07-25",
      "updated": "2026-07-25",
      "review": "https://twocents.page/r/p-review-a-landing-page-before-launch",
      "pages": []
    },
    {
      "slug": "review-ai-generated-code-before-shipping",
      "kind": "draft",
      "title": "How to review AI-generated code before you ship it",
      "description": "How to review AI-written code before you ship it: made-up APIs, unstated assumptions, missing security and tests that check nothing. Plus the user-facing review that code review misses.",
      "url": "https://twocents.page/p/review-ai-generated-code-before-shipping/",
      "section": "skills",
      "series": "review-loop",
      "status": "playable",
      "take": {
        "kind": "install",
        "command": "claude mcp add --transport http twocents https://twocents.page/mcp"
      },
      "published": "2026-07-25",
      "updated": "2026-07-25",
      "review": "https://twocents.page/r/p-review-ai-generated-code-before-shipping",
      "pages": []
    },
    {
      "slug": "build-an-invoice-generator",
      "kind": "draft",
      "title": "Build an invoice generator",
      "description": "Build an invoice generator with your AI agent in one evening. One file, no signup, money stored in whole cents, the browser's print to PDF, and the rounding and print-layout mistakes agents make.",
      "url": "https://twocents.page/p/build-an-invoice-generator/",
      "section": "labs",
      "series": "build-plans",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-build-an-invoice-generator"
      },
      "published": "2026-07-25",
      "updated": "2026-07-25",
      "review": "https://twocents.page/r/p-build-an-invoice-generator",
      "pages": []
    },
    {
      "slug": "build-an-expense-splitter",
      "kind": "draft",
      "title": "Build an expense splitter",
      "description": "Build an expense splitter with your AI agent. One file that settles up in the fewest payments, keeps money in whole cents, and avoids the lost-cent and who-was-there bugs.",
      "url": "https://twocents.page/p/build-an-expense-splitter/",
      "section": "labs",
      "series": "build-plans",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-build-an-expense-splitter"
      },
      "published": "2026-07-25",
      "updated": "2026-07-25",
      "review": "https://twocents.page/r/p-build-an-expense-splitter",
      "pages": []
    },
    {
      "slug": "build-a-pomodoro-timer",
      "kind": "draft",
      "title": "Build a pomodoro timer",
      "description": "Build a pomodoro timer that keeps time, with your AI agent. One file that counts down to a fixed end time, keeps going in a background tab, and asks before it makes a sound.",
      "url": "https://twocents.page/p/build-a-pomodoro-timer/",
      "section": "labs",
      "series": "build-plans",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-build-a-pomodoro-timer"
      },
      "published": "2026-07-25",
      "updated": "2026-07-25",
      "review": "https://twocents.page/r/p-build-a-pomodoro-timer",
      "pages": []
    },
    {
      "slug": "build-a-flashcards-app",
      "kind": "draft",
      "title": "Build a flashcards app",
      "description": "Build a flashcards app with your AI agent. Spaced repetition with Leitner boxes in one file, paste-in decks, keyboard review, saved progress, and the mistakes agents make, marked.",
      "url": "https://twocents.page/p/build-a-flashcards-app/",
      "section": "labs",
      "series": "build-plans",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-build-a-flashcards-app"
      },
      "published": "2026-07-25",
      "updated": "2026-07-25",
      "review": "https://twocents.page/r/p-build-a-flashcards-app",
      "pages": []
    },
    {
      "slug": "build-a-local-business-page",
      "kind": "draft",
      "title": "Build a local-business page",
      "description": "Build a one-page site for a local business with your AI agent. Mobile first, with the search details agents skip: business schema, consistent name and address, tap to call and a plain directions link.",
      "url": "https://twocents.page/p/build-a-local-business-page/",
      "section": "labs",
      "series": "build-plans",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-build-a-local-business-page"
      },
      "published": "2026-07-25",
      "updated": "2026-07-25",
      "review": "https://twocents.page/r/p-build-a-local-business-page",
      "pages": []
    },
    {
      "slug": "how-tokenization-works",
      "kind": "draft",
      "title": "How tokenization works",
      "description": "How tokenizers split text. Train a small byte-pair encoder with a slider, watch letters merge into tokens, and see why a model can't count the r's in 'strawberry' and what tokens do to your bill.",
      "url": "https://twocents.page/p/how-tokenization-works/",
      "section": "labs",
      "series": "under-the-hood",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-how-tokenization-works"
      },
      "published": "2026-07-26",
      "updated": "2026-07-26",
      "featured": 6,
      "review": "https://twocents.page/r/p-how-tokenization-works",
      "pages": []
    },
    {
      "slug": "how-vector-search-works",
      "kind": "draft",
      "title": "How vector search works",
      "description": "How vector search finds close matches. Drop a query and watch the search hop across a graph to the answer in a few steps, then watch it get stuck when the graph is too sparse.",
      "url": "https://twocents.page/p/how-vector-search-works/",
      "section": "labs",
      "series": "under-the-hood",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-how-vector-search-works"
      },
      "published": "2026-07-26",
      "updated": "2026-07-26",
      "review": "https://twocents.page/r/p-how-vector-search-works",
      "pages": []
    },
    {
      "slug": "how-crdts-work",
      "kind": "draft",
      "title": "How CRDTs work",
      "description": "How CRDTs merge edits. Change a shared list on two offline copies, sync them, and watch them agree with no conflict. A small observed-remove set shows why adding wins.",
      "url": "https://twocents.page/p/how-crdts-work/",
      "section": "labs",
      "series": "under-the-hood",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-how-crdts-work"
      },
      "published": "2026-07-26",
      "updated": "2026-07-26",
      "review": "https://twocents.page/r/p-how-crdts-work",
      "pages": []
    },
    {
      "slug": "what-is-a-software-factory",
      "kind": "draft",
      "title": "What is a software factory?",
      "description": "What people mean by a software factory in 2026: the four parts (intake, orchestrator, execution, feedback) to tap through, what the human still does, and how far off full autonomy is.",
      "url": "https://twocents.page/p/what-is-a-software-factory/",
      "section": "labs",
      "series": "software-factory",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-what-is-a-software-factory"
      },
      "published": "2026-07-26",
      "updated": "2026-07-26",
      "review": "https://twocents.page/r/p-what-is-a-software-factory",
      "pages": []
    },
    {
      "slug": "code-review-is-the-bottleneck",
      "kind": "draft",
      "title": "Code review is the slow part",
      "description": "Why code review is the slow part of a software factory. A simulator shows code piling up as you add agents, because you can only ship what someone has checked. Then, how to speed up review.",
      "url": "https://twocents.page/p/code-review-is-the-bottleneck/",
      "section": "labs",
      "series": "software-factory",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-code-review-is-the-bottleneck"
      },
      "published": "2026-07-26",
      "updated": "2026-07-26",
      "tags": [
        "writing"
      ],
      "review": "https://twocents.page/r/p-code-review-is-the-bottleneck",
      "pages": []
    },
    {
      "slug": "levels-of-agent-autonomy",
      "kind": "draft",
      "title": "5 levels of trusting an AI agent",
      "description": "Five levels of trusting an AI agent, from autocomplete to bounded autonomy, with a gauge for how much a person still checks at each level, and why that never reaches zero.",
      "url": "https://twocents.page/p/levels-of-agent-autonomy/",
      "section": "labs",
      "series": "software-factory",
      "status": "playable",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-levels-of-agent-autonomy"
      },
      "published": "2026-07-26",
      "updated": "2026-07-26",
      "review": "https://twocents.page/r/p-levels-of-agent-autonomy",
      "pages": []
    },
    {
      "slug": "auto-merge-guardrail",
      "kind": "draft",
      "title": "Letting an agent merge code you haven't read",
      "description": "How to let an agent merge code no one read line by line. A policy builder writes the GitHub Actions workflow, Mergify rules and branch protection for you. Fixed rules decide what merges.",
      "url": "https://twocents.page/p/auto-merge-guardrail/",
      "section": "labs",
      "series": "software-factory",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-auto-merge-guardrail"
      },
      "published": "2026-07-28",
      "updated": "2026-07-29",
      "review": "https://twocents.page/r/p-auto-merge-guardrail",
      "pages": []
    },
    {
      "slug": "build-a-software-factory",
      "kind": "draft",
      "title": "Run a software factory from your phone",
      "description": "How to build an open-source software factory you run from your phone: Telegram in front, Hermes in charge, oh-my-pi and OpenCode doing the work, model routing, a merge guardrail and review on your phone.",
      "url": "https://twocents.page/p/build-a-software-factory/",
      "section": "labs",
      "series": "software-factory",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-build-a-software-factory"
      },
      "published": "2026-07-28",
      "updated": "2026-07-28",
      "review": "https://twocents.page/r/p-build-a-software-factory",
      "pages": []
    },
    {
      "slug": "memory-for-ai-agents",
      "kind": "draft",
      "title": "How my agents remember things",
      "description": "How my agents remember things without a vector database: five simple memory tiers I run, seven systems I tried and dropped, and what would make me change my mind. Add a memory system only after a recall fails.",
      "url": "https://twocents.page/p/memory-for-ai-agents/",
      "section": "labs",
      "series": "software-factory",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-memory-for-ai-agents"
      },
      "published": "2026-07-29",
      "updated": "2026-07-29",
      "review": "https://twocents.page/r/p-memory-for-ai-agents",
      "pages": []
    },
    {
      "slug": "model-routing-for-ai-agents",
      "kind": "draft",
      "title": "Picking a model for each job",
      "description": "How I pick a model for each job in my software factory instead of paying top prices for simple work. A role-by-role explorer, three traps benchmarks hide, and a sketch of a router that proposes its own upgrades.",
      "url": "https://twocents.page/p/model-routing-for-ai-agents/",
      "section": "labs",
      "series": "software-factory",
      "status": "idea",
      "take": {
        "kind": "fork",
        "command": "node agent.mjs --fork https://twocents.page/r/p-model-routing-for-ai-agents"
      },
      "published": "2026-07-29",
      "updated": "2026-07-29",
      "review": "https://twocents.page/r/p-model-routing-for-ai-agents",
      "pages": []
    },
    {
      "slug": "concept-graph",
      "kind": "static",
      "title": "A reading list, taken apart",
      "description": "24 personal sites about personal software, learning and explorable explanations, boiled down to 174 claims and linked by what they share. Every claim links to its source, and the whole graph downloads as JSON.",
      "url": "https://twocents.page/labs/concept-graph/",
      "section": "labs",
      "series": "reading",
      "status": "playable",
      "take": {
        "kind": "download",
        "command": "curl -fsSL https://twocents.page/labs/concept-graph/ -o concept-graph.html"
      },
      "published": "2026-10-05",
      "updated": "2026-10-05",
      "tags": [
        "reading",
        "graph"
      ],
      "builtFrom": {
        "repo": "local",
        "path": "seed/concept-graph/build.mjs",
        "note": "two agent-made syntheses of the same reading list (sources/a-workshop-for-thought.html, sources/twenty-four-sources.html), parsed into graph.json and inlined into template.html"
      }
    }
  ]
}
