# Cary Swim Club Check-In A lightweight Flask + SQLite app for managing pool member check-ins, families, and swim-test status. Inspired by pooldues.com ## Features - Family and individual member management - Check-in/check-out tracking - Swim-test tracking with an age-based rule (`DEFAULT_MIN_SWIM_TEST_AGE` in `main.py`) - Family guest pass tracking - Search-focused dashboards for active check-ins and family records - Admin utilities for backups, CSV export, DB maintenance, and bulk resets ## Tech Stack - Python - Flask - SQLite - Static HTML/CSS/JavaScript front-end ## Project Structure - `main.py`: Flask server, API routes, and SQLite schema initialization - `index.html`: Main dashboard/check-in experience - `family.html`: Family-specific detail and check-in page - `manage.html`: Management/admin interface - `pool_checkin.sqlite3`: Primary SQLite database - `backups/`: Generated SQLite backups - `exports/`: Generated CSV exports ## Getting Started ### 1. Create and activate a virtual environment (optional but recommended) PowerShell: ```powershell python -m venv .venv .\.venv\Scripts\Activate.ps1 ``` ### 2. Install dependencies ```powershell pip install flask ``` ### 3. Run the app ```powershell python main.py ``` The app starts on Flask's default URL: - `http://127.0.0.1:5000/` On first run, required folders and database tables are created automatically. ## Main Routes - `/`: Main check-in dashboard (`index.html`) - `/family/`: Family page (`family.html`) - `/manage`: Management page (`manage.html`) ## API Overview ### Dashboard and listings - `GET /api/dashboard` - `GET /api/checked-in` - `GET /api/individuals` - `GET /api/families` - `GET /api/families/` ### Family and member updates - `POST /api/families` - `DELETE /api/families/` - `PATCH /api/families//guest-passes` - `POST /api/members` - `PATCH /api/members//checkin` - `PATCH /api/members//swim-test` ### Admin utilities - `POST /api/admin/backup` - `POST /api/admin/export` - `POST /api/admin/reindex` - `POST /api/admin/vacuum` - `POST /api/admin/reset-checkins` - `POST /api/admin/reset-swim-tests` - `POST /api/admin/cleanup-orphan-members` ## Data Notes - Phone numbers are normalized when families are created. - Swim-test requirement is based on age and `DEFAULT_MIN_SWIM_TEST_AGE` in `main.py`. - Exports are written as timestamped CSV files in `exports/`. - Backups are written as timestamped SQLite files in `backups/`. ## Operational Tips - Keep regular DB backups using `POST /api/admin/backup`. - Run `POST /api/admin/vacuum` periodically if the database grows after lots of deletes. - Use `POST /api/admin/export` for reporting snapshots.