feat(marketing): A-2.7b témoignages placeholder + FAQ accordion + CTA + JSON-LD

- Pre-launch testimonials section: 3 placeholder cards (avocat, CPA, municipal)
  with persona icons + 'Témoignage à venir' label — NO fabricated quotes
  (LPC art. 219). Expected publication mai-juin 2026 from T-4.1 interviews.
- FAQ accordion: 7 verifiable Q&A using Alpine.js core (x-data + x-show +
  built-in x-transition; NO x-collapse plugin). Each item has @click toggle,
  :aria-expanded, aria-controls, role="region" panel, focusable button.
- Schema.org FAQPage JSON-LD inline at end of FAQ section — striptags +
  replace(' ', ' ') to normalize entities for Google FAQ rich result.
- CTA final: 'Réservez votre pré-inscription' (mailto + #tarifs anchor),
  cosmic orbs to mirror Hero (page closure), ghost variant secondary button.
- Inline TESTIMONIALS and FAQ Python lists in src/marketing/routes.py
  (no PyYAML dep — YAGNI; T-4.1 can introduce it when real data warrants).
- 8 new tests covering testimonials placeholders, forbidden fake names,
  7 FAQ panels, Alpine bindings, JSON-LD schema, CTA wording, route data.
This commit is contained in:
Allison
2026-04-27 19:52:36 -04:00
parent 31fada46d4
commit 824ea638de
4 changed files with 324 additions and 1 deletions

View File

@@ -9,6 +9,62 @@ from flask import render_template
from . import marketing_bp
# Pre-launch placeholder testimonials — T-4.1 will replace these with real
# pilot-client interviews (avocat + CPA + municipalité) in mai-juin 2026.
# Until then, render placeholder cards (LPC art. 219: no fabricated quotes).
TESTIMONIALS = [
{
'persona': 'avocat',
'placeholder_label': 'Cabinet juridique pilote',
'expected': 'Mai 2026',
},
{
'persona': 'cpa',
'placeholder_label': 'Cabinet CPA pilote',
'expected': 'Mai 2026',
},
{
'persona': 'municipal',
'placeholder_label': 'Municipalité pilote',
'expected': 'Juin 2026',
},
]
# FAQ — 7 verifiable Q&A. Each question/answer must remain factually defensible
# (LPC art. 219). Answers reference public sources where applicable.
FAQ = [
{
'q': 'Comment DictIA est-il conforme à la Loi 25 (RPRP)?',
'a': 'DictIA héberge les données chez OVHcloud Beauharnois (Québec), produit un audit trail intégré conforme à l\'art. 3.5 LPRPSP, fournit un modèle d\'évaluation des facteurs relatifs à la vie privée (EFVP) art. 3.3, et trace les consentements art. 14. Code source AGPL v3 entièrement vérifiable.',
},
{
'q': 'Quelle est la différence entre DictIA Cloud et DictIA on-premise?',
'a': 'DictIA Cloud (à partir de 369 $/mois) est hébergé chez OVH Beauharnois — aucun matériel à gérer, opérationnel sous 48 h. DictIA on-premise (DictIA 8 et DictIA 16, à partir de 3 450 $ + 173 $/mois) tourne sur GPU dans vos murs — vos données ne sortent jamais de votre réseau.',
},
{
'q': 'Quelle précision puis-je attendre pour le français québécois?',
'a': 'DictIA utilise WhisperX Large-v3 fine-tuné sur audio professionnel québécois. La précision typique observée sur nos jeux de tests internes dépasse 95&nbsp;%. La méthodologie complète (corpus, métriques WER, conditions) est disponible sur demande&nbsp;: <a href="mailto:info@dictia.ca" class="grad-text underline">info@dictia.ca</a>.',
},
{
'q': 'Pouvez-vous transcrire des audiences ou des interrogatoires confidentiels?',
'a': 'Oui, à condition que vous respectiez les obligations de votre ordre (Barreau, Chambre des notaires, etc.) en matière de consentement et de confidentialité. DictIA on-premise est recommandé pour ce type d\'usage&nbsp;: les données ne quittent jamais votre infrastructure. Consultez votre ordre avant tout déploiement.',
},
{
'q': 'Quels formats d\'export sont supportés?',
'a': 'DOCX, PDF, SRT, VTT, TXT, JSON et MD. Modèles spécifiques disponibles pour avocats (interrogatoire numéroté), notaires (procès-verbal d\'assemblée) et CPA (transcription d\'entrevue). Intégrations natives&nbsp;: Word, Outlook, Teams, Notion, Obsidian, Zapier, Make, n8n.',
},
{
'q': 'Que se passe-t-il si je résilie mon abonnement?',
'a': 'Vos données restent exportables pendant 90&nbsp;jours après résiliation (DOCX/PDF/JSON). Passé ce délai, suppression définitive avec confirmation écrite — politique conforme à l\'art.&nbsp;23 LPRPSP. Aucun frais de résiliation. Détails dans nos <a href="/legal/conditions" class="grad-text underline">conditions d\'utilisation</a>.',
},
{
'q': 'Le code source est-il vraiment open source AGPL&nbsp;v3?',
'a': 'Oui. Code source complet sur <a href="https://gitea.innova-ai.ca/Innova-AI/dictia-public" target="_blank" rel="noopener" class="grad-text underline">Gitea public</a>. Conséquence pratique de l\'AGPL&nbsp;: tout fork hébergé doit publier ses modifications. Transparence vérifiable par vos auditeurs internes ou un tiers de confiance.',
},
]
@marketing_bp.route('/')
def landing():
"""Marketing landing page — public, indexable, French-Canadian.
@@ -16,4 +72,8 @@ def landing():
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 render_template('marketing/landing.html')
return render_template(
'marketing/landing.html',
testimonials=TESTIMONIALS,
faq=FAQ,
)