"""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 LOCAL — RTX 5070 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 25, l\'audit trail (art. 3.5 LPRPSP), le registre des consentements (art. 14) et l\'EFVP (art. 3.3) sont fournis par défaut.', }, { 'q': 'Quels formats audio/vidéo sont supportés?', 'a': 'DictIA accepte tous les formats courants : 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 heure d\'audio?', 'a': 'Environ 2 minutes sur GPU. C\'est 99 % plus rapide que la transcription manuelle, qui prend typiquement 4 à 6 heures pour 1 heure d\'audio. La précision typique observée sur nos jeux de tests internes dépasse 95 % en français canadien. Méthodologie complète disponible sur demande : info@dictia.ca.', }, { 'q': 'La transcription est-elle vraiment confidentielle?', 'a': 'Avec DictIA LOCAL, vos données ne quittent jamais votre bureau — le traitement est 100 % 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 25 (art. 44-45) exige un consentement explicite pour transmettre des données biométriques (voix) hors du Québec. Depuis septembre 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 25 depuis septembre 2023.', }, { 'q': 'Que dit le Barreau du Québec sur l\'IA?', 'a': 'En octobre 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 Conformité).', }, { 'q': 'DictIA s\'intègre-t-il à Clio Manage ou PCLaw?', 'a': 'L\'intégration native Clio Manage est prévue pour Q1 2026. En attendant, DictIA exporte nativement en DOCX, compatible avec tous les logiciels de gestion de dossiers. L\'importation manuelle prend moins de 30 secondes par transcription. Intégrations natives disponibles : Word, Outlook, Teams, Notion, Obsidian, Zapier, Make, n8n.', }, { 'q': 'Ai-je besoin de connaissances techniques?', 'a': 'Non. DictIA est une solution clé en main : 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 jours (art. 23 LPRPSP).', }, { 'q': 'DictIA est-il open source?', 'a': 'Oui. Le code source est sous licence AGPL v3 — transparence totale. La stack complète (WhisperX, pyannote, Mistral, Ollama, FastAPI, PostgreSQL) est 100 % open source, sans aucune redevance logicielle. Code source complet sur Gitea public. Conséquence pratique de l\'AGPL : 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')