Files
dictia-public/src/marketing/routes.py
Allison 1c4cafaf69 refactor(pricing): refonte v7.0 — 3 Cloud (Basic 189$/Essentiel 349$/Pro 549$) + DictIA Local (5998$ An1) + Pro+ soumission
Remplace l'ancien pricing (DictIA 8 / 16 / Cloud) par la nouvelle structure
canonique v7.0 : 4 forfaits + 1 sentinel quote-only.

Changements clés :
- pricing_card.html : signature étendue (badge, recommended, capacity_audio,
  capacity_storage, gpu, yearly_renewal, cta_label) + format prix server-side
  avec NBSP OQLF (5998 -> 5 998 $)
- _pricing_tiers.html : 4 cards (Cloud Basic 189$, Cloud Essentiel 349$,
  Cloud Pro 549$+485$ RECOMMANDÉ, DictIA Local 5998$ An1) + chip Pro+
  soumission -> /contact?pro-plus=1
- plans.py : refonte complète avec yearly_renewal_env (DictIA Local An 2+ =
  500$/an) + is_quote_only sentinel (Pro+ -> redirect /contact, jamais Stripe)
- routes.py : Pro+ intercepté avant le flow Stripe Checkout
- env.stripe.example : nouveau naming STRIPE_CLOUD_BASIC|ESSENTIEL|PRO_*
  + STRIPE_DICTIA_LOCAL_SETUP/RENEWAL_YEARLY
- tarifs.html : header "Quatre forfaits", matrice comparative 4 colonnes,
  FAQ enrichie (7 questions incluant DictIA Local + onboarding Pro + Pro+)
- fonctionnalites.html : section Architecture refondue (4 cards v7.0)
- landing.html : ROI footnote + cycle "189$" + wave "189$/mois" actualisés
- roi_calculator.js : recalibrage sur Cloud ESSENTIEL 349$ × 12 = 4188$/an
- routes.py marketing : FAQ "DictIA 8 et 16" -> "DictIA LOCAL"
- contact.html : "déploiements DictIA 16" -> "Cloud PRO" + "DictIA LOCAL"

Tests :
- test_marketing_landing_template.py : assertions prix v7.0 (189/349/549/5998),
  4 slugs (cloud-basic, cloud-essentiel, cloud-pro, dictia-local), Pro+ chip,
  capacity chips, RECOMMANDÉ sur Cloud PRO
- test_marketing_secondary_pages.py : 4 cards + Pro+ chip + matrice 4 col +
  FAQ 7 questions
- test_stripe_checkout.py : env vars v7.0, slugs cloud-basic/cloud-pro/
  dictia-local + nouveau test pro-plus -> /contact + tests setup pour Cloud PRO
  et DictIA Local
- test_stripe_webhook.py : plan_slug metadata cloud-basic

Status : 28/28 Stripe checkout + 17/17 webhook + 93/98 marketing pass
(les 5 marketing failures sont pré-existantes, non liées au pricing :
test_landing_has_main_nav et test_footer_links_complete = /blog manquant ;
test_trust_bar_has_eyebrow_factual_phrasing + 2 tests conformite =
casing eyebrow + entité é — vérifié par git stash baseline).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 21:06:12 -04:00

123 lines
7.2 KiB
Python

"""Marketing routes — Phase 2 templated landing.
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.8a + A-2.8b added /tarifs, /fonctionnalites, /conformite, /contact.
"""
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 — 10 verifiable Q&A enrichies depuis Website-Sanity/components/sections/dictai-page-content.tsx
# (round 3 — synchronisation avec source canonique production dictia.ca/solutions/dictai).
# Chaque question/réponse doit rester factuellement défendable (LPC art. 219).
FAQ = [
{
'q': 'Comment fonctionne la transcription?',
'a': 'DictIA utilise WhisperX Large-v3, le moteur de transcription de pointe d\'OpenAI, exécuté soit sur un GPU dédié au Québec (forfaits Cloud BASIC, ESSENTIEL, PRO — OVH Beauharnois) soit directement sur votre GPU local (DictIA&nbsp;LOCAL — RTX 5070&nbsp;Ti chez vous). Vous téléversez un fichier audio ou vidéo, et la transcription est générée automatiquement avec identification des locuteurs. Pour la conformité Loi&nbsp;25, l\'audit trail (art.&nbsp;3.5 LPRPSP), le registre des consentements (art.&nbsp;14) et l\'EFVP (art.&nbsp;3.3) sont fournis par défaut.',
},
{
'q': 'Quels formats audio/vidéo sont supportés?',
'a': 'DictIA accepte tous les formats courants&nbsp;: MP3, WAV, M4A, FLAC, OGG, MP4, MKV, WEBM, et plus encore. Aucune conversion préalable nécessaire. Les exports natifs incluent 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).',
},
{
'q': 'Combien de temps pour transcrire 1&nbsp;heure d\'audio?',
'a': 'Environ 2&nbsp;minutes sur GPU. C\'est 99&nbsp;% plus rapide que la transcription manuelle, qui prend typiquement 4 à 6&nbsp;heures pour 1&nbsp;heure d\'audio. La précision typique observée sur nos jeux de tests internes dépasse 95&nbsp;% en français canadien. Méthodologie complète disponible sur demande&nbsp;: <a href="mailto:info@dictia.ca" class="grad-text underline">info@dictia.ca</a>.',
},
{
'q': 'La transcription est-elle vraiment confidentielle?',
'a': 'Avec DictIA&nbsp;LOCAL, vos données ne quittent jamais votre bureau — le traitement est 100&nbsp;% local, sans connexion internet requise. Avec les forfaits Cloud (BASIC, ESSENTIEL, PRO), les données sont hébergées exclusivement au Québec (OVH Beauharnois). Aucun transfert hors-frontières, zéro Cloud Act.',
},
{
'q': 'Teams Copilot est-il légal pour mes réunions?',
'a': 'Non. Teams Copilot envoie les transcriptions vers des serveurs Microsoft soumis au Cloud Act américain. La Loi&nbsp;25 (art.&nbsp;44-45) exige un consentement explicite pour transmettre des données biométriques (voix) hors du Québec. Depuis septembre&nbsp;2023, toute transcription sur Teams Copilot est en violation — sans exception.',
},
{
'q': 'Otter.ai est-il en violation?',
'a': 'Oui. Otter.ai héberge les données sur AWS us-east-1 (Virginie, USA). Vos enregistrements de réunions — y compris les discussions confidentielles avec vos clients — transitent et sont stockés sur des serveurs américains soumis au Cloud Act. C\'est une violation de la Loi&nbsp;25 depuis septembre&nbsp;2023.',
},
{
'q': 'Que dit le Barreau du Québec sur l\'IA?',
'a': 'En octobre&nbsp;2024, le Barreau a émis une directive interdisant explicitement l\'utilisation d\'outils IA qui envoient des données client vers des serveurs étrangers. Une violation peut entraîner des sanctions disciplinaires. DictIA est conçu comme une solution conforme au Code de déontologie du Barreau (architecture mappée — voir notre page <a href="/conformite" class="grad-text underline">Conformité</a>).',
},
{
'q': 'DictIA s\'intègre-t-il à Clio Manage ou PCLaw?',
'a': 'L\'intégration native Clio Manage est prévue pour Q1&nbsp;2026. En attendant, DictIA exporte nativement en DOCX, compatible avec tous les logiciels de gestion de dossiers. L\'importation manuelle prend moins de 30&nbsp;secondes par transcription. Intégrations natives disponibles&nbsp;: Word, Outlook, Teams, Notion, Obsidian, Zapier, Make, n8n.',
},
{
'q': 'Ai-je besoin de connaissances techniques?',
'a': 'Non. DictIA est une solution clé en main&nbsp;: nous fournissons le matériel (solutions locales), installons tout sur site, formons votre équipe et assurons la maintenance mensuelle à distance. Vous n\'avez besoin d\'aucune expertise technique. En cas de résiliation, vos données restent exportables pendant 90&nbsp;jours (art.&nbsp;23 LPRPSP).',
},
{
'q': 'DictIA est-il open source?',
'a': 'Oui. Le code source est sous licence AGPL&nbsp;v3 — transparence totale. La stack complète (WhisperX, pyannote, Mistral, Ollama, FastAPI, PostgreSQL) est 100&nbsp;% open source, sans aucune redevance logicielle. 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.',
},
]
@marketing_bp.route('/')
def landing():
"""Marketing landing page — public, indexable, French-Canadian.
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',
testimonials=TESTIMONIALS,
faq=FAQ,
)
@marketing_bp.route('/tarifs')
def tarifs():
"""Standalone pricing page — same 3 forfaits as landing /#tarifs anchor,
plus deep-dive comparison matrix and tarification FAQ.
"""
return render_template('marketing/tarifs.html', faq=FAQ)
@marketing_bp.route('/fonctionnalites')
def fonctionnalites():
"""Standalone features page — deep-dive on the 6 bento features
plus full integrations list and supported export formats.
"""
return render_template('marketing/fonctionnalites.html')
@marketing_bp.route('/conformite')
def conformite():
"""Standalone compliance page — Loi 25, LGGRI, AGPL, EFVP details."""
return render_template('marketing/conformite.html')
@marketing_bp.route('/contact', methods=['GET'])
def contact():
"""Contact page — pre-launch: mailto-only form (no backend submit yet).
POST handler will be added in B-2.x once form-handling + Turnstile are wired.
"""
return render_template('marketing/contact.html')