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:
@@ -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 %. La méthodologie complète (corpus, métriques WER, conditions) est disponible sur demande : <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 : 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 : 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 jours après résiliation (DOCX/PDF/JSON). Passé ce délai, suppression définitive avec confirmation écrite — politique conforme à l\'art. 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 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 : 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,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user