Skip to content

Commit d99530c

Browse files
authored
feat: v0.0.1 release (#1)
* feat: implement v0.0.1 Spotify Pomodoro MVP - Add Effect-based services for Spotify auth (PKCE flow), playback, and timer - Create React components: Timer, Settings, Playlist selector, Login - Implement configurable focus/break durations with overtime counting - Add Web Audio notification sound when timer ends - Disable tracer propagation to fix CORS issues with Spotify API - Add shadcn/ui components (Card, Input, Label, Select, Slider) - Configure HTTPS for local development (Spotify requirement) * feat: redesign UI with lofi aesthetic - Add warm, cozy color palette with soft purples, pinks, and sage greens - Implement LofiTimer with integrated duration editing (click minutes to edit) - Add VinylPlayer component with spinning record and album art - Include duration presets, phase-based glow effects, and noise texture overlay - Use Lexend and Space Mono fonts for distinctive typography * feat: add light/dark theme toggle and improve layout - Add light mode with warm paper/cream aesthetic - Theme toggle button in top-right corner with sun/moon icons - Much larger timer display (2-3x) using responsive clamp() sizing - Move vinyl player below timer, now horizontal and more compact - Add footer attribution with GitHub link to David L Bowman - Use CSS custom properties for theme-aware colors * refactor: streamline UI with larger elements and keyboard controls - Consolidate into single centered App component - Remove LofiTimer and VinylPlayer separate components - Remove "READY", "click minutes to edit", and preset buttons - Add keyboard controls: space/enter start/pause, r reset, s switch - Display contextual keyboard hints below timer - Increase timer size 50% (clamp 6-15rem) - Increase vinyl 30% (w-14 -> w-[4.5rem]) - Increase playlist selector 30% with wider dropdown - Footer links to spotify-pomodoro repo instead of author * refactor: streamline UI and remove phase indicator - Consolidate into single centered App component - Remove LofiTimer and VinylPlayer separate components - Remove phase indicator, presets, and verbose hints - Add keyboard controls: space/enter start/pause, r reset, s switch - Increase timer size 50%, vinyl 30%, playlist selector 30% - Footer links to spotify-pomodoro repo * style: improve light mode readability and fix timer sizing - Darken light mode colors for better contrast and readability - Add light mode vinyl color (warm taupe instead of dark) - Remove blinking colon animation - Fix button font-size inheritance so minutes/seconds match * feat: add phase badges, Spotify shuffle/repeat, and louder notifications - Add FOCUS/BREAK/OVERTIME badges above timer display - Auto-enable shuffle and repeat when selecting a playlist - Increase notification sound volume 3x for better audibility * docs: add JSDoc comments following kavita-to-obsidian style - Add @module, @SInCE, @category tags to all files - Document services, schemas, errors, hooks, and components - Use inline /** comments */ for schema fields - Remove all non-JSDoc comments * docs: add release documentation and CI workflow - Update README with detailed Spotify setup instructions - Add CONTRIBUTING.md with JSDoc and Effect-TS conventions - Update CLAUDE.md with project structure and code conventions - Add GitHub issue templates (bug report, feature request) - Add CI workflow for lint and typecheck * docs: add CHANGELOG for v0.0.1
1 parent 5c0ff36 commit d99530c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+3673
-101
lines changed

.env.example

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Spotify App Credentials
2+
# Create an app at https://developer.spotify.com/dashboard
3+
PUBLIC_SPOTIFY_CLIENT_ID=your_client_id_here
4+
PUBLIC_SPOTIFY_REDIRECT_URI=http://localhost:4321/callback
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
---
2+
name: Bug Report
3+
about: Report a bug or unexpected behavior
4+
title: ''
5+
labels: bug
6+
assignees: ''
7+
---
8+
9+
## Description
10+
11+
A clear description of the bug.
12+
13+
## Steps to Reproduce
14+
15+
1. Go to '...'
16+
2. Click on '...'
17+
3. See error
18+
19+
## Expected Behavior
20+
21+
What you expected to happen.
22+
23+
## Actual Behavior
24+
25+
What actually happened.
26+
27+
## Environment
28+
29+
- Browser: [e.g., Chrome 120]
30+
- OS: [e.g., Windows 11]
31+
- Spotify account type: [Free/Premium]
32+
33+
## Screenshots
34+
35+
If applicable, add screenshots.
36+
37+
## Additional Context
38+
39+
Any other relevant information.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
name: Feature Request
3+
about: Suggest a new feature or enhancement
4+
title: ''
5+
labels: enhancement
6+
assignees: ''
7+
---
8+
9+
## Problem
10+
11+
Describe the problem or limitation you're facing.
12+
13+
## Proposed Solution
14+
15+
Describe what you'd like to happen.
16+
17+
## Alternatives Considered
18+
19+
Any alternative solutions you've considered.
20+
21+
## Additional Context
22+
23+
Any other relevant information or screenshots.

.github/workflows/ci.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
lint:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v4
14+
15+
- uses: oven-sh/setup-bun@v2
16+
with:
17+
bun-version: latest
18+
19+
- name: Install dependencies
20+
run: bun install --frozen-lockfile
21+
22+
- name: Lint
23+
run: bun run lint
24+
25+
- name: Typecheck
26+
run: bun run typecheck

CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [0.0.1] - 2025-12-07
9+
10+
### Added
11+
12+
- Pomodoro timer with configurable focus and break durations
13+
- Overtime mode - timer counts up after completion so you decide when to take a break
14+
- Spotify OAuth integration (PKCE flow)
15+
- Playlist selection with auto-shuffle and repeat
16+
- Phase badges (FOCUS/BREAK/OVERTIME) above timer display
17+
- Light/dark theme toggle
18+
- Keyboard controls (Space/Enter to start/pause, R to reset, S to switch phase)
19+
- Audio notification when timer ends
20+
- Lofi aesthetic UI design
21+
22+
### Technical
23+
24+
- Built with Astro, React, Tailwind CSS v4, and shadcn/ui
25+
- State management with Effect-TS services
26+
- Spotify Web API integration for playback control
27+
- JSDoc documentation throughout codebase

CLAUDE.md

Lines changed: 69 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,89 @@
11
# Spotify Pomodoro
22

3-
A Spotify-integrated pomodoro timer app.
3+
A Spotify-integrated pomodoro timer app with a lofi aesthetic.
44

55
## Tech Stack
66

77
- **Runtime**: Bun
88
- **Framework**: Astro with React
99
- **Styling**: Tailwind CSS v4 + shadcn/ui
10+
- **State Management**: Effect-TS
1011
- **Linting/Formatting**: Biome
1112

1213
## Commands
1314

14-
- `bun run dev` - Start development server
15-
- `bun run build` - Build for production
16-
- `bun run preview` - Preview production build
17-
- `bun run lint` - Check linting
18-
- `bun run lint:fix` - Fix linting issues
19-
- `bun run typecheck` - Run type checking
15+
| Command | Description |
16+
|---------|-------------|
17+
| `bun run dev` | Start development server |
18+
| `bun run build` | Build for production |
19+
| `bun run preview` | Preview production build |
20+
| `bun run lint` | Check linting |
21+
| `bun run lint:fix` | Fix linting issues |
22+
| `bun run typecheck` | Run type checking |
2023

2124
## Project Structure
2225

23-
- `src/pages/` - Astro pages
24-
- `src/components/ui/` - shadcn/ui components
25-
- `src/styles/` - Global CSS with Tailwind
26-
- `src/lib/` - Utility functions
26+
```
27+
src/
28+
├── pages/ # Astro pages
29+
├── components/ # React components
30+
│ └── ui/ # shadcn/ui components
31+
├── hooks/ # React hooks (useTimer, useSpotify)
32+
├── effect/
33+
│ ├── services/ # Effect services (Timer, SpotifyClient, etc.)
34+
│ ├── schema/ # Effect Schema definitions
35+
│ └── errors/ # Tagged error types
36+
├── lib/ # Utility functions
37+
└── styles/ # Global CSS with Tailwind
38+
```
2739

28-
## Notes
40+
## Code Conventions
41+
42+
### Comments
43+
44+
**Use JSDoc only.** No inline comments (`//`) or block comments (`/* */`).
45+
46+
```typescript
47+
/**
48+
* Service description.
49+
* @since 0.0.1
50+
* @category Services
51+
*/
52+
export class MyService extends Effect.Service<MyService>()("MyService", {
53+
// ...
54+
}) {}
55+
```
56+
57+
Required JSDoc tags:
58+
- `@module` at file level
59+
- `@since` version tag on all exports
60+
- `@category` to group related exports (Services, Errors, Schemas, Components, Hooks)
61+
62+
### Effect-TS Services
63+
64+
All services use `Effect.Service` pattern:
65+
- Include `accessors: true` (except config services using `sync`)
66+
- Declare dependencies explicitly in `dependencies` array
67+
- Use `Schema.TaggedError` for error types
68+
69+
### Imports
2970

3071
- Use `@/` path alias for imports from `src/`
72+
- Group imports: effect libs, third-party, local
73+
74+
### Astro/React
75+
3176
- React components need `client:load` directive in Astro for interactivity
77+
- Keep components focused and composable
78+
79+
## Environment Variables
80+
81+
Required for Spotify integration:
82+
- `PUBLIC_SPOTIFY_CLIENT_ID` - Spotify app client ID
83+
- `PUBLIC_SPOTIFY_REDIRECT_URI` - OAuth callback URL
84+
85+
## Notes
86+
3287
- Biome is configured to skip Tailwind CSS files (global.css)
88+
- Timer uses countdown then overtime behavior (counts up after hitting zero)
89+
- Spotify playback requires an active device

0 commit comments

Comments
 (0)