Skip to content

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.

StatusStoryTitleSP
US-046All configuration via environment variables2
US-048Persist all data in relational database3
US-049Structured logging with JSON format2
US-038Command registry (scaffold)3
US-039Persistent backend service on VPS3
Sprint total13

Definition of Done:

  • [ ] Symfony project boots with valid .env configuration
  • [ ] 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.

StatusStoryTitleSP
US-001Submit a URL via command/action3
US-003Submit pasted text directly2
US-006Auto-extract metadata on ingestion3
US-007Attach tags on submission2
US-008Acknowledge receipt with confirmation1
US-013Create a thematic list3
US-016Browse all lists with resource counts2
US-061Define role labels2
US-062Assign role labels to users2
US-047CRUD tags via platform3
Sprint total23

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.

StatusStoryTitleSP
US-025Configure AI provider via environment3
US-022Trigger AI summary on-demand5
US-023Tailor summary to target audience role5
US-024All summaries in Dutch2
US-040Async processing for scraping and summarisation5
US-041Clear error messages for users2
US-015Assign resource to multiple lists2
Sprint total24

Definition of Done:

  • [ ] AI provider configured via AI_PROVIDER, AI_API_KEY, AI_MODEL env 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.

StatusStoryTitleSP
US-032Configure digest schedule per list5
US-033Generate digest content with summaries5
US-034Deliver digest via platform notification3
US-087Help command listing all commands2
US-088Contextual help on incorrect command1
US-075URL validation on ingestion2
US-057View recent resources across all lists2
Sprint total20

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.

StatusStoryTitleSP
US-054Keyword search across resources5
US-055Filter resources by tag, list, source type, date3
US-083REST API for resources, lists, tags, summaries5
US-086Incoming webhooks for external push3
US-063Auto-subscribe users to lists by role match3
US-067Admin vs. contributor permission levels3
US-068Dashboard/report with system-wide statistics3
Sprint total25

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.

StatusStoryTitleSP
US-042Health-check command/endpoint3
US-043Queue failed tasks with auto-retry3
US-076Flag resource as low-quality2
US-077Admin reviews flagged resources3
US-027Manually edit a summary2
US-002Full article text extraction from URL5
Regression testing + bug fixes
Documentation completion + handoff
Sprint total18

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

SprintPlanned SPCompleted SPNotes
Sprint 113
Sprint 223
Sprint 324
Sprint 420
Sprint 525
Sprint 618
Total123MVP 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.