Add required pronouns dropdown and fix admin vocal gender selector
- Added a required Pronouns dropdown to /request and /admin/request: He/Him/His, She/Her/Hers, They/Them/Their. - Moved Email to the top of the customer request form; Pronouns sit just below Name. - Added column to the requests schema with automatic migration. - Stored pronouns are included in confirmation emails and Hermes prompt copy. - Fixed /admin/request so Preferred singer voice / gender is a dropdown matching the customer form instead of a free-text input. - Updated README to describe pronouns and the structured style selectors. Bumps version to 0.4.7.
This commit is contained in:
parent
10ee182558
commit
3f7bbf4b12
6 changed files with 65 additions and 17 deletions
19
README.md
19
README.md
|
|
@ -1,6 +1,6 @@
|
|||
# Theme Song Booth
|
||||
|
||||
**Version:** `v0.4.6`
|
||||
**Version:** `v0.4.7`
|
||||
|
||||
A Flask web application for running a convention booth where visitors request a custom AI-generated theme song. Operators manage the queue from an admin dashboard, generate Suno prompts, upload MP3 previews, collect payment, and deliver final songs by email.
|
||||
|
||||
|
|
@ -38,7 +38,7 @@ A Flask web application for running a convention booth where visitors request a
|
|||
|
||||
| Page | Path | Purpose |
|
||||
|------|------|---------|
|
||||
| Request form | `/request` | Visitors enter name, email, hobbies, notable facts, and extra requests. The music style is picked from three dropdowns: **Decade** (required), **Basic style** (required), and **Additional style** (optional). Decades and genres are loaded from `/mnt/Storage/Decades.txt` and `/mnt/Storage/Music Genres.txt`. Rate limited to 5 submissions per minute per IP. |
|
||||
| Request form | `/request` | Visitors enter email, name, pronouns, hobbies, notable facts, and extra requests. The music style is picked from three dropdowns: **Decade** (required), **Basic style** (required), and **Additional style** (optional). Decades and genres are loaded from `/mnt/Storage/Decades.txt` and `/mnt/Storage/Music Genres.txt`. Rate limited to 5 submissions per minute per IP. |
|
||||
| Closed page | `/request` (when booth is closed) | Shows a friendly closed banner instead of the form when the operator marks the booth closed. |
|
||||
| Thanks | `/thanks/<id>` | Confirmation page shown after a request is submitted. |
|
||||
| Order status | `/status` | Customers enter their email to see all their requests and statuses. |
|
||||
|
|
@ -54,7 +54,17 @@ The request form no longer has a free-text genre field. Instead, customers choos
|
|||
2. **Basic style** — required (e.g. `Pop`).
|
||||
3. **Additional style** — optional (e.g. `Funk`).
|
||||
|
||||
These are stored together in the `style_genre` column as a comma-separated string (e.g. `1980's, Pop, Funk`) so no database schema change is needed. The admin request page shows the same dropdowns and a live preview of the combined value. The copy-to-Hermes prompt formats this as a clean sentence like "1980's-era Pop with Funk influences" for better Suno results.
|
||||
These are stored together in the `style_genre` column as a comma-separated string (e.g. `1980's, Pop, Funk`) so no schema change is required. The admin request page shows the same dropdowns for corrections, and the copy-to-Hermes prompt formats the style as a clean sentence like "1980's-era Pop with Funk influences" for better Suno results.
|
||||
|
||||
### Pronouns
|
||||
|
||||
A required **Pronouns** dropdown is shown just below the name field, with options:
|
||||
|
||||
- He/Him/His
|
||||
- She/Her/Hers
|
||||
- They/Them/Their
|
||||
|
||||
The selected pronouns are stored in the `pronouns` column and included in confirmation emails and Hermes prompt copy.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -64,7 +74,7 @@ These are stored together in the `style_genre` column as a comma-separated strin
|
|||
|------|------|---------|
|
||||
| Login | `/admin/login` | Simple session-based login. Password comes from the `ADMIN_PASSWORD` environment variable. |
|
||||
| Dashboard | `/admin` | Main queue. Filter by status and auto-refresh at a configurable interval. |
|
||||
| Request detail | `/admin/request/<id>` | Full control of one request: edit customer info, save prompt, copy Hermes callback, view revision history, upload MP3s, send preview, record payment, deliver files, add operator notes, and cancel. |
|
||||
| Request detail | `/admin/request/<id>` | Full control of one request: edit customer info (including pronouns and structured style), save prompt, copy Hermes callback, view revision history, upload MP3s, send preview, record payment, deliver files, add operator notes, and cancel. |
|
||||
| Pricing | `/admin/pricing` | Configure fixed prices (one song, both songs, WAV per song, STEMs per song) and up to 5 custom items. |
|
||||
| Sales | `/admin/sales` | Report of all delivered requests with customer details and Square payment references. |
|
||||
| Settings | `/admin/settings` | Database health, backups, SMTP config, MP3 metadata defaults, revision limit, auto-refresh interval, kiosk mode, booth open/closed switch, Hermes API key management, and system reset. |
|
||||
|
|
@ -214,6 +224,7 @@ Persistent volumes keep the database and uploads safe across redeploys.
|
|||
| `init_db.py` | Standalone script to create or migrate the database. |
|
||||
| `templates/` | Jinja2 templates for customer pages, admin pages, and kiosk display. |
|
||||
| `static/` | Banner images, closed banner, email logo, and kiosk QR code. |
|
||||
| `lists/` | Bundled copies of `decades.txt` and `music_genres.txt` used as fallback for the style dropdowns. |
|
||||
| `Dockerfile` | Production container image definition. |
|
||||
| `docker-compose.yml` | Portainer stack definition. |
|
||||
| `requirements.txt` | Python dependencies. |
|
||||
|
|
|
|||
Reference in a new issue