Releases: davidlbowman/spotify-pomodoro
Releases · davidlbowman/spotify-pomodoro
1.4.0
Added
- Structured logging using Effect's built-in logging system (#17)
- Configurable log level via
PUBLIC_LOG_LEVELenvironment variable - Configurable log format via
PUBLIC_LOG_FORMAT(pretty/json) - Debug logging for all Effect services (Timer, SessionRepository, SpotifyClient, SpotifyAuth, Auth, AudioNotification)
- Debug logging for all API routes with request context
ServerLayerfor API routes combining SessionRepository with logging
Technical
- Centralized logging configuration in
src/effect/logging.ts Effect.annotateLogsfor structured log contextEffect.withLogSpanfor operation duration tracking- Pretty logger in development, JSON logger in production (configurable)
Full Changelog: 1.3.0...1.4.0
1.3.0
Added
- GitHub-style contribution graph showing daily pomodoro activity (#22)
- Year selector to view historical data across multiple years
- Time period tabs: Today, Week, Month, Year, All
- Seed script for testing stats with multi-year data
Changed
- Stats now show full historical data (removed 365-day limit)
- Consistent calculation across all time periods
Full Changelog: 1.2.0...1.3.0
1.2.0
Added
- Stop button to end pomodoro without auto-transitioning (#19)
Changed
- Keybinds updated: B=start break, F=start focus, E=end pomodoro
- Removed timer pause functionality (simpler UX)
Full Changelog: 1.1.0...1.2.0
1.1.0
See CHANGELOG.md for details.
1.0.0
What's New
Timer Presets
- Short (15/3), Classic (25/5), Long (50/10) - no more custom configuration
- Simplified UI with preset selector
Docker Deployment
- Production-ready Docker Compose setup
- Multi-stage Dockerfile with
oven/bun:1-slimbase - Health check endpoint (
/api/health) - SQLite persistence via named volume
- Coolify-compatible deployment
Server-Side OAuth
- PKCE flow moved to server endpoints for HTTP compatibility
- Works on
localhost/127.0.0.1without HTTPS - Production deployments use HTTPS with custom domain
Technical Improvements
- Switched from better-sqlite3 to libsql for Bun runtime compatibility
- Astro sessions for secure PKCE state management
- PR template with CONTRIBUTING.md checklist
Documentation
- README rewritten with local vs HTTPS setup options
- CLAUDE.md updated with OAuth architecture explanation
- CHANGELOG updated for all releases
Full Changelog: 0.2.0...1.0.0
0.2.0
What's New
Stats Dashboard
- 📊 New stats dialog showing focus/break time totals, streaks, and daily counts
- Automatic session recording on phase transitions
- Overtime tracking (time spent past configured duration)
SQLite Database with Drizzle ORM
- Local SQLite persistence for all session data
- 3-table normalized schema:
pomodoros,focus_sessions,break_sessions - Migration system via
bun run db:generateandbun run db:migrate - Database studio via
bun run db:studio
Timer Improvements
- New workflow: End Early (E key) or Skip (S key during overtime) - no pause
- Timer presets: Classic (25/5), Long Focus (50/10), Short Sprint (15/3), Custom
- Phase-aware contextual help text
Testing
- 49 unit tests with @effect/vitest
- Timer service tests (33) and SessionRepository tests (16)
- Tests integrated into CI pipeline
Technical
- SSR mode with @astrojs/node adapter
- 7 API endpoints for session CRUD operations
- SessionRepository Effect service with full CRUD + stats
Breaking Changes
- Pause functionality removed in favor of End Early/Skip workflow
- Timer philosophy: commit to the session, end intentionally if needed
Getting Started
bun install
bun run db:migrate # Initialize empty database
bun run devFull Changelog: 0.1.0...0.2.0
0.1.0
Fixed
- PKCE challenge not found error on initial Spotify authentication (#7)
- Spotify autoplay not working when Spotify app is already open but paused (#8)
- AudioContext autoplay policy warning in browser console
Changed
- Development server now runs on port 2500
- AudioContext is lazy-initialized on first timer completion instead of on page load
Full Changelog: 0.0.2...0.1.0
0.0.2
Fixed
- Vinyl record now spins immediately on first play (previously required double click)
- CSS
@importorder warning from PostCSS (moved Google Fonts import to top of file) - README documentation now uses
127.0.0.1instead oflocalhostfor Spotify redirect URI
Changed
- New lofi-style favicon (vinyl record with tomato/pomodoro center)
Full Changelog: 0.0.1...0.0.2
0.0.1
Added
- Pomodoro timer with configurable focus and break durations
- Overtime mode - timer counts up after completion so you decide when to take a break
- Spotify OAuth integration (PKCE flow)
- Playlist selection with auto-shuffle and repeat
- Phase badges (FOCUS/BREAK/OVERTIME) above timer display
- Light/dark theme toggle
- Keyboard controls (Space/Enter to start/pause, R to reset, S to switch phase)
- Audio notification when timer ends
- Lofi aesthetic UI design
Technical
- Built with Astro, React, Tailwind CSS v4, and shadcn/ui
- State management with Effect-TS services
- Spotify Web API integration for playback control