Skip to content

Releases: davidlbowman/spotify-pomodoro

1.4.0

15 Dec 23:08
bbcd2dc

Choose a tag to compare

Added

  • Structured logging using Effect's built-in logging system (#17)
  • Configurable log level via PUBLIC_LOG_LEVEL environment 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
  • ServerLayer for API routes combining SessionRepository with logging

Technical

  • Centralized logging configuration in src/effect/logging.ts
  • Effect.annotateLogs for structured log context
  • Effect.withLogSpan for operation duration tracking
  • Pretty logger in development, JSON logger in production (configurable)

Full Changelog: 1.3.0...1.4.0

1.3.0

11 Dec 22:40

Choose a tag to compare

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

11 Dec 22:02

Choose a tag to compare

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

11 Dec 15:46
9c44f37

Choose a tag to compare

See CHANGELOG.md for details.

1.0.0

10 Dec 19:52
fb1c530

Choose a tag to compare

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-slim base
  • 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.1 without 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

10 Dec 16:56

Choose a tag to compare

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:generate and bun 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 dev

Full Changelog: 0.1.0...0.2.0

0.1.0

10 Dec 16:56
43188c1

Choose a tag to compare

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

10 Dec 16:56
1d6292f

Choose a tag to compare

Fixed

  • Vinyl record now spins immediately on first play (previously required double click)
  • CSS @import order warning from PostCSS (moved Google Fonts import to top of file)
  • README documentation now uses 127.0.0.1 instead of localhost for 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

10 Dec 16:56

Choose a tag to compare

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