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',