Skip to content

Commit 9f376fb

Browse files
committed
release: v0.2.0 — optional repo (-gr), grounded-demo fixes, docs site
Added - -gr/--github-repo flag; the repo is now optional (repo, -s guide, or both) - guide-only runs (no clone; fresh-container replay still verifies) - mkdocs docs site + GitHub Pages workflow, llms.txt, CITATION.cff, dependabot, CODEOWNERS, config templates - verified self-run committed as examples/readme2demo, featured as the hero demo Fixed - grounding matches sandbox-drifted commands (python3, absolute exe path, --break-system-packages) that were silently dropped from the video - demo video types the exact proven command incl. export-PATH chains, so on-camera steps no longer fail with "command not found" - render seeds /work from the verified worktree for a repo's own guide Changed - ruff lint gate; tests across Python 3.10–3.13 - one canonical one-line description across repo, docs, llms.txt, CITATION
1 parent f677e21 commit 9f376fb

19 files changed

Lines changed: 831 additions & 22 deletions

CHANGELOG.md

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.2.0] — 2026-07-05
11+
1012
### Added
1113
- `-gr`/`--github-repo` flag for the repository URL, and the repo is now
1214
**optional**. `readme2demo run` accepts a repo, a `-s/--step-by-step` guide,
1315
or both — at least one is required.
1416
- Guide-only runs: with a self-contained step-by-step guide and no repo, the
1517
pipeline skips cloning and the fresh-container replay still verifies every
1618
command (the grounding invariant is unchanged).
17-
- Correctness-focused `ruff` lint gate (`E9`, `F`) wired into CI.
19+
- Documentation site (mkdocs-material) with a GitHub Pages workflow and
20+
`docs/llms.txt`, plus `CITATION.cff`, `.github/dependabot.yml`, `CODEOWNERS`,
21+
and config templates (`readme2demo.toml.example`, `.env.example`).
22+
- The verified self-run committed as `examples/readme2demo/` and featured as
23+
the README/website hero demo.
24+
25+
### Fixed
26+
- Grounding no longer drops a guide step the agent proved in a sandbox-drifted
27+
form (`python3` vs `python`, an absolute executable path, or a trailing
28+
`--break-system-packages`) — those steps were silently missing from the video.
29+
- The demo video now types the exact proven command (including any
30+
`export PATH=… &&` chain) instead of the guide's clean text, so on-camera
31+
steps don't fail with "command not found".
32+
- The render seeds `/work` from the verified worktree when a guide has no clone
33+
step of its own, so a repo's own guide (e.g. one starting at
34+
`pip install -e .`) doesn't run in an empty directory.
1835

1936
### Changed
20-
- CI now runs a lint job and tests across Python 3.10–3.13.
37+
- CI runs a correctness-focused `ruff` lint gate and tests across Python
38+
3.10–3.13.
39+
- One canonical one-line description across the repo, docs, `llms.txt`, and
40+
`CITATION.cff`.
2141

2242
## [0.1.0] — 2026-07-05
2343

@@ -36,5 +56,6 @@ Initial public release.
3656
`commands.sh`, `demo.tape`, `demo.mp4`, `demo.gif`, and `howto.jsonld`.
3757
- Verified `examples/toolhive/` reference run committed as proof.
3858

39-
[Unreleased]: https://github.com/alphacrack/readme2demo/compare/v0.1.0...HEAD
59+
[Unreleased]: https://github.com/alphacrack/readme2demo/compare/v0.2.0...HEAD
60+
[0.2.0]: https://github.com/alphacrack/readme2demo/releases/tag/v0.2.0
4061
[0.1.0]: https://github.com/alphacrack/readme2demo/releases/tag/v0.1.0

CITATION.cff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ authors:
1414
repository-code: "https://github.com/alphacrack/readme2demo"
1515
url: "https://github.com/alphacrack/readme2demo"
1616
license: MIT
17-
version: 0.1.0
17+
version: 0.2.0
1818
date-released: "2026-07-05"
1919
keywords:
2020
- ai-agents

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
./scripts/self-demo.sh
1010
It runs readme2demo on this very repo, following docs/step-by-step.md,
1111
and drops the verified demo.gif in right here. -->
12-
[![readme2demo verified demo](examples/toolhive/demo.gif)](examples/toolhive/)
12+
[![readme2demo running on its own repo — verified demo](docs/demo.gif)](examples/readme2demo/)
1313

14-
<sub>▶ A real, unedited readme2demo run on [ToolHive](examples/toolhive/) — every command was replayed in a clean container **before** this GIF was rendered.</sub>
14+
<sub>▶ readme2demo generating its own tutorial: an AI agent runs this repo's README in a sandbox, a fresh container replays every step, then the demo is rendered. Full self-run output in <a href="examples/readme2demo/">examples/readme2demo</a> · run against another project in <a href="examples/toolhive/">examples/toolhive</a>.</sub>
1515
<!-- HERO:END -->
1616

1717
**AI-verified tutorial and demo video generator.** Point it at a repo. An AI agent reads the README and actually runs it inside a hardened Docker sandbox. Only after a clean-room replay passes does it render a demo video (VHS) and publish the tutorial, step-by-step guide, and troubleshooting doc.

RELEASE_PLAN.md

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
# readme2demo — grand release plan
2+
3+
A sequenced, multi-channel launch. Companion to `LAUNCH_CHECKLIST.md` (the
4+
GitHub/settings work) and the drafts in `launch/`. Skips LinkedIn by choice.
5+
6+
## The one thing to get right
7+
8+
Developer audiences punish marketing and reward candor. Lead with the *proof*,
9+
not the pitch: **the tutorial ran, twice — once in a sandbox, once in a fresh
10+
clean-room container — before you saw it.** The demo GIF and the
11+
`✓ R2D_VERIFY_OK` moment are the whole story; show them first, everywhere.
12+
13+
Anchor the launch on **two big-bang channels — Hacker News (Show HN) and
14+
Product Hunt** — and use everything else to amplify. Don't fire every channel
15+
in the same minute: you can only actively hold one comment thread at a time,
16+
and simultaneous blasting reads as spam.
17+
18+
## Pre-flight gate (must be true before you launch)
19+
20+
- [ ] Repo is **public**, docs site is **live** (`https://alphacrack.github.io/readme2demo/`), demo GIF renders on the README.
21+
- [ ] `v0.1.0` release cut; README, one-liner, and social preview are final.
22+
- [ ] Landing/demo is cached/CDN-backed — a front-page Show HN can send 5k–30k visitors in 24h.
23+
- [ ] You have a free 2–4 hour block to sit on the threads the moment they go live.
24+
25+
## Timeline (relative — pick a Tue/Wed/Thu as T-0)
26+
27+
**T-14 → T-7 — prep & seed**
28+
- Finalize all copy (see Asset checklist). Restore/refresh `launch/` drafts.
29+
- Stand up a Product Hunt **"Coming soon"** teaser page to collect notify-me's.
30+
- Submit to newsletters that need lead time (Console.dev, PyCoders, Python Weekly).
31+
- If your HN/Reddit accounts are new, spend two weeks genuinely commenting to build a little karma/history so you're not auto-filtered.
32+
- Line up ~10–20 people who'll *genuinely* try it and comment (never "please upvote").
33+
34+
**T-1 — stage**
35+
- Schedule the Product Hunt launch for **12:01 AM PT**.
36+
- Pre-write the Show HN title + your own first comment (the "why I built this" context).
37+
- Draft the dev.to article; queue Reddit posts (don't post yet).
38+
39+
**T-0 — launch day (hour-by-hour, ET)**
40+
- **8:00–9:00 AM** — Post **Show HN**. First 60–90 min decide the front page; you need ~30–50 upvotes in the first hour from organic interest. Reply to every comment fast and candidly.
41+
- **12:01 AM PT (same calendar day)** — Product Hunt goes live; post your maker first-comment immediately, notify your "coming soon" list.
42+
- **Midday** — Publish the **dev.to article**; cross-post to Hashnode/Medium with a canonical link back.
43+
- **Spread across the day, not all at once** — 1–2 Reddit posts where you'll actually sit and reply. Save the rest for T+1/T+2.
44+
45+
**T+1 → T+7 — amplify & sustain**
46+
- Post to the remaining subreddits (one or two per day, each in its own voice).
47+
- Submit to link-curated newsletters and aggregators (below).
48+
- Submit to the awesome-lists (see the earlier awesome-list picks).
49+
- Reply to every issue/PR/comment within hours — responsiveness at launch converts stars into contributors.
50+
- Write a short "what launch day looked like (numbers included)" follow-up — HN/Reddit love postmortems.
51+
52+
## Channels
53+
54+
### Tier 1 — anchors
55+
56+
| Channel | Where | Notes |
57+
|---|---|---|
58+
| Hacker News | Submit as **Show HN** at news.ycombinator.com | Tue–Thu ~8–10 AM ET (Sunday eve is a quieter second option). Plain, specific title; no hype, no version number. Don't ask for upvotes — ring detection is real. |
59+
| Product Hunt | producthunt.com/launch | Launch 12:01 AM PT, Tue–Thu (dev tools also do fine on weekends with less competition). Coming-soon teaser beforehand; strong first comment; gallery = the demo GIF. |
60+
61+
### Reddit (post natively, read each sub's self-promo rules first, engage in comments)
62+
63+
| Subreddit | Fit |
64+
|---|---|
65+
| r/programming | Broadest dev reach; a good thread can beat a PH launch. Lead with the technical idea, not the product. |
66+
| r/opensource | MIT OSS tool — core audience. |
67+
| r/Python | It's a Python CLI; check their showcase/self-promo rules and flair. |
68+
| r/commandline | CLI-native crowd. |
69+
| r/coolgithubprojects | Purpose-built for sharing repos. |
70+
| r/devops | README-verification + Docker/CI angle. |
71+
| r/selfhosted | Self-hosted, runs-on-your-machine angle. |
72+
| r/LocalLLaMA (~266k) | AI-agent angle; very active, allergic to fluff — bring the technical detail. |
73+
| r/ClaudeAI | Claude Code is your default engine — directly relevant. |
74+
| r/artificial, r/machinelearningnews | AI-agent framing for a broader AI audience. |
75+
| r/SideProject, r/EntrepreneurRideAlong | Builder communities for the launch story. |
76+
77+
Rule of thumb: **one subreddit at a time**, each with a title written for *that* community, and be present to answer. Blasting all of them in one hour gets you spam-filtered and mod-removed.
78+
79+
### Written content (owned narrative + backlinks)
80+
81+
- **dev.to** — primary launch article ("I made an AI that refuses to publish a tutorial it didn't run twice"). Dev-native, easy reach.
82+
- **Hashnode** and **Medium** (dev publications like *Level Up Coding*, *ITNEXT*; *Towards Data Science* for the AI angle) — cross-post with a `rel=canonical` back to dev.to or your docs so you don't split SEO.
83+
- **Your docs site** — a `/blog` or a "How it works" deep-dive doubles as the canonical, ranking-friendly version.
84+
85+
### Newsletters & aggregators (curated — submit, then wait for their cadence)
86+
87+
| Name | Why / link |
88+
|---|---|
89+
| Console.dev | Reviews 2–3 devtools weekly — squarely your fit. console.dev |
90+
| Changelog (+ Changelog Nightly) | Nightly auto-features trending new GitHub repos; the weekly covers OSS. changelog.com |
91+
| TLDR / TLDR AI | Huge dev + AI dailies. tldr.tech |
92+
| Pointer | Curated reading for devs. pointer.io |
93+
| PyCoder's Weekly | Python — submit at pycoders.com/submissions |
94+
| Python Weekly | Python tool/newsletter feature. |
95+
| Hacker Newsletter | Curates the week's best HN — a strong Show HN gets picked up. |
96+
| Ben's Bites / Latent Space | AI-builder audiences for the agent angle. |
97+
| jackbridger/developer-newsletters | A directory to find more niche devtool newsletters to pitch. |
98+
99+
### Directories & discovery
100+
101+
- **AlternativeTo**, **SaaSHub**, **StackShare** — list the project; steady long-tail discovery + backlinks.
102+
- **GitHub Trending** — not submittable, but a good launch-day spike (stars velocity) can land you there; it compounds.
103+
- **Lobsters** (lobste.rs) — high-signal HN alternative, but **invite-only**; only viable if a member invites you. Worth asking around for an invite pre-launch.
104+
- **Awesome-lists** — the picks from the earlier step (awesome-ai-agents, awesome-claude-code, awesome-readme-tools, awesome-docs, etc.).
105+
106+
### Communities / chat
107+
108+
- **Anthropic/Claude developer Discord** and **r/ClaudeAI** — you're built on Claude Code; share in the show-and-tell channels.
109+
- Relevant **Slack/Discord** dev communities you're already in (share where you're a real member, not cold).
110+
- _LinkedIn: intentionally skipped._
111+
112+
## Asset checklist (prepare before T-0)
113+
114+
- [ ] **Show HN**: plain title + your first comment (origin story, the grounding invariant, honest limitations). Draft in `launch/SHOW_HN_DRAFT.md`.
115+
- [ ] **Product Hunt**: 60-char tagline, description, first maker comment, gallery (demo GIF + 2–3 shots), topics/tags, thumbnail.
116+
- [ ] **Article**: `launch/DEVTO_POST_DRAFT.md` — publish on dev.to, cross-post elsewhere.
117+
- [ ] **Reddit**: 3–4 per-community title/body variants (not one copy-paste).
118+
- [ ] **Visuals**: the verified demo GIF (done), `assets/social-preview.png` (done), one clean terminal screenshot of `✓ R2D_VERIFY_OK`.
119+
- [ ] **The "why"**: one crisp paragraph on the grounding invariant — it's your differentiator; repeat it verbatim everywhere.
120+
121+
## Suggested hooks (tune per channel)
122+
123+
- Show HN: `Show HN: readme2demo – runs your README in a sandbox, publishes only what re-runs`
124+
- Product Hunt tagline: `Verified tutorials & demo videos, generated from your README`
125+
- Reddit (r/Python): `I built a tool that runs your README in a Docker sandbox and only publishes the tutorial if a fresh-container replay passes`
126+
- Article: `The AI that refuses to publish a tutorial it didn't run twice`
127+
128+
## What to measure
129+
130+
GitHub stars/day and traffic sources (Insights → Traffic), Show HN rank + comment sentiment, Product Hunt rank/upvotes, docs-site visitors, and — the real signal — issues and PRs opened. Capture it for the T+7 "how the launch went" writeup.
131+
132+
## Etiquette / risks (the stuff that sinks launches)
133+
134+
- **Never** ask for upvotes on HN or PH; both detect vote rings and will penalize you.
135+
- **Don't** cross-post identical text to many subreddits at once — mods and spam filters remove it, and you can't engage everywhere.
136+
- **Read each community's self-promotion rules** before posting; some require a participation ratio or a specific thread.
137+
- **Be candid about limitations** (the API-key-in-sandbox tradeoff, experimental OpenHands engine). Admitting weaknesses earns more trust than hiding them.
138+
- **Lobsters is invite-only** — don't count on it unless you have an invite.

assets/social-preview.png

203 KB
Loading

docs/demo.gif

2.53 MB
Loading

docs/index.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ The value is not "AI writes a tutorial." It is that the tutorial **ran, twice**,
99
in throwaway containers before you ever saw it. Nothing is published that a
1010
fresh container did not independently execute.
1111

12-
[![readme2demo verified demo](https://raw.githubusercontent.com/alphacrack/readme2demo/main/examples/toolhive/demo.gif)](https://github.com/alphacrack/readme2demo/tree/main/examples/toolhive)
12+
![readme2demo running on its own repo — verified demo](demo.gif)
13+
14+
<small>readme2demo generating its own tutorial and demo — every step replayed in a fresh container first. See it run against another project in the [ToolHive example](https://github.com/alphacrack/readme2demo/tree/main/examples/toolhive).</small>
1315

1416
## Install
1517

examples/README.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,21 @@ readme2demo run <repo-url>
1717

1818
| Repo | Result | Verified | Commit | Agent cost | Artifacts |
1919
|---|---|---|---|---|---|
20+
| [alphacrack/readme2demo](https://github.com/alphacrack/readme2demo)**this tool, run on itself** | ✅ Verified | 2026-07-05 | `f677e21` | $0.72 | [tutorial](readme2demo/tutorial.md) · [step-by-step](readme2demo/step_by_step.md) · [troubleshooting](readme2demo/troubleshooting.md) · [commands.sh](readme2demo/commands.sh) · [demo.gif](readme2demo/demo.gif) |
2021
| [stacklok/toolhive](https://github.com/stacklok/toolhive) — Go CLI for MCP servers | ✅ Verified | 2026-07-03 | `a935334` | $0.69 | [tutorial](toolhive/tutorial.md) · [step-by-step](toolhive/step_by_step.md) · [troubleshooting](toolhive/troubleshooting.md) · [commands.sh](toolhive/commands.sh) · [demo.gif](toolhive/demo.gif) |
2122

2223
> Runs are reproducible from the committed `manifest.json` in each folder —
2324
> engine, base image, commit SHA, per-stage status, and total cost included.
2425
25-
### toolhive demo
26+
### readme2demo — the self-demo (how it works)
27+
28+
readme2demo run against its own repo: install, run the tests, explore the CLI,
29+
and read a verified example — each step replayed in a fresh container before
30+
this was rendered.
31+
32+
![readme2demo self-demo](readme2demo/demo.gif)
33+
34+
### toolhive — another example
2635

2736
![toolhive demo](toolhive/demo.gif)
2837

examples/readme2demo/commands.sh

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/usr/bin/env bash
2+
set -euxo pipefail
3+
export DEBIAN_FRONTEND=noninteractive
4+
5+
# --- readme2demo preamble (harness-injected): fresh-container setup ---
6+
cd /work
7+
git clone --depth 1 https://github.com/alphacrack/readme2demo .
8+
9+
pip install --break-system-packages -e ".[dev]"
10+
export PATH="/home/demo/.local/bin:$PATH" && python3 -m pytest tests/ -q
11+
export PATH="/home/demo/.local/bin:$PATH" && readme2demo --help
12+
export PATH="/home/demo/.local/bin:$PATH" && readme2demo report examples/toolhive
13+
14+
# --- readme2demo success-criteria assertion ---
15+
set +e
16+
r2d_output="$(readme2demo report examples/toolhive 2>&1)"
17+
r2d_exit=$?
18+
set -e
19+
printf '%s\n' "$r2d_output"
20+
if ! printf '%s\n' "$r2d_output" | grep -qE 'verified:\s*yes'; then
21+
echo 'readme2demo: success-criteria pattern not matched: verified:\s*yes' >&2
22+
exit 1
23+
fi
24+
echo "R2D_VERIFY_OK"

examples/readme2demo/demo.gif

2.53 MB
Loading

0 commit comments

Comments
 (0)