diff --git a/.gitignore b/.gitignore
index 501ec1ff..72cccd02 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,10 +27,12 @@ out/
Thumbs.db
# Screenshots/images — ignored at the repo root (we accidentally collect a lot
-# of them there), but ALLOWED under docs/design-briefs/ so design iteration
-# artifacts (mockups, critique notes) stay versioned with the feature.
+# of them there), but ALLOWED under docs/design-briefs/ and docs/screenshots/
+# so design iteration artifacts (mockups, critique notes) and feature screenshots
+# stay versioned with the feature.
*.png
!docs/design-briefs/**/*.png
+!docs/screenshots/*.png
# Python
__pycache__/
diff --git a/README.md b/README.md
index 63442afe..fd4f8309 100644
--- a/README.md
+++ b/README.md
@@ -206,8 +206,33 @@ Then browse:
- A ticket detail page listing every session linked to a given ticket
- A **Tickets tab on every project page** that aggregates across all checkouts of the same git repo — so a ticket linked from `claude-karma/frontend/` also shows on the main `claude-karma` project
+**Tickets Index** — All linked tickets in a filterable table. Switch between All, Issues, and PRs on GitHub.
+
+
+
+
+
+**Filter by Provider** — GitHub shows sub-pill filtering ([All N] [Issues N] [PRs N]) to toggle between categories.
+
+
+
+
+
+**Ticket Detail** — View a ticket with all linked sessions. Cross-project rollup shows "N sessions · M projects" with tabs per project.
+
+
+
+
+
+**Project Tickets Tab** — Every project page has a Tickets tab that aggregates across all git identity checkouts, so the same ticket appears even if linked from different branch directories.
+
+
+
+
+
### And More
+- **Tickets across providers** — Link sessions to Linear, Jira, and GitHub Issues in a unified interface
- **Plans Browser** — View implementation plans and their execution status
- **Command Palette** — Quick navigation with `Ctrl+K` / `Cmd+K`
- **Full-text Search** — Search across session titles, prompts, and slugs
@@ -325,6 +350,19 @@ Enable real-time session monitoring by installing Claude Code hooks. See [SETUP.
| `GET /skills` | List all skills |
| `GET /live-sessions` | Real-time session state |
+### Tickets
+
+| Method | Endpoint | Description |
+|--------|----------|-------------|
+| `POST` | `/sessions/{uuid}/tickets` | Link a ticket to a session |
+| `GET` | `/sessions/{uuid}/tickets` | List tickets linked to a session |
+| `DELETE` | `/sessions/{uuid}/tickets/{id}` | Unlink a ticket from a session |
+| `GET` | `/tickets` | List all tickets (filters: provider, project, q) |
+| `GET` | `/tickets/{provider}/{key}` | Get ticket details |
+| `GET` | `/tickets/{provider}/{key}/sessions` | Sessions linked to a ticket |
+| `PUT` | `/tickets/{provider}/{key}` | Refresh metadata from MCP |
+| `POST` | `/admin/repair-github-urls` | Repair stale `/issues/` URLs to `/pull/` |
+
## Contributing
diff --git a/docs/screenshots/home.png b/docs/screenshots/home.png
index 338692bf..9c4a9617 100644
Binary files a/docs/screenshots/home.png and b/docs/screenshots/home.png differ
diff --git a/docs/screenshots/project-tickets-tab.png b/docs/screenshots/project-tickets-tab.png
new file mode 100644
index 00000000..fcb63d6c
Binary files /dev/null and b/docs/screenshots/project-tickets-tab.png differ
diff --git a/docs/screenshots/ticket-detail.png b/docs/screenshots/ticket-detail.png
new file mode 100644
index 00000000..8b771d2f
Binary files /dev/null and b/docs/screenshots/ticket-detail.png differ
diff --git a/docs/screenshots/tickets-github-prs.png b/docs/screenshots/tickets-github-prs.png
new file mode 100644
index 00000000..5ebf4ee1
Binary files /dev/null and b/docs/screenshots/tickets-github-prs.png differ
diff --git a/docs/screenshots/tickets-index.png b/docs/screenshots/tickets-index.png
new file mode 100644
index 00000000..f9df125e
Binary files /dev/null and b/docs/screenshots/tickets-index.png differ