kimai-plugin-heatmap/.planning/RETROSPECTIVE.md
Christopher Mühl 244c7c66fc
chore: archive v1.0 milestone
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 23:25:26 +02:00

46 lines
1.9 KiB
Markdown

# Retrospective
## Milestone: v1.0 — MVP
**Shipped:** 2026-04-08
**Phases:** 5 | **Plans:** 11
### What Was Built
- Nix devshell with process-compose orchestrating MariaDB + Kimai dev server
- HeatmapService with timezone-correct daily aggregation and PHPUnit tests
- d3.js calendar heatmap with color scale, labels, tooltips, Kimai theme integration
- Click-through navigation to Kimai timesheet + project filter dropdown
- Streak indicator, summary stats, weekend styling, week-start preference
- 30+ tests across PHPUnit and Vitest
### What Worked
- Single-day delivery from zero to shipped plugin — tight phase scoping kept momentum
- TDD approach caught real issues (bootstrap paths, final class mocking)
- Process-compose made the multi-service dev environment ergonomic
- IIFE bundle strategy avoided Kimai's Webpack Encore complexity entirely
### What Was Inefficient
- SUMMARY files not written for several phases (bookkeeping debt accumulated)
- REQUIREMENTS.md checkboxes fell out of sync (7/22 checked despite all shipped)
- Phase directory naming inconsistent (phase-2/, phase-3/ vs phases/01-dev-environment/, phases/04-heatmap-interaction/)
### Patterns Established
- Ship prebuilt JS in Resources/public/ — don't hook into host app build pipeline
- kimai.initialized event + javascriptRequest fallback for widget lifecycle
- Callback injection pattern for cell interaction (onCellClick)
- Flex wrapper layout for widget + sidebar controls
### Key Lessons
- Activity filtering was correctly descoped — project filter covers personal use
- Kimai's Tabler theme lacks green scale CSS vars, so hardcoded greens were pragmatic
- PHPUnit mocking requires non-final classes — caught early, would bite harder at scale
## Cross-Milestone Trends
| Metric | v1.0 |
|--------|------|
| Phases | 5 |
| Plans | 11 |
| Timeline | 1 day |
| Source LOC | ~650 |
| Test LOC | ~730 |