diff --git a/README.md b/README.md
index fa24daa..d5c3d59 100644
--- a/README.md
+++ b/README.md
@@ -26,6 +26,10 @@ docker push registry.unov.be/myinfomate/landing:latest
docker pull registry.unov.be/myinfomate/landing:latest
docker compose up -d myinfomate-landing
```
+```bash
+docker-compose -f docker-compose-landing.yml pull
+docker-compose -f docker-compose-landing.yml up -d
+```
### Config Traefik (docker-compose sur le VPS)
diff --git a/TODO-SEO.md b/TODO-SEO.md
index c0e03b0..878b8f1 100644
--- a/TODO-SEO.md
+++ b/TODO-SEO.md
@@ -32,8 +32,8 @@
### Actions rapides (< 1h chacune)
-- [ ] **Google Search Console** — soumettre `https://myinfomate.be/sitemap.xml`, vérifier qu'il n'y a pas d'erreurs d'indexation
-- [ ] **Bing Webmaster Tools** — même chose (souvent oublié, représente ~10% du trafic desktop)
+- [x] **Google Search Console** — soumettre `https://myinfomate.be/sitemap.xml`, vérifier qu'il n'y a pas d'erreurs d'indexation
+- [x] **Bing Webmaster Tools** — même chose (souvent oublié, représente ~10% du trafic desktop)
- [ ] **Lighthouse audit** — ouvrir Chrome DevTools sur myinfomate.be, onglet Lighthouse, mode Mobile → viser > 90. Les points rouges qui sortent sont à corriger en priorité.
- [ ] **LinkedIn entreprise Unov** — si pas encore actif, créer la page et pointer vers myinfomate.be. Google valorise les signaux sociaux B2B.
diff --git a/package.json b/package.json
index 4cf3bac..6ec9653 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,12 @@
"react": "19.2.3",
"react-dom": "19.2.3"
},
+ "browserslist": [
+ "last 2 Chrome versions",
+ "last 2 Firefox versions",
+ "last 2 Safari versions",
+ "last 2 Edge versions"
+ ],
"devDependencies": {
"@tailwindcss/postcss": "^4",
"@types/node": "^20",
diff --git a/public/map_generated.png b/public/map_generated.png
index fd1b678..7a9419e 100644
Binary files a/public/map_generated.png and b/public/map_generated.png differ
diff --git a/src/app/[lang]/HomeClient.tsx b/src/app/[lang]/HomeClient.tsx
index 5be0779..2da646c 100644
--- a/src/app/[lang]/HomeClient.tsx
+++ b/src/app/[lang]/HomeClient.tsx
@@ -484,6 +484,10 @@ export default function Home({ lang }: { lang: Language }) {
Essentiel
+
+ language
+ {t.pricing.channelWeb}
+
€39
{t.pricing.perMonth}
@@ -524,6 +528,10 @@ export default function Home({ lang }: { lang: Language }) {
Pro
+
+ smartphone
+ {t.pricing.channelNative}
+
€99
{t.pricing.perMonth}
@@ -567,7 +575,11 @@ export default function Home({ lang }: { lang: Language }) {
-
Bundle
+
Premium
+
+ smartphone
+ {t.pricing.channelNative}
+
€179
{t.pricing.perMonth}
@@ -617,6 +629,10 @@ export default function Home({ lang }: { lang: Language }) {
Enterprise
+
+ smartphone
+ {t.pricing.channelNative}
+
{t.pricing.enterprisePrice}
diff --git a/src/app/[lang]/[segment]/SegmentPageClient.tsx b/src/app/[lang]/[segment]/SegmentPageClient.tsx
index 19d3235..34f6746 100644
--- a/src/app/[lang]/[segment]/SegmentPageClient.tsx
+++ b/src/app/[lang]/[segment]/SegmentPageClient.tsx
@@ -399,7 +399,7 @@ export default function SegmentPageClient({ data, lang }: { data: Segment; lang:
{t.pricing.sectionTitle}
{t.pricing.sectionDesc}
-
+
{/* Essentiel */}
@@ -409,6 +409,10 @@ export default function SegmentPageClient({ data, lang }: { data: Segment; lang:
Essentiel
+
+ language
+ {t.pricing.channelWeb}
+
€39
{t.pricing.perMonth}
@@ -451,6 +455,10 @@ export default function SegmentPageClient({ data, lang }: { data: Segment; lang:
Pro
+
+ smartphone
+ {t.pricing.channelNative}
+
€99
{t.pricing.perMonth}
@@ -492,11 +500,15 @@ export default function SegmentPageClient({ data, lang }: { data: Segment; lang:
- {/* Bundle */}
+ {/* Premium */}
-
Bundle
+
Premium
+
+ smartphone
+ {t.pricing.channelNative}
+
€179
{t.pricing.perMonth}
@@ -525,9 +537,12 @@ export default function SegmentPageClient({ data, lang }: { data: Segment; lang:
check_circle
{t.pricing.features.statsAdvancedFeature}
-
- check_circle
- {t.pricing.features.ai} — 2 000 {t.pricing.features.reqPerMonth}
+
+ check_circle
+
+ {t.pricing.features.ai} — 2 000 {t.pricing.features.reqPerMonth}
+ {t.pricing.features.aiNeedMore} → Enterprise
+
check_circle
@@ -540,7 +555,80 @@ export default function SegmentPageClient({ data, lang }: { data: Segment; lang:
+ {/* Enterprise */}
+
+
+
+
Enterprise
+
+ smartphone
+ {t.pricing.channelNative}
+
+
+ {t.pricing.enterprisePrice}
+
+
{t.pricing.enterpriseDesc}
+
+
+ {[
+ t.pricing.features.webAndKiosk,
+ t.pricing.features.nativeApp,
+ t.pricing.features.backoffice,
+ t.pricing.features.sections,
+ t.pricing.features.multiSite,
+ ].map((f) => (
+ -
+ check_circle
+ {f}
+
+ ))}
+ -
+ check_circle
+ {t.pricing.features.customStorage}
+
+ -
+ check_circle
+ {t.pricing.features.customAiQuota}
+
+ {[
+ t.pricing.features.statsAdvancedFeature,
+ t.pricing.features.offlineBeacons,
+ t.pricing.features.pushNotif,
+ t.pricing.features.autoTranslation,
+ t.pricing.features.slaEnhanced,
+ t.pricing.features.dedicatedSupport,
+ t.pricing.features.customDev,
+ ].map((f) => (
+ -
+ check_circle
+ {f}
+
+ ))}
+
+
+
+
+
+
+
+
+
calendar_month
+
+
{t.pricing.multiYearLabel}
+
{t.pricing.multiYearDesc}
+
+
+
+
+
diff --git a/src/data/translations.ts b/src/data/translations.ts
index 86f00b8..3bac405 100644
--- a/src/data/translations.ts
+++ b/src/data/translations.ts
@@ -197,7 +197,7 @@ const translations = {
pricing: {
sectionLabel: 'Tarifs',
sectionTitle: 'Un plan pour chaque lieu',
- sectionDesc: "Du simple affichage web à la solution complète. Abonnement mensuel.",
+ sectionDesc: "Interface web incluse dans tous les plans. Ajoutez une app mobile à votre nom pour aller plus loin.",
setupFeeNote: "Frais de mise en place + engagement 12 mois (app mobile).",
noCommitment: "Sans engagement.",
perMonth: '/mois',
@@ -212,6 +212,8 @@ const translations = {
multiYearLabel: 'Budget pluriannuel ?',
multiYearDesc: 'Nous proposons des engagements 2 ou 3 ans avec facturation annuelle et tarif préférentiel — idéal pour les financements sur plusieurs années.',
multiYearCta: 'Contactez-nous pour en discuter',
+ channelWeb: 'Mode Web',
+ channelNative: 'Web + App native',
features: {
mobileApp: 'App mobile visiteurs',
kioskApp: 'App kiosk tablette',
@@ -226,8 +228,8 @@ const translations = {
statsBasic: '30 jours',
statsAdvanced: 'Illimitées',
webDisplayUrl: 'Affichage web sur URL dédiée',
- webAndKiosk: 'Display web + kiosk tablette',
- nativeApp: 'App mobile white-label publiée sur les stores (iOS & Android)',
+ webAndKiosk: 'Interface visiteur web + mode kiosk',
+ nativeApp: 'Votre propre app mobile sur l\'App Store & Google Play',
offlineBeacons: 'Offline + beacons BLE',
statsBasicLabel: 'Visiteurs / jour',
statsAdvancedLabel: 'Parcours, temps, clics',
@@ -456,7 +458,7 @@ const translations = {
pricing: {
sectionLabel: 'Pricing',
sectionTitle: 'A plan for every venue',
- sectionDesc: 'From simple web display to the full solution. Monthly subscription.',
+ sectionDesc: 'Web interface included in every plan. Add a branded mobile app to go further.',
setupFeeNote: 'Setup fee + 12-month commitment (mobile app).',
noCommitment: 'No commitment.',
perMonth: '/month',
@@ -471,6 +473,8 @@ const translations = {
multiYearLabel: 'Multi-year budget?',
multiYearDesc: 'We offer 2 or 3-year commitments with annual billing and preferential rates — ideal for multi-year funding cycles.',
multiYearCta: 'Contact us to discuss',
+ channelWeb: 'Web mode',
+ channelNative: 'Web + Native app',
features: {
mobileApp: 'Visitor mobile app',
kioskApp: 'Kiosk tablet app',
@@ -485,8 +489,8 @@ const translations = {
statsBasic: '30 days',
statsAdvanced: 'Unlimited',
webDisplayUrl: 'Web display on dedicated URL',
- webAndKiosk: 'Web display + tablet kiosk',
- nativeApp: 'White-label mobile app published on stores (iOS & Android)',
+ webAndKiosk: 'Visitor web interface + kiosk mode',
+ nativeApp: 'Your own mobile app on App Store & Google Play',
offlineBeacons: 'Offline + BLE beacons',
statsBasicLabel: 'Visitors / day',
statsAdvancedLabel: 'Paths, time, clicks',
@@ -715,7 +719,7 @@ const translations = {
pricing: {
sectionLabel: 'Tarieven',
sectionTitle: 'Een plan voor elke locatie',
- sectionDesc: 'Van eenvoudige webweergave tot de volledige oplossing. Maandelijks abonnement.',
+ sectionDesc: 'Webinterface inbegrepen in elk plan. Voeg een app op uw naam toe om verder te gaan.',
setupFeeNote: 'Opstartkosten + 12 maanden engagement (mobiele app).',
noCommitment: 'Zonder engagement.',
perMonth: '/maand',
@@ -730,6 +734,8 @@ const translations = {
multiYearLabel: 'Meerjarig budget?',
multiYearDesc: 'Wij bieden engagementen van 2 of 3 jaar met jaarlijkse facturatie en voordelig tarief — ideaal voor meerjarige financiering.',
multiYearCta: 'Neem contact op voor meer info',
+ channelWeb: 'Webmodus',
+ channelNative: 'Web + Eigen app',
features: {
mobileApp: 'Mobiele app bezoekers',
kioskApp: 'Kiosk tablet app',
@@ -744,8 +750,8 @@ const translations = {
statsBasic: '30 dagen',
statsAdvanced: 'Onbeperkt',
webDisplayUrl: 'Webweergave op toegewijd URL',
- webAndKiosk: 'Webweergave + tablet kiosk',
- nativeApp: 'White-label mobiele app gepubliceerd in de stores (iOS & Android)',
+ webAndKiosk: 'Webinterface bezoekers + kioskmodus',
+ nativeApp: 'Uw eigen mobiele app op App Store & Google Play',
offlineBeacons: 'Offline + BLE-bakens',
statsBasicLabel: 'Bezoekers / dag',
statsAdvancedLabel: 'Trajecten, tijd, klikken',
@@ -974,7 +980,7 @@ const translations = {
pricing: {
sectionLabel: 'Preise',
sectionTitle: 'Ein Plan für jeden Standort',
- sectionDesc: 'Von der einfachen Web-Anzeige bis zur Komplettlösung. Monatliches Abonnement.',
+ sectionDesc: 'Web-Oberfläche in jedem Plan enthalten. Fügen Sie eine gebrandete App hinzu, um mehr zu erreichen.',
setupFeeNote: 'Einrichtungsgebühr + 12 Monate Mindestlaufzeit (mobile App).',
noCommitment: 'Ohne Verpflichtung.',
perMonth: '/Monat',
@@ -989,6 +995,8 @@ const translations = {
multiYearLabel: 'Mehrjähriges Budget?',
multiYearDesc: 'Wir bieten 2- oder 3-jährige Engagements mit jährlicher Abrechnung und Vorzugspreisen — ideal für mehrjährige Finanzierungen.',
multiYearCta: 'Kontaktieren Sie uns',
+ channelWeb: 'Web-Modus',
+ channelNative: 'Web + Native App',
features: {
mobileApp: 'Mobile Besucher-App',
kioskApp: 'Kiosk-Tablet-App',
@@ -1003,8 +1011,8 @@ const translations = {
statsBasic: '30 Tage',
statsAdvanced: 'Unbegrenzt',
webDisplayUrl: 'Web-Anzeige auf dedizierter URL',
- webAndKiosk: 'Web-Anzeige + Tablet-Kiosk',
- nativeApp: 'White-Label-Mobile-App in den Stores veröffentlicht (iOS & Android)',
+ webAndKiosk: 'Web-Besucheroberfläche + Kioskmodus',
+ nativeApp: 'Ihre eigene mobile App im App Store & Google Play',
offlineBeacons: 'Offline + BLE-Beacons',
statsBasicLabel: 'Besucher / Tag',
statsAdvancedLabel: 'Wege, Zeit, Klicks',