Skip to main content

Cozy reminders for developers to drink water, rest eyes, and stretch.

Project description

Courant

CI License: MIT Python

A cozy reminder for developers — drink water, rest your eyes, stretch.

Linux desktop app that fires customizable system notifications, tracks your daily progress, and serves a small web UI on localhost:8765 for CRUD and stats. The UI features a full-screen ambient scene (ocean depth, rain, sunset, forest, or night sky) with a glassmorphism panel on top. The product name "Courant" means current / flow in French — the gentle stream that nudges you toward healthier breaks.

Status

  • ✅ Phase 1 — Core CLI + desktop notifications working end-to-end
  • ✅ Phase 2 — Functional web UI (FastAPI + HTMX)
  • ✅ Phase 3 — Cozy aesthetic with ambient scenes (ocean, rain, sunset, forest, night)
  • ✅ Phase 4 — systemd integration + PyPI publish + ambient audio

Quick start

pipx install courant
courant install-scenes        # ~10 MB of ambient videos
courant install-audio         # ~2 MB of ambient sounds (optional)
courant install               # creates a systemd user service (auto-starts at login)

The web UI is at http://localhost:8765.

Manual / dev install

git clone https://github.com/BryanBradfo/courant
cd courant
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
courant install-scenes

courant start    # foreground daemon
courant status   # (in another terminal) see configured reminders
# Ctrl+C in the daemon terminal to stop

On first launch, three default reminders are seeded:

Reminder Interval Tracking
Drink water 45 min Yes (8 glasses/day goal)
Eye break (20-20-20) 20 min No
Stretch 90 min No

All reminders fire only between 09:00–18:00 on weekdays by default. You can customize all of this from the web UI at http://localhost:8765/reminders while the daemon is running, or directly in the SQLite database at ~/.local/share/courant/courant.db.

Installing the ambient scenes

Courant uses 6 looping background videos (~10 MB total, re-encoded from larger originals) for the cozy aesthetic. They are not bundled in the repo — fetch them with :

courant install-scenes

Progress is shown per scene. Files land in ~/.local/share/courant/videos/. If some downloads fail, re-run the command — it skips already-installed scenes.

Until you install them, you'll see a fallback gradient background.

Usage

After courant start, point your browser at http://localhost:8765 :

  • Dashboard — see each reminder's daily progress and click +1 to log a hit
  • Reminders — create / edit / disable / delete reminders
  • Stats — daily progress per reminder
  • Settings — global preferences (e.g. snooze duration)

Notifications fire on the desktop via D-Bus as configured. Clicking a notification action ("+1 glass" or "Snooze 10 min") records an event in the same database the web UI reads from — both views stay in sync.

Scenes

Courant ships with 5 ambient scenes you can choose from in Settings :

Scene Vibe
Ocean depth Bubbles rising through a deep-blue gradient
Rainy window Diagonal rain streaks on a gray-blue sky with a warm glow indoors
Sunset beach Orange-violet sky with animated waves
Forest stream Autumn leaves falling through green god-rays
Calm night Twinkling stars and a moon glow

Want to add your own ? See docs/ADDING_A_SCENE.md.

Tests

pytest -v

Currently 84 tests covering models, SQLite repository, business logic, scheduler integration, the FastAPI web UI, and CLI smoke tests (including a subprocess test that verifies the daemon actually serves HTTP).

Roadmap

This is a phased build. See docs/superpowers/specs/ for the design spec (currently in French, English translation welcome) and docs/superpowers/plans/ for phase-by-phase implementation plans.

Contributions are welcome — especially:

  • Translations of user-facing strings and design docs
  • New ambient scenes (each scene is a self-contained Canvas module — see docs/ADDING_A_SCENE.md)
  • Bug reports from running on non-GNOME desktops (Plasma, XFCE, Hyprland…)

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

courant-0.1.2.tar.gz (110.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

courant-0.1.2-py3-none-any.whl (37.9 kB view details)

Uploaded Python 3

File details

Details for the file courant-0.1.2.tar.gz.

File metadata

  • Download URL: courant-0.1.2.tar.gz
  • Upload date:
  • Size: 110.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for courant-0.1.2.tar.gz
Algorithm Hash digest
SHA256 a206a27fa794cc33064a5e32026bd48b8798917b3c3e5d7f80c7787449c19234
MD5 7d95bf72805c6dac8930312a620c3d0c
BLAKE2b-256 89d589807a8cba8fbf59e2f9aa976a37157431e8b28535829e2970ecd70f02be

See more details on using hashes here.

Provenance

The following attestation bundles were made for courant-0.1.2.tar.gz:

Publisher: publish.yml on BryanBradfo/courant

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file courant-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: courant-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 37.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for courant-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 033b4f9ec999c8a7c9a59b0a850c815e4b88a61500c7ac7b2f4175a9d90b8c03
MD5 faa28039d7d3e04196a5cd64e86b8962
BLAKE2b-256 af45c2c150d4815ca76f1a2628e9d51b260895e4ab774d7928965f053631d2b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for courant-0.1.2-py3-none-any.whl:

Publisher: publish.yml on BryanBradfo/courant

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page