Files

27 lines
1.2 KiB
Markdown

# Raccoon Timekeeper
Self-hosted, multi-user weekly time tracking app with a raccoon-themed grayscale UI. Originally a Google Apps Script / Sheets tool, rewritten in Flask.
**Repository:** https://gitea.hideawaygaming.com.au/jessikitty/Raccoon-TimeKeeper
## Architecture
- **App:** `app.py` — Flask + Flask-SQLAlchemy + Flask-Login; models, routes, JSON API and CLI commands in one module
- **Storage:** SQLite by default (`DATABASE_URL`), initialised at import time so it works under gunicorn
- **UI:** Jinja templates in `templates/`, JS/CSS in `static/`
- **Deploy:** Docker + docker-compose, gunicorn
## Security Model
- First-run setup page creates the admin; no default credentials
- Every API query scoped to `current_user.id`
- Admins manage users but cannot deactivate/demote/delete themselves
- Recovery via `flask reset-admin` (shell access required)
## Conventions
- Dates in front-end JS are always formatted in local time — never `toISOString()`
## Session Log
- 2025-12-10 — Flask Multi-User Rewrite of Raccoon Timekeeper — Ported from Apps Script to Flask with auth/user isolation; fixed gunicorn DB init and UTC week-shift bugs
---
*Created by: Jess Rogerson (yelling commands at Claude.AI)*