Skip to content

Repository files navigation

Coding without Pants

The operating system and workshop for the YouTube channel "Coding without Pants" — calm, funny, informative videos where a Hawaii dad builds one small useful thing per episode, usually simple enough his pantsless 4-year-old can use it (the Pantsless Test).

One tiny cwp CLI over flat files runs two loops:

  1. The Channel Loop — move an episode through idea → scripted → built → recorded → edited → published, draft copy in the channel voice via the claude CLI, and assemble paste-ready YouTube metadata. It removes the specific frictions that kill hobby channels; it is not a CMS.
  2. The Pantsless Build (the heart of the channel) — the kid says what he wants, local Whisper transcribes it, AI distills a build brief, one-shot claude -p generates a self-contained kid-usable index.html toy, and an automated verify+repair loop proves it works before he sees it. Then he uses it on camera. The code you build is the thing you publish.
CAPTURE            DISTILL              BUILD                       REVEAL
kid rattles   ──►  faster-whisper  ──►  claude -p one-shot     ──►  he uses it on
off his wish        + kid-gateway        + verify + repair loop      camera (Pantsless
(record clip)       → build brief         → verified index.html       Test)

Stack

Layer Tool Why
Language / runtime Python 3.12+ stdlib tomllib, argparse — keeps the tool tiny
Package / env uv fast, reproducible
Metadata TOML (meta.toml) human-editable, atomically written
Episode project self-contained HTML runs in any browser from file://; passes the Pantsless Test
AI drafting + build claude CLI (claude -p) the one-shot generation primitive (OAuth; no API key in repo)
Speech-to-text faster-whisper (local, CTranslate2) a child's voice never leaves the machine
Toy verification Playwright (headless Chromium) console + keypoint checks on generated toys
Quality pytest, ruff, mypy tests gate every build step

No backend, no database, no server, no ports, no PyTorch.

Prerequisites

  • Windows 11 + PowerShell (developed there; nothing is Windows-specific by design)
  • Python 3.12+ and uv on PATH
  • The claude CLI installed and authenticated (needed for cwp draft / brief / build; everything else works without it)

Setup

uv sync                                  # venv + deps (tomli-w, faster-whisper, playwright)
uv run playwright install chromium       # once, for the toy verifier
uv run cwp seed                          # once — materializes the 12-episode idea bank (idempotent)
uv run cwp --help

cwp seed creates the 12 starter episodes (plan §5.5) as idea-status folders under episodes/; it is idempotent (safe to re-run — it skips seqs already present) and the manual dogfood steps (M1/M1.5/M2) reference those episodes, so run it once before them. The first cwp capture downloads the Whisper model once (~460 MB), then runs fully offline.

Usage

# Channel Loop
uv run cwp idea "a button that burps the alphabet"   # fast idea capture
uv run cwp new "The Sock-Matching Machine (Two Sum, But Socks)"
uv run cwp list                           # derived episode table + cycle time
uv run cwp show 003                       # detail for one episode
uv run cwp next                           # which episode to work on + its next action
uv run cwp draft 003 script               # AI draft in the channel voice
uv run cwp status 003 recorded            # advance/change the lifecycle state
uv run cwp publish 003 --url https://youtu.be/XXXX

# The Pantsless Build
uv run cwp capture 005 --audio clips/wish.wav   # local Whisper → transcript
uv run cwp brief 005                            # noisy transcript → build brief
uv run cwp build 005                            # generate + verify + repair → project/index.html

The full command surface: seed, idea, new, list, show, next, status, draft, publish, capture, brief, build, version (cwp --help).

Key design decisions

  • One repo, two loops — every episode's browser toy lives beside the tooling that made it.
  • Folder-as-id, derived index — the episode list is scanned from episodes/*/meta.toml on every run; drift is structurally impossible.
  • One-shot generation made dependable — a calibrated verifier (static checks + headless Playwright keypoints, golden + single-defect garbage fixtures) gates every generated toy; ≤2 evidence-fed repairs, atomic commit, needs_human on exhaustion. Never ship a broken toy.
  • AI is an assistant, never a dependency — every claude/whisper path degrades gracefully.
  • Kid privacy by construction — audio and transcripts never committed (whole capture/ dir git-ignored), local speech-to-text only, a redact-names guard on every text artifact derived from the kid's speech, and a publish-moment checklist (including YouTube "Made for Kids").

Project structure

coding_without_pants/
├── plan.md                   # the full project plan (source of truth)
├── voice.md                  # channel voice — SoT for drafts
├── build-contract.md         # one-shot generation contract — SoT for builds
├── pantsless-test.md         # the 4-point kid-usability checklist
├── src/cwp/                  # cli, config, episodes, lifecycle, drafting, publishing,
│                             #   capture, brief, verify, build, templates
├── episodes/NNN-slug/        # the workshop: meta.toml, script.md, brief.md, project/index.html
├── tests/                    # per-module + golden/garbage verifier fixtures + e2e smoke
└── docs/                     # research notes, production notes, plan review

Status

Automated build complete — all 11 code steps of plan.md §14 shipped (issues #2–#12 closed), 409 tests passing, 0 type errors, 0 lint violations. Both loops are built end to end: the full Channel Loop (seed/idea/new/list/show/next/status/draft/publish) and the Pantsless Build (capture/brief/build), a toy verifier calibrated against golden + single-defect fixtures (with a network-block belt so untrusted generated HTML can't phone home), the reliability-core build loop (generate → verify → repair → commit, never ships a broken toy), the 12-episode idea bank via cwp seed, and an end-to-end smoke gate proving both loops round-trip. The verifier and build engine each passed a full six-lens /review-deep gate.

Remaining before v1 is operator-only (needs real claude + Whisper + the kid): M1 (dogfood the Channel Loop → a paste-ready publish.md), M1.5 (solo live-toolchain Pantsless dry-run before the kid), M2 (the kid session — the heart of the channel). v1 acceptance: one episode reaches a paste-ready publish.md, and one real kid clip goes capture → brief → build → a verified, kid-usable toy end-to-end. Plan review: docs/plan-review-fable.md.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages