# 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)*