Metadata-Version: 2.4
Name: bmad-sprint-board
Version: 1.0.0
Summary: Interactive sprint board generator for BMAD projects
Project-URL: Homepage, https://github.com/Isaqdn03/bmad-sprint-board
Project-URL: Repository, https://github.com/Isaqdn03/bmad-sprint-board
Project-URL: Issues, https://github.com/Isaqdn03/bmad-sprint-board/issues
Author: Isaqdn
License-Expression: MIT
License-File: LICENSE
Keywords: agile,bmad,board,kanban,sprint
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Quality Assurance
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# bmad-sprint-board

Interactive sprint board generator for [BMAD](https://github.com/bmadcode/BMAD-METHOD) projects. Produces a self-contained HTML file with a kanban board, list view, workflow guide, and changelog — all from your `epics.md` and `sprint-status.yaml`.

Zero dependencies. Pure Python standard library.

## Install

```bash
pip install bmad-sprint-board
```

Or install from source:

```bash
pip install git+https://github.com/Isaqdn03/bmad-sprint-board.git
```

Or for development:

```bash
git clone https://github.com/Isaqdn03/bmad-sprint-board.git
cd bmad-sprint-board
pip install -e .
```

## Usage

### CLI

From your project root (directory containing `_bmad-output/`):

```bash
# Generate sprint-board.html
bmad-board

# Generate and open in browser
bmad-board --open

# Custom output directory
bmad-board -o ./docs

# Explicit project name (otherwise auto-detected from sprint-status.yaml)
bmad-board --project "My Project"

# Explicit project root
bmad-board --root /path/to/project
```

### Python API

```python
from pathlib import Path
from bmad_sprint_board.sprint_board import generate_sprint_board

path = generate_sprint_board(
    project_root=Path("/path/to/project"),
    output_dir=Path("./output"),        # optional
    project_name="My Project",          # optional, auto-detected
)
print(f"Board at: {path}")
```

## Required Directory Structure

```
your-project/
  _bmad-output/
    planning-artifacts/
      epics.md                          # Epic and story definitions
    implementation-artifacts/
      sprint-status.yaml                # Story statuses
    sprint-board.html                   # Generated output
    .sprint-board-snapshot.json         # Auto-generated for changelog
```

### epics.md format

Standard BMAD epics markdown:

```markdown
## Epic 0: First Epic Title

Description of the epic.

### Story 0.1: First Story Title

Story content with acceptance criteria...

### Story 0.2: Second Story Title

More content...

## Epic 1: Second Epic Title
...
```

### sprint-status.yaml format

```yaml
project: My Project
last_updated: 2026-03-26

development_status:
  epic-0: in-progress
  0-1-first-story: done
  0-2-second-story: in-progress
  epic-1: backlog
  1-1-next-story: backlog
```

Valid statuses: `backlog`, `ready-for-dev`, `in-progress`, `review`, `done`

## Auto-Regeneration with Claude Code

Add a hook so the board auto-regenerates whenever `sprint-status.yaml` is edited during a Claude Code session.

### .claude/hooks/regenerate-sprint-board.sh

```bash
#!/bin/bash
input=$(cat)
file_path=$(echo "$input" | jq -r '.tool_input.file_path // empty' 2>/dev/null)

if [[ "$file_path" == *"sprint-status.yaml" ]]; then
  project_dir=$(echo "$input" | jq -r '.cwd // empty' 2>/dev/null)
  cd "$project_dir" 2>/dev/null || exit 0
  bmad-board 2>/dev/null || true
fi
exit 0
```

```bash
chmod +x .claude/hooks/regenerate-sprint-board.sh
```

### .claude/settings.json

```json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": ".claude/hooks/regenerate-sprint-board.sh",
            "timeout": 30
          }
        ]
      }
    ]
  }
}
```

BMAD skills (`bmad-create-story`, `bmad-dev-story`, `bmad-code-review`) auto-update `sprint-status.yaml`. With this hook, the board stays in sync automatically.

## Features

- **Kanban board** — 5-column drag-free visual board (backlog, ready, in-progress, review, done)
- **List view** — Compact epic/story list with status badges
- **Workflow view** — Visual guide to the BMAD implementation pipeline
- **Story detail panel** — Click any story to see full content with rendered markdown
- **Epic filtering** — Filter by epic or search by story name
- **Changelog** — Shows what changed since last generation
- **Dark theme** — GitHub-inspired dark UI
- **Self-contained** — Single HTML file with embedded CSS/JS, no external dependencies
- **Zero dependencies** — Pure Python stdlib, no PyYAML or other packages needed

## License

MIT
