From 29a06d8c4695874a58a155bd96915ac7162baa72 Mon Sep 17 00:00:00 2001
From: Samir Boulahtit
Date: Sat, 27 Dec 2025 18:08:05 +0100
Subject: [PATCH] fix: improve platform homepage pricing UI and restore footer
links
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Fix toggle button alignment with consistent min-widths
- Add € currency signs to all prices
- Show all tier features with greyed unavailable ones
- Add multi-channel integration feature for Enterprise tier
- Change Contact Sales to mailto link (fixes 404)
- Restore footer CMS page links (About, FAQ, Contact)
- Add footer link translations for all 4 languages
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5
---
app/routes/platform_pages.py | 13 ++-
app/templates/platform/homepage-wizamart.html | 83 ++++++++++++-------
static/locales/de.json | 6 +-
static/locales/en.json | 6 +-
static/locales/fr.json | 6 +-
static/locales/lb.json | 6 +-
6 files changed, 87 insertions(+), 33 deletions(-)
diff --git a/app/routes/platform_pages.py b/app/routes/platform_pages.py
index 9689c2e2..1631eee1 100644
--- a/app/routes/platform_pages.py
+++ b/app/routes/platform_pages.py
@@ -32,6 +32,10 @@ def get_platform_context(request: Request, db: Session) -> dict:
# Get language from request state (set by middleware)
language = getattr(request.state, "language", "fr")
+ # Get translation function
+ i18n_globals = get_jinja2_globals(language)
+ t = i18n_globals["t"]
+
context = {
"request": request,
"platform_name": "Wizamart",
@@ -41,7 +45,14 @@ def get_platform_context(request: Request, db: Session) -> dict:
}
# Add i18n globals (_, t, current_language, SUPPORTED_LANGUAGES, etc.)
- context.update(get_jinja2_globals(language))
+ context.update(i18n_globals)
+
+ # Add footer CMS pages
+ context["footer_pages"] = [
+ {"slug": "about", "title": t("platform.footer.about")},
+ {"slug": "faq", "title": t("platform.footer.faq")},
+ {"slug": "contact", "title": t("platform.footer.contact_us")},
+ ]
return context
diff --git a/app/templates/platform/homepage-wizamart.html b/app/templates/platform/homepage-wizamart.html
index 460a7e8a..a5a35bce 100644
--- a/app/templates/platform/homepage-wizamart.html
+++ b/app/templates/platform/homepage-wizamart.html
@@ -74,15 +74,15 @@
{# Billing Toggle #}
-
-
{{ _("platform.pricing.monthly") }}
+
+
{{ _("platform.pricing.monthly") }}
-
+
{{ _("platform.pricing.annual") }}
{{ _("platform.pricing.save_months") }}
@@ -111,17 +111,17 @@
-
+
{{ _("platform.pricing.per_month") }}
{% if tier.price_annual %}
-
+
{{ _("platform.pricing.per_month") }}
- {{ tier.price_annual }}{{ _("platform.pricing.per_year") }}
+ €{{ tier.price_annual|int }}{{ _("platform.pricing.per_year") }}
{% else %}
{{ _("platform.pricing.custom") }}
@@ -130,66 +130,93 @@
- {# Features List #}
-
+ {# Features List - Show all features, grey out unavailable #}
+
{# Orders #}
-
-
{# Products #}
-
-
+
{% if tier.products_limit %}{{ _("platform.pricing.products_limit", count=tier.products_limit) }}{% else %}{{ _("platform.pricing.unlimited_products") }}{% endif %}
{# Team Members #}
-
-
+
{% if tier.team_members %}{{ _("platform.pricing.team_members", count=tier.team_members) }}{% else %}{{ _("platform.pricing.unlimited_team") }}{% endif %}
- {# Letzshop Sync #}
+ {# Letzshop Sync - always included #}
-
-
+
{{ _("platform.pricing.letzshop_sync") }}
- {# Tier-specific features #}
- {% if 'invoice_eu_vat' in tier.features %}
- -
-
+ {# EU VAT Invoicing #}
+
-
+ {% if 'invoice_eu_vat' in tier.features %}
+
+ {% else %}
+
+
+
+ {% endif %}
{{ _("platform.pricing.eu_vat_invoicing") }}
- {% endif %}
- {% if 'analytics_dashboard' in tier.features %}
- -
-
+ {# Analytics Dashboard #}
+
-
+ {% if 'analytics_dashboard' in tier.features %}
+
+ {% else %}
+
+
+
+ {% endif %}
{{ _("platform.pricing.analytics_dashboard") }}
- {% endif %}
- {% if 'api_access' in tier.features %}
- -
-
+ {# API Access #}
+
-
+ {% if 'api_access' in tier.features %}
+
+ {% else %}
+
+
+
+ {% endif %}
{{ _("platform.pricing.api_access") }}
- {% endif %}
+ {# Multi-channel Integration - Enterprise only #}
+ -
+ {% if tier.is_enterprise %}
+
+
+
+ {% else %}
+
+
+
+ {% endif %}
+ {{ _("platform.pricing.multi_channel") }}
+
{# CTA Button #}
{% if tier.is_enterprise %}
-
{{ _("platform.pricing.contact_sales") }}
diff --git a/static/locales/de.json b/static/locales/de.json
index 47fedda8..b87bd667 100644
--- a/static/locales/de.json
+++ b/static/locales/de.json
@@ -512,6 +512,7 @@
"eu_vat_invoicing": "EU-MwSt-Rechnungen",
"analytics_dashboard": "Analyse-Dashboard",
"api_access": "API-Zugang",
+ "multi_channel": "Multi-Channel-Integration",
"products": "Produkte",
"team_member": "Teammitglied",
"unlimited": "Unbegrenzt",
@@ -631,7 +632,10 @@
"contact": "Kontakt",
"copyright": "© {year} Wizamart. Entwickelt für den luxemburgischen E-Commerce.",
"privacy": "Datenschutzerklärung",
- "terms": "Nutzungsbedingungen"
+ "terms": "Nutzungsbedingungen",
+ "about": "Ăśber uns",
+ "faq": "FAQ",
+ "contact_us": "Kontaktieren Sie uns"
},
"modern": {
"badge_integration": "Offizielle Integration",
diff --git a/static/locales/en.json b/static/locales/en.json
index 367c1ad2..9366a7b1 100644
--- a/static/locales/en.json
+++ b/static/locales/en.json
@@ -512,6 +512,7 @@
"eu_vat_invoicing": "EU VAT invoicing",
"analytics_dashboard": "Analytics dashboard",
"api_access": "API access",
+ "multi_channel": "Multi-channel integration",
"products": "products",
"team_member": "team member",
"unlimited": "Unlimited",
@@ -631,7 +632,10 @@
"contact": "Contact",
"copyright": "© {year} Wizamart. Built for Luxembourg e-commerce.",
"privacy": "Privacy Policy",
- "terms": "Terms of Service"
+ "terms": "Terms of Service",
+ "about": "About Us",
+ "faq": "FAQ",
+ "contact_us": "Contact Us"
},
"modern": {
"badge_integration": "Official Integration",
diff --git a/static/locales/fr.json b/static/locales/fr.json
index c6f5b3c3..3c963cb1 100644
--- a/static/locales/fr.json
+++ b/static/locales/fr.json
@@ -512,6 +512,7 @@
"eu_vat_invoicing": "Facturation TVA UE",
"analytics_dashboard": "Tableau de bord analytique",
"api_access": "Accès API",
+ "multi_channel": "Intégration multi-canal",
"products": "produits",
"team_member": "membre d'équipe",
"unlimited": "Illimité",
@@ -631,7 +632,10 @@
"contact": "Contact",
"copyright": "© {year} Wizamart. Conçu pour le e-commerce luxembourgeois.",
"privacy": "Politique de confidentialité",
- "terms": "Conditions d'utilisation"
+ "terms": "Conditions d'utilisation",
+ "about": "Ă€ propos",
+ "faq": "FAQ",
+ "contact_us": "Nous contacter"
},
"modern": {
"badge_integration": "Intégration officielle",
diff --git a/static/locales/lb.json b/static/locales/lb.json
index 4b7ae7b9..4c3e63f2 100644
--- a/static/locales/lb.json
+++ b/static/locales/lb.json
@@ -512,6 +512,7 @@
"eu_vat_invoicing": "EU TVA Rechnungen",
"analytics_dashboard": "Analyse Dashboard",
"api_access": "API Zougang",
+ "multi_channel": "Multi-Channel Integratioun",
"products": "Produkter",
"team_member": "Teammember",
"unlimited": "Onbegrenzt",
@@ -631,7 +632,10 @@
"contact": "Kontakt",
"copyright": "© {year} Wizamart. Gemaach fir de lëtzebuergeschen E-Commerce.",
"privacy": "Dateschutzrichtlinn",
- "terms": "Notzungsbedéngungen"
+ "terms": "Notzungsbedéngungen",
+ "about": "Iwwer eis",
+ "faq": "FAQ",
+ "contact_us": "Kontaktéiert eis"
},
"modern": {
"badge_integration": "Offiziell Integratioun",