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 @@
- {# Features List #} -
    + {# Features List - Show all features, grey out unavailable #} +
      {# Orders #}
    • - + {% if tier.orders_per_month %}{{ _("platform.pricing.orders_per_month", count=tier.orders_per_month) }}{% else %}{{ _("platform.pricing.unlimited_orders") }}{% endif %}
    • {# 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",