No description
  • Rust 99.4%
  • Shell 0.6%
Find a file
2026-07-26 10:35:51 +02:00
.claude feat: inicital commit 2026-07-26 10:35:51 +02:00
.sisyphus feat: inicital commit 2026-07-26 10:35:51 +02:00
bin feat: inicital commit 2026-07-26 10:35:51 +02:00
locales feat: inicital commit 2026-07-26 10:35:51 +02:00
src feat: inicital commit 2026-07-26 10:35:51 +02:00
.gitignore feat: inicital commit 2026-07-26 10:35:51 +02:00
.pre-commit-config.yaml feat: inicital commit 2026-07-26 10:35:51 +02:00
.woodpecker.yaml feat: inicital commit 2026-07-26 10:35:51 +02:00
Cargo.toml feat: inicital commit 2026-07-26 10:35:51 +02:00
CLAUDE.md feat: inicital commit 2026-07-26 10:35:51 +02:00
README.md feat: inicital commit 2026-07-26 10:35:51 +02:00

Googleplex Pomodoro

Steampunk Pomodoro Idle Game written in Rust on Bevy 0.19. Runs as a window and a system tray icon.

Features

  • Pomodoro timer with break handling and session logging.
  • Idle game progression: classes, party, beyonder paths, quests.
  • Optional Spotify integration for focus music (OAuth2 Authorization Code with PKCE, no client secret).
  • Internationalization: English, Portuguese (pt-BR), German.

Build and Run

cargo build                  # Compile the project
cargo run                    # Run the app
cargo test                   # Run all tests
cargo clippy -- -D warnings  # Lint with warnings as errors
cargo fmt --check            # Check formatting
bin/coverage.sh              # Coverage report (lib 100%, main+glue 80%, UI excluded)

A full Bevy release build takes around 5 minutes; this is normal for the stack.

Spotify Integration Setup

Spotify playback is optional. When configured, the app can pause/resume your active Spotify session during focus and break periods.

Spotify's redirect URI policy only accepts 127.0.0.1 for local development. The integration is wired to 127.0.0.1:8888.

Step-by-step:

  1. Create a Spotify app at https://developer.spotify.com/dashboard.
  2. In the app settings, add the redirect URI: http://127.0.0.1:8888/callback
  3. Export your client ID before launching the app:
    export SPOTIFY_CLIENT_ID=your_client_id
    
  4. Start the app. On first connect the system opens a browser tab for Spotify authorization. Tokens are persisted to: ~/.local/share/googleplex-pomodoro/spotify_tokens.json
  5. Subsequent launches reuse the saved tokens. If the access token expires and no refresh is available, the widget logs a warning and prompts re-auth.

Notes:

  • The integration uses Authorization Code with PKCE (S256). No client secret is required and none is stored.
  • Spotify rate limiting (HTTP 429) is not currently handled; the app is intended for personal/local use.
  • Token auto-refresh is dormant in this build. Manual reconnect is required when the access token expires.

Internationalization

Locale files live under locales/{en,pt-BR,de}/strings.json. Select a locale with the GOOGLEPLEX_LOCALE environment variable (default: en):

export GOOGLEPLEX_LOCALE=pt-BR
cargo run

Testing

cargo test                 # Unit and integration tests
bin/coverage.sh            # Tarpaulin coverage (lib 100%, main+glue 80%)

UI modules are excluded from the coverage target. The lib modules (db/, game/, timer/, audio/, i18n.rs) target 100% line coverage.

Project Status

See CLAUDE.md for the current stack, conventions, and active plan list.