From 24f528a157124cbb196b11e5f94f95b85502049c Mon Sep 17 00:00:00 2001 From: Deeman Date: Fri, 20 Feb 2026 21:10:02 +0100 Subject: [PATCH] feat(feedback): pill button, umami ID capture, contact field, migration - Button restyled from round icon-only to pill with speech-bubble icon + "Feedback" text - Hidden umami_id field populated from localStorage.getItem('umami.uuid') - Optional contact field (email/name) shown to anonymous users only - Migration 0016 adds umami_id and contact columns to feedback table - Route saves all three new fields (user_id was already captured) - conftest.py: patch_config now sets WAITLIST_MODE=False to isolate tests from env Co-Authored-By: Claude Opus 4.6 --- padelnomics/src/padelnomics/i18n.py | 2 ++ .../versions/0016_feedback_umami_contact.py | 6 ++++++ padelnomics/src/padelnomics/public/routes.py | 6 ++++-- padelnomics/src/padelnomics/templates/base.html | 17 ++++++++++++++--- padelnomics/tests/conftest.py | 1 + 5 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 padelnomics/src/padelnomics/migrations/versions/0016_feedback_umami_contact.py diff --git a/padelnomics/src/padelnomics/i18n.py b/padelnomics/src/padelnomics/i18n.py index 667cade..f7db672 100644 --- a/padelnomics/src/padelnomics/i18n.py +++ b/padelnomics/src/padelnomics/i18n.py @@ -43,6 +43,7 @@ _TRANSLATIONS: dict[str, dict[str, str]] = { "base_manage_cookies": "Manage Cookies", "base_about": "About", "base_feedback_placeholder": "Ideas to improve this page...", + "base_feedback_contact_placeholder": "Your email (optional)", # ── Cookie banner ──────────────────────────────────────────────────── "cookie_title": "Cookie Preferences", "cookie_message": "We use cookies to keep you signed in and improve the site.", @@ -850,6 +851,7 @@ _TRANSLATIONS: dict[str, dict[str, str]] = { "base_manage_cookies": "Cookie-Einstellungen", "base_about": "\u00dcber uns", "base_feedback_placeholder": "Ideen zur Verbesserung dieser Seite\u2026", + "base_feedback_contact_placeholder": "Deine E-Mail (optional)", # ── Cookie banner ──────────────────────────────────────────────────── "cookie_title": "Cookie-Einstellungen", "cookie_message": "Wir verwenden Cookies, damit du angemeldet bleibst und die Website verbessert werden kann.", diff --git a/padelnomics/src/padelnomics/migrations/versions/0016_feedback_umami_contact.py b/padelnomics/src/padelnomics/migrations/versions/0016_feedback_umami_contact.py new file mode 100644 index 0000000..b260df5 --- /dev/null +++ b/padelnomics/src/padelnomics/migrations/versions/0016_feedback_umami_contact.py @@ -0,0 +1,6 @@ +"""Add umami_id and contact columns to feedback table.""" + + +def up(conn): + conn.execute("ALTER TABLE feedback ADD COLUMN umami_id TEXT") + conn.execute("ALTER TABLE feedback ADD COLUMN contact TEXT") diff --git a/padelnomics/src/padelnomics/public/routes.py b/padelnomics/src/padelnomics/public/routes.py index c5722d6..f84bb36 100644 --- a/padelnomics/src/padelnomics/public/routes.py +++ b/padelnomics/src/padelnomics/public/routes.py @@ -126,10 +126,12 @@ async def feedback(): page_url = form.get("page_url", "") user_id = session.get("user_id") + umami_id = form.get("umami_id", "") or None + contact = form.get("contact", "").strip() or None await execute( - "INSERT INTO feedback (user_id, page_url, message) VALUES (?, ?, ?)", - (user_id, page_url, message), + "INSERT INTO feedback (user_id, page_url, message, umami_id, contact) VALUES (?, ?, ?, ?, ?)", + (user_id, page_url, message, umami_id, contact), ) return f'

{t["flash_feedback_success"]}

' diff --git a/padelnomics/src/padelnomics/templates/base.html b/padelnomics/src/padelnomics/templates/base.html index 775df62..c289e43 100644 --- a/padelnomics/src/padelnomics/templates/base.html +++ b/padelnomics/src/padelnomics/templates/base.html @@ -237,25 +237,36 @@