docs: update comments, docstrings, README, REVIEW, and env docs to match current features

This commit is contained in:
Troll (Hermes Agent) 2026-08-03 00:11:41 +00:00
parent 0aa3eab084
commit e46893e0b4
12 changed files with 65 additions and 25 deletions

View file

@ -11,12 +11,18 @@
# PUBLIC_BASE_URL - public HTTPS URL customers will use (e.g. https://booth.example.com) # PUBLIC_BASE_URL - public HTTPS URL customers will use (e.g. https://booth.example.com)
# #
# Optional: # Optional:
# BOOTH_NAME - name shown in emails # BOOTH_NAME - name shown in emails and customer text (default Trollgorithm Theme Songs)
# HOST_PORT - host-side port mapping for docker-compose (default 127.0.0.1:8000) # HOST_PORT - host-side port mapping for docker-compose (default 127.0.0.1:8000)
# INTERNAL_PORT - port gunicorn binds inside the container (default 8000) # INTERNAL_PORT - port gunicorn binds inside the container (default 8000)
# PRICE_PER_VERSION - shown on the receipt page (default 10.00) # PRICE_PER_VERSION - shown on the receipt page (default 10.00)
# CURRENCY - currency label (default CAD) # CURRENCY - currency label (default CAD)
# ADMIN_ALERT_EMAIL - unused; dashboard is the operator queue # MAX_REVISIONS - default customer revision limit (default 2)
# DATABASE - SQLite database path inside the container (default /app/data/booth.db)
# UPLOAD_FOLDER - directory for uploaded MP3s inside the container (default /app/uploads)
# SMTP_HOST - outgoing mail server (default mailroot8.namespro.ca)
# SMTP_PORT - outgoing mail server port (default 465)
# SMTP_USER - SMTP login username (default ai@hallsworth.ca)
# SMTP_FROM - From address for customer emails (default ai@hallsworth.ca)
APP_SECRET_KEY=change-me-in-production APP_SECRET_KEY=change-me-in-production
ADMIN_PASSWORD=change-me ADMIN_PASSWORD=change-me
@ -32,5 +38,6 @@ INTERNAL_PORT=8000
HOST_PORT=127.0.0.1:8000 HOST_PORT=127.0.0.1:8000
PRICE_PER_VERSION=10.00 PRICE_PER_VERSION=10.00
CURRENCY=CAD CURRENCY=CAD
MAX_REVISIONS=2
DATABASE=/app/data/booth.db DATABASE=/app/data/booth.db
UPLOAD_FOLDER=/app/uploads UPLOAD_FOLDER=/app/uploads

View file

@ -10,6 +10,9 @@
# 4. Copy the entire repo into /app. # 4. Copy the entire repo into /app.
# 5. Create an unprivileged user (boothuser) and data/upload directories. # 5. Create an unprivileged user (boothuser) and data/upload directories.
# 6. Expose the default internal port and run gunicorn on $INTERNAL_PORT. # 6. Expose the default internal port and run gunicorn on $INTERNAL_PORT.
#
# Environment: expects INTERNAL_PORT (default 8000) and the variables listed
# in config.py/.env.example to be supplied at runtime by docker-compose.
FROM python:3.12-slim FROM python:3.12-slim

View file

@ -3,14 +3,30 @@ config.py
========= =========
Configuration object loaded by Flask from environment variables. Configuration object loaded by Flask from environment variables.
Most operational settings are now editable at runtime from /admin/settings Most operational settings are editable at runtime from /admin/settings and
and stored in booth_settings.json on disk. Sensitive email credentials are stored in booth_settings.json on disk. Sensitive values (SMTP password) are
encrypted with the Flask SECRET_KEY when saved. encrypted with the Flask SECRET_KEY when saved.
Required environment values: Environment variables (defaults shown):
- APP_SECRET_KEY (used to sign sessions and encrypt stored settings) Required:
- ADMIN_PASSWORD (plain-text login password) - APP_SECRET_KEY long random string for Flask sessions and encryption
- PUBLIC_BASE_URL - ADMIN_PASSWORD plain-text password for /admin login
- PUBLIC_BASE_URL public URL customers use (e.g. https://booth.example.com)
- SMTP_PASS password for the SMTP account
Optional:
- BOOTH_NAME name in customer text and emails (default Trollgorithm Theme Songs)
- HOST_PORT docker-compose host-side port mapping (default 127.0.0.1:8000)
- INTERNAL_PORT gunicorn port inside the container (default 8000)
- MAX_REVISIONS default customer revision limit (default 2)
- PRICE_PER_VERSION price shown to customers (default 10.00)
- CURRENCY currency label (default CAD)
- DATABASE SQLite database path inside the container (default /app/data/booth.db)
- UPLOAD_FOLDER directory for uploaded MP3s inside the container (default /app/uploads)
- SETTINGS_FILE runtime settings JSON filename (default booth_settings.json)
- SMTP_HOST outgoing mail server (default mailroot8.namespro.ca)
- SMTP_PORT outgoing mail server port (default 465)
- SMTP_USER SMTP login username (default ai@hallsworth.ca)
- SMTP_FROM From address for customer emails (default ai@hallsworth.ca)
""" """
import os import os

View file

@ -8,6 +8,11 @@
# Environment variables section. The container uses them directly, # Environment variables section. The container uses them directly,
# so no .env file is required on disk. # so no .env file is required on disk.
# #
# Required: APP_SECRET_KEY, ADMIN_PASSWORD, SMTP_PASS, PUBLIC_BASE_URL
# Optional: BOOTH_NAME, HOST_PORT, INTERNAL_PORT, PRICE_PER_VERSION,
# CURRENCY, MAX_REVISIONS, DATABASE, UPLOAD_FOLDER, SMTP_HOST,
# SMTP_PORT, SMTP_USER, SMTP_FROM
#
# Named volumes keep the SQLite database and uploaded MP3s persistent # Named volumes keep the SQLite database and uploaded MP3s persistent
# across container restarts and redeploys. # across container restarts and redeploys.

View file

@ -6,7 +6,7 @@ Standalone script to create the SQLite database tables.
Run this once inside the container after deployment: Run this once inside the container after deployment:
python init_db.py python init_db.py
Or use the Flask CLI command: Or use the registered Flask CLI command:
flask --app app init-db flask --app app init-db
""" """

View file

@ -9,7 +9,11 @@ application context (`g`) is used to manage one connection per request.
Schema overview (see SCHEMA constant): Schema overview (see SCHEMA constant):
- requests table stores customer data, generated prompts, file paths, - requests table stores customer data, generated prompts, file paths,
approval state, email timestamps, payment reference, player token, approval state, email timestamps, payment reference, player token,
vocal gender preference, revision count, and revision notes. vocal gender preference, revision count, revision note, and operator notes.
- Revisions: when a customer requests changes, the current A/B MP3 files are
renamed to archived "RevN-" copies and new versions are uploaded later.
- operator_notes is an internal column for the booth team and is never shown
to customers.
- Indexes on status and player_token for fast queue/lookup. - Indexes on status and player_token for fast queue/lookup.
""" """

View file

@ -10,8 +10,8 @@
<style> <style>
/* /*
Operator dashboard queue. Operator dashboard queue.
Shows all requests in a table, with status filters, Shows all requests in a table with status filters, per-row Open/Delete
per-row Open/Delete actions, and a topbar Reset System button. actions, a Settings link, auto-refresh hint, and logout.
*/ */
body{ body{
font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;

View file

@ -6,9 +6,11 @@
<title>Request #{{ req.id }} — Admin</title> <title>Request #{{ req.id }} — Admin</title>
<style> <style>
/* /*
Two-column admin detail page. Operator detail page for a single request.
Left column: customer context + workflow. Two-column layout:
Right column: operator tools + delivery. left -> customer info + internal operator notes
right -> Suno prompt, song upload, customer notification,
payment reference, and file delivery.
*/ */
*{box-sizing:border-box;} *{box-sizing:border-box;}
body{ body{

View file

@ -7,8 +7,9 @@
<style> <style>
/* /*
Admin settings / maintenance page. Admin settings / maintenance page.
Two-column layout for revision limit, auto-refresh, SMTP config, Two-column layout for booth open/closed status, database health,
MP3 metadata defaults, database backup/restore, health stats, and reset. statistics, revision limit, auto-refresh, SMTP config,
MP3 metadata defaults, database backup/restore, and system reset.
*/ */
:root{ :root{
--bg:#0b0f19; --bg:#0b0f19;

View file

@ -7,11 +7,11 @@
<style> <style>
/* /*
Private customer player page. Private customer player page.
Shows two audio players for Version A and Version B, Shows two audio players for Version A and Version B, plus approval
plus approval buttons or a revision note form. buttons or a revision note form depending on request status.
After the customer makes a choice, the controls are hidden After the customer makes a choice, the controls are hidden and a
and a confirmation/waiting message is shown instead. confirmation/waiting message is shown. The number of remaining
The number of remaining revisions is shown when available. customer revisions is displayed when revisions are enabled.
*/ */
body{ body{
font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;

View file

@ -7,8 +7,9 @@
<style> <style>
/* /*
Customer-facing request page. Customer-facing request page.
Designed to look fun and inviting on a convention booth tablet or phone. Designed for convention booth tablets/phones. Shows the banner image and
Uses a gradient background, banner image, and a styled card form. a styled card form for name, email, hobbies, facts, style, vocal gender,
and extra requests. Hidden when the booth is marked closed.
*/ */
*{box-sizing:border-box;} *{box-sizing:border-box;}
body{ body{

View file

@ -7,7 +7,8 @@
<style> <style>
/* /*
Public order status lookup page. Public order status lookup page.
Customers enter their email to see request status and the private player link. Customers enter their email to see request status, approval choice,
and the private player link once two songs have been uploaded.
*/ */
*{box-sizing:border-box;} *{box-sizing:border-box;}
body{ body{