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>
This commit is contained in:
@@ -1,30 +1,113 @@
|
||||
{# Single source of truth for the 3 pricing tiers — used by landing.html#tarifs and /tarifs page.
|
||||
When prices change, edit ONLY this file. #}
|
||||
{# Single source of truth for the v7.0 pricing — used by landing.html#tarifs and /tarifs page.
|
||||
When prices change, edit ONLY this file (and src/billing/plans.py for Stripe IDs).
|
||||
|
||||
v7.0 — 4 forfaits + 1 soumission :
|
||||
- Cloud BASIC 189 $/mois (no setup)
|
||||
- Cloud ESSENTIEL 349 $/mois (no setup)
|
||||
- Cloud PRO 549 $/mois + 485 $ onboarding (recommended)
|
||||
- DictIA LOCAL 5 998 $ An 1 puis 500 $/an dès An 2 (no monthly)
|
||||
- Pro+ soumission personnalisée → /contact?pro-plus=1
|
||||
|
||||
Common to all forfaits :
|
||||
WhisperX Large-v3 (99%+ · 99+ langues), pyannote diarisation, Mistral résumés,
|
||||
exports SRT/VTT/TXT/JSON/DOCX, Loi 25 conforme, OVH Beauharnois (Cloud) ou local. #}
|
||||
|
||||
{% from 'macros/pricing_card.html' import pricing_card %}
|
||||
<div class="grid md:grid-cols-3 gap-6 max-w-5xl mx-auto items-stretch">
|
||||
|
||||
{%- set _baseline_features_cloud = [
|
||||
'WhisperX Large-v3 · 99 %+ précision · 99+ langues',
|
||||
'Diarisation pyannote (qui parle)',
|
||||
'Résumés IA + Points d’action (Mistral Nemo 12B)',
|
||||
'Exports SRT, VTT, TXT, JSON, DOCX',
|
||||
'Hébergement OVH Beauharnois (QC)',
|
||||
'Conforme Loi 25 · Anti-DDoS · Backups quotidiens',
|
||||
'Aucune limite utilisateurs'
|
||||
] -%}
|
||||
|
||||
<div class="grid md:grid-cols-2 lg:grid-cols-4 gap-6 items-stretch">
|
||||
|
||||
{{ pricing_card(
|
||||
'dictia-8',
|
||||
'DictIA 8',
|
||||
'3 450 $',
|
||||
'173 $',
|
||||
'PME · Manufacturiers · RH · Services — local, vos données ne quittent jamais votre bureau.',
|
||||
['GPU 8 Go RTX', 'Volume illimité', 'WhisperX FR-CA', 'Diarisation 8 locuteurs', 'Support inclus']
|
||||
slug='cloud-basic',
|
||||
name='Cloud BASIC',
|
||||
badge='Cloud · Souverain QC',
|
||||
target='Solopreneur · petite équipe · usage occasionnel à régulier.',
|
||||
monthly=189,
|
||||
capacity_audio='~165 h audio/mois',
|
||||
capacity_storage='100 Go',
|
||||
gpu='NVIDIA L4 partagé',
|
||||
features=_baseline_features_cloud,
|
||||
cta_label='Démarrer en Cloud'
|
||||
) }}
|
||||
|
||||
{{ pricing_card(
|
||||
'dictia-16',
|
||||
'DictIA 16',
|
||||
'5 750 $',
|
||||
'201 $',
|
||||
'Cabinets juridiques · CPA · Services financiers — local, Mistral 7B sur votre GPU.',
|
||||
['GPU 16 Go RTX', 'Mistral 7B local', 'Q&R sur enregistrement', 'Tout DictIA 8', 'Support prioritaire'],
|
||||
recommended=True
|
||||
slug='cloud-essentiel',
|
||||
name='Cloud ESSENTIEL',
|
||||
badge='Cloud · Souverain QC',
|
||||
target='Cabinet en croissance · usage quotidien soutenu.',
|
||||
monthly=349,
|
||||
capacity_audio='~330 h audio/mois',
|
||||
capacity_storage='200 Go',
|
||||
gpu='NVIDIA L4 partagé étendu',
|
||||
features=_baseline_features_cloud,
|
||||
cta_label='Choisir Essentiel'
|
||||
) }}
|
||||
|
||||
{{ pricing_card(
|
||||
'dictia-cloud',
|
||||
'DictIA Cloud',
|
||||
'0 $',
|
||||
'369 $',
|
||||
'Organismes · Municipalités · Multi-sites — Cloud QC, opérationnel en 48 h, aucun matériel requis.',
|
||||
['Hébergé OVH Beauharnois (Québec)', 'Opérationnel sous 48 h', 'Aucun matériel à gérer', 'SLA visé 99,9 %', 'Conforme Loi 25']
|
||||
slug='cloud-pro',
|
||||
name='Cloud PRO',
|
||||
badge='Cloud · Souverain QC',
|
||||
recommended=True,
|
||||
target='Organisation établie · usage intensif multi-postes.',
|
||||
setup=485,
|
||||
monthly=549,
|
||||
capacity_audio='~660 h audio/mois',
|
||||
capacity_storage='500 Go',
|
||||
gpu='NVIDIA L4 dédié priorité',
|
||||
features=_baseline_features_cloud + [
|
||||
'GPU dédié priorité (latence garantie)',
|
||||
'Onboarding assisté inclus'
|
||||
],
|
||||
cta_label='Commander Pro'
|
||||
) }}
|
||||
|
||||
{{ pricing_card(
|
||||
slug='dictia-local',
|
||||
name='DictIA LOCAL',
|
||||
badge='Local · 100 % hors-ligne',
|
||||
target='Confidentialité maximale · 100 % hors-ligne chez vous.',
|
||||
setup=5998,
|
||||
yearly_renewal=500,
|
||||
capacity_audio='~1 100 h audio/mois',
|
||||
capacity_storage='2 To SSD',
|
||||
gpu='RTX 5070 Ti 16 Go (dédié)',
|
||||
features=[
|
||||
'WhisperX Large-v3 · 99 %+ précision · 99+ langues',
|
||||
'Diarisation pyannote (qui parle)',
|
||||
'Résumés IA + Points d’action (Mistral 7B local)',
|
||||
'Exports SRT, VTT, TXT, JSON, DOCX',
|
||||
'GPU local dédié · transcription locale',
|
||||
'Données jamais sortantes (chez vous)',
|
||||
'500 $/an dès An 2 (MAJ + support)',
|
||||
'Aucune limite utilisateurs'
|
||||
],
|
||||
cta_label='Configurer DictIA Local'
|
||||
) }}
|
||||
|
||||
</div>
|
||||
|
||||
{# Pro+ banner — soumission personnalisée pour grands volumes / SLA renforcé #}
|
||||
<div class="mt-10 max-w-5xl mx-auto p-6 bg-brand-navy text-white border border-brand-b2/30 rounded backdrop-blur-sm relative overflow-hidden">
|
||||
<div class="absolute inset-0 pointer-events-none opacity-60" aria-hidden="true"
|
||||
style="background: radial-gradient(circle at 100% 0%, rgba(192,38,211,0.12) 0%, transparent 55%), radial-gradient(circle at 0% 100%, rgba(6,182,212,0.10) 0%, transparent 55%);"></div>
|
||||
<div class="relative flex items-center justify-between flex-wrap gap-6">
|
||||
<div class="flex-1 min-w-[260px]">
|
||||
<p class="eyebrow grad-text mb-2 text-[11px]">Pro+ · Soumission personnalisée</p>
|
||||
<h3 class="text-lg font-bold text-white mb-2">Au-delà de Cloud PRO ?</h3>
|
||||
<p class="text-sm text-white/75 leading-relaxed">
|
||||
> 660 h audio/mois · > 500 Go stockage · 7+ utilisateurs intensifs · multi-sites · SLA 99,9 % · SOC 2 Type I/II · PHIPA · PIPEDA Ontario · documentation gouv. (SEAO/MCN).
|
||||
</p>
|
||||
</div>
|
||||
{% from 'macros/button.html' import button %}
|
||||
{{ button('Demander une soumission', href='/contact?pro-plus=1', variant='primary', size='md') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user