Sprint Planning
6 sprints of 2 weeks each across a 12-week internship (56 working days).
Each sprint targets a coherent set of user stories from the PRD and Roadmap.
🔄 Jira Sync
This project uses a Jira board to track granular issues and daily tickets. The status of user stories and tasks in this documentation is synchronized periodically by the AI assistant (OpenClaw), ensuring the PRD and Sprints reflect the real-time state of the Jira board.
Sprint Overview
Sprint 1 — Foundation (Weeks 1–2)
Sprint Goal: Establish the Symfony project, database schema, Slack app, environment configuration, and CI/CD pipeline.
| Status | Story | Title | SP |
|---|---|---|---|
| ⬜ | US-046 | All configuration via environment variables | 2 |
| ⬜ | US-048 | Persist all data in relational database | 3 |
| ⬜ | US-049 | Structured logging with JSON format | 2 |
| ⬜ | US-038 | Command registry (scaffold) | 3 |
| ⬜ | US-039 | Persistent backend service on VPS | 3 |
| Sprint total | 13 |
Definition of Done:
- [ ] Symfony project boots with valid
.envconfiguration - [ ] Doctrine entities created for Resource, ThematicList, Tag, Role, User, Summary
- [ ] Migrations apply cleanly on fresh database
- [ ] Monolog outputs structured JSON logs
- [ ] Slack app created in workspace with bot token
- [ ] VitePress docs deployed to GitHub Pages
Sprint 2 — Slack Ingestion (Weeks 3–4)
Sprint Goal: Users can submit pasted text from Slack via message shortcut, select a list and tags, and receive confirmation.
| Status | Story | Title | SP |
|---|---|---|---|
| ⬜ | US-001 | Submit a URL via command/action | 3 |
| ⬜ | US-003 | Submit pasted text directly | 2 |
| ⬜ | US-006 | Auto-extract metadata on ingestion | 3 |
| ⬜ | US-007 | Attach tags on submission | 2 |
| ⬜ | US-008 | Acknowledge receipt with confirmation | 1 |
| ⬜ | US-013 | Create a thematic list | 3 |
| ⬜ | US-016 | Browse all lists with resource counts | 2 |
| ⬜ | US-061 | Define role labels | 2 |
| ⬜ | US-062 | Assign role labels to users | 2 |
| ⬜ | US-047 | CRUD tags via platform | 3 |
| Sprint total | 23 |
Definition of Done:
- [ ] Slack message shortcut opens modal with list/tag/role selection
- [ ] Submitted text stored as Resource with metadata
- [ ] Thematic lists can be created and browsed
- [ ] Role labels can be defined and assigned to users
- [ ] Tags can be created, listed, and deleted
- [ ] Dutch confirmation message sent on successful submission
Sprint 3 — AI Summaries (Weeks 5–6)
Sprint Goal: AI-powered summary generation per target group in Dutch, with async processing and error handling.
| Status | Story | Title | SP |
|---|---|---|---|
| ⬜ | US-025 | Configure AI provider via environment | 3 |
| ⬜ | US-022 | Trigger AI summary on-demand | 5 |
| ⬜ | US-023 | Tailor summary to target audience role | 5 |
| ⬜ | US-024 | All summaries in Dutch | 2 |
| ⬜ | US-040 | Async processing for scraping and summarisation | 5 |
| ⬜ | US-041 | Clear error messages for users | 2 |
| ⬜ | US-015 | Assign resource to multiple lists | 2 |
| Sprint total | 24 |
Definition of Done:
- [ ] AI provider configured via
AI_PROVIDER,AI_API_KEY,AI_MODELenv vars - [ ] Summary generated asynchronously via Messenger and stored in DB
- [ ] Summaries are in Dutch regardless of source language
- [ ] Summaries are tailored per target group using prompt templates
- [ ] User notified in Slack when summary is ready
- [ ] Errors are caught, logged, and reported in Dutch
Sprint 4 — Digests & UX (Weeks 7–8)
Sprint Goal: Periodic digest generation and delivery via Slack, with help commands and preview support.
| Status | Story | Title | SP |
|---|---|---|---|
| ⬜ | US-032 | Configure digest schedule per list | 5 |
| ⬜ | US-033 | Generate digest content with summaries | 5 |
| ⬜ | US-034 | Deliver digest via platform notification | 3 |
| ⬜ | US-087 | Help command listing all commands | 2 |
| ⬜ | US-088 | Contextual help on incorrect command | 1 |
| ⬜ | US-075 | URL validation on ingestion | 2 |
| ⬜ | US-057 | View recent resources across all lists | 2 |
| Sprint total | 20 |
Definition of Done:
- [ ] Digest schedule configurable per list (weekly/biweekly/monthly)
- [ ] Digest generated with resource titles, summaries, tags, and links
- [ ] Digest delivered to Slack channel or DM
- [ ] Help command shows all available commands in Dutch
- [ ] Invalid commands get contextual suggestions
- [ ] URLs validated for reachability on submission
Sprint 5 — Search & Extensions (Weeks 9–10)
Sprint Goal: Search capabilities, REST API, incoming webhooks, and role-based auto-subscriptions.
| Status | Story | Title | SP |
|---|---|---|---|
| ⬜ | US-054 | Keyword search across resources | 5 |
| ⬜ | US-055 | Filter resources by tag, list, source type, date | 3 |
| ⬜ | US-083 | REST API for resources, lists, tags, summaries | 5 |
| ⬜ | US-086 | Incoming webhooks for external push | 3 |
| ⬜ | US-063 | Auto-subscribe users to lists by role match | 3 |
| ⬜ | US-067 | Admin vs. contributor permission levels | 3 |
| ⬜ | US-068 | Dashboard/report with system-wide statistics | 3 |
| Sprint total | 25 |
Definition of Done:
- [ ] Keyword search returns results across titles, summaries, and tags
- [ ] Filters narrow results by tag, list, source type, and date range
- [ ] REST API provides CRUD for resources, lists, tags, summaries
- [ ] Incoming webhooks accept external content push
- [ ] Users auto-subscribed to matching lists on role assignment
- [ ] Admin/contributor roles enforced on sensitive operations
Sprint 6 — Hardening & Handoff (Weeks 11–12)
Sprint Goal: Final polish, comprehensive testing, content moderation, and complete documentation for delivery.
| Status | Story | Title | SP |
|---|---|---|---|
| ⬜ | US-042 | Health-check command/endpoint | 3 |
| ⬜ | US-043 | Queue failed tasks with auto-retry | 3 |
| ⬜ | US-076 | Flag resource as low-quality | 2 |
| ⬜ | US-077 | Admin reviews flagged resources | 3 |
| ⬜ | US-027 | Manually edit a summary | 2 |
| ⬜ | US-002 | Full article text extraction from URL | 5 |
| ⬜ | — | Regression testing + bug fixes | — |
| ⬜ | — | Documentation completion + handoff | — |
| Sprint total | 18 |
Definition of Done:
- [ ] Health-check endpoint reports DB, queue, and AI provider status
- [ ] Failed Messenger tasks retry automatically with exponential backoff
- [ ] Resources can be flagged and reviewed by admins
- [ ] Summaries can be manually edited
- [ ] Full article extraction from URLs works reliably
- [ ] All documentation complete and reviewed
- [ ] System deployed and running on production VPS
Velocity Tracking
| Sprint | Planned SP | Completed SP | Notes |
|---|---|---|---|
| Sprint 1 | 13 | — | |
| Sprint 2 | 23 | — | |
| Sprint 3 | 24 | — | |
| Sprint 4 | 20 | — | |
| Sprint 5 | 25 | — | |
| Sprint 6 | 18 | — | |
| Total | 123 | — | MVP subset of 302 total SP |
Note: The 123 SP planned here represents the MVP + high-priority should-have stories. The remaining 179 SP are deferred to post-internship if time allows.