project-bootstrap
Bootstrap open-source projects with documentation, CI/CD, and polish. Use when user asks to "set up docs", "add MkDocs", "create GitHub Actions", "add funding", "polish README", "add Giscus comments", "bootstrap project", or wants to improve project presentation and infrastructure.
When & Why to Use This Skill
Project Bootstrap is a comprehensive Claude skill designed to automate the professional setup and 'polishing' of open-source repositories. It streamlines the creation of high-quality MkDocs documentation with Material themes, configures GitHub Actions for automated CI/CD deployment, and optimizes README files with standardized badges and structures. By handling infrastructure tasks like Giscus integration and funding configuration, it ensures projects maintain a professional presentation and robust developer experience from the start.
Use Cases
- Initializing a new open-source project with a professional documentation site using MkDocs and automated GitHub Pages deployment.
- Enhancing an existing repository's README with standardized badges, license info, and clear installation/usage sections to improve user onboarding.
- Setting up automated CI/CD workflows to build and deploy documentation every time code is pushed to the main branch.
- Integrating community engagement and sustainability features such as Giscus comment systems and GitHub Sponsors/Ko-fi funding links.
- Standardizing package metadata across different ecosystems including Python (pyproject.toml), Rust (Cargo.toml), and Node.js (package.json).
| name | project-bootstrap |
|---|---|
| description | Bootstrap open-source projects with documentation, CI/CD, and polish. Use when user asks to "set up docs", "add MkDocs", "create GitHub Actions", "add funding", "polish README", "add Giscus comments", "bootstrap project", or wants to improve project presentation and infrastructure. |
Project Bootstrap
Bootstrap open-source projects with professional documentation, CI/CD, and polish.
Components
| Component | What it does |
|---|---|
| MkDocs | Material theme docs with tabs, code copy, dark mode |
| GitHub Actions | Auto-deploy docs on push to main |
| Giscus | GitHub Discussions-based comments on docs |
| README | Polished README with badges, tables, examples |
| Funding | Ko-fi badge, GitHub Sponsors |
Quick Reference
MkDocs Setup
Create mkdocs.yml:
site_name: Project Name
site_url: https://ninyawee.github.io/REPO
repo_url: https://github.com/ninyawee/REPO
theme:
name: material
custom_dir: docs/overrides
palette:
- scheme: default
primary: indigo
toggle:
icon: material/brightness-7
name: Switch to dark mode
- scheme: slate
primary: indigo
toggle:
icon: material/brightness-4
name: Switch to light mode
features:
- content.code.copy
- navigation.sections
- navigation.expand
markdown_extensions:
- pymdownx.highlight:
anchor_linenums: true
- pymdownx.superfences
- pymdownx.tabbed:
alternate_style: true
- tables
- admonition
- pymdownx.details
nav:
- Home: index.md
- Getting Started: getting-started.md
Add mise task:
[tasks."docs:serve"]
run = "uv run --with mkdocs-material mkdocs serve"
[tasks."docs:build"]
run = "uv run --with mkdocs-material mkdocs build"
GitHub Actions - Docs Deploy
Create .github/workflows/docs.yml:
name: Deploy Docs
on:
push:
branches: [main]
paths: ['docs/**', 'mkdocs.yml', '.github/workflows/docs.yml']
workflow_dispatch:
permissions:
contents: write
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: pip install mkdocs mkdocs-material
- run: mkdocs gh-deploy --force
Giscus Comments
Prerequisites (Giscus requires public repo with Discussions enabled):
# Enable discussions
gh repo edit ninyawee/REPO --enable-discussions
# Verify repo is public and discussions enabled
gh repo view ninyawee/REPO --json visibility,hasDiscussionsEnabled
Setup steps:
- Run the commands above to enable discussions
- Go to https://giscus.app and enter repo name
- Copy
data-repo-idanddata-category-id
Create docs/overrides/main.html:
{% extends "base.html" %}
{% block content %}
{{ super() }}
<h2 id="__comments">{{ lang.t("meta.comments") }}</h2>
<script
src="https://giscus.app/client.js"
data-repo="ninyawee/REPO"
data-repo-id="REPO_ID_FROM_GISCUS"
data-category="General"
data-category-id="CATEGORY_ID_FROM_GISCUS"
data-mapping="pathname"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="bottom"
data-theme="preferred_color_scheme"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous"
async
></script>
{% endblock %}
README Polish
Docs Link (add after description)
📖 **[Documentation](https://ninyawee.github.io/REPO/)**
Badges
[](https://pypi.org/project/PACKAGE/)
[](https://www.npmjs.com/package/PACKAGE)
[](https://crates.io/crates/PACKAGE)
[](https://ninyawee.github.io/REPO)
[](LICENSE)
Structure Pattern
- Title with Thai meaning if applicable
- Badges row (optional)
- One-liner tagline (Thai + English for Thai projects)
- Docs link
📖 **[Documentation](https://ninyawee.github.io/REPO/)** - Packages table (if multi-package)
- Quick example code block
- Installation section
- Usage examples
- Support/Funding section
- License
See references/readme-template.md for full example.
Funding
Ko-fi Badge
[](https://ko-fi.com/ninyawee)
GitHub Sponsors
Create .github/FUNDING.yml:
ko_fi: ninyawee
github: ninyawee
Package Metadata
Add docs/repo URLs to package manifests:
Cargo.toml (Rust)
[package]
name = "package-name"
version = "0.1.0"
edition = "2021"
license = "MIT"
description = "Short description"
repository = "https://github.com/ninyawee/REPO"
homepage = "https://ninyawee.github.io/REPO"
documentation = "https://ninyawee.github.io/REPO"
keywords = ["keyword1", "keyword2"]
categories = ["category"]
pyproject.toml (Python)
[project]
name = "package-name"
version = "0.1.0"
description = "Short description"
license = "MIT"
readme = "README.md"
requires-python = ">=3.9"
keywords = ["keyword1", "keyword2"]
authors = [{ name = "Nutchanon Ninyawee", email = "me@nutchanon.org" }]
[project.urls]
Homepage = "https://github.com/ninyawee/REPO"
Documentation = "https://ninyawee.github.io/REPO"
Repository = "https://github.com/ninyawee/REPO"
package.json (Node.js)
{
"name": "package-name",
"version": "0.1.0",
"description": "Short description",
"license": "MIT",
"author": "Nutchanon Ninyawee <me@nutchanon.org>",
"repository": {
"type": "git",
"url": "https://github.com/ninyawee/REPO"
},
"homepage": "https://ninyawee.github.io/REPO",
"bugs": "https://github.com/ninyawee/REPO/issues",
"keywords": ["keyword1", "keyword2"]
}
Checklist
When bootstrapping a project:
- Create
mkdocs.ymlwith Material theme - Create
docs/structure (index.md, getting-started.md, api/) - Create
docs/overrides/main.htmlfor Giscus - Create
.github/workflows/docs.yml - Add
docs:serveanddocs:buildtasks to mise.toml - Add docs link to README (
📖 **[Documentation](https://ninyawee.github.io/REPO/)**) - Add badges to README
- Polish README structure
- Add
.github/FUNDING.yml - Enable GitHub Discussions for Giscus
- Update package metadata (Cargo.toml/pyproject.toml/package.json) with docs URLs