.gitignore, and SEO-optimized repo metadata.
Invocation
What it produces
JTBD README
Opens with the problem the user has, not what the tool does. Includes badges with correct owner/repo slugs, quick start, install instructions, and usage example.
CI/CD workflow
.github/workflows/ci.yml matched to the detected language — Python (pytest matrix), Node.js (npm test matrix), Rust (cargo test + clippy), or Go (go test + vet).SEO-optimized metadata
Repo description under 100 characters with no trailing period. 5–10 topics including the language name, problem domain, and searchable keywords.
Profile README update
Clones the user’s profile repo and adds the new repo to the correct section alphabetically. Private repos get a lock indicator.
Workflow
Detect project type
Read project metadata files to determine language, package manager, and test command. Checked in order:
If no marker file is found, the user is asked for the language.
| File | Language | Test command |
|---|---|---|
pyproject.toml | Python | pytest |
package.json | Node.js | npm test |
Cargo.toml | Rust | cargo test |
go.mod | Go | go test ./... |
Initialize git
Run
git init if not already a repo. Ask the user for their preferred name and email and set them at the repo level (not global).Create .gitignore
Generate a language-appropriate
.gitignore. For Python: __pycache__/, *.egg-info/, .venv/, .pytest_cache/, and more. For Node.js: node_modules/, dist/, .env, coverage/, and more.Create LICENSE
Detect the license from project metadata (
[project].license in pyproject.toml, license in package.json). Defaults to Apache-2.0 if not specified.Write README.md
Generate a JTBD-focused README. The first paragraph answers “what job does this do for me?” — not “what is this tool.”Every badge URL is constructed from
gh repo view --json nameWithOwner — no placeholder values like username/repo.Create CI/CD workflow
Generate
.github/workflows/ci.yml matched to the detected language. Example for Python:PyPI publish workflows are kept in a separate
publish.yml file — never combined with ci.yml. PyPI’s trusted publisher config requires the workflow filename to match exactly what was registered.Create GitHub repo and push
Create the remote with
gh repo create, set the SEO-optimized description and topics, then make the initial commit and push.- Description: under 100 characters, no trailing period, answers “why would I click this?”
- Topics: include the language name, problem domain keyword, and 2–3 searchable terms
Update profile README
Clone the user’s GitHub profile repo (
GH_USER/GH_USER) if not present locally, add the new repo to the correct section in alphabetical order, commit, and push.Self-review checklist
Before delivering, verify all of the following:- README first paragraph answers “what job does this do for me?” — not “what is this tool”
- README has zero feature bullet lists before the problem statement
- All badge URLs contain the correct GitHub owner/repo and package name
- Mintlify docs badge is included if the project has Mintlify docs
- CI workflow runs the correct test command for the detected language
.gitignoreincludes language-specific entries- LICENSE file matches the license field in project metadata
- Repo description is under 100 characters with no trailing period
- Repo has 5–10 topics that include the language name, problem domain, and 2–3 SEO keywords
- Git
user.nameanduser.emailare set at repo level gh repo viewsucceeds and shows the description- Profile README contains the new repo in the correct section, alphabetically ordered
Golden rules
1. JTBD first, features never
1. JTBD first, features never
The README opens with the problem the user has, not what the tool does. “You have X problem” before “This tool does Y.” Never write a feature bullet list as the first section.
2. Badges must resolve
2. Badges must resolve
Every badge URL must contain the actual GitHub owner/repo slug and package name. Never use placeholder values like
username/repo. Verify by constructing the URL from gh repo view --json nameWithOwner.3. Detect, never assume
3. Detect, never assume
Read project metadata files to determine language, package name, license, and test commands. Never hardcode “Python” or “MIT” without checking the actual files first.
4. Description is a headline
4. Description is a headline
Under 100 characters, no trailing period, no implementation details. It answers “why would I click this?” not “what technology does this use?”
5. Topics are SEO
5. Topics are SEO
Include the programming language, the problem domain keyword, and 2–3 terms someone would search for on GitHub to find this project. Never use generic tags like “awesome” or “tool.”
6. Git identity is explicit
6. Git identity is explicit
Always ask the user for their preferred name/email and set it at the repo level (not global) when initializing a new repo. If the user declines, let the global config apply.