A static guitar tab site generator with mobile-first design for practicing.
- Mobile-first dark theme optimized for reading tabs on any device
- Auto-scroll for hands-free practice (works on iOS Safari, Android, and desktop)
- Client-side fuzzy search powered by MiniSearch
- Section navigation - jump to Verse, Chorus, Bridge, etc.
- Organized by artist with rich YAML frontmatter metadata
- Speed control - slow, medium, or fast auto-scroll speeds
- Tap to toggle - tap anywhere on the tab content to start/stop scrolling
# Install dependencies
uv sync
# Build the site
uv run tabstash build
# Preview locally
uv run tabstash serveCreate markdown files in content/tabs/artist-name/song-name.md:
---
title: "Song Title"
artist: "Artist Name"
key: "G"
capo: 0
tuning: "standard"
difficulty: "intermediate"
bpm: 120
tags: ["acoustic", "rock"]
featured: true
---
[Intro]
G C D G
[Verse]
G C
Lyrics with chords above
D G
More lyrics here| Field | Required | Description |
|---|---|---|
title |
Yes | Song title |
artist |
Yes | Artist name |
key |
No | Musical key (e.g., "G", "Am") |
capo |
No | Capo position (0-12) |
tuning |
No | Guitar tuning (default: "standard") |
difficulty |
No | "beginner", "intermediate", or "advanced" |
bpm |
No | Tempo in beats per minute (20-300) |
tags |
No | List of tags for categorization |
featured |
No | Set to true to feature on homepage |
format |
No | "full" for tabs, "compact" for chord charts |
Push to GitHub and enable GitHub Pages. The included workflow will automatically:
- Run unit tests and browser tests (Chromium + WebKit)
- Build the site
- Deploy to GitHub Pages
# Install dev dependencies
uv sync --extra dev
# Run all tests
uv run pytest
# Run browser tests only
uv run pytest tests/test_browser.py --browser chromium --browser webkit
# Run browser tests in headed mode (see the browser)
uv run pytest tests/test_browser.py --browser webkit --headed
# Lint
uv run ruff check src/ tests/TabStash uses Playwright for browser testing to ensure features like auto-scroll work across different browsers, including iOS Safari (via WebKit).
# Install Playwright browsers
uv run playwright install
# Run WebKit tests (Safari engine)
uv run pytest tests/test_browser.py --browser webkit -v