2.2 KiB
2.2 KiB
Theme Song Booth
Prototype web app for a convention booth where attendees request custom AI-generated theme songs.
Flow
- Customer fills out the public request form at
/request. - Operator generates a Suno Custom Mode prompt via Hermes and saves it in the admin detail page.
- Operator generates two song versions in Suno and uploads the MP3s in admin.
- Operator clicks Send Preview Link. Customer receives an email with a private player page.
- Customer listens to Version A and Version B, then approves one/both or requests changes.
- Operator sees the approval alert, collects payment via Square reader, then clicks Mark Paid & Deliver.
- Customer receives the approved MP3(s) as email attachments.
Local Development
cd /home/jess/workspace/theme-song-booth
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
cp .env.example .env
# Edit .env and set APP_SECRET_KEY, ADMIN_PASSWORD_HASH, SMTP_PASS, PUBLIC_BASE_URL
.venv/bin/python init_db.py
.venv/bin/python -m flask --app app run --host=0.0.0.0
Generate an admin password hash with:
.venv/bin/python -c "from werkzeug.security import generate_password_hash; print(generate_password_hash('yourpassword'))"
Deployment on Unraid
- Copy the project directory to your Unraid server or build it via git.
- Create
/mnt/user/appdata/theme-song-booth/dataand/mnt/user/appdata/theme-song-booth/uploads. - Copy
.env.exampleto.env, fill in real values, and place it next todocker-compose.yml. - Run
docker compose up -d --build. - Initialize the database once:
docker compose exec booth python init_db.py. - Point your chosen domain at the Unraid server's public IP and route it through your reverse proxy to
http://127.0.0.1:8000. - Print the booth QR code pointing to
https://your-domain.example.com/request.
Files
app.py— Flask application with public/admin routes and email logic.models.py— SQLite schema and helper functions.config.py— Configuration loaded from environment.templates/— Jinja2 HTML templates.init_db.py— Standalone script to create the SQLite database.Dockerfile/docker-compose.yml— Container packaging for Unraid.