feat: initial dashboard implementation and robust attendance parsing

- Added a Makefile to easily run project scripts (fees, match, web, image)
- Modified attendance.py to dynamically handle a variable number of header rows from the Google Sheet
- Updated both attendance calculations and calculate_fees terminal output to show actual attendance counts (e.g., '750 CZK (3)')
- Created a Flask web dashboard (app.py and templates/fees.html) to view member fees in an attractive, condensed, terminal-like UI
- Bound the Flask server to port 5000 and added a routing alias from '/' to '/fees'
- Configured Python virtual environment (.venv) creation directly into the Makefile to resolve global pip install errors on macOS

Co-authored-by: Antigravity <antigravity@deepmind.com>
This commit is contained in:
Jan Novak
2026-02-27 13:19:00 +01:00
commit 3bfea4e0a4
16 changed files with 1322 additions and 0 deletions

6
build/.dockerignore Normal file
View File

@@ -0,0 +1,6 @@
.git
.venv
__pycache__
*.pyc
.claude
.gemini

25
build/Dockerfile Normal file
View File

@@ -0,0 +1,25 @@
FROM python:3.13-alpine
RUN apk add --no-cache bash tzdata \
&& cp /usr/share/zoneinfo/Europe/Prague /etc/localtime \
&& echo "Europe/Prague" > /etc/timezone
ENV PYTHONUNBUFFERED=1
WORKDIR /app
RUN pip install --no-cache-dir flask
COPY app.py Makefile ./
COPY scripts/ ./scripts/
COPY templates/ ./templates/
COPY build/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
EXPOSE 5001
HEALTHCHECK --interval=60s --timeout=5s --start-period=5s \
CMD wget -q -O /dev/null http://localhost:5001/ || exit 1
ENTRYPOINT ["/entrypoint.sh"]

8
build/entrypoint.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
echo "[entrypoint] Starting Flask app on port 5001..."
# Running the app directly via python
# For a production setup, we would ideally use gunicorn/waitress, but sticking to what's in app.py for now.
exec python3 /app/app.py