Compare commits
base: lukas/timetracker:container-improvements
lukas/timetracker:main
lukas/timetracker:container-improvements
lukas/timetracker:remove_editions
lukas/timetracker:filters_finally
lukas/timetracker:filters-wip
lukas/timetracker:filters
lukas/timetracker:css_experiment
lukas/timetracker:purchase_state
lukas/timetracker:add-frontend
lukas/timetracker:fix-splitdatetimefield
lukas/timetracker:fix-csrf
lukas/timetracker:v1.7.0
lukas/timetracker:v1.6.1
lukas/timetracker:1.6.0
lukas/timetracker:1.5.2
lukas/timetracker:1.5.1
lukas/timetracker:1.5.0
lukas/timetracker:1.4.0
lukas/timetracker:1.3.0
lukas/timetracker:1.2.0
lukas/timetracker:1.1.2
lukas/timetracker:1.1.1
lukas/timetracker:1.1.0
lukas/timetracker:1.0.3
lukas/timetracker:1.0.2
lukas/timetracker:1.0.1
lukas/timetracker:1.0.0
lukas/timetracker:0.2.5
lukas/timetracker:0.2.4
lukas/timetracker:0.2.3
lukas/timetracker:0.2.2
lukas/timetracker:0.2.1
lukas/timetracker:0.2.0
lukas/timetracker:0.1.4
lukas/timetracker:0.1.3
lukas/timetracker:0.1.2
lukas/timetracker:0.1.1
lukas/timetracker:0.1.0
..
compare: lukas/timetracker:36411c99a70987254873171c2cf6349b39fff7cb
lukas/timetracker:main
lukas/timetracker:container-improvements
lukas/timetracker:remove_editions
lukas/timetracker:filters_finally
lukas/timetracker:filters-wip
lukas/timetracker:filters
lukas/timetracker:css_experiment
lukas/timetracker:purchase_state
lukas/timetracker:add-frontend
lukas/timetracker:fix-splitdatetimefield
lukas/timetracker:fix-csrf
lukas/timetracker:v1.7.0
lukas/timetracker:v1.6.1
lukas/timetracker:1.6.0
lukas/timetracker:1.5.2
lukas/timetracker:1.5.1
lukas/timetracker:1.5.0
lukas/timetracker:1.4.0
lukas/timetracker:1.3.0
lukas/timetracker:1.2.0
lukas/timetracker:1.1.2
lukas/timetracker:1.1.1
lukas/timetracker:1.1.0
lukas/timetracker:1.0.3
lukas/timetracker:1.0.2
lukas/timetracker:1.0.1
lukas/timetracker:1.0.0
lukas/timetracker:0.2.5
lukas/timetracker:0.2.4
lukas/timetracker:0.2.3
lukas/timetracker:0.2.2
lukas/timetracker:0.2.1
lukas/timetracker:0.2.0
lukas/timetracker:0.1.4
lukas/timetracker:0.1.3
lukas/timetracker:0.1.2
lukas/timetracker:0.1.1
lukas/timetracker:0.1.0
2 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
36411c99a7
|
Version 1.7.0
## 1.7.0 / 2026-05-12 ### New * Add toast notification system with HTMX middleware integration * Add component system (Cotton-based): button, modal, table_row, search_field, gamelink * Add needs_price_update field to Purchase model for reliable price change detection * Add confirmation dialog before deleting a game * Add game status information documentation (STATUSES.md) * Allow directly updating device in session list via inline selector * Migrate from Poetry to uv for Python dependency management * Scope URLs to the games namespace * Start session template shared between add and edit views ### Improved * Major style overhaul: CSS variables, improved dark mode, Flowbite 4.x upgrade * Improve game status evaluation and add abandon prompt on refund * Robustify Docker container and fix default database location * Make component rendering deterministic for improved caching * Component caching: deterministic randomid generation * Component test suite with 1000+ lines of tests * Make tests more robust with django-pytest * Update NameWithIcon component: testable, fixed platform extraction bug * Pin Caddy version and improve make dev-prod * Add .env.example documenting environment variables * Unify A() component with explicit url_name vs href parameters ### Fixed * Fix refund confirmation not working * Fix stats view missing first and last game values * Fix A() component silent fallback on URL typos * Fix secondary submit buttons not working * Fix button not passing attributes * Fix default mutable arguments in component functions * Fix extra submit button when adding purchase * Fix pointer cursor on search field button ### Removed * Remove GraphQL API ### Dependencies * Update django-ninja to 1.6.2 |
||
|
|
360e8f9eaf |
Make container more robust (#95)
Reviewed-on: #95 12 files changed (+149, -66) Key changes: 1. Monolithic container — Replaced the two-service compose setup (backend + frontend/caddy) with a single timetracker container. Caddy is now built into the image rather than running as a separate container. 2. Supervisord process manager — Added supervisor.conf and installed supervisor in the Dockerfile. entrypoint.sh now delegates to supervisord to manage three processes: Caddy, Gunicorn, and Qcluster — replacing manual trap/signaling logic. 3. Bundled Caddy — The Dockerfile now downloads and installs Caddy v2.9.1 directly into the image (/usr/local/bin/caddy). The Caddyfile was updated to use reverse_proxy localhost:8001 and serves static files from /home/timetracker/app/static. 4. Configurable deployment — Added .env.example with configurable environment variables: TZ, PUID/PGID, TIMETRACKER_EXTERNAL_PORT, DATA_DIR, CSRF_TRUSTED_ORIGINS. docker-compose.yml now references these with sensible defaults. 5. UID/GID flexibility — entrypoint.sh uses usermod/groupmod at startup to remap the timetracker user to the host-specified PUID/PGID, avoiding permission issues with mounted volumes. 6. Database & static files — settings.py now respects DATA_DIR env var for the SQLite database path. STATIC_ROOT changed to BASE_DIR / "static". 7. Dev improvements — New Caddyfile.dev (with browse enabled for static files) and updated Makefile dev-prod target runs Caddy alongside Django in development. 8. Tests — Re-enabled the test step in the Docker build GitHub Actions workflow. |