feat(marketing): base.html layout + glassmorphism header + button macro

- templates/macros/button.html: 3 variants (primary gradient/glow, secondary,
  ghost) x 3 sizes for reuse across marketing/billing/legal/auth templates
- templates/marketing/base.html: Tailwind v4-scoped layout with FlexiHub
  glassmorphism header (62px, navy/.97, backdrop-blur-xl, .045 border),
  sticky positioning, OG/Twitter meta, Inter font preload, marketing.css
  link, Alpine.js defer, 5-item main nav + Connexion/Demarrer CTAs
- templates/marketing/_footer.html: minimal Phase 2 placeholder with
  legal links + Inverness QC address + info@dictia.ca (full footer in A-2.7)
- templates/marketing/landing.html: minimal hero placeholder (replaced
  in A-2.2 with full hero + cosmic orbs)
- src/marketing/routes.py: landing() now render_template instead of inline HTML
- 7 tests verify template structure, FlexiHub markers, nav, CTAs, legal
  links, no login redirect for anonymous users
- Tailwind CSS rebuilt with new template content scope (cssnano-minified)
This commit is contained in:
Allison
2026-04-27 16:51:06 -04:00
parent 08318a946f
commit 49bf94576c
7 changed files with 216 additions and 11 deletions

View File

@@ -1,20 +1,19 @@
"""Marketing routes - minimal Phase 1 placeholder.
"""Marketing routes — Phase 2 templated landing.
Real templates and content arrive in Tasks A-2.1 through A-2.8.
Phase 2 (A-2.1+): renders templates/marketing/landing.html.
Tasks A-2.2 through A-2.7 will progressively enrich the landing template.
Tasks A-2.8 will add /tarifs, /fonctionnalites, /conformite, /contact routes.
"""
from flask import Response
from flask import render_template
from . import marketing_bp
@marketing_bp.route('/')
def landing():
"""Placeholder root route.
"""Marketing landing page — public, indexable, French-Canadian.
Phase 1: returns a minimal HTML response so the route exists for tests.
Phase 2 (A-2.1): replaced with proper template render.
Called directly (not via redirect) from src/api/recordings.py:index
when the visitor is anonymous. See B-1.3 fix commit af29539 for context.
"""
return Response(
'<!DOCTYPE html><html><body><p>DictIA marketing - Phase 1 bootstrap</p></body></html>',
mimetype='text/html'
)
return render_template('marketing/landing.html')