-
-
Avantages du Catalogue Communautaire
-
-
-
-
-
-
-
-
Infrastructure Cloud
-
- Configuration cloud standard optimisée pour des performances fiables
-
+
+
+
{copy.featuresTitle}
-
-
-
+
+
+ {variant.features.map((feature, idx) => (
+
+
+ {feature}
+
+ ))}
-
Support Communautaire
-
- Accédez aux forums, guides et aide de la communauté Hackboot
-
+
-
-
-
-
-
Mises à Jour Régulières
-
- Configurations maintenues à jour avec les derniers patchs du jeu
-
+
+
+
{copy.benefits.title}
-
-
- {/* CTA Section */}
-
-
Prêt à Jouer à {product.game} ?
-
- Choisissez votre abonnement et accédez immédiatement à {product.name}
-
-
- Choisir mon abonnement
-
-
+
+ {copy.benefits.items.map((item, index) => {
+ const Icon = benefitIcons[index] ?? Cloud
+ return (
+
+
+
+
+
{item.title}
+
{item.description}
+
+ )
+ })}
+
+
+
+
+ {ctaTitle}
+ {ctaDescription}
+
+ {copy.cta.button}
+
+
+
-
-
-
-
+
+
+
)
}
diff --git a/components/NativeGamingProductPage.tsx b/components/NativeGamingProductPage.tsx
index 4a415d2..aa2d490 100644
--- a/components/NativeGamingProductPage.tsx
+++ b/components/NativeGamingProductPage.tsx
@@ -735,10 +735,375 @@ const englishCopy: LocaleContent = {
}
}
+const estonianCopy: LocaleContent = {
+ breadcrumbs: { home: 'Avaleht', games: 'Mängud' },
+ reviewsLabel: 'arvustust',
+ optimizationBadge: 'NATIIVSELT OPTIMEERITUD',
+ nativeAdvantages: [
+ {
+ icon: Code,
+ title: 'Natiivne integratsioon',
+ description: 'Moodulid on kalibreeritud Overwatch 2 jaoks ja sünkroniseeritakse pärast iga Blizzardi värskendust'
+ },
+ {
+ icon: Shield,
+ title: 'Täielik vastavus',
+ description: 'Voogedastuseks turvalised overlayd, mis järgivad e-spordi juhiseid ilma pealetükkiva injektsioonita'
+ },
+ {
+ icon: Gauge,
+ title: 'Häälestatud jõudlus',
+ description: 'Stabiilsed 400+ FPS ja kontrollitud latentsus tänu meie kohandatud serveriprofiilile'
+ },
+ {
+ icon: Trophy,
+ title: 'Loominguline tugi',
+ description: 'Pühendunud saatja aitab seadistada coaching’u, striimi ja LAN-presette'
+ }
+ ],
+ quickStats: {
+ avgFps: 'Keskmine FPS',
+ onePercentLow: '1% madal (4K Ultra)',
+ latency: 'Süsteemi latentsus',
+ inputLag: 'Sisendviivitus'
+ },
+ subscription: {
+ title: 'Vali oma tellimus',
+ popular: 'Kõige populaarsem',
+ viewDetails: 'Vaata üksikasju'
+ },
+ metrics: {
+ badge: 'JÕUDLUSMÕÕDIKUD',
+ title: 'Kalibreeritud jõudlus Overwatch 2 jaoks',
+ description:
+ 'Meie PulseForge’i instantsi sisemised mõõtmised: 410 FPS keskmiselt 1080p e-spordi eelseadistusel, 242 FPS 1440p juures ja 131 FPS 4K-s. 1% madal langeb 84 FPS-ni 4K Ultra stsenaariumis koos täiskomplekti overlaididega, jättes rohkelt varu ka äärmusliku koormuse korral.',
+ statCards: {
+ maxFps: 'Maksimaalne täheldatud FPS',
+ onePercentLow: '1% madal (4K Ultra)',
+ inputLag: 'Keskmine sisendviivitus'
+ },
+ allocationTitle: 'PulseForge’i serveri eraldus',
+ datacenterTitle: 'Andmekeskuse stabiilsus',
+ usage: {
+ cpu: 'CPU kasutus',
+ gpu: 'GPU kasutus',
+ ram: 'RAM kasutus',
+ vram: 'VRAM kasutus'
+ },
+ thermals: {
+ cpu: 'CPU temperatuur',
+ gpu: 'GPU temperatuur',
+ power: 'Võimsustarve'
+ },
+ stabilityNote: 'Temperatuurid püsivad kontrolli all ja termiline varu säilib'
+ },
+ fpsTable: {
+ title: 'FPS resolutsiooni järgi',
+ description:
+ 'Meie pilveprofiilid häälestavad ressursid automaatselt: siin on FPS tase, kui suurendad või vähendad resolutsiooni keskmiste seadistustega.',
+ headers: {
+ resolution: 'Resolutsioon',
+ avg: 'Keskmine FPS',
+ min: 'Min',
+ max: 'Maks',
+ playability: 'Mängitavus',
+ bottleneck: 'Pudelkits'
+ },
+ footnote: 'Sisemised Overwatch 2 profiili benchmarkid (keskmine eelseadistus, peamised võistluskaardid).'
+ },
+ quality: {
+ title: 'FPS graafikaseadistuste kaupa',
+ description: 'Kasuta pilvekontrollerit, et valida vajalik eelseadistus ja jääda näidatud FPS vahemikku.',
+ badge: 'bench'
+ },
+ resolution: {
+ title: 'Kuidas pilvest resolutsiooni reguleerida',
+ description:
+ 'Meie sisemised mõõtmised näitavad tegelikku FPS varu, kui tõstad või langetad eraldusvõimet PulseForge’i paneelist.',
+ windowLabel: 'Täheldatud vahemik',
+ footnote: 'Väärtused põhinevad meie Overwatch 2 stsenaariumidel keskmise ja ultra eelseadistusega ning overlayd sisse lülitatud.',
+ avgLabel: 'Keskmine FPS'
+ },
+ experience: {
+ title: 'PulseForge’i pilvekogemus',
+ description: (productName: string, latency: number) =>
+ `${productName} töötab täielikult meie pilveinfrastruktuuril: puudub kohalik seadistus, kohene ettevalmistus ja keskmine latentsus hoitakse ${latency} ms juures.`,
+ bullets: [
+ 'Overlayd, modid ja värskendused rakendatakse serveripoolselt ilma sinu arvutit puutumata.',
+ 'Lülitu 1080p, 1440p või 4K vahel pilvepaneelist, säilitades näidatud FPS varu.',
+ 'Pidev jälgimine: vaheta regiooni, kui ping ületab 30 ms, et kontroll säiliks.'
+ ],
+ profileLabel: 'E-spordi profiil',
+ profileSubtitle: 'Keskmine mõõdetud 1080p juures',
+ lowLabel: '1% madal 4K Ultra',
+ lowSubtitle: 'Äärmusliku koormuse stsenaarium'
+ },
+ improvement: {
+ tipsTitle: 'Vihjed FPS-i tõstmiseks',
+ adviceTitle: 'Kasutussoovitus'
+ },
+ augmentation: {
+ badge: 'PULSEFORGE’I ABISUITE',
+ title: 'Reaalajas taktikamoodulid',
+ description: 'Kontekstuaalsed overlayd, kohanduv coaching ja pro taseme teadmised otse sinu HUD-is.',
+ modulesTitle: 'Kaasa kuuluvad põhimoodulid',
+ reactivityTitle: 'Reageerimisvõime ja katvus',
+ overlayLabel: 'Overlay värskendus',
+ modulesLabel: 'Aktiivsed moodulid',
+ coachingLabel: 'Kohanduv coaching',
+ reactionLabel: 'Keskmine reaktsiooniaeg',
+ motionNote: 'Naturaliseeritud liikumised sujuva ja ergonoomilise tunde jaoks',
+ awarenessLabel: 'Teadlikkuse indeks',
+ focusLabel: 'Taktikaline fookus'
+ },
+ legacyPrecision: {
+ badge: 'ARENENUD TÄPSUSSÜSTEEM',
+ title: 'Profi tasemel abistatud jälgimine',
+ description: 'Tark jälgimise häälestus ja ergonoomiline abi loomuliku tunnetuse jaoks.',
+ stats: {
+ tracking: 'Jälgimise täpsus',
+ smoothness: 'Sujuvus',
+ fov: 'Dünaamiline vaateväli',
+ switchTime: 'Lülitusaeg'
+ },
+ advancedTitle: 'Täiustatud statistika',
+ metrics: {
+ priority: 'Prioriteetne sihtimine',
+ weapon: 'Relvade ühilduvus',
+ reaction: 'Reaktsiooniaeg'
+ },
+ focusTitle: 'Fookuspunktid'
+ },
+ hero: {
+ badge: 'KANGELASPROFIILID',
+ title: 'Pühendatud optimeerimised',
+ description: 'Iga moodul sisaldab eelseadistust, mis on kalibreeritud Overwatch 2 põhiklasside ja kangelaste jaoks.',
+ headers: {
+ hero: 'Kangelane',
+ overlay: 'Overlay fookus',
+ clarity: 'Visuaalne selgus',
+ preset: 'Soovitatud eelseadistus',
+ notes: 'Coaching’u märkmed'
+ },
+ fallbackTitle: 'Kangelaste jõudlus',
+ fallbackDescription: (game: string) => `Spetsiifilised optimeerimised iga ${game} kangelase jaoks`,
+ fallbackHeaders: {
+ optimization: 'Optimeerimine',
+ critRate: 'Kriitiline määr',
+ efficiency: 'Tõhususindeks',
+ impact: 'Võidumõju'
+ }
+ },
+ reliability: {
+ badge: 'USALDUSVÄÄRSUS JA HOOLDUS',
+ title: 'Ettevõtte tasemel teenus',
+ description: 'Proaktiivne järelevalve, kiired parandused ja voogedastuse vastavus rahulikuks kogemuseks.',
+ cards: {
+ detection: 'Kriitiliste juhtumite määr',
+ detectionFootnote: 'Jätkuv järelevalve',
+ uptime: 'Töökindlus',
+ uptimeFootnote: 'Kõrge kättesaadavusega infrastruktuur',
+ response: 'Toe reageerimisaeg',
+ responseFootnote: 'Pühendunud meeskond 24/7'
+ },
+ maintenanceTitle: 'Proaktiivne hooldus',
+ encryption: 'Krüptimine',
+ isolation: 'Isolatsioonikihid',
+ updates: 'Hoolduse värskendused / nädal',
+ incidents: 'Intsidentide arv (30p)',
+ surveillanceTitle: 'Automaatne järelevalve',
+ surveillanceToggles: {
+ antiDebug: 'Tervikluse jälgimine',
+ antiVM: 'Virtuaalkeskkondade kontroll',
+ kernel: 'Optimeeritud kerneli teenus'
+ },
+ protectionNote: 'Täielik kaitse tarkvarakonfliktide ja draiverihälvete vastu'
+ },
+ network: {
+ badge: 'PILVEINFRASTRUKTUUR',
+ title: 'Ülikiire globaalne võrk',
+ description: (serverCount: number) =>
+ `${serverCount} teenuspunkti on sünkroonitud, et hoida overlay ja voogedastuse reageerimisvõimet.`,
+ cards: {
+ servers: 'Serverid',
+ ping: 'Keskmine ping',
+ loss: 'Paketikadu',
+ jitter: 'Jitter'
+ },
+ bandwidthLabel: 'Maksimaalne ribalaius',
+ bandwidthSubtitle: 'Ühenduse kohta',
+ encryptionLabel: 'Krüptimine',
+ encryptionSubtitle: 'Maksimaalne turvalisus',
+ ddos: 'Aktiivne DDoS-kaitse'
+ },
+ user: {
+ badge: 'KOGUKOND JA RAHULOLU',
+ title: (total: string) => `Usaldusväärne ${total} mängija poolt`,
+ subtitle: 'Aktiivne ja rahulolev kogukond, mis kinnitab meie kvaliteeti',
+ cards: {
+ total: 'Kasutajaid kokku',
+ active: 'Aktiivsed (30p)',
+ session: 'Keskmine sessioon',
+ games: 'Mänge päevas'
+ },
+ ratingLabel: 'Rahuloluhinne',
+ recommendationLabel: 'Soovituse määr'
+ },
+ nativeReasons: {
+ title: 'Miks valida meie natiivne build?',
+ description: (game: string) => `Läbivalt ${game} jaoks optimeeritud, mõõdetud jõudluse ja pühendunud toe abil.`
+ },
+ featuresTitle: 'Kaasa kuuluvad funktsioonid',
+ cta: {
+ title: (game: string) => `Valmis oma ${game} kogemust tõstma?`,
+ description: 'Aktiveeri PulseForge’i komplekt ja ava coaching’u, striimimise ja võistluste jaoks loodud tööriistad.',
+ button: 'Vali minu pakett'
+ },
+ subscriptionPlans: {
+ essentiel: {
+ name: 'Essential pakett',
+ description: 'Usaldusväärne jõudlus ja täielik konfiguratori ligipääs koheseks alustamiseks.',
+ billing: 'kuus',
+ features: [
+ 'Juurdepääs standardsele pilveinfrastruktuurile',
+ 'Kogukonna tugi',
+ 'Regulaarsed turvauuendused',
+ 'Populaarsete mängude kataloog kaasas'
+ ]
+ },
+ avantage: {
+ name: 'Advantage pakett',
+ description: 'Rohkem võimsust ja prioriteetne tugi sujuvaks kogemuseks.',
+ billing: 'kuus',
+ features: [
+ 'Täiendatud GPU jõudlus',
+ 'Prioriteetne tugi 24/7',
+ 'Ligipääs premium konfiguratsioonidele',
+ 'Reaalajas analüütika töölaud'
+ ]
+ },
+ élite: {
+ name: 'Elite pakett',
+ description: 'Pühendatud infrastruktuur ja maksimaalne turvalisus kõige nõudlikumatele vajadustele.',
+ billing: 'kuus',
+ features: [
+ 'Pühendatud RTX 4090 virtuaalmasin',
+ 'Piiramatu HWID Spoofer',
+ 'Isiklik tehniline konsultant',
+ 'Hetkelised uuendused ja paigad'
+ ]
+ }
+ },
+ product: {
+ description: 'Pilvepõhine Overwatch 2 instants, mis koondab taktikaliselt overlayd, reaalajas analüütika ja stream-safe modding tööriistad.',
+ longDescription:
+ 'PulseForge Overwatch 2 jaoks on täielikult natiivne riist- ja tarkvarapakett, mis on majutatud meie pilvemängu platvormil. See koondab meie taktikalised overlayd, automatiseeritud coaching’u moodulid ning striimiks valmis audio-/videopresetid. Mõeldud nii võistkondadele kui loojatele, pakkudes mittepealetükkivat integreerimist värskendustega, mis sünkroonitakse iga Blizzardi patchiga ja serveripoolse orkestreerimisega.',
+ variants: {
+ godmode: {
+ name: 'PulseForge Creator',
+ usage: 'Natiivne pilvepõhine augmentatsiooni instants',
+ description: 'Pilvepõhine Overwatch 2 instants taktikaliste overlayde, visuaalse modimise ja integreeritud treeningtööriistadega.',
+ use_cases: [
+ 'Meeskonna coaching ja analüütika',
+ 'Elamuslik sisuloomine',
+ 'LAN- ja online-võistlused',
+ 'Mugavusmakrode optimeerimine',
+ 'Mitme ekraani kogemused'
+ ],
+ features: [
+ 'Rollipõhiselt kalibreeritud modulaarsed overlayd',
+ 'Matši järelanalüüsi moodulid ekspordiga',
+ 'Metaga sünkroonis koosseisunõustaja',
+ 'Stream-safe visuaalse modimise profiilid',
+ 'Turniirikindlad ergonoomilised makrod',
+ 'Mitme sisendi tugi (MKB/pult)',
+ 'Jätkuvad koostööl põhinevad uuendused'
+ ],
+ target_audience: 'Treenerid, loojad, võistlusmängijad',
+ highlight: 'Metaga sünkroonis natiivne suite',
+ protection: 'Turniiri ja striimi nõuetele vastavus',
+ updates: 'Prioriteetne OTA töövoog'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Väga sujuv', bottleneck: 'Pudelkits puudub (0%)' },
+ { playability: 'Väga sujuv', bottleneck: 'Pudelkits puudub (0%)' },
+ { playability: 'Väga sujuv', bottleneck: 'GPU pudelkits (18%)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: 'Ideaalne 240–360 Hz võistlusmänguks',
+ description:
+ '1080p e-spordi profiil: hoiame 410 FPS keskmiselt võistluseelsedistusel täis overlay komplektiga. Keskmisele lülitudes saad 375 FPS ja Ultra annab 201 FPS filmilisteks seanssideks.',
+ note: 'Hoia seda profiili, kui prioriteediks on maksimaalne reageerimisvõime.'
+ },
+ {
+ refreshAdvice: 'Sobib 165/240 Hz paneelidele teravama pildiga',
+ description:
+ '1440p-le liikumine tasakaalustab selguse ja sujuvuse: 242 FPS mõõdetud keskmistel seadistustel ja endiselt 130 FPS Ultra režiimis kõigi overlaydega.',
+ note: 'Eelista seda režiimi suure eraldusvõimega striimimiseks või detailsete VOD-analüüside jaoks.'
+ },
+ {
+ refreshAdvice: 'Stabiilne üle 120 Hz konkurentsivõimeliseks 4K-ks',
+ description:
+ '4K juures hoiab platvorm 131 FPS keskmiselt keskmisel eelseadistusel ja 70 FPS Ultra režiimis. Piirang tuleneb GPU-st, kuid säilib 120 Hz jaoks vajalik puhver.',
+ note: 'Kasuta seda profiili showcase-sisu või 4K ekraanil mängimise jaoks ilma suuremate kompromissideta.'
+ }
+ ],
+ improvementTips: [
+ 'Lülitu meie Esports- ja Ultra-eelseadistuste vahel pilvepaneelist, et GPU koormust hetkega kohandada.',
+ 'Reguleeri oma voogedastuse resolutsiooni (1080p, 1440p, 2160p) vastavalt märgitud FPS-varule, et hoida reageerimisvõimet.',
+ 'Kasuta automaatset ajastajat, et käivitada enne pikki treeninguid värske instants.',
+ 'Luba valikulised overlayd ainult kaartidel, kus neid vajad, et vabastada 3–5% ressursse.',
+ 'Jälgi latentsusdashi ja vaheta regiooni, kui ping ületab 30 ms.'
+ ],
+ advice:
+ 'Naudi erakordset sujuvust meie pilveinfrastruktuuril: 410 FPS 1080p e-spordis, 242 FPS 1440p juures ja 131 FPS 4K-s. Kohanda resolutsiooni, et leida endale sobiv kvaliteedi ja reaktsioonivõime tasakaal.',
+ augmentationSuite: {
+ modules: [
+ 'Dünaamiline taktikaline overlay',
+ 'Reaalajas võimete analüütika',
+ 'Meeskonna koosseisu assistent',
+ 'Kalibreeritud ruumilise heli profiil',
+ 'Automatiseeritud mikrocoaching'
+ ],
+ notes: 'Sünkroonib automaatselt ametlike patchnote’ide ja e-spordi profiilidega.'
+ },
+ heroSynergy: [
+ {
+ preset: 'Snaipri fookus',
+ coachingNotes: '144 Hz overlay hoiab pikad vaatejooned ja koordineerib positsioonikutsed.'
+ },
+ {
+ preset: 'Täpsus sihtimine',
+ coachingNotes: 'Ajastusassistendid keskmise kauguse duellideks ja cooldown’i meeldetuletused.'
+ },
+ {
+ preset: 'Duelist',
+ coachingNotes: 'Nähtavuse tippude jälgimine ja BOB-i monitooring rünnakute sünkroniseerimiseks.'
+ },
+ {
+ preset: 'Rünnak',
+ coachingNotes: 'Sprintitsoonide jälgimine ja sihtimisaknad Helix Rocketi jaoks.'
+ },
+ {
+ preset: 'Liikuvus',
+ coachingNotes: 'Optimaalsed marsruudid ja tervisepakettide jälgimine, et Recalli ümber mängida.'
+ },
+ {
+ preset: 'Käbedus',
+ coachingNotes: 'Dragonblade’i ajajoon koos hoiatustega võtmevastaste ressursside kohta.'
+ }
+ ]
+ }
+}
+
const copyByLocale: Record<'fr' | 'en' | 'et', LocaleContent> = {
fr: frenchCopy,
en: englishCopy,
- et: englishCopy
+ et: estonianCopy
}
type LocaleKey = keyof typeof copyByLocale
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index 8bf3fb4..bc04cd6 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -1946,3 +1946,28 @@ if (hasDecimal) {
#### État:
✅ Section Services alignée sur la charte visuelle
✅ Contenus FR/EN/ET enrichis et synchronisés
+
+### Fix: Localisation complète des pages produits cloud
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Garantir la disponibilité des contenus Overwatch PulseForge en français, anglais et estonien.
+- Uniformiser la page produit communautaire avec les systèmes de traduction existants.
+
+#### Actions réalisées:
+1. Ajout d'une copie estonienne détaillée pour la page native Overwatch (métriques, CTA, plans, conseils techniques).
+2. Internationalisation de la page produit communautaire avec récupération des traductions depuis `common.json` et override des abonnements.
+3. Extension des fichiers de langue FR/EN/ET avec les nouvelles clés `communityProductPage`.
+
+#### Fichiers modifiés:
+- `/components/NativeGamingProductPage.tsx`
+- `/components/CommunityGamingProductPage.tsx`
+- `/public/locales/fr/common.json`
+- `/public/locales/en/common.json`
+- `/public/locales/et/common.json`
+- `/next-i18next.config.js`
+
+#### État:
+✅ Page native Overwatch disponible en FR/EN/ET
+✅ Page produit communautaire alignée sur les traductions globales
diff --git a/next-i18next.config.js b/next-i18next.config.js
index bfb2f87..000fe9e 100644
--- a/next-i18next.config.js
+++ b/next-i18next.config.js
@@ -1,7 +1,7 @@
module.exports = {
i18n: {
defaultLocale: 'fr',
- locales: ['fr', 'en'],
+ locales: ['fr', 'en', 'et'],
},
localePath: './public/locales',
reloadOnPrerender: process.env.NODE_ENV === 'development',
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 2ee7e44..9ee27db 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -902,6 +902,57 @@
"highlights": "Included features"
}
},
+ "communityProductPage": {
+ "breadcrumb": {
+ "home": "Home",
+ "games": "Games"
+ },
+ "badges": {
+ "catalog": "Community Catalog",
+ "support": "COMMUNITY SUPPORT"
+ },
+ "subscription": {
+ "title": "Choose your subscription",
+ "description": "Access {{productName}} with any Hackboot subscription",
+ "popular": "Most popular",
+ "viewDetails": "View details"
+ },
+ "configuration": {
+ "title": "Standard Configuration",
+ "gpu": "GPU",
+ "ram": "RAM",
+ "cpu": "CPU",
+ "support": "Support",
+ "supportValue": "Community"
+ },
+ "about": {
+ "title": "About {{productName}}"
+ },
+ "featuresTitle": "Features",
+ "benefits": {
+ "title": "Community Catalog Benefits",
+ "items": [
+ {
+ "title": "Cloud Infrastructure",
+ "description": "Standard cloud configuration optimized for reliable performance"
+ },
+ {
+ "title": "Community Support",
+ "description": "Access Hackboot community forums, guides, and peer assistance"
+ },
+ {
+ "title": "Regular Updates",
+ "description": "Configurations kept aligned with the latest game patches"
+ }
+ ]
+ },
+ "cta": {
+ "title": "Ready to play {{game}}?",
+ "description": "Choose your subscription and get instant access to {{productName}}",
+ "button": "Choose my plan"
+ },
+ "reviewsLabel": "reviews"
+ },
"premiumSignup": {
"badge": "Configurator signup",
"title": "Activate your premium access",
diff --git a/public/locales/et/common.json b/public/locales/et/common.json
index e755a15..969982b 100644
--- a/public/locales/et/common.json
+++ b/public/locales/et/common.json
@@ -902,6 +902,57 @@
"highlights": "Paketi sisu"
}
},
+ "communityProductPage": {
+ "breadcrumb": {
+ "home": "Avaleht",
+ "games": "Mängud"
+ },
+ "badges": {
+ "catalog": "Kogukonna Kataloog",
+ "support": "KOGUKONNA TUGI"
+ },
+ "subscription": {
+ "title": "Vali oma tellimus",
+ "description": "Saa ligipääs mängule {{productName}} mis tahes Hackbooti paketiga",
+ "popular": "Kõige populaarsem",
+ "viewDetails": "Vaata üksikasju"
+ },
+ "configuration": {
+ "title": "Standardkonfiguratsioon",
+ "gpu": "GPU",
+ "ram": "RAM",
+ "cpu": "CPU",
+ "support": "Tugi",
+ "supportValue": "Kogukond"
+ },
+ "about": {
+ "title": "{{productName}} tutvustus"
+ },
+ "featuresTitle": "Funktsioonid",
+ "benefits": {
+ "title": "Kogukonna kataloogi eelised",
+ "items": [
+ {
+ "title": "Pilveinfrastruktuur",
+ "description": "Standardne pilveseadistus, mis on optimeeritud usaldusväärseks jõudluseks"
+ },
+ {
+ "title": "Kogukonna tugi",
+ "description": "Pääs Hackbooti kogukonna foorumitesse, juhenditesse ja abisse"
+ },
+ {
+ "title": "Regulaarsed uuendused",
+ "description": "Konfiguratsioonid püsivad kooskõlas värskeimate mängupaikadega"
+ }
+ ]
+ },
+ "cta": {
+ "title": "Valmis mängima {{game}}?",
+ "description": "Vali tellimus ja saa kohene ligipääs teenusele {{productName}}",
+ "button": "Vali minu pakett"
+ },
+ "reviewsLabel": "arvustust"
+ },
"premiumSignup": {
"badge": "Konfiguratsiooni registreerimine",
"title": "Aktiveeri oma premium ligipääs",
diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index 4f2ba88..74bbe90 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -902,6 +902,57 @@
"highlights": "Fonctionnalités incluses"
}
},
+ "communityProductPage": {
+ "breadcrumb": {
+ "home": "Accueil",
+ "games": "Jeux"
+ },
+ "badges": {
+ "catalog": "Catalogue Communautaire",
+ "support": "SUPPORT COMMUNAUTAIRE"
+ },
+ "subscription": {
+ "title": "Choisissez votre abonnement",
+ "description": "Accédez à {{productName}} avec n'importe quel abonnement Hackboot",
+ "popular": "Le plus populaire",
+ "viewDetails": "Voir les détails"
+ },
+ "configuration": {
+ "title": "Configuration Standard",
+ "gpu": "GPU",
+ "ram": "RAM",
+ "cpu": "CPU",
+ "support": "Support",
+ "supportValue": "Communautaire"
+ },
+ "about": {
+ "title": "À propos de {{productName}}"
+ },
+ "featuresTitle": "Fonctionnalités",
+ "benefits": {
+ "title": "Avantages du Catalogue Communautaire",
+ "items": [
+ {
+ "title": "Infrastructure Cloud",
+ "description": "Configuration cloud standard optimisée pour des performances fiables"
+ },
+ {
+ "title": "Support Communautaire",
+ "description": "Accédez aux forums, guides et aide de la communauté Hackboot"
+ },
+ {
+ "title": "Mises à jour régulières",
+ "description": "Configurations maintenues à jour avec les derniers patchs du jeu"
+ }
+ ]
+ },
+ "cta": {
+ "title": "Prêt à jouer à {{game}} ?",
+ "description": "Choisissez votre abonnement et accédez immédiatement à {{productName}}",
+ "button": "Choisir mon abonnement"
+ },
+ "reviewsLabel": "avis"
+ },
"premiumSignup": {
"badge": "Inscription configurateur",
"title": "Active ton accès premium",
From 81505f3672d094445da63b9f0e4b04b59f2f643d Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Wed, 22 Oct 2025 11:34:49 +0200
Subject: [PATCH 08/25] feat: expand pulseforge overwatch feature suite
---
components/NativeGamingProductPage.tsx | 243 ++++++++++++++++++++++++-
data/gaming-products.json | 82 +++++++++
docs/JOURNAL.md | 21 +++
docs/README.md | 3 +-
lib/gaming-products.ts | 9 +
5 files changed, 349 insertions(+), 9 deletions(-)
diff --git a/components/NativeGamingProductPage.tsx b/components/NativeGamingProductPage.tsx
index aa2d490..5a96f86 100644
--- a/components/NativeGamingProductPage.tsx
+++ b/components/NativeGamingProductPage.tsx
@@ -136,6 +136,7 @@ interface LocaleContent {
}
nativeReasons: { title: string; description: (game: string) => string }
featuresTitle: string
+ featureNotesTitle: string
cta: { title: (game: string) => string; description: string; button: string }
subscriptionPlans?: Record
>
product: { description?: string; longDescription?: string; variants?: Record }
@@ -361,6 +362,7 @@ const frenchCopy: LocaleContent = {
description: (game: string) => `Optimisé de A à Z pour ${game}, avec des performances mesurées et un support dédié`
},
featuresTitle: 'Fonctionnalités Incluses',
+ featureNotesTitle: 'Notes d’implémentation (pour rester clean côté ToS)',
cta: {
title: (game: string) => `Prêt à sublimer votre expérience ${game} ?`,
description: "Activez la suite PulseForge et profitez d'outils créatifs prêts pour le coaching, le streaming et la compétition.",
@@ -589,6 +591,7 @@ const englishCopy: LocaleContent = {
description: (game: string) => `Optimized end to end for ${game}, with measured performance and dedicated support.`
},
featuresTitle: 'Included features',
+ featureNotesTitle: 'Implementation notes (stay ToS-friendly)',
cta: {
title: (game: string) => `Ready to elevate your ${game} experience?`,
description: 'Activate the PulseForge suite and unlock creative tools built for coaching, streaming, and competition.',
@@ -654,6 +657,88 @@ const englishCopy: LocaleContent = {
'Multi-input integration support (MKB/pad)',
'Continuous collaborative updates'
],
+ featureHighlights: [
+ 'Ranked / all servers – 100% fair-play (screen reading, killfeed, audio, no memory injection)',
+ 'PulseForge private lobbies – synchronized builds with everyone on PulseForge (cosmetics & advanced training)'
+ ],
+ featureGroups: [
+ {
+ title: 'Ranked / fair-play (live)',
+ items: [
+ 'Ult Economy Assistant (light overlay): estimates enemy ultimate progress by role (killfeed, visible damage, time in game) plus an anti-ulti stack reminder for your team.',
+ 'Fight Timeline: a “teamfight phase” bar that lights up after the first pick and ends at clean-up, with “advantage/outnumbered”, “enemy respawn”, and stagger detection indicators (killfeed analysis).',
+ 'Cooldown Inference Overlay: infers key enemy cooldowns from visible cues (animation, sound, VFX). Example: Suzu/Kiriko, Lamp/Bap, Immortality consumed → punishment window displayed for 2–3 seconds.',
+ 'Map & Rotation Coach: interactive mini-maps per point/control, highlights risky angles, retake paths, overtime timers, and best recontest routes (based on the active map).',
+ 'Crosshair & FOV Optimizer: hero/map recommendations (default placement, head height, pre-aim lanes) plus a gaze heatmap (simulated eye-line via center-screen tracking).',
+ 'Comm AI Notetaker: local transcription of comms with tags (“Blade ready”, “no lamp”, “push right”), 20-second summaries at the bottom of the screen, silent text ping if no one calls.',
+ 'Anti-Tilt HUD: contextually hides tilting stats (accuracy, deaths) mid-fight, keeps focus on objectives. Unlocks everything between fights.',
+ 'Audio Director: role-based audio profiles (Tank/Support/DPS), automatic ducking when key calls trigger, low-frequency shield to better pick up footsteps/ultimates.',
+ 'Input Coach Micro-movements: detects micro habit errors (late reloads, ability hoarding, unnecessary jumps under hitscan) with short prompts between fights.',
+ 'Latency Guard: levels out jitter and adapts the stream pre-buffer in-fight vs out-of-fight to keep the cloud feel stable.'
+ ]
+ },
+ {
+ title: 'PulseForge private lobbies (everyone on the PulseForge build)',
+ description: 'PulseForge Lobby compatible (private lobby options)',
+ items: [
+ 'Shared skins & VFX: team-wide visual sets (weapons, tracers, kill-impact FX), synchronized team sprays, end-of-fight animations; invisible to non-PulseForge players.',
+ 'Dynamic cooldown sandbox: practice with reduced cooldowns, boosted ultimate charge, scenario runner (e.g. “Nano-Blade 3 tries”, “Dive Winston+Genji on point B”).',
+ 'Stratboard Live: tactical whiteboard aligned on the map overlay (routes, timings, map control zones), real-time sharing with coach/spectator.',
+ 'Draft & Lock scrim: lock compositions, force role rotations, auto-export scrim reports (picks, swaps, fight wins, ult diff).',
+ 'Ghost-Run & Time-Trial: “ghosts” of your best executions (e.g. Tracer pathing, Winston engage route) visible to the whole team.',
+ 'Stream-Ready Suite: automatic lower thirds, 8-second instant replays, widened killfeed for internal casting, chapter markers.'
+ ]
+ },
+ {
+ title: 'Hero packs',
+ description: 'Quick and practical examples',
+ items: [
+ 'Genji: Blade Planner (detected “no-Suzu/no-Lamp” window) plus dash reset check (killfeed) and suggested vertical engage route.',
+ 'Tracer: Blink Economy (blink counter → engage/escape), “Recall Value” (last 3 seconds state reminder) plus pre-aim lanes versus hitscan.',
+ 'Sombra: Translocator Planner (dynamic safe zones) plus Hack Window reminders on targets without cleanse.',
+ 'Winston: Dive Timer (jump → zap → bubble → melee → cancel) plus heatmap of effective bubbles on the active map.',
+ 'Reinhardt: Shatter Angle Coach (likely angle lines, on-screen reminders of enemy stuns/interrupts).',
+ 'Zarya: Bubble Trade Meter (probable charge value vs peel) plus “gravi combo” alerts ready when burst DPS allies are online.',
+ 'Sojourn: Rail Discipline (prompts “don’t ego-peek”, optimal rail charge before peek) plus power-spike reminders.',
+ 'Cassidy: Peek Timer (recommended max exposure per angle) plus sticky grenade “commit/abort” prompt.',
+ 'Ana: Anti/Nade Value (window for 3+ targets without cleanse) plus Sleep Priority (impact-ranked target list).',
+ 'Mercy: GA Pathing Preview (safe GA lines) plus beam juggling coach (optimal blue/yellow uptime).',
+ 'Kiriko: Suzu Priority (alerts on visible imminent threats) plus TP rescue lanes.',
+ 'Lucio: Beat Risk Meter (active anti-beat conditions) plus fast rollout ghosts.',
+ 'Baptiste: Immortality Trade (value vs risk) plus lamp angle helper (useful bounces).'
+ ]
+ },
+ {
+ title: 'Map & mode modules',
+ items: [
+ 'King of the Hill IQ: retake timing indicators, split paths, “do-not-touch zones” when outnumbered.',
+ 'Hybrid/Escort: checkpoint playbook (off-angles, key high grounds, enemy spawn timers), “cart push discipline” reminders.',
+ 'Point flashcards: mini-cards during setup (30s) with three pre-configured plays per team.'
+ ]
+ },
+ {
+ title: 'Analytics & coaching',
+ items: [
+ 'Match Story Auto-report: automatic recap (pivots, fight wins, ult diff, decisive picks) plus comparisons to your target MMR.',
+ 'Session Planner: session goals (two hero focuses + one map), micro-challenges, and adherence score.',
+ 'A/B Personal HUD: HUD tests (reticle size, minimal HUD) with measured impact on accuracy/KAST-like metrics.',
+ 'VOD Auto-tag: automatic tagging of recurring mistakes (stagger, over-ult, tunnel vision) with a clickable timeline.'
+ ]
+ },
+ {
+ title: 'Accessibility & comfort',
+ items: [
+ 'Color-blind Pro: compliant team/hero palettes plus reinforced outlines on fast projectiles.',
+ 'Sound-to-HUD: critical audio cues converted into optional visual tiles for the hard of hearing.',
+ 'Focus Mode: blocks toxic whispers, breathing timer between rounds, guided micro-breaks.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'In public ranked, every calculation only uses what is visible/audible (cloud-side vision/ASR) plus killfeed/scoreboard. No memory reading or injection.',
+ 'Cosmetics, tweaked cooldowns, sandbox scenarios, and live stratboards are reserved for PulseForge private lobbies where everyone runs the same build.',
+ 'All overlays are opt-in, discreet, and adaptive (auto-hide mid-fight when the visual load rises).'
+ ],
target_audience: 'Coaches, creators, competitive players',
highlight: 'Meta-synced native suite',
protection: 'Tournament & stream compliance',
@@ -954,6 +1039,7 @@ const estonianCopy: LocaleContent = {
description: (game: string) => `Läbivalt ${game} jaoks optimeeritud, mõõdetud jõudluse ja pühendunud toe abil.`
},
featuresTitle: 'Kaasa kuuluvad funktsioonid',
+ featureNotesTitle: 'Rakenduse märkused (ToS-sõbralik kasutus)',
cta: {
title: (game: string) => `Valmis oma ${game} kogemust tõstma?`,
description: 'Aktiveeri PulseForge’i komplekt ja ava coaching’u, striimimise ja võistluste jaoks loodud tööriistad.',
@@ -1019,6 +1105,88 @@ const estonianCopy: LocaleContent = {
'Mitme sisendi tugi (MKB/pult)',
'Jätkuvad koostööl põhinevad uuendused'
],
+ featureHighlights: [
+ 'Reastatud / kõik serverid – 100% fair-play (ekraani lugemine, killfeed, audio, ilma mälusüstita)',
+ "PulseForge'i privaatlobid – sünkroonitud buildid kõigile PulseForge'is (kosmeetika ja edasijõudnud treening)"
+ ],
+ featureGroups: [
+ {
+ title: 'Reastatud / fair-play (live)',
+ items: [
+ 'Ult Economy Assistant (kerge overlay): hindab vastaste ulti edenemist rolli järgi (killfeed, nähtav kahju, mänguaeg) + meeskonnale anti-ulti-stack meeldetuletus.',
+ 'Fight Timeline: „teamfight’i faasi” riba süttib esimese pick’i järel ja lõppeb clean-up’iga, näidates „eelis / vähemus”, „vastase respawn” ja staggeri tuvastust (killfeed’i analüüs).',
+ 'Cooldown Inference Overlay: järeldab võtme cooldown’id nähtavate vihjete põhjal (animatsioon, heli, VFX). Nt Suzu/Kiriko, Lamp/Bap, Immortality kasutatud → karistusaken 2–3 sekundiks.',
+ 'Map & Rotation Coach: interaktiivsed minikaardid iga punkti/kontrolli jaoks, hoiatab ohtlike nurkade eest, näitab retake-teid, overtime’i taimerid ja parimad recontest-marsruudid (aktiivse kaardi põhjal).',
+ 'Crosshair & FOV Optimizer: soovitused kangelase/kaardi kaupa (vaikimisi paigutus, pea kõrgus, pre-aim rajad) + pilgukaart (simuleeritud silmaliin ekraani keskpunkti jälgimisest).',
+ 'Comm AI Notetaker: salvestab kohapeal commid siltidega („Blade ready”, „no lamp”, „push right”), kuvab iga 20 s ekraani allosas kokkuvõtte ja saadab vaikse tekstipingi, kui keegi ei call’i.',
+ 'Anti-Tilt HUD: peidab võitluse ajal tilt’i tekitavad statid (täpsus, surmad), hoiab fookuse eesmärkidel. Kõik avaneb uuesti võitluste vahel.',
+ 'Audio Director: rollipõhised audioprofiilid (Tank/Tugi/DPS), automaatne mixi langetamine oluliste call’ide ajal, madalsagedusfilter paremaks sammude/ultide kuulmiseks.',
+ 'Input Coach Micro-liigutused: tuvastab mikroharjumuste vead (hiline reload, võimete kogumine, ebavajalikud hüpped hitscan’i vastu) ja annab lühikesed promptid võitluste vahel.',
+ 'Latency Guard: tasandab jitterit ja kohandab stream’i eelpuhvrit võitluse ajal vs väljas, et pilvekogemus püsiks stabiilne.'
+ ]
+ },
+ {
+ title: "PulseForge'i privaatlobid (kõik PulseForge buildil)",
+ description: 'Ühilduv PulseForge Lobby lahendusega (privaatlobi valikud)',
+ items: [
+ 'Jagatud skinid ja VFX-id: tiimi visuaalseted setid (relvad, tracer’id, kill-impact FX), sünkroonitud tiimispreid, lahingu lõpu animatsioonid; nähtamatud neile, kes PulseForge’i ei kasuta.',
+ 'Dünaamiline cooldown-sandbox: treening lühendatud cooldown’idega, kiirendatud ulti charge, stsenaariumijooksja (nt „Nano-Blade 3 katset”, „Dive Winston+Genji punkt B-le”).',
+ 'Stratboard Live: taktikaline tahvel kaardiga overlay’s (marsruudid, ajastused, map control tsoonid), reaalajas jagamine coach’i või spectatoriga.',
+ 'Draft & Lock scrim: lukustab koosseisud, sunnib rollirotatsiooni, ekspordib automaatselt scrimi raporti (picks, swapid, fight-win’id, ult-diff).',
+ 'Ghost-Run & Time-Trial: „kummitused” teie parimatest sooritustest (nt Traceri liikumine, Winstoni engage) nähtavad kogu tiimile.',
+ 'Stream-Ready Suite: automaatsed lower thirdid, 8-sekundilised kohesed kordused, laiendatud killfeed sisekommentaatorile, peatükkide markerid.'
+ ]
+ },
+ {
+ title: 'Kangelase paketid',
+ description: 'Kiired ja praktilised näited',
+ items: [
+ 'Genji: Blade Planner (tuvastatud „no-Suzu/no-Lamp” aken) + dash reset kontroll (killfeed) + soovitatud vertikaalne engage-tee.',
+ 'Tracer: Blink Economy (blink loendur → engage/escape), „Recall Value” (viimase 3 s seisundi meeldetuletus) + pre-aim rajad hitscan’i vastu.',
+ "Sombra: Translocator Planner (dünaamilised turvalised tsoonid) + Hack Window meeldetuletused sihtmärkidele ilma cleanse'ita.",
+ 'Winston: Dive Timer (hüpe → zap → bubble → melee → cancel) + aktiivse kaardi efektiivsete bubble’ite soojuskaart.',
+ 'Reinhardt: Shatter Angle Coach (tõenäolised nurkjooned, ekraanile ilmuvad vaenlase stunnide/katkestuste meeldetuletused).',
+ 'Zarya: Bubble Trade Meter (tõenäoline charge’i väärtus vs peel) + „gravi kombo” hoiatused, kui burst DPS-liitlased on valmis.',
+ 'Sojourn: Rail Discipline (promptid „ära ego-peeki”, optimaalne raili laeng enne piilumist) + power-spike meeldetuletused.',
+ 'Cassidy: Peek Timer (soovituslik maksimaalne kokkupuute aeg nurga järgi) + sticky granaadi „commit/abort” prompt.',
+ 'Ana: Anti/Nade Value (aken 3+ sihtmärgile ilma cleanse’ita) + Sleep Priority (mõju järgi järjestatud sihtmärkide nimekiri).',
+ 'Mercy: GA Pathing Preview (ohutud GA trajektoorid) + beam juggling coach (sinise/kollase kiire optimaalne uptime).',
+ 'Kiriko: Suzu Priority (hoiatused nähtavate peatselt saabuvate ohtude kohta) + TP päästerajad.',
+ 'Lucio: Beat Risk Meter (aktiivsed anti-beat tingimused) + kiired rollout-kummitused.',
+ 'Baptiste: Immortality Trade (väärtus vs risk) + lamp angle helper (kasulikud põrked).'
+ ]
+ },
+ {
+ title: 'Kaardi ja mänguviisi moodulid',
+ items: [
+ 'King of the Hill IQ: retake’i ajastuse indikaatorid, split-teed, „ära-astuta tsoonid” kui olete vähemuses.',
+ 'Hybrid/Escort: checkpoint’i playbook (off-angles, võtme kõrgendikud, vastaste spawni taimerid), „cart push discipline” meeldetuletused.',
+ 'Punkti flashcardid: minikaardid setup’i (30 s) ajal kolme eelseadistatud käiguga tiimi kohta.'
+ ]
+ },
+ {
+ title: 'Analüütika ja coaching',
+ items: [
+ 'Match Story Auto-report: automaatne kokkuvõte (pöörded, fight-võidud, ult-diff, otsustavad pickid) + võrdlus siht-MMR-iga.',
+ 'Session Planner: sessiooni eesmärgid (2 kangelase fookust + 1 kaart), mikroülesanded ja täituvuse skoor.',
+ 'A/B Personal HUD: HUDi testid (sihtmärgi suurus, minimaalne HUD) mõõdetud mõjuga täpsusele/KAST-laadsetele näitajatele.',
+ 'VOD Auto-tag: korduvate vigade automaatne märgistamine (stagger, üle-ulti, tunnel vision) klõpsatava ajajoonega.'
+ ]
+ },
+ {
+ title: 'Ligipääsetavus ja mugavus',
+ items: [
+ 'Color-blind Pro: meeskonna/kangelase paletid standardite järgi + kiirete projektiilide tugevdatud kontuurid.',
+ 'Sound-to-HUD: kriitilised helisignaalid muudetakse valikuliseks visuaalseteks ikoonideks kuulmispuudega mängijatele.',
+ 'Focus Mode: blokeerib toksilised whisperid, hingamistimer roundide vahel, juhendatud mikro-pausid.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'Avalikes reitingumängudes põhineb kogu arvutus ainult nähtaval/kuuldaval (pilvepoolne visioon/ASR) + killfeed/scoreboard. Mälulugemist ega süsti pole.',
+ "Kosmeetika, muudetud cooldownid, sandbox-stsenaariumid ja reaalajas stratboardid on mõeldud ainult PulseForge'i privaatlobidele, kus kõik kasutavad sama buildi.",
+ 'Kõik overlayd on opt-in, diskreetsed ja kohanduvad (peidavad end võitluse ajal, kui visuaalne müra kasvab).'
+ ],
target_audience: 'Treenerid, loojad, võistlusmängijad',
highlight: 'Metaga sünkroonis natiivne suite',
protection: 'Turniiri ja striimi nõuetele vastavus',
@@ -1228,6 +1396,9 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
const productDescription = copy.product.description ?? product.description
const nativeAdvantages = copy.nativeAdvantages
const performanceLatency = tech?.performanceMetrics?.latency ?? 0
+ const featureHighlights = selectedVariant?.featureHighlights ?? []
+ const featureGroups = selectedVariant?.featureGroups ?? []
+ const implementationNotes = selectedVariant?.implementationNotes ?? []
const ProgressBar = ({ label, value, max, color = "purple", unit = "" }: { label: string, value: number, max: number, color?: string, unit?: string }) => {
const percentage = (value / max) * 100
@@ -2131,15 +2302,71 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{copy.featuresTitle}
-
- {selectedVariant.features.map((feature, idx) => (
-
-
-
{feature}
+
+ {featureHighlights.length > 0 && (
+
+ {featureHighlights.map((highlight, idx) => (
+
+
+ {highlight}
+
+ ))}
+
+ )}
+
+ {featureGroups.length > 0 ? (
+
+ {featureGroups.map((group, idx) => (
+
+
+
{group.title}
+ {group.description &&
{group.description}
}
+
+
+ {group.items.map((item, itemIdx) => (
+
+
+ {item}
+
+ ))}
+
+
+ ))}
+
+ ) : (
+
+
+ {selectedVariant.features.map((feature, idx) => (
+
+
+ {feature}
+
+ ))}
- ))}
-
+
+ )}
+
+ {implementationNotes.length > 0 && (
+
+
+
+
+
{copy.featureNotesTitle}
+
+ {implementationNotes.map((note, idx) => (
+
+
+ {note}
+
+ ))}
+
+
+
+
+ )}
diff --git a/data/gaming-products.json b/data/gaming-products.json
index ff41e9c..66ca43f 100644
--- a/data/gaming-products.json
+++ b/data/gaming-products.json
@@ -223,6 +223,88 @@
"Support d'intégration multi-input (MKB/pad)",
"Mises à jour collaboratives en continu"
],
+ "featureHighlights": [
+ "Ranked/Tous serveurs – 100 % fair-play (lecture d’écran, killfeed, audio, sans injection mémoire)",
+ "Lobbies privés PulseForge – builds synchronisés où tout le monde est sur PulseForge (cosmétique & entraînement avancé)"
+ ],
+ "featureGroups": [
+ {
+ "title": "Ranked / fair-play (live)",
+ "items": [
+ "Ult Economy Assistant (visuel léger) : estimation de l’avancement des ultis adverses par rôle (basé sur killfeed, dégâts visibles, temps en jeu) + rappel \"anti-stack d’ulti\" côté équipe.",
+ "Fight Timeline : barre \"phase de teamfight\" qui s’allume dès le premier pick et se termine au clean-up, avec indicateurs \"avantage/sous-nombre\", \"respawn adv.\" et stagger détecté (analyse du killfeed).",
+ "Cooldown Inference Overlay : inférence des CDs clés adverses à partir d’indices visibles (animation, son, VFX). Exemple : Suzu/Kiriko, Lamp/Bap, Immortality consommé → fenêtre de punition affichée 2–3 s.",
+ "Map & Rotation Coach : mini-plans interactifs par point/contrôle, rappel d’angles dangereux, chemins de retake, timers d’over-time et meilleurs \"recontest routes\" (basé sur la carte active).",
+ "Crosshair & FOV Optimizer : recommandations par héros/carte (placement par défaut, hauteur tête, \"pre-aim lanes\") + heatmap de regard (eye-line simulée via tracking du centre d’écran).",
+ "Comm AI Notetaker : transcription locale des comms avec tags (\"Blade ready\", \"no lamp\", \"push right\"), résumé en bas d’écran toutes les 20 s, ping textuel silencieux si personne ne call.",
+ "Anti-Tilt HUD : masquage contextuel de stats toxiques (accuracy, deaths) en fight, focus sur objectifs. Déverrouille tout entre les fights.",
+ "Audio Director : profil audio par rôle (Tank/Supp/DPS), duck automatique du mix quand call important, bouclier anti-LFE pour repérer mieux les pas/ultis.",
+ "Input Coach Micro-gestes : détection de micro-erreurs \"habitudes\" (reload tardif, ability hoarding, sauts inutiles sous hitscan) avec prompts courts entre les fights.",
+ "Latency Guard : égalisation du jitter et adaptation du pre-buffer de stream in-fight vs out-of-fight, pour garder la sensation stable sur cloud."
+ ]
+ },
+ {
+ "title": "Lobbies privés Pulseforge (tous joueurs sur build Pulseforge)",
+ "description": "Compatible PulseForge Lobby (options de lobbies privés)",
+ "items": [
+ "Skins & VFX partagés : sets visuels de team (armes, tracers, kill-impact FX), sprays synchronisés d’équipe, animations de fin de fight ; invisibles pour les non-Pulseforge.",
+ "Sandbox à CDs dynamiques : entraînement avec CDs réduits, ult charge boostée, scenario runner (ex : \"Nano-Blade 3 tries\", \"Dive Winston+Genji sur point B\").",
+ "Stratboard Live : tableau tactique calé sur la carte en overlay (routes, timings, map control zones), partage en temps réel avec coach/spectateur.",
+ "Draft & Lock scrim : verrouillage de compos, rotation forcée des rôles, export auto du scrim report (picks, swaps, fight-wins, ult-diff).",
+ "Ghost-Run & Time-Trial : \"fantômes\" de vos meilleures exécutions (ex : tracer pathing, Winston engage route) visibles par l’équipe.",
+ "Stream-Ready Suite : lower-thirds auto, replays instantanés 8 s, killfeed élargi pour caster interne, marqueurs de chapitres."
+ ]
+ },
+ {
+ "title": "Packs \"Héros\"",
+ "description": "Exemples rapides & utiles",
+ "items": [
+ "Genji : Blade Planner (fenêtre \"no-Suzu/no-Lamp\" détectée) + check \"dash reset\" (killfeed) + route d’engage verticale suggérée.",
+ "Tracer : Blink Economy (compteur blink→engage/escape), \"Recall Value\" (rappel des dernières 3 s d’état) + lanes de pré-aim sur hitscan.",
+ "Sombra : Translocator Planner (zones safe dynamiques) + rappel Hack Windows sur cibles sans cleanse.",
+ "Winston : Dive Timer (jump→zap→bubble→melee→cancel) + heatmap de bulles efficaces sur la carte active.",
+ "Reinhardt : Shatter Angle Coach (lignes d’angles probables, rappel des stuns/interrupts ennemis on-screen).",
+ "Zarya : Bubble Trade Meter (valeur probable de charge vs peel) + alertes \"gravi combos\" prêtes (si coéquipiers avec DPS burst).",
+ "Sojourn : Rail Discipline (prompts \"don’t ego-peek\", charge rail optimale avant peek) + rappel de power-spikes.",
+ "Cassidy : Peek-Timer (exposition max conseillée selon angle) + sticky nade \"commit/abort\" prompt.",
+ "Ana : Anti/Nade Value (fenêtre 3+ cibles sans cleanse) + Sleep Priority (liste triée par impact si hit).",
+ "Mercy : GA Pathing Preview (lignes de GA sûres) + beam juggling coach (uptime bleu/jaune optimal).",
+ "Kiriko : Suzu Priority (rappel des menaces imminentes visibles) + TP lanes de sauvetage.",
+ "Lucio : Beat Risk Meter (anti-beat conditions actives) + rollouts rapides avec fantômes.",
+ "Baptiste : Immortality Trade (value/risque) + lamp angle helper (rebonds utiles)."
+ ]
+ },
+ {
+ "title": "Modules \"Map & Mode\"",
+ "items": [
+ "King of the Hill IQ : indicateurs de retake timings, chemins split, \"do-not-touch zones\" quand sous-nombre.",
+ "Hybrid/Escorte : checkpoint playbook (angles off-angles, highgrounds clés, spawn adv. timers), rappel \"cart push discipline\".",
+ "Flashcards de pointes : micro-cartes pendant le setup (30 s) avec 3 plays pré-config par équipe."
+ ]
+ },
+ {
+ "title": "Analytics & Coachings",
+ "items": [
+ "Match Story Auto-report : résumé auto (pivots, fight-wins, ult-diff, picks décisifs) + comparaisons à votre MMR cible.",
+ "Session Planner : objectifs de session (2 focus héros + 1 map), micro-défis et score d’adhérence.",
+ "A/B Personal HUD : tests d’HUD (taille réticule, HUD minimal) avec mesure d’impact sur précision/KAST-like.",
+ "VOD Auto-tag : tagging auto des erreurs récurrentes (stagger, over-ult, tunnel vision), timeline cliquable."
+ ]
+ },
+ {
+ "title": "Accessibilité & confort",
+ "items": [
+ "Color-blind Pro : palettes par équipe/héros conformes + contours renforcés des projectiles rapides.",
+ "Sound-to-HUD : indices sonores critiques transformés en vignettes visuelles (optionnel) pour malentendants.",
+ "Focus Mode : blocage des whispers toxiques, timer de respiration entre rounds, micro-pauses guidées."
+ ]
+ }
+ ],
+ "implementationNotes": [
+ "En ranked public, tout ce qui est calculé vient uniquement de ce qui est visible/entendable (vision/ASR côté cloud) + killfeed/scoreboard. Aucune lecture mémoire / aucune injection.",
+ "Les cosmétiques, CDs modifiés, scénarios sandbox et stratboards actifs temps réel sont réservés aux lobbies privés Pulseforge où tout le monde est sur le même build.",
+ "Tous les overlays sont opt-in, discrets, et adaptatifs (se masquent en fight si bruit visuel)."
+ ],
"target_audience": "Coachs, créateurs, joueurs compétitifs",
"highlight": "Suite native synchronisée à la méta",
"protection": "Conformité tournois & stream",
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index bc04cd6..093bc74 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -1,5 +1,26 @@
# Journal des Actions - Hackboot
+## 2025-10-23
+
+### Feature: Enrichissement PulseForge Overwatch avec modules lobby et notes ToS
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectif:
+Présenter clairement les offres PulseForge (ranked fair-play et lobbies privés) et garantir la disponibilité des traductions FR/EN/ET, tout en affichant les garde-fous ToS.
+
+#### Modifications apportées:
+1. Ajout de `featureHighlights`, `featureGroups` et `implementationNotes` sur la variante Overwatch PulseForge dans `data/gaming-products.json`.
+2. Extension de l'interface `ProductVariant` (`lib/gaming-products.ts`) pour supporter ces nouveaux champs.
+3. Modernisation de la section Fonctionnalités dans `NativeGamingProductPage.tsx` (highlights, groupes détaillés, note de conformité).
+4. Traduction complète des blocs PulseForge en anglais et estonien via `copyByLocale.product.variants`.
+5. Documentation des nouveaux champs dans `docs/README.md` et journalisation de l'opération.
+
+#### Résultats:
+- ✅ Les pages FR/EN/ET détaillent les modules ranked/live et PulseForge Lobby.
+- ✅ Les notes ToS sont visibles dans un encart dédié.
+- ✅ La documentation reflète la nouvelle structure de données.
+
## 2025-10-22
### Docs: Intégration de la documentation des pages produits dans README
diff --git a/docs/README.md b/docs/README.md
index 17d32d5..3576072 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -79,6 +79,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
- Les fiches sont définies dans [`data/gaming-products.json`](../data/gaming-products.json).
- Chaque entrée précise l'identifiant, le `slug`, le niveau d'optimisation (`native` ou `community`), la description marketing et les métriques de performance.
- Les tableaux `resolutionGuidance` et `technicalSpecs` exposent les FPS, la latence et les informations réseau injectées telles quelles dans l'interface.
+ - Les variantes peuvent embarquer `featureHighlights`, `featureGroups` (titre, description, éléments) et `implementationNotes` pour décrire les suites PulseForge ; ces blocs sont traduits via les overrides de `copyByLocale.product.variants`.
- Les utilitaires d'accès et les types associés vivent dans [`lib/gaming-products.ts`](../lib/gaming-products.ts).
- `getAllGamingProducts()` et `getGamingProductBySlug()` alimentent les routes dynamiques.
@@ -101,7 +102,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
4. Compléter les traductions génériques dans `public/locales/
/common.json` si besoin.
5. Lancer `npm run lint` pour valider les schémas avant de publier.
-**Dernière action:** Intégration de la documentation des pages produits dans ce fichier (22/09/2025)
+**Dernière action:** Ajout des groupes de fonctionnalités PulseForge et des notes d'implémentation traduites (23/10/2025)
---
diff --git a/lib/gaming-products.ts b/lib/gaming-products.ts
index 05244b5..3bf5aef 100644
--- a/lib/gaming-products.ts
+++ b/lib/gaming-products.ts
@@ -1,6 +1,12 @@
import nativeProductsData from '@/data/gaming-products.json'
import communityProductsData from '@/data/gaming-products-community.json'
+export interface FeatureGroup {
+ title: string
+ description?: string
+ items: string[]
+}
+
export interface ProductVariant {
id: string
name: string
@@ -16,6 +22,9 @@ export interface ProductVariant {
features: string[]
protection: string
updates: string
+ featureHighlights?: string[]
+ featureGroups?: FeatureGroup[]
+ implementationNotes?: string[]
pricing: {
hourly: number
monthly: number
From 370c2f399ace85380de6982d5943d0bca3676793 Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Wed, 22 Oct 2025 11:44:08 +0200
Subject: [PATCH 09/25] fix: align community product page with internal i18n
---
components/CommunityGamingProductPage.tsx | 39 +++++++++++++++--------
docs/JOURNAL.md | 20 ++++++++++++
2 files changed, 45 insertions(+), 14 deletions(-)
diff --git a/components/CommunityGamingProductPage.tsx b/components/CommunityGamingProductPage.tsx
index df5da67..bcae186 100644
--- a/components/CommunityGamingProductPage.tsx
+++ b/components/CommunityGamingProductPage.tsx
@@ -3,14 +3,13 @@
import { useMemo } from 'react'
import { Star, Check, ArrowRight, Users, Cloud } from 'lucide-react'
import Link from 'next/link'
-import { usePathname } from 'next/navigation'
-import { useTranslation } from 'next-i18next'
import type { GamingProduct } from '@/lib/gaming-products'
import { getSubscriptionPlans } from '@/lib/subscriptions'
import type { SubscriptionPlan } from '@/lib/subscriptions'
import ProductImage from './ProductImage'
import SiteHeader from '@/components/SiteHeader'
import Footer from '@/components/Footer'
+import { useI18n } from '@/lib/i18n-simple'
interface CommunityGamingProductPageProps {
product: GamingProduct
@@ -19,32 +18,44 @@ interface CommunityGamingProductPageProps {
type CommunityPageCopy = {
breadcrumb: { home: string; games: string }
badges: { catalog: string; support: string }
- subscription: { title: string; popular: string; viewDetails: string }
+ subscription: { title: string; description: string; popular: string; viewDetails: string }
configuration: { title: string; gpu: string; ram: string; cpu: string; support: string; supportValue: string }
about: { title: string }
featuresTitle: string
benefits: { title: string; items: Array<{ title: string; description: string }> }
- cta: { button: string }
+ cta: { title: string; description: string; button: string }
reviewsLabel: string
}
+const formatMessage = (template?: string, replacements: Record = {}) =>
+ template
+ ? Object.entries(replacements).reduce(
+ (result, [key, value]) => result.replaceAll(`{{${key}}}`, value),
+ template,
+ )
+ : undefined
+
export default function CommunityGamingProductPage({ product }: CommunityGamingProductPageProps) {
- const pathname = usePathname()
- const locale = pathname.split('/')[1]
- const { t } = useTranslation('common')
+ const { t, locale } = useI18n()
+ const copy = t.communityProductPage as CommunityPageCopy
+ const planTranslations = t.premiumSignup?.plans as Record> | undefined
- const copy = t('communityProductPage', { returnObjects: true }) as CommunityPageCopy
- const subscriptionDescription = t('communityProductPage.subscription.description', { productName: product.name })
- const aboutTitle = t('communityProductPage.about.title', { productName: product.name })
- const ctaTitle = t('communityProductPage.cta.title', { game: product.game })
- const ctaDescription = t('communityProductPage.cta.description', { productName: product.name })
- const planTranslations = t('premiumSignup.plans', { returnObjects: true }) as Record>
+ const subscriptionDescription =
+ formatMessage(copy.subscription.description, { productName: product.name }) ??
+ `Accédez à ${product.name} avec n'importe quel abonnement Hackboot`
+ const aboutTitle =
+ formatMessage(copy.about.title, { productName: product.name }) ?? `À propos de ${product.name}`
+ const ctaTitle =
+ formatMessage(copy.cta.title, { game: product.game }) ?? `Prêt à jouer à ${product.game} ?`
+ const ctaDescription =
+ formatMessage(copy.cta.description, { productName: product.name }) ??
+ `Choisissez votre abonnement et accédez immédiatement à ${product.name}`
const subscriptionPlans = getSubscriptionPlans()
const localizedPlans = useMemo(
() =>
subscriptionPlans.map((plan) => {
- const override = planTranslations[plan.id]
+ const override = planTranslations?.[plan.id]
if (!override) {
return plan
}
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index 093bc74..3845202 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -1992,3 +1992,23 @@ if (hasDecimal) {
#### État:
✅ Page native Overwatch disponible en FR/EN/ET
✅ Page produit communautaire alignée sur les traductions globales
+
+### Fix: Stabilisation de la page produit communautaire
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Éliminer l'appel à `useTranslation` qui cassait le prerender Netlify en absence d'instance i18next.
+- Garantir le formatage des messages avec variables tout en restant aligné sur le provider `useI18n` maison.
+
+#### Actions réalisées:
+1. Remplacement du hook `useTranslation` par `useI18n` afin d'utiliser le contexte de traduction interne.
+2. Ajout d'un utilitaire de formatage pour interpoler les variables (nom du produit, jeu) dans les CTA et descriptions.
+3. Harmonisation du typage de la copie communautaire pour couvrir description d'abonnement et CTA localisé.
+
+#### Fichiers modifiés:
+- `/components/CommunityGamingProductPage.tsx`
+
+#### État:
+✅ Page communautaire compatible avec le provider i18n custom
+⚠️ `npm run build` échoue toujours faute de dépendance `framer-motion` (problème existant, hors périmètre de ce correctif)
From 3dd1572c32fd01a73ee5ea4f06ba6293f465d4b9 Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Wed, 22 Oct 2025 12:29:28 +0200
Subject: [PATCH 10/25] feat: animate gaming product experiences
---
components/CommunityGamingProductPage.tsx | 193 ++++---
components/NativeGamingProductPage.tsx | 630 +++++++++++++---------
docs/JOURNAL.md | 23 +
docs/README.md | 3 +-
4 files changed, 525 insertions(+), 324 deletions(-)
diff --git a/components/CommunityGamingProductPage.tsx b/components/CommunityGamingProductPage.tsx
index bcae186..2ca5e48 100644
--- a/components/CommunityGamingProductPage.tsx
+++ b/components/CommunityGamingProductPage.tsx
@@ -10,6 +10,15 @@ import ProductImage from './ProductImage'
import SiteHeader from '@/components/SiteHeader'
import Footer from '@/components/Footer'
import { useI18n } from '@/lib/i18n-simple'
+import { motion } from 'framer-motion'
+
+const inViewFadeProps = {
+ initial: { opacity: 0, y: 28 },
+ whileInView: { opacity: 1, y: 0 },
+ viewport: { once: true, amount: 0.25 }
+} as const
+
+const fadeTransition = { duration: 0.6, ease: 'easeOut' } as const
interface CommunityGamingProductPageProps {
product: GamingProduct
@@ -90,24 +99,26 @@ export default function CommunityGamingProductPage({ product }: CommunityGamingP
-
-
-
-
+
+
+
+
+
+
{copy.badges.catalog}
-
-
-
+
+
+
-
+
@@ -121,7 +132,7 @@ export default function CommunityGamingProductPage({ product }: CommunityGamingP
{product.reviews.count > 0 && (
-
+
{[...Array(5)].map((_, i) => (
{product.reviews.average}
({product.reviews.count} {copy.reviewsLabel})
-
+
)}
{copy.subscription.title}
{subscriptionDescription}
- {localizedPlans.map((plan) => (
-
- {plan.popular && (
-
- {copy.subscription.popular}
-
- )}
-
-
-
{plan.name}
-
{plan.description}
+ {localizedPlans.map((plan, idx) => (
+
+
+ {plan.popular && (
+
+ {copy.subscription.popular}
+
+ )}
+
+
+
{plan.name}
+
{plan.description}
+
+
+
{plan.price.toFixed(2)}€
+
{plan.billing}
+
-
-
{plan.price.toFixed(2)}€
-
{plan.billing}
+
+
{copy.subscription.viewDetails}
+
-
-
-
{copy.subscription.viewDetails}
-
-
+
))}
@@ -176,83 +190,98 @@ export default function CommunityGamingProductPage({ product }: CommunityGamingP
{copy.configuration.title}
-
- {copy.configuration.gpu}
- {variant.gpu}
-
-
- {copy.configuration.ram}
- {variant.ram}
-
-
- {copy.configuration.cpu}
- {variant.cpu}
-
-
- {copy.configuration.support}
- {copy.configuration.supportValue}
-
+ {[
+ { label: copy.configuration.gpu, value: variant.gpu },
+ { label: copy.configuration.ram, value: variant.ram },
+ { label: copy.configuration.cpu, value: variant.cpu },
+ { label: copy.configuration.support, value: copy.configuration.supportValue }
+ ].map((item, idx) => (
+
+ {item.label}
+ {item.value}
+
+ ))}
-
+
-
-
+
+
{aboutTitle}
{product.longDescription}
-
-
+
+
-
-
+
+
{copy.featuresTitle}
-
+
-
+
{variant.features.map((feature, idx) => (
-
+
{feature}
-
+
))}
-
-
+
+
-
-
+
+
{copy.benefits.title}
-
+
{copy.benefits.items.map((item, index) => {
const Icon = benefitIcons[index] ?? Cloud
return (
-
+
{item.title}
{item.description}
-
+
)
})}
-
+
-
+
{ctaTitle}
{ctaDescription}
-
- {copy.cta.button}
-
+
+
+ {copy.cta.button}
+
+
-
+
diff --git a/components/NativeGamingProductPage.tsx b/components/NativeGamingProductPage.tsx
index 5a96f86..c36844d 100644
--- a/components/NativeGamingProductPage.tsx
+++ b/components/NativeGamingProductPage.tsx
@@ -1,6 +1,6 @@
'use client'
-import { useEffect, useMemo, useState } from 'react'
+import { useEffect, useMemo, useRef, useState } from 'react'
import { Star, Shield, Zap, Check, ArrowRight, Trophy, Gauge, Code, Target, TrendingUp, Activity, Cpu, Users, Lock, Wifi } from 'lucide-react'
import Link from 'next/link'
import { usePathname } from 'next/navigation'
@@ -9,6 +9,33 @@ import { getSubscriptionPlans } from '@/lib/subscriptions'
import type { SubscriptionPlan } from '@/lib/subscriptions'
import SiteHeader from '@/components/SiteHeader'
import Footer from '@/components/Footer'
+import { motion, AnimatePresence, useInView } from 'framer-motion'
+
+const inViewFadeProps = {
+ initial: { opacity: 0, y: 32 },
+ whileInView: { opacity: 1, y: 0 },
+ viewport: { once: true, amount: 0.25 }
+} as const
+
+const fadeTransition = { duration: 0.6, ease: 'easeOut' } as const
+
+const statPalette = {
+ purple: { text: 'text-purple-400', iconBg: 'bg-purple-500/20' },
+ green: { text: 'text-green-400', iconBg: 'bg-green-500/20' },
+ blue: { text: 'text-blue-400', iconBg: 'bg-blue-500/20' },
+ orange: { text: 'text-orange-400', iconBg: 'bg-orange-500/20' },
+ red: { text: 'text-red-400', iconBg: 'bg-red-500/20' },
+ cyan: { text: 'text-cyan-400', iconBg: 'bg-cyan-500/20' }
+} as const
+
+const progressPalette = {
+ purple: 'bg-purple-500',
+ green: 'bg-green-500',
+ blue: 'bg-blue-500',
+ orange: 'bg-orange-500',
+ red: 'bg-red-500',
+ cyan: 'bg-cyan-500'
+} as const
type VariantOverride = Partial
& {
features?: string[]
@@ -1401,54 +1428,48 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
const implementationNotes = selectedVariant?.implementationNotes ?? []
const ProgressBar = ({ label, value, max, color = "purple", unit = "" }: { label: string, value: number, max: number, color?: string, unit?: string }) => {
- const percentage = (value / max) * 100
- const colorClasses = {
- purple: "bg-purple-500",
- green: "bg-green-500",
- blue: "bg-blue-500",
- orange: "bg-orange-500",
- red: "bg-red-500",
- cyan: "bg-cyan-500"
- }
+ const progressRef = useRef(null)
+ const isInView = useInView(progressRef, { once: true, amount: 0.6 })
+ const percentage = Math.max(0, Math.min((value / max) * 100, 100))
+ const fillClass = progressPalette[color as keyof typeof progressPalette] ?? progressPalette.purple
return (
-
+
)
}
- const StatCard = ({ icon: Icon, label, value, color = "purple" }: { icon: any, label: string, value: string | number, color?: string }) => {
- const colorClasses = {
- purple: "text-purple-400",
- green: "text-green-400",
- blue: "text-blue-400",
- orange: "text-orange-400",
- red: "text-red-400",
- cyan: "text-cyan-400"
- }
+ const StatCard = ({ icon: Icon, label, value, color = "purple", delay = 0 }: { icon: any, label: string, value: string | number, color?: string, delay?: number }) => {
+ const palette = statPalette[color as keyof typeof statPalette] ?? statPalette.purple
return (
-
+
-
-
+
)
}
@@ -1475,21 +1496,35 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{/* Image Gallery */}
-
+
-
+
+
+
{selectedVariant.badges.map((badge, idx) => (
-
{badge}
-
+
))}
@@ -1498,28 +1533,34 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{gallery.length > 1 && (
{gallery.map((image, idx) => (
-
setSelectedImageIndex(idx)}
className={`relative rounded-lg overflow-hidden border-2 transition-all ${
selectedImageIndex === idx
? 'border-purple-500 scale-105'
: 'border-white/10 hover:border-white/30'
}`}
+ whileHover={{ scale: selectedImageIndex === idx ? 1.05 : 1.02 }}
+ whileTap={{ scale: 0.97 }}
>
-
+
))}
)}
-
+
{/* Product Info */}
-
+
@@ -1532,7 +1573,11 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{productDescription}
-
+
{[...Array(5)].map((_, i) => (
{product.reviews.average}
({product.reviews.count} {copy.reviewsLabel})
-
+
{/* Quick Stats */}
{tech?.performanceMetrics && (
-
-
{tech.performanceMetrics.avgFps}
-
{copy.quickStats.avgFps}
-
-
-
{tech.performanceMetrics.onePercentLow ?? tech.performanceMetrics.minFps}
-
{copy.quickStats.onePercentLow}
-
-
-
{tech.performanceMetrics.latency}ms
-
{copy.quickStats.latency}
-
-
-
{tech.performanceMetrics.inputLag}ms
-
{copy.quickStats.inputLag}
-
+ {[
+ { value: `${tech.performanceMetrics.avgFps}`, label: copy.quickStats.avgFps, color: 'text-green-400' },
+ {
+ value: `${tech.performanceMetrics.onePercentLow ?? tech.performanceMetrics.minFps}`,
+ label: copy.quickStats.onePercentLow,
+ color: 'text-orange-400'
+ },
+ { value: `${tech.performanceMetrics.latency}ms`, label: copy.quickStats.latency, color: 'text-blue-400' },
+ { value: `${tech.performanceMetrics.inputLag}ms`, label: copy.quickStats.inputLag, color: 'text-purple-400' }
+ ].map((stat, idx) => (
+
+ {stat.value}
+ {stat.label}
+
+ ))}
)}
@@ -1575,63 +1624,67 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{copy.subscription.title}
- {localizedSubscriptionPlans.map((plan) => (
-
- {plan.popular && (
-
- {copy.subscription.popular}
-
- )}
-
-
-
{plan.name}
-
{plan.description}
+ {localizedSubscriptionPlans.map((plan, idx) => (
+
+
+ {plan.popular && (
+
+ {copy.subscription.popular}
+
+ )}
+
+
+
{plan.name}
+
{plan.description}
+
+
+
{plan.price.toFixed(2)}€
+
{plan.billing}
+
-
-
{plan.price.toFixed(2)}€
-
{plan.billing}
+
+
{copy.subscription.viewDetails}
+
-
-
-
{copy.subscription.viewDetails}
-
-
+
))}
-
+
{/* Performance Metrics Section */}
{tech?.performanceMetrics && (
-
-
+
+
{copy.metrics.title}
{copy.metrics.description}
-
+
-
+
-
+
-
+
@@ -1659,18 +1712,18 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
-
+
-
+
)}
{tech?.fpsByResolution && tech.fpsByResolution.length > 0 && (
-
-
+
+
{copy.fpsTable.title}
{copy.fpsTable.description}
-
-
+
+
@@ -1684,31 +1737,43 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{tech.fpsByResolution.map((entry, idx) => (
-
+
{entry.resolution}
{entry.avgFps}
{entry.minFps}
{entry.maxFps}
{entry.playability}
{entry.bottleneck}
-
+
))}
{copy.fpsTable.footnote}
-
-
+
+
)}
{tech?.qualityBreakdown && tech.qualityBreakdown.length > 0 && (
-
-
+
+
{copy.quality.title}
{copy.quality.description}
-
+
{tech.qualityBreakdown.map((quality, idx) => (
-
+
{quality.resolution}
{copy.quality.badge}
@@ -1721,21 +1786,26 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
))}
-
+
))}
-
+
)}
{tech?.resolutionGuidance && tech.resolutionGuidance.length > 0 && (
-
-
+
+
{copy.resolution.title}
{copy.resolution.description}
-
+
{tech.resolutionGuidance.map((entry, idx) => (
-
+
{entry.resolution}
@@ -1756,16 +1826,16 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{entry.note}
)}
-
+
))}
{copy.resolution.footnote}
-
+
)}
{tech?.performanceMetrics && (
-
-
+
+
{copy.experience.title}
@@ -1800,17 +1870,17 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
-
-
+
+
)}
{(tech?.improvementTips || tech?.advice) && (
-
+
{tech?.improvementTips && (
-
+
{copy.improvement.tipsTitle}
@@ -1823,51 +1893,58 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
))}
-
+
)}
{tech?.advice && (
-
+
{copy.improvement.adviceTitle}
{tech.advice}
-
+
)}
-
+
)}
{/* Assistance Suite */}
{tech?.augmentationSuite && (
-
-
+
+
{copy.augmentation.badge}
{copy.augmentation.title}
{copy.augmentation.description}
-
+
-
-
-
-
+
+
+
+
-
+
{copy.augmentation.modulesTitle}
{tech.augmentationSuite.modules.map((module, idx) => (
-
+
{module}
-
+
))}
{tech.augmentationSuite.notes && (
@@ -1892,32 +1969,32 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
-
+
-
+
)}
{/* Legacy precision suite */}
{!tech?.augmentationSuite && tech?.aimbotStats && copy.legacyPrecision && (
-
-
+
+
{copy.legacyPrecision.badge}
{copy.legacyPrecision.title}
{copy.legacyPrecision.description}
-
+
-
-
-
-
+
+
+
+
-
+
{copy.legacyPrecision.advancedTitle}
@@ -1934,10 +2011,17 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{copy.legacyPrecision.focusTitle}
{tech.aimbotStats.boneSelection.map((bone, idx) => (
-
+
{bone}
-
+
))}
@@ -1948,24 +2032,24 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
-
+
-
+
)}
{/* Hero Synergy */}
{tech?.heroSynergy && tech.heroSynergy.length > 0 && (
-
-
+
+
{copy.hero.badge}
{copy.hero.title}
{copy.hero.description}
-
+
-
+
@@ -1979,7 +2063,14 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{tech.heroSynergy.map((hero, idx) => (
-
+
{hero.hero}
@@ -1995,27 +2086,27 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{hero.coachingNotes}
-
+
))}
-
-
+
+
)}
{!tech?.heroSynergy && tech?.compatibilityMatrix && tech.compatibilityMatrix.length > 0 && (
-
-
+
+
{copy.hero.badge}
{copy.hero.fallbackTitle}
{copy.hero.fallbackDescription(product.game)}
-
+
-
+
@@ -2029,7 +2120,14 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{tech.compatibilityMatrix.map((hero, idx) => (
-
+
{hero.hero}
@@ -2037,9 +2135,12 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
@@ -2053,54 +2154,54 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{hero.winRate}%
-
+
))}
-
-
+
+
)}
{/* Reliability Metrics */}
{tech?.securityMetrics && (
-
-
+
+
{copy.reliability.badge}
{copy.reliability.title}
{copy.reliability.description}
-
+
-
+
{tech.securityMetrics.detectionRate}%
{copy.reliability.cards.detection}
{copy.reliability.cards.detectionFootnote}
-
-
+
+
{tech.securityMetrics.uptimePercentage}%
{copy.reliability.cards.uptime}
{copy.reliability.cards.uptimeFootnote}
-
-
+
+
{tech.securityMetrics.avgResponseTime}min
{copy.reliability.cards.response}
{copy.reliability.cards.responseFootnote}
-
+
-
+
@@ -2137,11 +2238,18 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{ label: copy.reliability.surveillanceToggles.antiVM, enabled: tech.securityMetrics.antiVM },
{ label: copy.reliability.surveillanceToggles.kernel, enabled: tech.securityMetrics.kernelProtection }
].map((item, idx) => (
-
+
{item.label}
{item.enabled && }
-
+
))}
@@ -2152,32 +2260,32 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
-
+
-
+
)}
{/* Network Stats */}
{tech?.networkStats && (
-
-
+
+
{copy.network.badge}
{copy.network.title}
{copy.network.description(tech.networkStats.serverLocations)}
-
+
-
-
-
-
+
+
+
+
-
+
@@ -2201,86 +2309,98 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{tech.networkStats.ddosProtection && (
-
+
)}
-
+
-
+
)}
{/* User Stats */}
{tech?.userStats && (
-
-
+
+
{copy.user.badge}
{copy.user.title(tech.userStats.totalUsers.toLocaleString(localeKey))}
{copy.user.subtitle}
-
+
-
+
{tech.userStats.totalUsers.toLocaleString(localeKey)}
{copy.user.cards.total}
-
-
+
+
{tech.userStats.activeUsersLast30Days.toLocaleString(localeKey)}
{copy.user.cards.active}
-
-
+
+
{tech.userStats.avgSessionDuration}h
{copy.user.cards.session}
-
-
+
+
{tech.userStats.avgGamesPerDay}
{copy.user.cards.games}
-
+
-
+
{tech.userStats.satisfactionScore}/5
{copy.user.ratingLabel}
-
-
+
+
{tech.userStats.recommendationRate}%
{copy.user.recommendationLabel}
-
+
-
+
)}
{/* Native Advantages Section */}
-
-
+
+
{copy.nativeReasons.title}
{copy.nativeReasons.description(product.game)}
-
+
{nativeAdvantages.map((advantage, idx) => {
const Icon = advantage.icon
return (
-
+
@@ -2290,29 +2410,31 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{advantage.description}
-
+
)
})}
-
+
{/* Fonctionnalités */}
-
-
+
+
{copy.featuresTitle}
-
+
{featureHighlights.length > 0 && (
{featureHighlights.map((highlight, idx) => (
-
{highlight}
-
+
))}
)}
@@ -2320,68 +2442,94 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{featureGroups.length > 0 ? (
{featureGroups.map((group, idx) => (
-
+
{group.title}
{group.description &&
{group.description}
}
{group.items.map((item, itemIdx) => (
-
+
{item}
-
+
))}
-
+
))}
) : (
-
+
{selectedVariant.features.map((feature, idx) => (
-
+
{feature}
-
+
))}
-
+
)}
{implementationNotes.length > 0 && (
-
+
{copy.featureNotesTitle}
{implementationNotes.map((note, idx) => (
-
+
{note}
-
+
))}
-
+
)}
-
+
{/* CTA Section */}
-
-
{copy.cta.title(product.game)}
-
{copy.cta.description}
-
- {copy.cta.button}
-
-
-
+
+
+ {copy.cta.title(product.game)}
+ {copy.cta.description}
+
+
+ {copy.cta.button}
+
+
+
+
+
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index 3845202..d66d554 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2012,3 +2012,26 @@ if (hasDecimal) {
#### État:
✅ Page communautaire compatible avec le provider i18n custom
⚠️ `npm run build` échoue toujours faute de dépendance `framer-motion` (problème existant, hors périmètre de ce correctif)
+
+### Enhancement: Animations framer-motion pour les pages produits
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Apporter des animations d’apparition et de remplissage cohérentes sur les pages produits native et communautaire.
+- Mettre en valeur les graphiques (jauges, tableaux, cartes) via `framer-motion` sans casser la structure responsive.
+- Documenter l’approche afin que les futures sections réutilisent le même canevas d’animation.
+
+#### Actions réalisées:
+1. Intégration d’`AnimatePresence` et de wrappers `motion` sur les sections clés de `NativeGamingProductPage` (héros, métriques, tableaux, fonctionnalités) avec animation des barres de progression.
+2. Application d’un traitement similaire à `CommunityGamingProductPage` pour les visuels, listes d’avantages et CTA.
+3. Mise à jour de la documentation (`docs/README.md`) pour décrire la convention `inViewFadeProps` / `fadeTransition` et tracer la nouvelle directive dans le journal.
+
+#### Fichiers modifiés:
+- `/components/NativeGamingProductPage.tsx`
+- `/components/CommunityGamingProductPage.tsx`
+- `/docs/README.md`
+
+#### État:
+✅ Animations harmonisées sur les pages native & communautaire
+✅ Progress bars et tableaux animés au scroll
diff --git a/docs/README.md b/docs/README.md
index 3576072..8305030 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -94,6 +94,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
- `optimizationLevel === 'native'` ⟶ [`NativeGamingProductPage`](../components/NativeGamingProductPage.tsx)
- sinon ⟶ [`CommunityGamingProductPage`](../components/CommunityGamingProductPage.tsx)
- Les deux vues encapsulent le contenu dans `
`, `
` et `` afin de conserver la navigation cohérente.
+- Les animations d’apparition, de remplissage des jauges et des CTA reposent sur `framer-motion`. Réutiliser `inViewFadeProps` / `fadeTransition` introduits dans les composants pour toute nouvelle section afin de garder un rythme homogène.
### ➕ Ajouter ou mettre à jour un produit
1. Modifier l'entrée cible dans `data/gaming-products.json` (métriques, visuels, variantes).
@@ -102,7 +103,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
4. Compléter les traductions génériques dans `public/locales//common.json` si besoin.
5. Lancer `npm run lint` pour valider les schémas avant de publier.
-**Dernière action:** Ajout des groupes de fonctionnalités PulseForge et des notes d'implémentation traduites (23/10/2025)
+**Dernière action:** Harmonisation des animations framer-motion sur les pages native & communautaire (24/10/2025)
---
From 06c9b81d36409153a93feda210c5092888681f7e Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Wed, 22 Oct 2025 13:26:22 +0200
Subject: [PATCH 11/25] feat: diversify product page motion interactions
---
components/CommunityGamingProductPage.tsx | 76 +++++++++++---
components/NativeGamingProductPage.tsx | 116 ++++++++++++++++++----
docs/JOURNAL.md | 23 +++++
docs/README.md | 3 +-
4 files changed, 181 insertions(+), 37 deletions(-)
diff --git a/components/CommunityGamingProductPage.tsx b/components/CommunityGamingProductPage.tsx
index 2ca5e48..b0e22b9 100644
--- a/components/CommunityGamingProductPage.tsx
+++ b/components/CommunityGamingProductPage.tsx
@@ -18,6 +18,34 @@ const inViewFadeProps = {
viewport: { once: true, amount: 0.25 }
} as const
+const inViewSlideProps = {
+ initial: { opacity: 0, x: -36 },
+ whileInView: { opacity: 1, x: 0 },
+ viewport: { once: true, amount: 0.25 }
+} as const
+
+const inViewScaleProps = {
+ initial: { opacity: 0, scale: 0.9, y: 18 },
+ whileInView: { opacity: 1, scale: 1, y: 0 },
+ viewport: { once: true, amount: 0.3 }
+} as const
+
+const inViewTiltProps = {
+ initial: { opacity: 0, rotateX: -8, y: 24 },
+ whileInView: { opacity: 1, rotateX: 0, y: 0 },
+ viewport: { once: true, amount: 0.25 }
+} as const
+
+const hoverLiftProps = {
+ whileHover: { y: -8, scale: 1.02 },
+ whileTap: { scale: 0.98 }
+} as const
+
+const hoverGlowProps = {
+ whileHover: { y: -6, scale: 1.01, boxShadow: '0px 16px 38px rgba(59, 130, 246, 0.35)' },
+ whileTap: { scale: 0.99 }
+} as const
+
const fadeTransition = { duration: 0.6, ease: 'easeOut' } as const
interface CommunityGamingProductPageProps {
@@ -99,8 +127,13 @@ export default function CommunityGamingProductPage({ product }: CommunityGamingP
-
-
+
+
-
+
{copy.badges.catalog}
@@ -118,7 +151,7 @@ export default function CommunityGamingProductPage({ product }: CommunityGamingP
-
+
@@ -158,9 +191,9 @@ export default function CommunityGamingProductPage({ product }: CommunityGamingP
{plan.popular && (
@@ -199,8 +232,9 @@ export default function CommunityGamingProductPage({ product }: CommunityGamingP
{item.label}
{item.value}
@@ -218,21 +252,27 @@ export default function CommunityGamingProductPage({ product }: CommunityGamingP
-
+
{copy.featuresTitle}
-
+
{variant.features.map((feature, idx) => (
{feature}
@@ -254,8 +294,9 @@ export default function CommunityGamingProductPage({ product }: CommunityGamingP
@@ -268,14 +309,19 @@ export default function CommunityGamingProductPage({ product }: CommunityGamingP
-
+
{ctaTitle}
{ctaDescription}
{copy.cta.button}
diff --git a/components/NativeGamingProductPage.tsx b/components/NativeGamingProductPage.tsx
index c36844d..7bada7a 100644
--- a/components/NativeGamingProductPage.tsx
+++ b/components/NativeGamingProductPage.tsx
@@ -17,6 +17,34 @@ const inViewFadeProps = {
viewport: { once: true, amount: 0.25 }
} as const
+const inViewSlideProps = {
+ initial: { opacity: 0, x: -48 },
+ whileInView: { opacity: 1, x: 0 },
+ viewport: { once: true, amount: 0.2 }
+} as const
+
+const inViewScaleProps = {
+ initial: { opacity: 0, scale: 0.88, y: 24 },
+ whileInView: { opacity: 1, scale: 1, y: 0 },
+ viewport: { once: true, amount: 0.25 }
+} as const
+
+const inViewTiltProps = {
+ initial: { opacity: 0, rotateX: -10, y: 28 },
+ whileInView: { opacity: 1, rotateX: 0, y: 0 },
+ viewport: { once: true, amount: 0.25 }
+} as const
+
+const hoverLiftProps = {
+ whileHover: { y: -8, scale: 1.02 },
+ whileTap: { scale: 0.98 }
+} as const
+
+const hoverGlowProps = {
+ whileHover: { y: -6, scale: 1.01, boxShadow: '0px 20px 45px rgba(168, 85, 247, 0.35)' },
+ whileTap: { scale: 0.99 }
+} as const
+
const fadeTransition = { duration: 0.6, ease: 'easeOut' } as const
const statPalette = {
@@ -1457,8 +1485,9 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
return (
@@ -1498,10 +1527,13 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{/* Image Gallery */}
-
-
+
{/* Thumbnails */}
{gallery.length > 1 && (
@@ -1558,7 +1590,7 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{/* Product Info */}
@@ -1610,8 +1642,12 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{stat.value}
{stat.label}
@@ -1628,9 +1664,9 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{plan.popular && (
@@ -2341,22 +2377,42 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
-
+
{tech.userStats.totalUsers.toLocaleString(localeKey)}
{copy.user.cards.total}
-
+
{tech.userStats.activeUsersLast30Days.toLocaleString(localeKey)}
{copy.user.cards.active}
-
+
{tech.userStats.avgSessionDuration}h
{copy.user.cards.session}
-
+
{tech.userStats.avgGamesPerDay}
{copy.user.cards.games}
@@ -2364,14 +2420,24 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
-
+
{tech.userStats.satisfactionScore}/5
{copy.user.ratingLabel}
-
+
{tech.userStats.recommendationRate}%
@@ -2397,9 +2463,9 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
@@ -2429,8 +2495,9 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{highlight}
@@ -2442,7 +2509,13 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{featureGroups.length > 0 ? (
{featureGroups.map((group, idx) => (
-
+
{group.title}
{group.description &&
{group.description}
}
@@ -2452,10 +2525,11 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{item}
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index d66d554..990d3bb 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2035,3 +2035,26 @@ if (hasDecimal) {
#### État:
✅ Animations harmonisées sur les pages native & communautaire
✅ Progress bars et tableaux animés au scroll
+
+### Enhancement: Variations d’animations et interactions hover PulseForge
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Diversifier les animations d’entrée au-delà des simples fade-in pour dynamiser les pages produits native et communautaire.
+- Ajouter des effets de survol subtils sur les cartes, plans et CTA afin d’offrir un feedback visuel plus premium.
+- Actualiser la documentation pour référencer les nouveaux presets `framer-motion` et les helpers de hover.
+
+#### Actions réalisées:
+1. Création des presets `inViewSlideProps`, `inViewScaleProps`, `inViewTiltProps` ainsi que des helpers `hoverLiftProps` / `hoverGlowProps`, puis application ciblée sur les sections héros, statistiques, fonctionnalités et avantages.
+2. Ajout de rotations légères, translations et halos lumineux sur les cartes (plans d’abonnement, quick stats, avantages PulseForge) côté native et communautaire.
+3. Mise à jour de `docs/README.md` pour détailler l’utilisation des nouveaux presets et inciter à réutiliser les helpers de survol.
+
+#### Fichiers modifiés:
+- `/components/NativeGamingProductPage.tsx`
+- `/components/CommunityGamingProductPage.tsx`
+- `/docs/README.md`
+
+#### État:
+✅ Animations variées et cohérentes avec l’identité PulseForge
+✅ Interactions hover légères sur les cartes et CTA
diff --git a/docs/README.md b/docs/README.md
index 8305030..f09f3af 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -94,7 +94,8 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
- `optimizationLevel === 'native'` ⟶ [`NativeGamingProductPage`](../components/NativeGamingProductPage.tsx)
- sinon ⟶ [`CommunityGamingProductPage`](../components/CommunityGamingProductPage.tsx)
- Les deux vues encapsulent le contenu dans ` `, `` et `` afin de conserver la navigation cohérente.
-- Les animations d’apparition, de remplissage des jauges et des CTA reposent sur `framer-motion`. Réutiliser `inViewFadeProps` / `fadeTransition` introduits dans les composants pour toute nouvelle section afin de garder un rythme homogène.
+- Les animations d’apparition, de remplissage des jauges et des CTA reposent sur `framer-motion`. Réutiliser les presets `inViewFadeProps`, `inViewSlideProps`, `inViewScaleProps`, `inViewTiltProps` ainsi que `fadeTransition` pour toute nouvelle section afin de garder un rythme cohérent.
+- Les effets au survol doivent rester légers : privilégier les helpers `hoverLiftProps` et `hoverGlowProps` déjà présents pour appliquer translation, légère mise à l’échelle et halo lumineux sur les cartes interactives.
### ➕ Ajouter ou mettre à jour un produit
1. Modifier l'entrée cible dans `data/gaming-products.json` (métriques, visuels, variantes).
From 14aef8c53b1a4e474e725d6489006b6a47cefa4e Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Wed, 22 Oct 2025 13:46:06 +0200
Subject: [PATCH 12/25] feat: compact tabbed feature overview
---
components/NativeGamingProductPage.tsx | 120 +++++++++++++++++++------
docs/JOURNAL.md | 22 +++++
docs/README.md | 6 +-
3 files changed, 116 insertions(+), 32 deletions(-)
diff --git a/components/NativeGamingProductPage.tsx b/components/NativeGamingProductPage.tsx
index 7bada7a..adde48f 100644
--- a/components/NativeGamingProductPage.tsx
+++ b/components/NativeGamingProductPage.tsx
@@ -1453,6 +1453,16 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
const performanceLatency = tech?.performanceMetrics?.latency ?? 0
const featureHighlights = selectedVariant?.featureHighlights ?? []
const featureGroups = selectedVariant?.featureGroups ?? []
+ const [activeFeatureGroupIndex, setActiveFeatureGroupIndex] = useState(0)
+ useEffect(() => {
+ setActiveFeatureGroupIndex(0)
+ }, [selectedVariant?.id])
+ useEffect(() => {
+ if (activeFeatureGroupIndex >= featureGroups.length && featureGroups.length > 0) {
+ setActiveFeatureGroupIndex(0)
+ }
+ }, [activeFeatureGroupIndex, featureGroups.length])
+ const activeFeatureGroup = featureGroups[activeFeatureGroupIndex] ?? null
const implementationNotes = selectedVariant?.implementationNotes ?? []
const ProgressBar = ({ label, value, max, color = "purple", unit = "" }: { label: string, value: number, max: number, color?: string, unit?: string }) => {
@@ -2508,36 +2518,88 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
{featureGroups.length > 0 ? (
- {featureGroups.map((group, idx) => (
-
-
-
{group.title}
- {group.description &&
{group.description}
}
-
-
- {group.items.map((item, itemIdx) => (
-
+
+ {featureGroups.map((group, idx) => {
+ const isActive = idx === activeFeatureGroupIndex
+ return (
+ setActiveFeatureGroupIndex(idx)}
+ whileHover={{ y: -4 }}
+ whileTap={{ scale: 0.98 }}
+ transition={{ type: 'spring', stiffness: 260, damping: 20 }}
>
-
- {item}
-
- ))}
-
-
- ))}
+
{group.title}
+ {group.description && (
+
+ {group.description}
+
+ )}
+
+
+ {group.items.length}
+
+
+ )
+ })}
+
+
+
+
+ {activeFeatureGroup && (
+
+
+
+
{activeFeatureGroup.title}
+ {activeFeatureGroup.description && (
+
+ {activeFeatureGroup.description}
+
+ )}
+
+
+
+ {activeFeatureGroup.items.length}
+
+
+
+
+ {activeFeatureGroup.items.map((item, itemIdx) => (
+
+
+ {item}
+
+ ))}
+
+
+ )}
+
) : (
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index 990d3bb..27e6163 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2058,3 +2058,25 @@ if (hasDecimal) {
#### État:
✅ Animations variées et cohérentes avec l’identité PulseForge
✅ Interactions hover légères sur les cartes et CTA
+
+### Enhancement: Navigation compacte des fonctionnalités PulseForge
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Réduire la hauteur de scroll de la section « Fonctionnalités incluses » malgré la multiplication des modules PulseForge.
+- Proposer des animations rapides sans retard de texte afin de rendre la lecture instantanée.
+- Aligner la documentation centrale avec le nouveau sélecteur d’onglets et l’usage d’`AnimatePresence`.
+
+#### Actions réalisées:
+1. Introduction d’un état local `activeFeatureGroupIndex` dans `NativeGamingProductPage` pour piloter un sélecteur horizontal des groupes de fonctionnalités.
+2. Remplacement de l’empilement vertical par un carrousel d’onglets animé (`AnimatePresence`) avec cartes bi-colonnes et délais limités pour afficher immédiatement les descriptions.
+3. Mise à jour de `docs/README.md` afin de décrire le nouveau rendu compact et consigner l’usage d’`AnimatePresence` pour la transition entre onglets.
+
+#### Fichiers modifiés:
+- `/components/NativeGamingProductPage.tsx`
+- `/docs/README.md`
+
+#### État:
+✅ Section « Fonctionnalités incluses » plus compacte et lisible
+✅ Documentation synchronisée avec le nouveau pattern
diff --git a/docs/README.md b/docs/README.md
index f09f3af..d46e114 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -79,7 +79,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
- Les fiches sont définies dans [`data/gaming-products.json`](../data/gaming-products.json).
- Chaque entrée précise l'identifiant, le `slug`, le niveau d'optimisation (`native` ou `community`), la description marketing et les métriques de performance.
- Les tableaux `resolutionGuidance` et `technicalSpecs` exposent les FPS, la latence et les informations réseau injectées telles quelles dans l'interface.
- - Les variantes peuvent embarquer `featureHighlights`, `featureGroups` (titre, description, éléments) et `implementationNotes` pour décrire les suites PulseForge ; ces blocs sont traduits via les overrides de `copyByLocale.product.variants`.
+- Les variantes peuvent embarquer `featureHighlights`, `featureGroups` (titre, description, éléments) et `implementationNotes` pour décrire les suites PulseForge ; le rendu se base maintenant sur un sélecteur interactif qui affiche un groupe à la fois pour limiter le scroll. Ces blocs sont traduits via les overrides de `copyByLocale.product.variants`.
- Les utilitaires d'accès et les types associés vivent dans [`lib/gaming-products.ts`](../lib/gaming-products.ts).
- `getAllGamingProducts()` et `getGamingProductBySlug()` alimentent les routes dynamiques.
@@ -94,7 +94,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
- `optimizationLevel === 'native'` ⟶ [`NativeGamingProductPage`](../components/NativeGamingProductPage.tsx)
- sinon ⟶ [`CommunityGamingProductPage`](../components/CommunityGamingProductPage.tsx)
- Les deux vues encapsulent le contenu dans ` `, `` et `` afin de conserver la navigation cohérente.
-- Les animations d’apparition, de remplissage des jauges et des CTA reposent sur `framer-motion`. Réutiliser les presets `inViewFadeProps`, `inViewSlideProps`, `inViewScaleProps`, `inViewTiltProps` ainsi que `fadeTransition` pour toute nouvelle section afin de garder un rythme cohérent.
+- Les animations d’apparition, de remplissage des jauges et des CTA reposent sur `framer-motion`. Réutiliser les presets `inViewFadeProps`, `inViewSlideProps`, `inViewScaleProps`, `inViewTiltProps` ainsi que `fadeTransition` pour toute nouvelle section afin de garder un rythme cohérent. Les listes de fonctionnalités natives utilisent en complément `AnimatePresence` pour la transition entre onglets.
- Les effets au survol doivent rester légers : privilégier les helpers `hoverLiftProps` et `hoverGlowProps` déjà présents pour appliquer translation, légère mise à l’échelle et halo lumineux sur les cartes interactives.
### ➕ Ajouter ou mettre à jour un produit
@@ -104,7 +104,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
4. Compléter les traductions génériques dans `public/locales//common.json` si besoin.
5. Lancer `npm run lint` pour valider les schémas avant de publier.
-**Dernière action:** Harmonisation des animations framer-motion sur les pages native & communautaire (24/10/2025)
+**Dernière action:** Sélecteur d’onglets pour les fonctionnalités PulseForge et transition AnimatePresence (24/10/2025)
---
From cc08920ea50947e16be64638e5557276b2e70146 Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Wed, 22 Oct 2025 15:38:12 +0200
Subject: [PATCH 13/25] feat: add PulseForge Warzone native product
---
components/NativeGamingProductPage.tsx | 695 ++++++++++++++++++++++++-
data/gaming-products.json | 357 +++++++++++--
docs/JOURNAL.md | 23 +
docs/README.md | 4 +-
4 files changed, 1043 insertions(+), 36 deletions(-)
diff --git a/components/NativeGamingProductPage.tsx b/components/NativeGamingProductPage.tsx
index adde48f..ba24345 100644
--- a/components/NativeGamingProductPage.tsx
+++ b/components/NativeGamingProductPage.tsx
@@ -65,6 +65,61 @@ const progressPalette = {
cyan: 'bg-cyan-500'
} as const
+type DeepPartial = {
+ [P in keyof T]?: T[P] extends (...args: any[]) => any
+ ? T[P]
+ : T[P] extends Array
+ ? Array>
+ : T[P] extends object
+ ? DeepPartial
+ : T[P]
+}
+
+function mergeDeep(base: T, override?: DeepPartial): T {
+ if (!override) {
+ return base
+ }
+
+ if (Array.isArray(base)) {
+ return (override as unknown as T) ?? base
+ }
+
+ if (typeof base === 'object' && base !== null) {
+ const result: any = { ...(base as any) }
+
+ for (const key of Object.keys(override) as Array) {
+ const overrideValue = override[key]
+ if (overrideValue === undefined) {
+ continue
+ }
+
+ const baseValue = (base as any)[key]
+
+ if (Array.isArray(baseValue) || Array.isArray(overrideValue)) {
+ result[key] = overrideValue
+ continue
+ }
+
+ if (
+ typeof baseValue === 'object' &&
+ baseValue !== null &&
+ typeof overrideValue === 'object' &&
+ overrideValue !== null &&
+ typeof overrideValue !== 'function'
+ ) {
+ result[key] = mergeDeep(baseValue, overrideValue as any)
+ continue
+ }
+
+ result[key] = overrideValue
+ }
+
+ return result
+ }
+
+ return (override as unknown as T) ?? base
+}
+
type VariantOverride = Partial & {
features?: string[]
use_cases?: string[]
@@ -1331,6 +1386,642 @@ const copyByLocale: Record<'fr' | 'en' | 'et', LocaleContent> = {
type LocaleKey = keyof typeof copyByLocale
+const localeOverridesByProduct: Record>> = {
+ 'gaming-warzone': {
+ fr: {
+ nativeAdvantages: [
+ {
+ icon: Code,
+ title: 'Optimisation Warzone native',
+ description: 'Profils Battle Royale calibrés avec équilibre CPU↔GPU et latence stream maîtrisée.'
+ },
+ {
+ icon: Zap,
+ title: 'Provisionnement instantané',
+ description: 'Instances Warzone prêtes en quelques secondes avec bascule automatique de région selon le ping.'
+ },
+ {
+ icon: Shield,
+ title: 'Surcouche compétitive',
+ description: 'Overlays BR, analytics TTK et coaching adaptatif sans compromettre le fair-play.'
+ },
+ {
+ icon: Trophy,
+ title: 'Support scrim & contenu',
+ description: 'Accompagnement presets Resurgence, sandbox TTK et production stream premium.'
+ }
+ ],
+ metrics: {
+ title: 'Performances calibrées pour Call of Duty: Warzone',
+ description:
+ 'Mesures internes sur notre instance PulseForge (profil Medium compétitif) : 217 FPS de moyenne et 1% low à 155 FPS en 1080p. Le gameplay reste très fluide jusqu’en 4K grâce à l’optimisation CPU↔GPU et au pipeline vidéo faible latence.',
+ statCards: {
+ maxFps: 'FPS maximum observé (1080p Medium)',
+ onePercentLow: '1% low (1080p Medium)',
+ inputLag: 'Input lag moyen'
+ },
+ allocationTitle: 'Allocation in-game (profil Medium)',
+ datacenterTitle: 'Monitoring cloud PulseForge',
+ usage: {
+ cpu: 'Bottleneck dominant',
+ gpu: 'Marge GPU',
+ ram: 'Mémoire utilisée',
+ vram: 'VRAM utilisée'
+ },
+ thermals: {
+ cpu: 'Température CPU cloud',
+ gpu: 'Température GPU',
+ power: 'Consommation électrique'
+ },
+ stabilityNote: 'Optimisation Warzone dédiée : CPU maintenu à 93–96 % avec marge stable jusqu’en 4K.'
+ },
+ fpsTable: {
+ footnote: 'Benchmarks internes Warzone (profil Medium compétitif sur Al Mazrah, Vondel et Fortune’s Keep).'
+ },
+ resolution: {
+ title: 'Comment ajuster la résolution côté cloud',
+ description:
+ 'Nos mesures internes traduisent la marge FPS réelle quand vous ajustez la définition depuis le panneau PulseForge.',
+ windowLabel: 'Fenêtre relevée',
+ footnote: 'Valeurs relevées sur profil Medium et Ultra Warzone avec overlays actifs.',
+ avgLabel: 'FPS moyen'
+ },
+ experience: {
+ description: (productName: string, latency: number) =>
+ `${productName} tourne intégralement sur notre infrastructure : provisionnement instantané, optimisation réseau dynamique et latence moyenne stabilisée à ${latency} ms.`,
+ bullets: [
+ 'Overlays, profils et mises à jour appliqués côté serveur — rien à installer localement.',
+ 'Bascule 1080p/1440p/4K depuis le panneau PulseForge en respectant la marge FPS mesurée.',
+ 'Monitoring ping/jitter/pertes avec bascule automatique de région si instabilité détectée.'
+ ],
+ profileSubtitle: 'Moyenne mesurée en 1080p Medium',
+ lowLabel: '1% low 1080p Medium',
+ lowSubtitle: 'Fenêtre basse observée'
+ },
+ improvement: {
+ adviceTitle: 'Option « CPU Boost » (côté hôte)'
+ },
+ augmentation: {
+ description: 'Modules Battle Royale contextuels : TTK, économie d’escouade et overlays Resurgence stream-safe.'
+ },
+ hero: {
+ badge: 'PROFILS PAR RÔLE / ARME',
+ title: 'Optimisations dédiées',
+ description: 'Chaque module propose un preset calibré pour les archétypes Warzone (AR, SMG, Sniper, Support, etc.).',
+ headers: {
+ hero: 'Rôle / Arme',
+ overlay: 'Focus overlay',
+ clarity: 'Clarté visuelle',
+ preset: 'Preset conseillé',
+ notes: 'Notes coaching'
+ },
+ fallbackDescription: (game: string) => `Optimisations archétype par archétype pour ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `Optimisé de A à Z pour ${game} en Battle Royale, avec overlays stream-safe et support dédié.`
+ }
+ },
+ en: {
+ nativeAdvantages: [
+ {
+ icon: Code,
+ title: 'Native Warzone optimization',
+ description: 'Battle royale profiles with balanced CPU↔GPU pipeline and stabilized stream latency.'
+ },
+ {
+ icon: Zap,
+ title: 'Instant provisioning',
+ description: 'Warzone instances spin up in seconds with automatic region failover based on ping.'
+ },
+ {
+ icon: Shield,
+ title: 'Competitive overlay stack',
+ description: 'BR overlays, TTK analytics, and adaptive coaching while preserving fair play.'
+ },
+ {
+ icon: Trophy,
+ title: 'Scrim & content support',
+ description: 'Guidance for Resurgence presets, TTK sandbox drills, and premium stream production.'
+ }
+ ],
+ metrics: {
+ title: 'Calibrated performance for Call of Duty: Warzone',
+ description:
+ 'Internal measurements on our PulseForge instance (competitive Medium profile): 217 FPS average and 1% low at 155 FPS in 1080p. Gameplay stays very smooth up to 4K thanks to Warzone-specific CPU↔GPU tuning and a low-latency video pipeline.',
+ statCards: {
+ maxFps: 'Peak observed FPS (1080p Medium)',
+ onePercentLow: '1% low (1080p Medium)',
+ inputLag: 'Average input lag'
+ },
+ allocationTitle: 'In-game allocation (Medium profile)',
+ datacenterTitle: 'PulseForge cloud monitoring',
+ usage: {
+ cpu: 'Dominant bottleneck',
+ gpu: 'GPU headroom',
+ ram: 'Memory usage',
+ vram: 'VRAM usage'
+ },
+ thermals: {
+ cpu: 'Cloud CPU temperature',
+ gpu: 'GPU temperature',
+ power: 'Power draw'
+ },
+ stabilityNote: 'Warzone-tuned CPU↔GPU pipeline keeps margin stable through 4K.'
+ },
+ fpsTable: {
+ footnote: 'Internal Warzone benchmarks (competitive Medium profile across Al Mazrah, Vondel, and Fortune’s Keep).'
+ },
+ resolution: {
+ footnote: 'Values captured on Warzone Medium and Ultra presets with overlays enabled.',
+ windowLabel: 'Observed window',
+ avgLabel: 'Average FPS'
+ },
+ experience: {
+ description: (productName: string, latency: number) =>
+ `${productName} runs fully on our cloud: instant provisioning, dynamic network optimization, and average latency held at ${latency} ms.`,
+ bullets: [
+ 'Overlays, profiles, and updates apply server-side—nothing to install locally.',
+ 'Switch between 1080p, 1440p, or 4K from the PulseForge panel while keeping the measured FPS margin.',
+ 'Live ping/jitter/loss monitoring with automatic region failover if instability appears.'
+ ],
+ profileSubtitle: 'Average measured at 1080p Medium',
+ lowLabel: '1% low 1080p Medium',
+ lowSubtitle: 'Observed low window'
+ },
+ improvement: {
+ adviceTitle: 'CPU Boost option (host side)'
+ },
+ augmentation: {
+ description: 'Battle royale overlays, TTK analytics, and Resurgence-ready coaching in a stream-safe suite.'
+ },
+ hero: {
+ badge: 'ROLE / WEAPON PROFILES',
+ title: 'Dedicated optimizations',
+ description: 'Each module ships a preset tuned for Warzone archetypes (AR, SMG, Sniper, Support, etc.).',
+ headers: {
+ hero: 'Role / Weapon',
+ overlay: 'Overlay focus',
+ clarity: 'Visual clarity',
+ preset: 'Recommended preset',
+ notes: 'Coaching notes'
+ },
+ fallbackDescription: (game: string) => `Archetype-specific optimizations for ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `Optimized end to end for ${game} battle royale with stream-safe overlays and dedicated support.`
+ },
+ product: {
+ description: 'Cloud Warzone instance bundling battle royale overlays, TTK analytics, and stream-safe coaching tools.',
+ longDescription:
+ 'PulseForge for Warzone is a fully native battle royale build hosted inside our cloud stack. It brings contextual overlays, adaptive coaching, and BR/Resurgence-ready audio/video presets. Every patch is integrated server-side with CPU↔GPU optimization and a low-latency pipeline to preserve fair play and stability.',
+ variants: {
+ 'pulseforge-warzone': {
+ name: 'PulseForge Warzone Operator',
+ usage: 'Calibrated cloud Warzone instance',
+ description: 'Cloud-hosted Warzone build with battle royale overlays and Resurgence coaching.',
+ use_cases: [
+ 'Ranked and Resurgence competition',
+ 'Squad coaching and TTK analytics',
+ 'Battle royale streaming production',
+ 'Private scrims with PulseForge Lobby',
+ 'VOD review and loadout sandbox'
+ ],
+ features: [
+ 'Stream-safe BR modular overlays',
+ 'TTK/plate tracking and squad economy',
+ 'Rotation coach and zone forecasts',
+ 'Post-match analytics with VOD exports',
+ 'Battle royale audio profiles',
+ 'PulseForge Lobby sandbox compatibility',
+ 'Updates synced with Warzone patches'
+ ],
+ featureHighlights: [
+ 'Ranked / all servers – 100% fair-play (screen reading, killfeed, audio, no memory injection)',
+ 'PulseForge private lobbies – synchronized builds with everyone on PulseForge (cosmetics & advanced training)'
+ ],
+ featureGroups: [
+ {
+ title: 'Ranked / fair-play (live)',
+ items: [
+ 'Zone & Rotation Coach: zone collapse forecasts, low-risk routes, and 3rd-party windows to avoid.',
+ 'Squad Economy: purchase thresholds (UAV, loadout, redeploy) with priority buy station reminders.',
+ 'TTK/Plate Estimator: estimates TTK based on your loadout, distance, and visible armor plates.',
+ 'Audio Spatial Director: BR audio profiles with automatic ducking and prioritization of footsteps, armor, doors, and vehicles.',
+ 'Killfeed Intelligence: squad knock/finish synthesis, numeric advantage detection, and respawn timers.',
+ 'Vehicle & Route Helper: fuel management, estimated noise, covered paths, and critical choke alerts.',
+ 'Recoil Learning Overlay: theoretical recoil patterns for training and VOD review—no input adjustment.',
+ 'Stream Suite: automated lower-thirds, 8-second instant replays, expanded killfeed for internal casting.'
+ ]
+ },
+ {
+ title: 'PulseForge private lobbies',
+ description: 'Game and training options for PulseForge Lobby',
+ items: [
+ 'Shared cosmetics: PulseForge camo and FX visible to every squad on the PF build.',
+ 'TTK & Plates sandbox: armor/HP modifiers, fixed distances, and comparative TTK scoreboard.',
+ 'Contract Planner: scripted contract rotations (bounty, scav, most wanted) for team drills.',
+ 'Ghost-Run & Pathing: ghost rotations of your best runs, synchronized insertion time-trials.',
+ 'Draft & Role Lock: locks roles (entry/anchor/support) and enforces weapon cycles.',
+ 'Stratboard Live: tactical whiteboard overlay with coach/IGL sharing and play export.',
+ 'Caster Mode: expanded HUD, instant replays, and round markers ready for streaming.'
+ ]
+ },
+ {
+ title: 'Role / weapon profiles',
+ description: 'Dedicated optimizations per archetype',
+ items: [
+ 'AR (Assault): TTK & recoil lane focus, “don’t ego-peek” prompts, safe opening angles.',
+ 'SMG (Close): engage windows, short escape paths, and armor reminders.',
+ 'LMG (Anchor): reload discipline, cover swaps, and long-lane control.',
+ 'Sniper/DMR: head-height pre-aim, reposition pacing, and glint management.',
+ 'Shotgun: indoor push consolidation and duo timing cues.',
+ 'Support (IGL): macro calls, squad economy tracking, and contextual 3rd-party alerts.'
+ ]
+ },
+ {
+ title: 'Map & mode modules',
+ items: [
+ 'Circle Forecast: collapse timeline, split routes, and high-risk zones.',
+ 'Stronghold Planner: synchronized entries, reinforcement timing, and safe angles.',
+ 'Resurgence Deck: respawn timers, retake paths, and aggression windows.',
+ 'Vehicle Grid: noise heatmap, choke points, and safe air/ground transitions.'
+ ]
+ },
+ {
+ title: 'Analytics & coaching',
+ items: [
+ 'Match Story Auto-report: pivots, fight wins, and comparison to your target MMR.',
+ 'Session Planner: session goals, micro-challenges, and adherence score.',
+ 'Loadout Scorecard: damage/TTK tracking per weapon with adjustment suggestions.',
+ 'VOD Auto-tag: flags 3rd-party hits, failed retakes, and overly long splits (clickable timeline).'
+ ]
+ },
+ {
+ title: 'Accessibility & comfort',
+ items: [
+ 'Color-blind Pro: compliant team palettes with reinforced projectile outlines.',
+ 'Sound-to-HUD: critical audio cues converted into optional visual hints.',
+ 'Focus Mode: blocks toxic whispers, breathing timer, and guided micro-breaks.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'Public ranked relies solely on what is visible/audible (cloud-side vision/ASR) plus killfeed/scoreboard. No memory reading or injection.',
+ 'Cosmetics, TTK sandbox, and live stratboards remain limited to PulseForge private lobbies where every player uses the same build.',
+ 'All overlays are opt-in, discreet, and adaptive (auto-hide mid-fight when the visual load spikes).'
+ ],
+ target_audience: 'Competitive squads, BR coaches, creators',
+ highlight: 'Low-latency pipeline tuned for Warzone',
+ protection: 'Certified stream-safe fair-play',
+ updates: 'Post-patch synchronized updates'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Very smooth', bottleneck: 'CPU (96%)' },
+ { playability: 'Very smooth', bottleneck: 'CPU (95%)' },
+ { playability: 'Very smooth', bottleneck: 'CPU (93%)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: 'Competitive 144–240 Hz target',
+ description: 'The 1080p Medium profile holds around 217 FPS, with Ultra near 179 FPS—ideal for BR, Resurgence, and ranked.',
+ note: 'Switch to the Esports preset when you need a locked 240 Hz experience.'
+ },
+ {
+ refreshAdvice: 'Sharpness / refresh balance',
+ description: 'Moving to 1440p keeps fluidity high. Ultra stays usable around 159 FPS for cinematic output without losing competitiveness.',
+ note: 'Perfect for high-definition streaming or recorded scrims.'
+ },
+ {
+ refreshAdvice: 'Playable 4K above 120 Hz',
+ description: 'Even at 4K Medium (~163 FPS) the experience stays very smooth. Ultra lands near 135 FPS for showcase or premium streaming.',
+ note: 'Use it to highlight content or full-resolution broadcasts.'
+ }
+ ],
+ improvementTips: [
+ 'Lower shadows/effects/AA if you need a constant 240 Hz.',
+ 'Reduce in-game render resolution while keeping the stream at 1080p/1440p from the cloud.',
+ 'Keep drivers up to date (we handle the server profile).',
+ 'For hybrid desktop use: enable XMP and confirm memory frequency.',
+ 'Watch temperatures—CPU overheating causes most 1% low drops.'
+ ],
+ advice: 'CPU Boost option: +5% → ~217 FPS | +10% → ~219 FPS | +15% → ~222 FPS | +20% → ~225 FPS (requires a premium thermal node slot).',
+ augmentationSuite: {
+ modules: [
+ 'Zone & Rotation Coach: predicts circle closures, safe rotations, and 3rd-party risk.',
+ 'Squad Economy: tracks buy thresholds for UAV/loadout/redeploy with nearby station reminders.',
+ 'TTK/Plate Estimator: computes TTK from loadout, distance, and visible armor.',
+ 'Audio Spatial Director: BR audio profile with auto-ducking of non-critical sounds.',
+ 'Killfeed Intelligence: aggregates knocks/finishes, numeric advantage, and respawn timers.',
+ 'Vehicle & Route Helper: fuel, noise footprint, safe routes, and break points.',
+ 'Recoil Learning Overlay: theoretical recoil map for training and VOD (no input changes).',
+ 'VOD Auto-tag: automatic tagging of 3rd-party pivots, failed retakes, and long splits.',
+ 'Stream Suite: automated lower-thirds, 8-second instant replays, widened killfeed for casting.'
+ ],
+ notes: 'Modules calibrated for Warzone BR and Resurgence, refreshed after every major patch.'
+ },
+ heroSynergy: [
+ {
+ preset: 'Balance',
+ coachingNotes: 'Safe opening angles and “don’t ego-peek” prompts to secure trades.'
+ },
+ {
+ preset: 'Esports',
+ coachingNotes: 'Engage windows, short escape lanes, and armor reminders for entry players.'
+ },
+ {
+ preset: 'Stability',
+ coachingNotes: 'Reload discipline, cover swaps, and long-lane control for anchor roles.'
+ },
+ {
+ preset: 'Sniper Focus',
+ coachingNotes: 'Head-height pre-aim, reposition pacing, and glint management.'
+ },
+ {
+ preset: 'Indoor',
+ coachingNotes: 'Structured indoor pushes and duo timing cues.'
+ },
+ {
+ preset: 'Macro',
+ coachingNotes: 'Macro call assistance, squad economy insights, and contextual 3rd-party alerts.'
+ }
+ ]
+ }
+ },
+ et: {
+ nativeAdvantages: [
+ {
+ icon: Code,
+ title: 'Warzone\'i natiivne optimeerimine',
+ description: 'Battle Royale\'i profiilid CPU↔GPU tasakaaluga ja stabiilse vooglatentsusega.'
+ },
+ {
+ icon: Zap,
+ title: 'Kohene provisioneerimine',
+ description: 'Warzone\'i instantsid valmivad sekunditega, piirkonna automaatne vahetus pingist lähtuvalt.'
+ },
+ {
+ icon: Shield,
+ title: 'Võistlussõbralik overlay',
+ description: 'BR overlayd, TTK analüütika ja kohanduv coaching säilitades fair-play.'
+ },
+ {
+ icon: Trophy,
+ title: 'Scrimi ja sisu tugi',
+ description: 'Abi Resurgence\'i presetidele, TTK sandboxile ja premium-voogude tootmisele.'
+ }
+ ],
+ metrics: {
+ title: 'Kalibreeritud jõudlus Call of Duty: Warzone\'i jaoks',
+ description:
+ 'Meie PulseForge\'i instantsi (Medium võistlusprofiil) sisemõõtmised: keskmiselt 217 FPS ja 1% madal 155 FPS 1080p juures. Mängupilt püsib väga sujuv kuni 4K tänu Warzone\'i spetsiifilisele CPU↔GPU häälestusele ja madala latentsusega videotorule.',
+ statCards: {
+ maxFps: 'Maksimaalne täheldatud FPS (1080p Medium)',
+ onePercentLow: '1% madal (1080p Medium)',
+ inputLag: 'Keskmine sisendviivitus'
+ },
+ allocationTitle: 'In-game eraldus (Medium profiil)',
+ datacenterTitle: 'PulseForge\'i pilvemonitoring',
+ usage: {
+ cpu: 'Domineeriv pudelkits',
+ gpu: 'GPU varu',
+ ram: 'Mälu kasutus',
+ vram: 'VRAM kasutus'
+ },
+ thermals: {
+ cpu: 'Pilve CPU temperatuur',
+ gpu: 'GPU temperatuur',
+ power: 'Võimsustarve'
+ },
+ stabilityNote: 'Warzone\'i häälestatud CPU↔GPU toru hoiab varu stabiilsena ka 4K juures.'
+ },
+ fpsTable: {
+ footnote: 'Sisemised Warzone\'i benchmarkid (Medium võistlusprofiil Al Mazrahis, Vondelis ja Fortune’s Keepis).'
+ },
+ resolution: {
+ footnote: 'Väärtused mõõdetud Warzone\'i Medium ja Ultra presetidel overlaydega.',
+ windowLabel: 'Täheldatud aken',
+ avgLabel: 'Keskmine FPS'
+ },
+ experience: {
+ description: (productName: string, latency: number) =>
+ `${productName} töötab täielikult meie pilves: kohene provisioneerimine, dünaamiline võrguoptimeerimine ja keskmine latentsus hoitud ${latency} ms juures.`,
+ bullets: [
+ 'Overlayd, profiilid ja uuendused rakenduvad serveripoolselt — kohalikku installi pole vaja.',
+ 'Vaheta 1080p/1440p/4K PulseForge\'i paneelist, säilitades mõõdetud FPS varu.',
+ 'Elav ping/jitter/kaokontroll automaatse piirkonnavahetusega, kui ilmneb ebastabiilsus.'
+ ],
+ profileSubtitle: 'Keskmine mõõdetud 1080p Medium',
+ lowLabel: '1% madal 1080p Medium',
+ lowSubtitle: 'Täheldatud madalaken'
+ },
+ improvement: {
+ adviceTitle: '„CPU Boost” valik (hosti pool)'
+ },
+ augmentation: {
+ description: 'Battle Royale\'i overlayd, TTK analüütika ja Resurgence\'i coaching ühes stream-safe paketis.'
+ },
+ hero: {
+ badge: 'ROLLI / RELVA PROFIILID',
+ title: 'Pühendatud optimeerimised',
+ description: 'Iga moodul toob Warzone\'i arhetüüpidele (AR, SMG, snaiper, tugi jne) kalibreeritud presetid.',
+ headers: {
+ hero: 'Roll / Relv',
+ overlay: 'Overlay fookus',
+ clarity: 'Visuaalne selgus',
+ preset: 'Soovituslik preset',
+ notes: 'Coaching\'u märkmed'
+ },
+ fallbackDescription: (game: string) => `Arhetüübi põhised optimeerimised mängule ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `Täielikult optimeeritud ${game} Battle Royale\'i jaoks stream-safe overlayde ja spetsiaalse toega.`
+ },
+ product: {
+ description: 'Pilvepõhine Warzone\'i instants, mis koondab BR overlayd, TTK analüütika ja stream-safe coaching’u tööriistad.',
+ longDescription:
+ 'PulseForge Warzone\'i jaoks on täielikult natiivne Battle Royale\'i build meie pilveplatvormil. See koondab kontekstuaalsed overlayd, kohanduva coaching’u ning BR/Resurgence valmid audio-/videopresetid. Iga patch integreeritakse serveripoolselt CPU↔GPU optimeerimise ja madala latentsusega toruga, hoides fair-play ja stabiilsuse.',
+ variants: {
+ 'pulseforge-warzone': {
+ name: 'PulseForge Warzone Operator',
+ usage: 'Kalibreeritud pilvepõhine Warzone\'i instants',
+ description: 'Pilvehostitud Warzone\'i build BR overlayde ja Resurgence\'i coaching’uga.',
+ use_cases: [
+ 'Ranked ja Resurgence võistlusmäng',
+ 'Meeskonna coaching ja TTK analüütika',
+ 'Battle Royale\'i striimimise produktsioon',
+ 'Privaat scrimid PulseForge Lobbyga',
+ 'VOD analüüs ja loadout-sandbox'
+ ],
+ features: [
+ 'Stream-safe BR modulaarsed overlayd',
+ 'TTK/plaadijälgimine ja escouadi majandus',
+ 'Rotatsioonicoach ja tsooni prognoosid',
+ 'Matšijärgne analüütika ja VOD eksport',
+ 'Battle Royale\'ile kalibreeritud audioprofiilid',
+ 'PulseForge Lobby sandboxi ühilduvus',
+ 'Uuendused sünkroonis Warzone\'i patchidega'
+ ],
+ featureHighlights: [
+ 'Reastatud / kõik serverid – 100% fair-play (ekraani lugemine, killfeed, audio, ilma mälusüstita)',
+ 'PulseForge\'i privaatlobid – sünkroonitud buildid kõigile PulseForge\'i mängijatele (kosmeetika ja edasijõudnud treening)'
+ ],
+ featureGroups: [
+ {
+ title: 'Reastatud / fair-play (live)',
+ items: [
+ 'Zone & Rotation Coach: tsooni sulgumise prognoosid, low-risk marsruudid ja 3rd-party akende vältimine.',
+ 'Escouadi majandus: ostuläved (UAV, loadout, redeploy) ja lähimate buy station\'ite meeldetuletused.',
+ 'TTK/Plate Estimator: TTK hinnang loadouti, distantsi ja nähtavate plaatide järgi.',
+ 'Audio Spatial Director: BR audioprofiil automaatse duckingu ja sammude/armorite/uste/sõidukite prioriseerimisega.',
+ 'Killfeed Intelligence: knock/finish kokkuvõte, arvuline ülekaal ja respawni taimerid.',
+ 'Vehicle & Route Helper: kütusehaldus, mürataseme hinnang, kaetud teekonnad ja kriitilised choke-punktid.',
+ 'Recoil Learning Overlay: relvade teoreetiline tagasilöögimuster treeninguks ja VOD-analüüsiks (ilma sisendimuutuseta).',
+ 'Stream Suite: automaatsed lower thirdid, 8-sekundilised kohesed kordused, laiendatud killfeed sisekommentaatorile.'
+ ]
+ },
+ {
+ title: 'PulseForge\'i privaatlobid',
+ description: 'Mängu- ja treeningvalikud PulseForge Lobby jaoks',
+ items: [
+ 'Jagatud kosmeetika: PulseForge\'i kammud ja efektid nähtavad kõigile PF buildil olevatele escouadidele.',
+ 'TTK & Plates sandbox: soomuse/HP modifikaatorid, fikseeritud distantsid ja võrdlev TTK scoreboard.',
+ 'Contract Planner: skriptitud lepinguringid (bounty, scav, most wanted) meeskonnadrillideks.',
+ 'Ghost-Run & Pathing: parimate rotatsioonide kummitused ja sünkroonitud sissepääsu time-trialid.',
+ 'Draft & Role Lock: lukustab rollid (entry/anchor/support) ja kehtestab relvatsüklid.',
+ 'Stratboard Live: taktikaline tahvel overlay’na coach’i/IGL-i jagamisega ja play’de ekspordiga.',
+ 'Caster Mode: laiendatud HUD, kohesed kordused ja roundi markerid striimiks valmis.'
+ ]
+ },
+ {
+ title: 'Rolli / relva profiilid',
+ description: 'Pühendatud optimeerimised iga arhetüübi jaoks',
+ items: [
+ 'AR (Assault): TTK ja recoil lane fookus, “don’t ego-peek” meeldetuletused, turvalised avamisnurgad.',
+ 'SMG (Close): engage-aknad, lühikesed põgenemisteed ja armori meeldetuletused.',
+ 'LMG (Anchor): reload\'i distsipliin, cover\'i vahetus ja pikamaa kontroll.',
+ 'Sniper/DMR: pea kõrguse pre-aim, repositsiooni tempo ja glindi haldus.',
+ 'Shotgun: indoor-pushide konsolideerimine ja duo-timingud.',
+ 'Support (IGL): makrokõned, escouadi majandus ning kontekstuaalsed 3rd-party hoiatused.'
+ ]
+ },
+ {
+ title: 'Kaardi & mängurežiimi moodulid',
+ items: [
+ 'Circle Forecast: sulgumise ajaskaala, split-marsruudid ja riskitsoonid.',
+ 'Stronghold Planner: sünkroonsed sisenemised, lisajõudude taimerid ja ohutud nurgad.',
+ 'Resurgence Deck: respawni taimerid, retake\'i teed ja agressiooniaknad.',
+ 'Vehicle Grid: mürasoojuskaart, choke-punktid ja turvalised õhu/maa üleminekud.'
+ ]
+ },
+ {
+ title: 'Analüütika & coaching',
+ items: [
+ 'Match Story Auto-report: pöördepunktid, fight-võidud ja võrdlus siht-MMR-iga.',
+ 'Session Planner: sessiooni eesmärgid, mikro-ülesanded ja järgimise skoor.',
+ 'Loadout Scorecard: relvade damage/TTK jälgimine koos kohandamissoovitustega.',
+ 'VOD Auto-tag: märgistab 3rd-party rünnakud, ebaõnnestunud retake\'id ja liiga pikad splitid (klõpsatav ajajoon).'
+ ]
+ },
+ {
+ title: 'Ligipääsetavus & mugavus',
+ items: [
+ 'Color-blind Pro: meeskonna paletid nõuetele vastavad ja kiirete projektiilide kontuurid tugevdatud.',
+ 'Sound-to-HUD: kriitilised helisignaalid valikulisteks visuaalseteks vihjeteks.',
+ 'Focus Mode: blokeerib toksilised whispers\'id, hingamise taimer ja juhitud mikropausid.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'Avalikes ranked-mängudes tugineb kõik ainult nähtavale/kuuldavale (pilvepoolne visioon/ASR) + killfeed/scoreboard. Mälulugemist ega süsti pole.',
+ 'Kosmeetika, TTK sandbox ja aktiivsed stratboardid on reserveeritud PulseForge\'i privaatlobidele, kus kõik kasutavad sama buildi.',
+ 'Kõik overlayd on opt-in, diskreetsed ja kohanduvad (peituvad võitluse ajal, kui visuaalne koormus tõuseb).'
+ ],
+ target_audience: 'Võistlussquadi, BR-treenerid, loojad',
+ highlight: 'Madala latentsusega Warzone\'i pipeline',
+ protection: 'Stream-safe fair-play sertifitseeritud',
+ updates: 'Patchijärgsed sünkroonitud uuendused'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Väga sujuv', bottleneck: 'CPU (96%)' },
+ { playability: 'Väga sujuv', bottleneck: 'CPU (95%)' },
+ { playability: 'Väga sujuv', bottleneck: 'CPU (93%)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: '144–240 Hz võistlussiht',
+ description: '1080p Medium hoiab ~217 FPS, Ultra ~179 FPS — ideaalne BR-i, Resurgence\'i ja ranked\'i jaoks.',
+ note: 'Lülitu Esports-preseti peale, kui vajad lukustatud 240 Hz kogemust.'
+ },
+ {
+ refreshAdvice: 'Teravuse ja värskenduse tasakaal',
+ description: '1440p peal püsib sujuvus kõrge. Ultra on jätkuvalt kasutatav ~159 FPS juures filmilise väljundi jaoks.',
+ note: 'Sobib HD-striimideks või salvestatud scrimideks.'
+ },
+ {
+ refreshAdvice: 'Mängitav 4K üle 120 Hz',
+ description: 'Isegi 4K Medium (~163 FPS) jääb väga sujuvaks. Ultra jõuab ~135 FPS-ni showcase\'i ja premium-voogude jaoks.',
+ note: 'Kasuta, et tõsta esile sisu või täisresolutsioonis ülekandeid.'
+ }
+ ],
+ improvementTips: [
+ 'Langeta varje/efekte/AA-d, kui sihid püsivat 240 Hz.',
+ 'Vähenda in-game renderresolutsiooni, jättes pilvevoo 1080p/1440p peale.',
+ 'Hoia draiverid ajakohased (serveriprofiili haldame meie).',
+ 'Hübriidkasutuse korral aktiveeri XMP ja kinnita mälusagedus.',
+ 'Jälgi temperatuure — CPU ülekuumenemine põhjustab enamiku 1% madalaid.'
+ ],
+ advice: '„CPU Boost” valik: +5% → ~217 FPS | +10% → ~219 FPS | +15% → ~222 FPS | +20% → ~225 FPS (vajab premium-terminoodislot’i).',
+ augmentationSuite: {
+ modules: [
+ 'Zone & Rotation Coach: ennustab ringi sulgumist, turvalisi rotatsioone ja 3rd-party riske.',
+ 'Escouadi majandus: jälgib UAV/loadout/redeploy ostulävesid ja lähimaid jaamu.',
+ 'TTK/Plate Estimator: arvutab TTK loadouti, distantsi ja nähtava soomuse põhjal.',
+ 'Audio Spatial Director: BR audioprofiil automaatse mitteoluliste helide summutamisega.',
+ 'Killfeed Intelligence: koondab knockid/finishid, arvulise eelise ja respawni taimerid.',
+ 'Vehicle & Route Helper: kütus, müratase, turvalised marsruudid ja katkestuspunktid.',
+ 'Recoil Learning Overlay: relva tagasilöögimuster treeninguks ja VOD\'iks (ilma sisendi muutuseta).',
+ 'VOD Auto-tag: märgib automaatselt 3rd-party pöördepunktid, ebaõnnestunud retake\'id ja pikad splitid.',
+ 'Stream Suite: automaatsed lower thirdid, 8-sekundilised kordused, laiendatud killfeed casting\'uks.'
+ ],
+ notes: 'Moodulid kalibreeritud Warzone\'i BR-i ja Resurgence\'i jaoks, värskendatakse iga suure patchi järel.'
+ },
+ heroSynergy: [
+ {
+ preset: 'Balance',
+ coachingNotes: 'Turvalised avamisnurgad ja “don’t ego-peek” meeldetuletused trades\'i kindlustamiseks.'
+ },
+ {
+ preset: 'Esports',
+ coachingNotes: 'Engage-aknad, lühikesed põgenemisteed ja armori meeldetuletused entry-rollile.'
+ },
+ {
+ preset: 'Stability',
+ coachingNotes: 'Reload\'i distsipliin, cover\'i vahetus ja pikamaa kontroll anchor-rollile.'
+ },
+ {
+ preset: 'Sniper Focus',
+ coachingNotes: 'Pea kõrguse pre-aim, repositsiooni tempo ja glindi haldus.'
+ },
+ {
+ preset: 'Indoor',
+ coachingNotes: 'Indoor-pushide struktuur ja duo-timingute vihjed.'
+ },
+ {
+ preset: 'Macro',
+ coachingNotes: 'Makrokõnede abi, escouadi majanduse ülevaade ja kontekstuaalsed 3rd-party hoiatused.'
+ }
+ ]
+ }
+ }
+ }
+}
+
interface NativeGamingProductPageProps {
product: GamingProduct
}
@@ -1340,7 +2031,9 @@ export default function NativeGamingProductPage({ product }: NativeGamingProduct
const locale = pathname.split('/')[1]
const supportedLocales = ['fr', 'en', 'et'] as const
const localeKey: LocaleKey = supportedLocales.includes(locale as LocaleKey) ? (locale as LocaleKey) : 'fr'
- const copy = copyByLocale[localeKey]
+ const baseCopy = copyByLocale[localeKey]
+ const copyOverrides = localeOverridesByProduct[product.id]?.[localeKey]
+ const copy = useMemo(() => mergeDeep(baseCopy, copyOverrides), [baseCopy, copyOverrides])
const subscriptionPlans = getSubscriptionPlans()
const localizedSubscriptionPlans = useMemo(
diff --git a/data/gaming-products.json b/data/gaming-products.json
index 66ca43f..7084ce9 100644
--- a/data/gaming-products.json
+++ b/data/gaming-products.json
@@ -341,60 +341,349 @@
{
"id": "gaming-warzone",
"slug": "gaming-warzone",
- "name": "Call of Duty: Warzone",
+ "name": "Call of Duty: Warzone PulseForge",
"game": "Call of Duty: Warzone",
"category": "gaming",
"optimizationLevel": "native",
- "description": "Package élite Warzone avec aimbot avancé et HWID spoofer inclus",
- "longDescription": "Warzone Reaper 2 est l'évolution enterprise de notre solution Warzone. Équipé d'une RTX 4070 Ti, 64GB de RAM et d'un Intel i9-12900K, il offre des fonctionnalités avancées comme l'aimbot pour véhicules, ESP 3D et HWID spoofer hardware inclus.",
+ "description": "Instance cloud Warzone calibrée Battle Royale avec overlays tactiques, analytics TTK et profils stream-safe.",
+ "longDescription": "PulseForge pour Warzone est une build native orientée Battle Royale hébergée dans notre cloud gaming. Elle regroupe les overlays contextuels, les coachings adaptatifs et les presets audio/vidéo calibrés pour BR et Resurgence. Chaque patch est intégré côté serveur avec optimisation CPU↔GPU et pipeline vidéo faible latence pour préserver le fair-play et la stabilité.",
"status": "ACTIVE",
+ "technicalSpecs": {
+ "performanceMetrics": {
+ "avgFps": 217,
+ "minFps": 184,
+ "maxFps": 249,
+ "onePercentLow": 155,
+ "latency": 1.1,
+ "inputLag": 0.32,
+ "frameTime": 4.6,
+ "cpuUsage": 95,
+ "gpuUsage": 72,
+ "ramUsage": 20.5,
+ "vramUsage": 9.6,
+ "powerDraw": 395,
+ "thermalCpu": 67,
+ "thermalGpu": 63
+ },
+ "augmentationSuite": {
+ "awarenessIndex": 94,
+ "overlayRefresh": 144,
+ "adaptiveCoaching": 90,
+ "reactionTimeMs": 45,
+ "moduleCoverage": 17,
+ "tacticalFocus": 91,
+ "modules": [
+ "Zone & Rotation Coach : prédiction des fermetures, chemins low-risk et alertes de 3rd-party.",
+ "Économie d’escouade : seuils d’achat (UAV, loadout, redeploy), buy stations prioritaires.",
+ "TTK/Plate Estimator : calcul du TTK selon loadout, distance et plaques visibles.",
+ "Audio Spatial Director : profil BR avec ducking automatique des sons non critiques.",
+ "Killfeed Intelligence : synthèse knocks/finishes, avantage numérique et timers de respawn.",
+ "Vehicle & Route Helper : gestion carburant, bruit estimé, routes couvertes et points de rupture.",
+ "Recoil Learning Overlay : pattern théorique pour entraînement et VOD sans ajustement d’input.",
+ "VOD Auto-tag : marquage automatique des pivots (3rd-party, retakes ratés, splits).",
+ "Stream Suite : lower-thirds auto, replays instantanés 8 s, killfeed élargi pour casting interne."
+ ],
+ "notes": "Modules calibrés pour Warzone BR et Resurgence, rafraîchis à chaque patch majeur."
+ },
+ "fpsByResolution": [
+ {
+ "resolution": "1920 × 1080",
+ "avgFps": 217,
+ "minFps": 184,
+ "maxFps": 249,
+ "playability": "Très fluide",
+ "bottleneck": "CPU (96%)"
+ },
+ {
+ "resolution": "2560 × 1440",
+ "avgFps": 193,
+ "minFps": 164,
+ "maxFps": 222,
+ "playability": "Très fluide",
+ "bottleneck": "CPU (95%)"
+ },
+ {
+ "resolution": "3840 × 2160",
+ "avgFps": 163,
+ "minFps": 139,
+ "maxFps": 188,
+ "playability": "Très fluide",
+ "bottleneck": "CPU (93%)"
+ }
+ ],
+ "qualityBreakdown": [
+ {
+ "resolution": "1920 × 1080",
+ "presets": {
+ "low": 220,
+ "medium": 217,
+ "high": 196,
+ "ultra": 179
+ }
+ },
+ {
+ "resolution": "2560 × 1440",
+ "presets": {
+ "low": 196,
+ "medium": 193,
+ "high": 175,
+ "ultra": 159
+ }
+ },
+ {
+ "resolution": "3840 × 2160",
+ "presets": {
+ "low": 166,
+ "medium": 163,
+ "high": 148,
+ "ultra": 135
+ }
+ }
+ ],
+ "resolutionGuidance": [
+ {
+ "resolution": "1920 × 1080",
+ "avgFps": 217,
+ "fpsWindow": "184 – 249 FPS",
+ "refreshAdvice": "Cible 144–240 Hz compétitif",
+ "description": "Le profil 1080p Medium maintient ~217 FPS, avec 179 FPS en Ultra. Idéal pour la réactivité maximale (BR, Resurgence, ranked).",
+ "note": "Activez le preset Esports si vous jouez en 240 Hz constant."
+ },
+ {
+ "resolution": "2560 × 1440",
+ "avgFps": 193,
+ "fpsWindow": "164 – 222 FPS",
+ "refreshAdvice": "Équilibre netteté / fréquence",
+ "description": "Le passage en 1440p conserve une excellente fluidité. L’Ultra reste exploitable à ~159 FPS pour un rendu plus cinématique sans sacrifier la compétitivité.",
+ "note": "Idéal pour le streaming haute définition ou les sessions scrim filmées."
+ },
+ {
+ "resolution": "3840 × 2160",
+ "avgFps": 163,
+ "fpsWindow": "139 – 188 FPS",
+ "refreshAdvice": "4K jouable au-delà de 120 Hz",
+ "description": "Même en 4K Medium (~163 FPS), l’expérience reste très fluide. Ultra descend à ~135 FPS pour du showcase ou du stream premium.",
+ "note": "Utilisez ce mode pour mettre en avant vos contenus cinématiques."
+ }
+ ],
+ "improvementTips": [
+ "Abaissez ombres/effets/AA si vous ciblez 240 Hz constant.",
+ "Réduisez la résolution de rendu in-game tout en conservant le stream à 1080p/1440p côté cloud.",
+ "Maintenez vos pilotes à jour (profil serveur géré par nos soins).",
+ "Sur desktop local (si usage hybride) : activez XMP et vérifiez la fréquence mémoire.",
+ "Surveillez les températures : la surchauffe CPU provoque la majeure partie des chutes en 1% low."
+ ],
+ "advice": "Option « CPU Boost » : +5 % → ~217 FPS | +10 % → ~219 FPS | +15 % → ~222 FPS | +20 % → ~225 FPS (requiert un slot nœud thermique premium).",
+ "heroSynergy": [
+ {
+ "hero": "AR (Assaut)",
+ "overlayFocus": 94,
+ "clarityBoost": 91,
+ "preset": "Balance",
+ "coachingNotes": "Angles d’ouverture safe et prompts “don’t ego-peek” pour sécuriser les trades."
+ },
+ {
+ "hero": "SMG (Close)",
+ "overlayFocus": 92,
+ "clarityBoost": 90,
+ "preset": "Esports",
+ "coachingNotes": "Timing d’entrée, fenêtres d’engage et routes d’évasion courtes."
+ },
+ {
+ "hero": "LMG (Ancrage)",
+ "overlayFocus": 91,
+ "clarityBoost": 88,
+ "preset": "Stability",
+ "coachingNotes": "Discipline reload, échanges de cover et contrôle de lignes longues."
+ },
+ {
+ "hero": "Sniper/DMR",
+ "overlayFocus": 95,
+ "clarityBoost": 94,
+ "preset": "Sniper Focus",
+ "coachingNotes": "Pré-aim hauteurs tête, pacing de reposition et gestion du glint."
+ },
+ {
+ "hero": "Shotgun",
+ "overlayFocus": 88,
+ "clarityBoost": 84,
+ "preset": "Indoor",
+ "coachingNotes": "Consolidation des pushes rapprochés et duo-timings."
+ },
+ {
+ "hero": "Support (IGL)",
+ "overlayFocus": 93,
+ "clarityBoost": 90,
+ "preset": "Macro",
+ "coachingNotes": "Macro-calls, suivi économie et alertes 3rd-party contextuelles."
+ }
+ ],
+ "networkStats": {
+ "serverLocations": 24,
+ "avgPing": 18,
+ "maxBandwidth": 1200,
+ "packetLoss": 0.2,
+ "jitter": 3.1,
+ "ddosProtection": true,
+ "encryption": "TLS 1.3 + SRTP"
+ },
+ "securityMetrics": {
+ "detectionRate": 0,
+ "banRate": 0.1,
+ "uptimePercentage": 99.97,
+ "avgResponseTime": 6,
+ "incidentsLastMonth": 0,
+ "securityUpdatesPerWeek": 5,
+ "encryptionLevel": "AES-256",
+ "obfuscationLayers": 4,
+ "antiDebug": true,
+ "antiVM": true,
+ "kernelProtection": true
+ },
+ "updateHistory": {
+ "totalUpdates": 148,
+ "lastUpdateDate": "2025-02-20",
+ "avgUpdatesPerMonth": 5.8,
+ "criticalPatches": 9,
+ "securityPatches": 46,
+ "featureUpdates": 52,
+ "bugFixes": 41
+ },
+ "userStats": {
+ "totalUsers": 6240,
+ "activeUsersLast30Days": 5128,
+ "avgSessionDuration": 3.4,
+ "avgGamesPerDay": 5.1,
+ "satisfactionScore": 4.6,
+ "recommendationRate": 89
+ }
+ },
"variants": [
{
- "id": "reaper2",
- "name": "Reaper 2",
- "tier": "enterprise",
- "gpu": "RTX 4070 Ti",
- "ram": "64 GB DDR5",
- "cpu": "Intel i9-12900K",
- "usage": "Package élite",
- "description": "Package élite Warzone avec aimbot avancé et HWID spoofer inclus",
+ "id": "pulseforge-warzone",
+ "name": "PulseForge Warzone Operator",
+ "tier": "premium",
+ "gpu": "RTX 4090",
+ "ram": "128 GB DDR5",
+ "cpu": "Intel i9-14900KS",
+ "storage": "2TB NVMe Gen4",
+ "motherboard": "ASUS ROG Maximus Z790",
+ "psu": "1200W 80+ Platinum",
+ "cooling": "Custom Loop Liquid",
+ "usage": "Instance cloud Warzone calibrée",
+ "description": "Instance Warzone hébergée sur notre cloud avec overlays Battle Royale et coaching Resurgence.",
"use_cases": [
- "Jeu professionnel",
- "Stream en sécurité",
- "Domination en tournoi",
- "Services de compte",
- "K/D maximum"
+ "Compétitions Ranked et Resurgence",
+ "Coaching d’escouade et analytics TTK",
+ "Production stream Battle Royale",
+ "Scrims privés PulseForge Lobby",
+ "VOD review et sandbox loadouts"
],
"features": [
- "Aimbot à prédiction avancée",
- "ESP bounding box 3D",
- "Aimbot véhicules",
- "HWID spoofer inclus",
- "ESP loadout",
- "Support assistant personnel",
- "Mises à jour protection temps réel"
+ "Overlays BR modulaires stream-safe",
+ "Suivi TTK/plaques et économie d’escouade",
+ "Coach rotations et prévisions de zone",
+ "Analytics post-match et exports VOD",
+ "Profils audio Battle Royale calibrés",
+ "Compatibilité PulseForge Lobby sandbox",
+ "Mises à jour synchronisées aux patchs Warzone"
+ ],
+ "featureHighlights": [
+ "Ranked/Tous serveurs – 100 % fair-play (lecture d’écran, killfeed, audio, sans injection mémoire)",
+ "Lobbies privés Pulseforge – builds synchronisés où tout le monde est sur Pulseforge (cosmétique & entraînement avancé)"
],
- "target_audience": "Joueurs professionnels, Streamers",
- "highlight": "Inclut HWID spoofer",
- "protection": "Hardware spoofer included",
- "updates": "Real-time updates",
+ "featureGroups": [
+ {
+ "title": "Ranked / fair-play (live)",
+ "items": [
+ "Zone & Rotation Coach : prévisions de fermeture, routes low-risk et fenêtres de 3rd-party à éviter.",
+ "Économie d’escouade : seuils d’achat (UAV, loadout, redéploiement) et rappel des buy stations prioritaires.",
+ "TTK/Plate Estimator : estimation du TTK selon votre loadout, la distance et les plaques adverses visibles.",
+ "Audio Spatial Director : profils audio BR, ducking automatique et priorisation pas/plaques/portes/véhicules.",
+ "Killfeed Intelligence : synthèse des knocks/finishes par escouade, détection d’avantage numérique et timers de respawn.",
+ "Vehicle & Route Helper : gestion carburant, bruit estimé, routes couvertes et points de rupture critiques.",
+ "Recoil Learning Overlay : pattern théorique de vos armes favorites pour entraînement et VOD.",
+ "Stream Suite : lower-thirds automatiques, replays instantanés 8 s, killfeed élargi pour caster interne."
+ ]
+ },
+ {
+ "title": "Lobbies privés PulseForge",
+ "description": "Options de jeu et d’entraînement pour PulseForge Lobby",
+ "items": [
+ "Cosmétiques partagés : camouflages et FX PulseForge visibles pour toutes les escouades sur build PF.",
+ "Sandbox TTK & Plates : modificateurs d’armure/HP, distances fixes et scoreboard TTK comparatif.",
+ "Contract Planner : distribution scénarisée de contrats (bounty, scav, most wanted) pour drills.",
+ "Ghost-Run & Pathing : fantômes de rotations optimales, time-trial d’insertion et routes synchronisées.",
+ "Draft & Role Lock : verrouillage de rôles (entry/anchor/support) et cycles d’armes imposés.",
+ "Stratboard Live : tableau tactique overlay avec partage coach/IGL et export des plays.",
+ "Caster Mode : HUD élargi, replays instantanés et marqueurs de rounds stream-ready."
+ ]
+ },
+ {
+ "title": "Profils par rôle / arme",
+ "description": "Optimisations dédiées pour chaque archétype",
+ "items": [
+ "AR (Assaut) : focus TTK & recoil lane, prompts “don’t ego-peek”, angles d’ouverture safe.",
+ "SMG (Close) : windows d’engage, chemins d’évasion courts et reminders d’armure.",
+ "LMG (Ancrage) : discipline reload, gestion de cover et contrôle de lignes longues.",
+ "Sniper/DMR : pré-aim hauteurs tête, pacing reposition et gestion du glint.",
+ "Shotgun : consolidation pushes indoor et timings duo.",
+ "Support (IGL) : macro calls, économie escouade et alertes 3rd-party."
+ ]
+ },
+ {
+ "title": "Modules \"Map & Mode\"",
+ "items": [
+ "Circle Forecast : timeline collapse, split routes et zones à risque.",
+ "Stronghold Planner : entrées synchronisées, timings de renforts et angles safe.",
+ "Resurgence Deck : timers de respawn, routes de retake et fenêtres d’agression.",
+ "Vehicle Grid : heatmap bruit, points de rupture et transitions air/sol sécurisées."
+ ]
+ },
+ {
+ "title": "Analytics & Coachings",
+ "items": [
+ "Match Story Auto-report : pivots, fight-wins, ult diff et comparaison MMR cible.",
+ "Session Planner : objectifs de session, micro-défis et score d’adhérence.",
+ "Loadout Scorecard : suivi damage/TTK par arme et recommandations d’ajustement.",
+ "VOD Auto-tag : marquage 3rd-party, retakes ratés et splits trop longs (timeline cliquable)."
+ ]
+ },
+ {
+ "title": "Accessibilité & confort",
+ "items": [
+ "Color-blind Pro : palettes conformes et contours renforcés des projectiles rapides.",
+ "Sound-to-HUD : indices sonores critiques convertis en signaux visuels optionnels.",
+ "Focus Mode : blocage whispers toxiques, timer respiration et micro-pauses guidées."
+ ]
+ }
+ ],
+ "implementationNotes": [
+ "En ranked public, tout repose sur le visuel/son (vision/ASR côté cloud) + killfeed/scoreboard. Aucune lecture mémoire ni injection.",
+ "Cosmétiques, sandbox TTK et stratboards actifs sont réservés aux lobbies privés PulseForge avec build partagé.",
+ "Overlays opt-in, discrets et adaptatifs (masqués en fight si bruit visuel)."
+ ],
+ "target_audience": "Escouades compétitives, coachs BR, créateurs",
+ "highlight": "Pipeline faible latence calibré Warzone",
+ "protection": "Fair-play stream-safe certifié",
+ "updates": "Mises à jour synchronisées post-patch",
"pricing": {
- "hourly": 2.25,
- "monthly": 900
+ "hourly": 2.05,
+ "monthly": 690
},
- "sla": "99.99%",
+ "sla": "99.97%",
"support_level": "enterprise",
"badges": [
- "Next Gen",
- "Enterprise",
- "Vehicle Support"
+ "BR Optimized",
+ "Stream Safe",
+ "PulseForge Lobby"
],
"image": "/images/products/warzone/main.png"
}
],
"reviews": {
"average": 4.8,
- "count": 510
+ "count": 512
},
"discount": {
"active": false,
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index 27e6163..a915245 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2080,3 +2080,26 @@ if (hasDecimal) {
#### État:
✅ Section « Fonctionnalités incluses » plus compacte et lisible
✅ Documentation synchronisée avec le nouveau pattern
+
+### Feature: PulseForge Warzone native build
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Remplacer l’ancienne fiche Warzone orientée cheat par une offre PulseForge native alignée avec l’expérience cloud gaming.
+- Intégrer les métriques Battle Royale (FPS multi-résolutions, option CPU Boost, guidance résolution) fournies par le rapport interne.
+- Garantir une localisation complète FR/EN/ET, y compris pour les variantes PulseForge et les notes de conformité.
+
+#### Actions réalisées:
+1. Réécriture de `gaming-warzone` dans `data/gaming-products.json` avec les performances calibrées, la suite d’assistances BR et le variant `PulseForge Warzone Operator`.
+2. Ajout de `localeOverridesByProduct` dans `NativeGamingProductPage.tsx` pour fusionner les textes spécifiques Warzone (métriques, expérience cloud, fonctionnalités) dans chaque langue.
+3. Mise à jour de `docs/README.md` afin de documenter l’arrivée de l’offre Warzone et le rôle des overrides de localisation.
+
+#### Fichiers modifiés:
+- `/data/gaming-products.json`
+- `/components/NativeGamingProductPage.tsx`
+- `/docs/README.md`
+
+#### État:
+✅ Offre Warzone alignée avec PulseForge et métriques fournies
+✅ Localisation FR/EN/ET opérationnelle via overrides
diff --git a/docs/README.md b/docs/README.md
index d46e114..9ca1fba 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -80,6 +80,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
- Chaque entrée précise l'identifiant, le `slug`, le niveau d'optimisation (`native` ou `community`), la description marketing et les métriques de performance.
- Les tableaux `resolutionGuidance` et `technicalSpecs` exposent les FPS, la latence et les informations réseau injectées telles quelles dans l'interface.
- Les variantes peuvent embarquer `featureHighlights`, `featureGroups` (titre, description, éléments) et `implementationNotes` pour décrire les suites PulseForge ; le rendu se base maintenant sur un sélecteur interactif qui affiche un groupe à la fois pour limiter le scroll. Ces blocs sont traduits via les overrides de `copyByLocale.product.variants`.
+- L’entrée `gaming-warzone` suit cette structure pour Call of Duty: Warzone : métriques BR (FPS multi-résolutions, option « CPU Boost »), variantes PulseForge et suites de fonctionnalités orientées Battle Royale.
- Les utilitaires d'accès et les types associés vivent dans [`lib/gaming-products.ts`](../lib/gaming-products.ts).
- `getAllGamingProducts()` et `getGamingProductBySlug()` alimentent les routes dynamiques.
@@ -87,6 +88,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
- Les textes génériques (navigation, CTA, footer, listes) sont stockés dans [`public/locales//common.json`](../public/locales).
- Le contenu narratif propre aux offres natives est regroupé dans [`components/NativeGamingProductPage.tsx`](../components/NativeGamingProductPage.tsx) via la constante `copyByLocale`.
- Ajouter une langue consiste à dupliquer l'objet existant et adapter les champs textuels.
+ - Les textes spécifiques à une offre (ex. PulseForge Warzone) sont fusionnés via `localeOverridesByProduct` pour injecter les métriques, descriptions cloud et variantes traduites dans chaque langue.
- Les pages communautaires réutilisent les traductions du dossier `public/locales` et les textes définis directement dans [`components/CommunityGamingProductPage.tsx`](../components/CommunityGamingProductPage.tsx).
### 🏗️ Construction des pages
@@ -104,7 +106,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
4. Compléter les traductions génériques dans `public/locales//common.json` si besoin.
5. Lancer `npm run lint` pour valider les schémas avant de publier.
-**Dernière action:** Sélecteur d’onglets pour les fonctionnalités PulseForge et transition AnimatePresence (24/10/2025)
+**Dernière action:** Ajout de l’offre native Warzone PulseForge et overrides de localisation FR/EN/ET (25/10/2025)
---
From d3c09c8f5422fb88f390cece19757b60f633d9bd Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Wed, 22 Oct 2025 19:47:46 +0200
Subject: [PATCH 14/25] feat: add PulseForge Valorant native product data
---
components/NativeGamingProductPage.tsx | 803 +++++++++++++++++++++++++
data/gaming-products.json | 357 +++++++++--
docs/JOURNAL.md | 23 +
docs/README.md | 5 +-
4 files changed, 1150 insertions(+), 38 deletions(-)
diff --git a/components/NativeGamingProductPage.tsx b/components/NativeGamingProductPage.tsx
index ba24345..a2d9523 100644
--- a/components/NativeGamingProductPage.tsx
+++ b/components/NativeGamingProductPage.tsx
@@ -2019,6 +2019,809 @@ const localeOverridesByProduct: Record
+ `${productName} tourne intégralement sur notre infrastructure : provisioning instantané, routage réseau adaptatif et latence stabilisée à ${latency} ms.`,
+ bullets: [
+ 'Overlays, presets et mises à jour appliqués côté serveur — aucune installation locale.',
+ 'Bascule 1080p/1440p/4K instantanée depuis le panneau PulseForge avec la marge FPS mesurée.',
+ 'Monitoring ping/jitter/pertes avec failover automatique si la région devient instable.'
+ ],
+ profileSubtitle: 'Moyenne mesurée en 1080p Medium',
+ lowLabel: 'Min observé 1080p Medium',
+ lowSubtitle: 'Fenêtre basse relevée'
+ },
+ improvement: {
+ adviceTitle: 'Option « CPU Boost » (côté hôte)'
+ },
+ augmentation: {
+ description: 'Modules phase-aware Valorant : économie, executes, retakes et coaching stream-safe.'
+ },
+ hero: {
+ badge: 'PROFILS AGENT / RÔLE',
+ title: 'Optimisations dédiées',
+ description: 'Chaque preset couvre un rôle Valorant (Duelist, Controller, Initiator, Sentinel, Flex).',
+ headers: {
+ hero: 'Rôle',
+ overlay: 'Focus overlay',
+ clarity: 'Clarté visuelle',
+ preset: 'Preset conseillé',
+ notes: 'Notes coaching'
+ },
+ fallbackDescription: (game: string) => `Optimisations par rôle pour ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `Optimisé de bout en bout pour ${game} Esports avec overlays fair-play et support staff.`
+ },
+ product: {
+ description: 'Instance Valorant cloud native calibrée pour le 240+ Hz et la conformité tournoi.',
+ longDescription:
+ 'PulseForge Valorant associe une orchestration CPU-bound et notre pipeline vidéo faible latence pour garantir une réactivité extrême. Tout est piloté côté serveur : overlays, Focus HUD, presets audio et mises à jour synchronisées après chaque patch Riot.',
+ variants: {
+ 'pulseforge-valorant': {
+ name: 'PulseForge Valorant Esports',
+ usage: 'Instance Valorant Esports',
+ description: 'Build cloud Valorant orienté compétition et streaming 240+ Hz.',
+ use_cases: [
+ 'Scrims pro et ranked Immortal/Radiant',
+ 'Coaching staff et review tactique',
+ 'Production stream Esports & watch parties',
+ 'Line-up practice PulseForge Lobby',
+ 'Sessions VOD & sandbox utilitaires'
+ ],
+ features: [
+ 'Overlays modulaires phase-aware',
+ 'Analyse post-match & export (timeline, economy)',
+ 'Coach macro (tempo, rotations, retakes)',
+ 'Thèmes d’équipe stream-safe (PulseForge Lobby)',
+ 'Intégration multi-input (clavier/souris, manette)',
+ 'Mises à jour continues & profils partagés d’équipe'
+ ],
+ featureHighlights: [
+ 'Ranked / tournois — overlays 100 % fair-play basés sur HUD, audio et minimap',
+ 'PulseForge Lobby — scrims synchronisés, lineup sandbox et caster mode intégré'
+ ],
+ featureGroups: [
+ {
+ title: 'Modules tactiques en temps réel',
+ description: 'Suite contextuelle pour les phases Valorant',
+ items: [
+ 'Eco & Buy Advisor : calcul du loss bonus, recommandations full/half/force et rappel drop.',
+ 'Execute Planner : cartes-plans par site avec tempo flash/smoke/plant et crossfires probables.',
+ 'Post-Plant Director : timer Spike précis, chemins de repost safe et zones d’interdiction.',
+ 'Retake Coach : séquence clear → trade → isolate avec alerte avantage numérique (killfeed).',
+ 'Angle & Head-Height : repères de hauteur de tête et prompts “don’t ego-peek”.',
+ 'Audio Spatial Director : priorisation pas/portes/reload, ducking des sons non critiques.',
+ 'Fight Timeline : suivi picks/trades, alerte “no-trade 3 s” et indicateurs de man-advantage.',
+ 'VOD Auto-Tag : marquage des pivots (retake tardif, dry peek, spike late) avec export chronologique.'
+ ]
+ },
+ {
+ title: 'Réactivité & couverture',
+ items: [
+ 'Overlay refresh jusqu’à 144 Hz sur preset Esports.',
+ 'Modules actifs phase-aware : 10 à 14 selon la carte et le mode.',
+ 'Temps de réaction moyen ~40–45 ms sur événements visibles.',
+ 'Focus HUD : masquage automatique des overlays non essentiels en fight.'
+ ]
+ },
+ {
+ title: 'PulseForge Lobby',
+ description: 'Options scrim & entraînement (tous joueurs sur PulseForge)',
+ items: [
+ 'Cosmétiques partagés : thèmes d’armes et kill-banners PulseForge visibles côté lobby.',
+ 'Lineup Sandbox : trajectoires stream-safe de flashes/smokes/molotovs et time-trial d’exec.',
+ 'Draft & Role Rules : rôles IGL/Entry/Anchor/Support et contraintes d’achat par round.',
+ 'Retake/Execute Scenario Runner : séquences scriptées avec scoreboard d’exécution.',
+ 'Ghost-Run & Pathing : fantômes de vos meilleures entrées/retakes, replays synchronisés.',
+ 'Caster Mode : HUD élargi (killfeed, economy), replays 8 s et marqueurs de manches.'
+ ]
+ },
+ {
+ title: 'Capacité multi-jeux',
+ description: 'Profil medium sur top 100 jeux',
+ items: [
+ '1080p : 100 % ≥30/60/90 FPS, 96 % ≥120 FPS, 86 % ≥144 FPS.',
+ '1440p : 100 % ≥30/60 FPS, 96 % ≥90 FPS, 75 % ≥120 FPS, 51 % ≥144 FPS.',
+ '4K : 100 % ≥30 FPS, 94 % ≥60 FPS, 52 % ≥90 FPS, 24 % ≥120 FPS, 14 % ≥144 FPS.'
+ ]
+ },
+ {
+ title: 'Compatibilité & prérequis',
+ items: [
+ '1080p : CPU min Core2 Duo E6550, GPU GTX 550 Ti / HD 6790, 4 Go RAM.',
+ '1440p : CPU min Pentium E5200, GPU GT 1030 / R7 450, 4 Go RAM.',
+ '4K : CPU min Core2 Duo E6700, GPU GTX 750 Ti / RX 550X, 8 Go RAM.',
+ 'Sur PulseForge : seules une connexion stable et notre client léger sont requis.'
+ ]
+ },
+ {
+ title: 'Pourquoi choisir notre build natif Valorant ?',
+ items: [
+ 'Intégration native synchronisée après chaque patch Riot.',
+ 'Suite overlays et coaching conforme tournois & stream-safe.',
+ 'Performances calibrées : 596/565/520 FPS moyens (1080p/1440p/4K).',
+ 'Support créatif : scrims, VOD analytics et thèmes d’équipe PulseForge Lobby.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'En parties classées/publiques, les overlays utilisent uniquement HUD, audio et minimap visibles. Aucune lecture mémoire, aucun aim-assist.',
+ 'Les modules sandbox (lineups projetées, caster mode complet) nécessitent PulseForge Lobby avec build partagé.',
+ 'Les overlays sont opt-in et s’ajustent automatiquement pour éviter la surcharge visuelle.'
+ ],
+ target_audience: 'Équipes Valorant, coachs Esports, créateurs',
+ highlight: 'Profil Esports 240–360 Hz stabilisé',
+ protection: 'Overlays fair-play stream-safe',
+ updates: 'Sync patch Riot & maintenance continue'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Très fluide', bottleneck: 'CPU (42%)' },
+ { playability: 'Très fluide', bottleneck: 'CPU (36%)' },
+ { playability: 'Très fluide', bottleneck: 'CPU (25%)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: 'Cible 240–360 Hz compétitif',
+ description: 'Le profil 1080p Esports maintient ~596 FPS, avec 577 FPS en Ultra. Idéal pour scrims, ranked et LAN virtuelles.',
+ note: 'Activez le Focus HUD pour lisser les 1% low en clutch.'
+ },
+ {
+ refreshAdvice: 'Netteté + fréquence 240 Hz',
+ description: 'Passer en 1440p conserve une fenêtre de 480–650 FPS. Ultra reste exploitable à ~547 FPS pour streaming détaillé.',
+ note: 'Parfait pour un rendu net sur les VOD et le co-stream.'
+ },
+ {
+ refreshAdvice: '4K à 200+ Hz',
+ description: 'En 4K Medium, la moyenne reste ~520 FPS avec réserve CPU. Ultra tourne autour de 471 FPS pour des showcases coach/stream.',
+ note: 'Utilisez ce preset pour les analyses spectateur et le contenu premium.'
+ }
+ ],
+ improvementTips: [
+ 'Utilisez le preset Esports et désactivez les post-FX superflus.',
+ 'Laissez PulseForge piloter le cap d’images (évitez les limites externes).',
+ 'Activez le Focus HUD pour masquer les modules non essentiels en fight.',
+ 'Si vous ciblez un 240 Hz parfait, réduisez l’anti-aliasing plutôt que la résolution.'
+ ],
+ advice: 'Option « CPU Boost » : +5 % → 598/508/687 FPS · +10 % → 602/512/692 FPS · +15 % → 609/518/701 FPS · +20 % → 620/527/713 FPS (requiert un nœud Thermal-Premium).',
+ augmentationSuite: {
+ modules: [
+ 'Eco & Buy Advisor : calcul du loss bonus et recommandations achat/drop.',
+ 'Execute Planner : plans par site avec tempo utilitaires et crossfires probables.',
+ 'Post-Plant Director : timer Spike, chemins de repost et zones d’interdiction.',
+ 'Retake Coach : séquence clear → trade → isolate avec alertes d’avantage numérique.',
+ 'Angle & Head-Height : repères de hauteur de tête et prompts anti ego-peek.',
+ 'Audio Spatial Director : priorisation pas/portes/reload, ducking automatique.',
+ 'Fight Timeline : suivi picks/trades et alertes no-trade 3 s.',
+ 'VOD Auto-Tag : marquage automatique des pivots et export chronologique.'
+ ],
+ notes: 'Overlays rafraîchis jusqu’à 144 Hz, calibrés sur les phases Valorant (defaults, executes, retakes).'
+ },
+ heroSynergy: [
+ {
+ preset: 'Esports',
+ coachingNotes: 'Timeline engage, rappels dash/satchel et alertes anti dry-peak.'
+ },
+ {
+ preset: 'Macro',
+ coachingNotes: 'Plans de smokes synchronisés, timers post-plant et rappel des re-smokes.'
+ },
+ {
+ preset: 'Recon',
+ coachingNotes: 'Séquençage drone/flash, line-ups et signal anti double-push.'
+ },
+ {
+ preset: 'Anchor',
+ coachingNotes: 'Alertes trap, rotations safe et monitoring économie adversaire.'
+ },
+ {
+ preset: 'Sniper Focus',
+ coachingNotes: 'Head-height map, glint minimisé et rappel reposition instant.'
+ },
+ {
+ preset: 'Support',
+ coachingNotes: 'Gestion drop utilitaires, callouts auto et focus anti-tilt HUD.'
+ }
+ ]
+ }
+ },
+ en: {
+ nativeAdvantages: [
+ {
+ icon: Code,
+ title: 'Native Valorant esports profile',
+ description: 'Stabilized 240–360 FPS with dedicated CPU↔GPU orchestration and fair-play overlays.'
+ },
+ {
+ icon: Zap,
+ title: 'Ultra-low latency pipeline',
+ description: '1080p/1440p/4K streaming with adaptive routing and automatic region failover.'
+ },
+ {
+ icon: Shield,
+ title: 'Certified fair-play suite',
+ description: 'HUD/audio/minimap overlays compliant with tournament rules—no injection, no intrusive assists.'
+ },
+ {
+ icon: Trophy,
+ title: 'Staff & scrim support',
+ description: 'PulseForge Lobby playbooks, VOD analytics, and coaching/casting assistance.'
+ }
+ ],
+ metrics: {
+ title: 'Calibrated performance for Valorant',
+ description:
+ 'PulseForge Esports reference profile (competitive preset). Valorant is heavily CPU-bound, so we hold 596 average FPS at 1080p with a 507 FPS observed low and 685 FPS peak. Stability remains high at 1440p and 4K thanks to CPU headroom.',
+ statCards: {
+ maxFps: 'Max observed FPS (1080p Medium)',
+ onePercentLow: 'Min observed (1% low proxy, 1080p Medium)',
+ inputLag: 'Average input lag'
+ },
+ allocationTitle: 'Dominant bottleneck (Medium profile)',
+ datacenterTitle: 'PulseForge cloud monitoring',
+ usage: {
+ cpu: 'CPU load',
+ gpu: 'GPU load',
+ ram: 'Memory used',
+ vram: 'VRAM used'
+ },
+ thermals: {
+ cpu: 'Cloud CPU temperature',
+ gpu: 'GPU temperature',
+ power: 'Power draw'
+ },
+ stabilityNote: 'Valorant stays CPU-limited: our profiles keep the needed headroom up to 4K.'
+ },
+ fpsTable: {
+ footnote: 'Internal Valorant benchmarks (competitive Medium profile across ranked and scrim maps).'
+ },
+ resolution: {
+ title: 'How to adjust resolution in the cloud',
+ description:
+ 'Our internal measurements reflect the real FPS margin when you change resolution from the PulseForge panel.',
+ windowLabel: 'Observed window',
+ footnote: 'Values captured on Valorant Medium/Ultra presets with overlays enabled.',
+ avgLabel: 'Average FPS'
+ },
+ experience: {
+ description: (productName: string, latency: number) =>
+ `${productName} runs entirely on our infrastructure: instant provisioning, adaptive network routing, and latency held around ${latency} ms.`,
+ bullets: [
+ 'Server-side overlays, presets, and updates—nothing to install locally.',
+ 'Instant 1080p/1440p/4K switching from the PulseForge panel while respecting the measured FPS window.',
+ 'Live ping/jitter/loss monitoring with automatic failover if a region becomes unstable.'
+ ],
+ profileSubtitle: 'Average measured at 1080p Medium',
+ lowLabel: 'Min observed 1080p Medium',
+ lowSubtitle: 'Recorded low window'
+ },
+ improvement: {
+ adviceTitle: 'CPU Boost option (host side)'
+ },
+ augmentation: {
+ description: 'Phase-aware Valorant modules covering economy, executes, retakes, and stream-safe coaching.'
+ },
+ hero: {
+ badge: 'AGENT / ROLE PROFILES',
+ title: 'Dedicated optimizations',
+ description: 'Each preset covers a Valorant role (Duelist, Controller, Initiator, Sentinel, Flex).',
+ headers: {
+ hero: 'Role',
+ overlay: 'Overlay focus',
+ clarity: 'Visual clarity',
+ preset: 'Recommended preset',
+ notes: 'Coaching notes'
+ },
+ fallbackDescription: (game: string) => `Role-specific optimizations for ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `Optimized end to end for ${game} esports with fair-play overlays and staff support.`
+ },
+ product: {
+ description: 'Cloud-native Valorant instance tuned for 240+ Hz competitive play and tournament compliance.',
+ longDescription:
+ 'PulseForge Valorant pairs CPU-bound orchestration with our low-latency video pipeline to keep responsiveness extreme. Everything runs server-side: overlays, Focus HUD, audio presets, and Riot patch-sync updates.',
+ variants: {
+ 'pulseforge-valorant': {
+ name: 'PulseForge Valorant Esports',
+ usage: 'Valorant esports instance',
+ description: 'Cloud Valorant build tailored for competition and 240+ Hz streaming.',
+ use_cases: [
+ 'Pro scrims and Immortal/Radiant ranked play',
+ 'Coaching staff and tactical review',
+ 'Esports stream production & watch parties',
+ 'Line-up practice with PulseForge Lobby',
+ 'VOD sessions and utility sandbox'
+ ],
+ features: [
+ 'Phase-aware modular overlays',
+ 'Post-match analysis & exports (timeline, economy)',
+ 'Macro coach (tempo, rotations, retakes)',
+ 'Stream-safe team themes (PulseForge Lobby)',
+ 'Multi-input integration (keyboard/mouse, controller)',
+ 'Continuous updates & shared team profiles'
+ ],
+ featureHighlights: [
+ 'Ranked / tournaments—100% fair-play overlays based on HUD, audio, and minimap',
+ 'PulseForge Lobby—synchronized scrims, lineup sandbox, and built-in caster mode'
+ ],
+ featureGroups: [
+ {
+ title: 'Real-time tactical modules',
+ description: 'Contextual suite for Valorant phases',
+ items: [
+ 'Eco & Buy Advisor: computes loss bonus, recommends full/half/force, and reminds drops.',
+ 'Execute Planner: site blueprints with flash/smoke/plant tempo and expected crossfires.',
+ 'Post-Plant Director: precise spike timer, safe re-peek paths, and denial zones.',
+ 'Retake Coach: clear → trade → isolate sequence with numeric advantage alerts from the killfeed.',
+ 'Angle & Head-Height: head-height references and “don’t ego-peek” prompts.',
+ 'Audio Spatial Director: prioritizes footsteps/doors/reloads with automatic ducking.',
+ 'Fight Timeline: tracks picks/trades, flags “no-trade 3 s”, and shows man-advantage.',
+ 'VOD Auto-Tag: marks pivots (late retake, dry peek, late spike) with chronological export.'
+ ]
+ },
+ {
+ title: 'Reactivity & coverage',
+ items: [
+ 'Overlay refresh up to 144 Hz on the Esports preset.',
+ 'Phase-aware modules: 10 to 14 active depending on map and mode.',
+ 'Average reaction time ~40–45 ms on visible events.',
+ 'Focus HUD: automatically hides non-essential overlays in fights.'
+ ]
+ },
+ {
+ title: 'PulseForge Lobby',
+ description: 'Scrim & training options (all players on PulseForge)',
+ items: [
+ 'Shared cosmetics: PulseForge weapon themes and kill banners visible within the lobby.',
+ 'Lineup Sandbox: stream-safe trajectories for flashes/smokes/molotovs plus execute time-trials.',
+ 'Draft & Role Rules: enforce IGL/Entry/Anchor/Support roles and round-based buy constraints.',
+ 'Retake/Execute Scenario Runner: scripted sequences with execution scoreboards.',
+ 'Ghost-Run & Pathing: ghosts of your best entries/retakes with synchronized replays.',
+ 'Caster Mode: expanded HUD (killfeed, economy), 8 s instant replays, and round markers.'
+ ]
+ },
+ {
+ title: 'Multigame capacity',
+ description: 'Medium profile across top 100 titles',
+ items: [
+ '1080p: 100% ≥30/60/90 FPS, 96% ≥120 FPS, 86% ≥144 FPS.',
+ '1440p: 100% ≥30/60 FPS, 96% ≥90 FPS, 75% ≥120 FPS, 51% ≥144 FPS.',
+ '4K: 100% ≥30 FPS, 94% ≥60 FPS, 52% ≥90 FPS, 24% ≥120 FPS, 14% ≥144 FPS.'
+ ]
+ },
+ {
+ title: 'Compatibility & requirements',
+ items: [
+ '1080p: Min CPU Core2 Duo E6550, GPU GTX 550 Ti / HD 6790, 4 GB RAM.',
+ '1440p: Min CPU Pentium E5200, GPU GT 1030 / R7 450, 4 GB RAM.',
+ '4K: Min CPU Core2 Duo E6700, GPU GTX 750 Ti / RX 550X, 8 GB RAM.',
+ 'On PulseForge only a stable connection and our lightweight client are required.'
+ ]
+ },
+ {
+ title: 'Why choose our native Valorant build?',
+ items: [
+ 'Native integration synchronized after every Riot patch.',
+ 'Fair-play overlays and coaching compliant with tournament and streaming rules.',
+ 'Calibrated performance: 596/565/520 average FPS (1080p/1440p/4K).',
+ 'Creative support: scrims, VOD analytics, and PulseForge Lobby team themes.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'In public/ranked games overlays rely solely on visible HUD, audio, and minimap data. No memory reading, no aim assist.',
+ 'Sandbox modules (projected lineups, full caster mode) require PulseForge Lobby with a shared build.',
+ 'Overlays are opt-in and auto-adjust to prevent visual overload.'
+ ],
+ target_audience: 'Valorant teams, esports coaches, creators',
+ highlight: 'Stabilized 240–360 Hz esports profile',
+ protection: 'Stream-safe fair-play overlays',
+ updates: 'Riot patch sync and continuous maintenance'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Very smooth', bottleneck: 'CPU (42%)' },
+ { playability: 'Very smooth', bottleneck: 'CPU (36%)' },
+ { playability: 'Very smooth', bottleneck: 'CPU (25%)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: '240–360 Hz competitive target',
+ description: 'The 1080p Esports profile holds ~596 FPS with Ultra around 577 FPS—ideal for scrims, ranked, and virtual LANs.',
+ note: 'Enable Focus HUD to smooth 1% lows during clutch moments.'
+ },
+ {
+ refreshAdvice: 'Sharpness + 240 Hz frequency',
+ description: 'Switching to 1440p keeps a 480–650 FPS window. Ultra stays usable near 547 FPS for detailed streaming.',
+ note: 'Perfect for high-definition VODs and co-streams.'
+ },
+ {
+ refreshAdvice: '4K at 200+ Hz',
+ description: 'At 4K Medium the average stays near 520 FPS with CPU headroom. Ultra hovers around 471 FPS for showcase/coach streams.',
+ note: 'Use this preset for spectator analysis and premium content.'
+ }
+ ],
+ improvementTips: [
+ 'Use the Esports preset and disable non-essential post-FX.',
+ 'Let PulseForge manage the frame cap—avoid external limits.',
+ 'Enable Focus HUD to hide non-critical modules during fights.',
+ 'If you need a flawless 240 Hz, lower anti-aliasing instead of resolution.'
+ ],
+ advice: 'CPU Boost option: +5% → 598/508/687 FPS · +10% → 602/512/692 FPS · +15% → 609/518/701 FPS · +20% → 620/527/713 FPS (requires a Thermal-Premium node).',
+ augmentationSuite: {
+ modules: [
+ 'Eco & Buy Advisor: computes loss bonus and drop recommendations.',
+ 'Execute Planner: site plans with utility tempo and expected crossfires.',
+ 'Post-Plant Director: spike timer, repost paths, and denial zones.',
+ 'Retake Coach: clear → trade → isolate sequence with advantage alerts.',
+ 'Angle & Head-Height: head-height markers and “don’t ego-peek” prompts.',
+ 'Audio Spatial Director: prioritizes footsteps/doors/reloads with auto ducking.',
+ 'Fight Timeline: tracks picks/trades and issues “no-trade 3 s” warnings.',
+ 'VOD Auto-Tag: automatically tags pivotal moments with timeline export.'
+ ],
+ notes: 'Overlays refresh up to 144 Hz and are tuned for Valorant phases (defaults, executes, retakes).'
+ },
+ heroSynergy: [
+ {
+ preset: 'Esports',
+ coachingNotes: 'Engage timeline, dash/satchel reminders, and anti dry-peek alerts.'
+ },
+ {
+ preset: 'Macro',
+ coachingNotes: 'Synchronized smoke plans, post-plant timers, and re-smoke reminders.'
+ },
+ {
+ preset: 'Recon',
+ coachingNotes: 'Drone/flash sequencing, lineups, and anti double-push signals.'
+ },
+ {
+ preset: 'Anchor',
+ coachingNotes: 'Trap alerts, safe rotations, and opponent economy monitoring.'
+ },
+ {
+ preset: 'Sniper Focus',
+ coachingNotes: 'Head-height mapping, minimized glint, and instant reposition cues.'
+ },
+ {
+ preset: 'Support',
+ coachingNotes: 'Utility drop management, auto callouts, and anti-tilt HUD focus.'
+ }
+ ]
+ }
+ },
+ et: {
+ nativeAdvantages: [
+ {
+ icon: Code,
+ title: 'Valoranti natiivne Esports-profiil',
+ description: '240–360 FPS stabiliseeritud CPU↔GPU orkestreerimise ja fair-play overlaydega.'
+ },
+ {
+ icon: Zap,
+ title: 'Ülimadala latentsusega toru',
+ description: '1080p/1440p/4K voog adaptatiivse marsruudi ja automaatse regiooni vahetusega.'
+ },
+ {
+ icon: Shield,
+ title: 'Fair-play kinnitatud suite',
+ description: 'HUDi/heli/minikaardi overlayd vastavad turniirireeglitele – ilma süstide ja abita.'
+ },
+ {
+ icon: Trophy,
+ title: 'Tiimi ja scrimi tugi',
+ description: 'PulseForge Lobby plaanid, VOD-analüütika ja coach/casteri abi.'
+ }
+ ],
+ metrics: {
+ title: 'Kalibreeritud jõudlus Valoranti jaoks',
+ description:
+ 'PulseForge Esportsi võrdlusprofiil (võistluspreset). Valorant sõltub tugevalt CPU-st, seega hoiame 596 FPS keskmiselt 1080p juures, 507 FPS madalvahemiku ja 685 FPS tipuga. 1440p ja 4K säilitavad kõrge stabiilsuse tänu CPU varule.',
+ statCards: {
+ maxFps: 'Maksimaalne täheldatud FPS (1080p Medium)',
+ onePercentLow: 'Minimaalne täheldatud (1% low proxy, 1080p Medium)',
+ inputLag: 'Keskmine sisendviivitus'
+ },
+ allocationTitle: 'Domineeriv pudelkits (Medium-profiil)',
+ datacenterTitle: 'PulseForge’i pilvemonitoring',
+ usage: {
+ cpu: 'CPU koormus',
+ gpu: 'GPU koormus',
+ ram: 'RAM kasutus',
+ vram: 'VRAM kasutus'
+ },
+ thermals: {
+ cpu: 'Pilve CPU temperatuur',
+ gpu: 'GPU temperatuur',
+ power: 'Võimsustarve'
+ },
+ stabilityNote: 'Valorant jääb CPU-piiratuks: meie profiilid hoiavad varu ka 4K juures.'
+ },
+ fpsTable: {
+ footnote: 'Valoranti sisemised benchmarkid (Medium võistluspreset, ranked- ja scrim-kaardid).'
+ },
+ resolution: {
+ title: 'Kuidas pilves resolutsiooni reguleerida',
+ description:
+ 'Meie mõõtmised näitavad tegelikku FPS-varu, kui muudate PulseForge’i paneelist eraldusvõimet.',
+ windowLabel: 'Täheldatud vahemik',
+ footnote: 'Väärtused Valoranti Medium/Ultra presetidel koos overlaydega.',
+ avgLabel: 'Keskmine FPS'
+ },
+ experience: {
+ description: (productName: string, latency: number) =>
+ `${productName} töötab täielikult meie infrastruktuuril: kohene provisioning, adaptatiivne võrk ja latentsus hoitakse umbes ${latency} ms juures.`,
+ bullets: [
+ 'Overlayd, presetid ja uuendused rakenduvad serveripoolselt – kohalikke installatsioone pole.',
+ 'Lülitu 1080p/1440p/4K vahel hetkega, järgides mõõdetud FPS-vahemikku.',
+ 'Otsemonitooring ping/jitter/kao üle, automaatne regiooni vahetus ebastabiilsuse korral.'
+ ],
+ profileSubtitle: 'Keskmine mõõdetud 1080p Medium juures',
+ lowLabel: 'Min täheldatud 1080p Medium',
+ lowSubtitle: 'Madal aken'
+ },
+ improvement: {
+ adviceTitle: '„CPU Boost” valik (hosti poolel)'
+ },
+ augmentation: {
+ description: 'Valoranti faasiteadlikud moodulid: majandus, executes, retake’id ja stream-safe coaching.'
+ },
+ hero: {
+ badge: 'AGENDI / ROLLI PROFIILID',
+ title: 'Pühendatud optimeerimised',
+ description: 'Iga preset katab Valoranti rolli (Duelist, Controller, Initiator, Sentinel, Flex).',
+ headers: {
+ hero: 'Roll',
+ overlay: 'Overlay fookus',
+ clarity: 'Visuaalne selgus',
+ preset: 'Soovituslik preset',
+ notes: 'Coaching’u märkused'
+ },
+ fallbackDescription: (game: string) => `Rollipõhised optimeerimised mängule ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `${game} on optimeeritud otsast lõpuni fair-play overlayde ja tiimitaseme toega.`
+ },
+ product: {
+ description: 'Pilvepõhine Valoranti instants, häälestatud 240+ Hz võistlusmänguks ja turniirinõuetele.',
+ longDescription:
+ 'PulseForge Valorant ühendab CPU-keskse orkestreerimise ja madala latentsusega videotoru, et hoida reageerimisvõime äärmuslik. Kõik töötab serveripoolselt: overlayd, Focus HUD, audiopresetid ja Riot patchide järgsed värskendused.',
+ variants: {
+ 'pulseforge-valorant': {
+ name: 'PulseForge Valorant Esports',
+ usage: 'Valoranti esports-instants',
+ description: 'Pilvebuild, mis on loodud võistlusmänguks ja 240+ Hz voogedastuseks.',
+ use_cases: [
+ 'Pro-scrimid ja Immortal/Radiant ranked',
+ 'Treeneritiim ja taktikaline analüüs',
+ 'Esports-voogude produktsioon ja watch party’d',
+ 'Lineup’i harjutamine PulseForge Lobbyga',
+ 'VOD-sessioonid ja utiliidi-sandbox'
+ ],
+ features: [
+ 'Faasiteadlikud modulaarsed overlayd',
+ 'Matšijärgne analüüs ja ekspordid (timeline, economy)',
+ 'Makrocoach (tempo, rotatsioonid, retake’id)',
+ 'Stream-safe tiimiteemad (PulseForge Lobby)',
+ 'Multi-input tugi (klaviatuur/hiir, kontroller)',
+ 'Pidevad uuendused ja jagatud tiimiprofiilid'
+ ],
+ featureHighlights: [
+ 'Ranked / turniirid – 100% fair-play overlayd HUDi, heli ja minikaardi põhjal',
+ 'PulseForge Lobby – sünkroonitud scrimid, lineup-sandbox ja sisse-ehitatud caster mode'
+ ],
+ featureGroups: [
+ {
+ title: 'Reaalajas taktikamoodulid',
+ description: 'Kontekstuaalne suite Valoranti faaside jaoks',
+ items: [
+ 'Eco & Buy Advisor: loss-bonuse arvutus, full/half/force soovitused ja drop-meeldetuletused.',
+ 'Execute Planner: saidiplanid flashide/suitse/molyde jaoks ja oodatavate crossfire’idega.',
+ 'Post-Plant Director: täpne spike-timer, turvalised repost-teed ja keelu tsoonid.',
+ 'Retake Coach: clear → trade → isolate järjestus killfeed’i arvulise eelise hoiatustega.',
+ 'Angle & Head-Height: pea kõrguse markerid ja “don’t ego-peek” vihjed.',
+ 'Audio Spatial Director: sammude/uste/reload’i prioritiseerimine automaatse ducking’uga.',
+ 'Fight Timeline: jälgib picke/trade’e, annab “no-trade 3 s” hoiatused ja eelisnäitajad.',
+ 'VOD Auto-Tag: märgib pöördepunktid (hiline retake, dry peek, hiline spike) koos ekspordiga.'
+ ]
+ },
+ {
+ title: 'Reaktiivsus ja katvus',
+ items: [
+ 'Overlay värskendus kuni 144 Hz Esports-preseti peal.',
+ 'Faasiteadlikke mooduleid on 10–14 sõltuvalt kaardist ja režiimist.',
+ 'Keskmine reaktsiooniaeg ~40–45 ms nähtavatel sündmustel.',
+ 'Focus HUD peidab võitluses mitteolulised overlayd automaatselt.'
+ ]
+ },
+ {
+ title: 'PulseForge Lobby',
+ description: 'Scrimi ja treeningu valikud (kõik mängijad PulseForge’il)',
+ items: [
+ 'Jagatud kosmeetika: PulseForge’i relvateemad ja kill-bännerid lobby’s nähtavad.',
+ 'Lineup Sandbox: stream-safe trajektoorid flashide/suitse/molyde jaoks ja execute time-trialid.',
+ 'Draft & Role Rules: kehtestab IGL/Entry/Anchor/Support rollid ja ostureeglid.',
+ 'Retake/Execute Scenario Runner: skriptitud seeriad täitmise scoreboardiga.',
+ 'Ghost-Run & Pathing: parimate sisenemiste/retake’ide kummitused ja sünkroonitud kordused.',
+ 'Caster Mode: laiendatud HUD (killfeed, economy), 8 s kohesed kordused ja roundi markerid.'
+ ]
+ },
+ {
+ title: 'Mitmemänguline võimekus',
+ description: 'Medium-profiil top 100 mängu lõikes',
+ items: [
+ '1080p: 100% ≥30/60/90 FPS, 96% ≥120 FPS, 86% ≥144 FPS.',
+ '1440p: 100% ≥30/60 FPS, 96% ≥90 FPS, 75% ≥120 FPS, 51% ≥144 FPS.',
+ '4K: 100% ≥30 FPS, 94% ≥60 FPS, 52% ≥90 FPS, 24% ≥120 FPS, 14% ≥144 FPS.'
+ ]
+ },
+ {
+ title: 'Ühilduvus ja nõuded',
+ items: [
+ '1080p: min CPU Core2 Duo E6550, GPU GTX 550 Ti / HD 6790, 4 GB RAM.',
+ '1440p: min CPU Pentium E5200, GPU GT 1030 / R7 450, 4 GB RAM.',
+ '4K: min CPU Core2 Duo E6700, GPU GTX 750 Ti / RX 550X, 8 GB RAM.',
+ 'PulseForge’is on vaja vaid stabiilset ühendust ja meie kerget klienti.'
+ ]
+ },
+ {
+ title: 'Miks valida meie Valoranti natiivne build?',
+ items: [
+ 'Natiivne integratsioon sünkroonis iga Riot patchiga.',
+ 'Fair-play overlayd ja coaching turniiri- ning striiminõuetele vastav.',
+ 'Kalibreeritud jõudlus: 596/565/520 FPS keskmiselt (1080p/1440p/4K).',
+ 'Loominguline tugi: scrimid, VOD-analüütika ja PulseForge Lobby tiimiteemad.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'Avalikes/ranked-mängudes tuginevad overlayd ainult nähtavale HUDile, helile ja minikaardile. Mälulugemist ega aim-abi pole.',
+ 'Sandbox-moodulid (joonistatud lineupid, täismahus caster mode) nõuavad PulseForge Lobby ühise buildiga.',
+ 'Overlayd on opt-in ja kohanduvad automaatselt, et vältida visuaalset üleküllust.'
+ ],
+ target_audience: 'Valoranti tiimid, esports-treenerid, loojad',
+ highlight: 'Stabiliseeritud 240–360 Hz Esports-profiil',
+ protection: 'Stream-safe fair-play overlayd',
+ updates: 'Riot patchide sünkroon ja pidev hooldus'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Väga sujuv', bottleneck: 'CPU (42%)' },
+ { playability: 'Väga sujuv', bottleneck: 'CPU (36%)' },
+ { playability: 'Väga sujuv', bottleneck: 'CPU (25%)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: '240–360 Hz võistlussiht',
+ description: '1080p Esports-profiil hoiab ~596 FPS, Ultra ~577 FPS – ideaalne scrimideks ja ranked’iks.',
+ note: 'Focus HUD aitab clutch’ides 1% madalaid siluda.'
+ },
+ {
+ refreshAdvice: 'Teravus + 240 Hz',
+ description: '1440p peale liikumine jätab 480–650 FPS akna. Ultra püsib ~547 FPS ümber detailseks voogedastuseks.',
+ note: 'Sobib ideaalselt HD-VODideks ja co-streamideks.'
+ },
+ {
+ refreshAdvice: '4K üle 200 Hz',
+ description: '4K Medium hoiab keskmiselt ~520 FPS CPU-varuga. Ultra on ~471 FPS coach/stream-sisu jaoks.',
+ note: 'Kasuta seda presetit vaatajapildi analüüsiks ja premium-sisuks.'
+ }
+ ],
+ improvementTips: [
+ 'Kasuta Esports-preseti ja lülita mittevajalikud post-FX-id välja.',
+ 'Lase PulseForge’il hallata FPS limiiti – väldi väliseid piirajaid.',
+ 'Aktiveeri Focus HUD, et peita võitluse ajal ebaolulised moodulid.',
+ 'Kui vajad täiuslikku 240 Hz kogemust, vähenda pigem anti-aliasingut kui resolutsiooni.'
+ ],
+ advice: '„CPU Boost” valik: +5% → 598/508/687 FPS · +10% → 602/512/692 FPS · +15% → 609/518/701 FPS · +20% → 620/527/713 FPS (vajab Thermal-Premium sõlme).',
+ augmentationSuite: {
+ modules: [
+ 'Eco & Buy Advisor: loss-bonuse arvutus ja drop-soovitused.',
+ 'Execute Planner: saidiplanid utiliidi tempoga ja eeldatavate risttuledega.',
+ 'Post-Plant Director: spike’i taimer, repost-teed ja keelutsoonid.',
+ 'Retake Coach: clear → trade → isolate järjestus eelisehoiatustega.',
+ 'Angle & Head-Height: pea kõrguse markerid ja “don’t ego-peek” vihjed.',
+ 'Audio Spatial Director: sammude/uste/reload’i prioritiseerimine automaatse ducking’uga.',
+ 'Fight Timeline: jälgib picke/trade’e ja annab “no-trade 3 s” märguande.',
+ 'VOD Auto-Tag: märgib pöördepunktid automaatselt ja ekspordib ajajoone.'
+ ],
+ notes: 'Overlayd värskenduvad kuni 144 Hz ja on häälestatud Valoranti faasidele (defaults, executes, retake’id).'
+ },
+ heroSynergy: [
+ {
+ preset: 'Esports',
+ coachingNotes: 'Engage’i ajajoon, dash/satchel meeldetuletused ja anti dry-peak hoiatused.'
+ },
+ {
+ preset: 'Macro',
+ coachingNotes: 'Sünkroonitud suitsuplaanid, post-plant taimerid ja re-smoke märguanded.'
+ },
+ {
+ preset: 'Recon',
+ coachingNotes: 'Droon/flash’i järjestused, lineupid ja anti double-push signaalid.'
+ },
+ {
+ preset: 'Anchor',
+ coachingNotes: 'Trap’i hoiatused, turvalised rotatsioonid ja vastase majanduse jälgimine.'
+ },
+ {
+ preset: 'Sniper Focus',
+ coachingNotes: 'Pea kõrguse kaardistus, vähendatud glint ja kohene repositsioon.'
+ },
+ {
+ preset: 'Support',
+ coachingNotes: 'Utiliitide jagamise haldus, automaatsed callout’id ja anti-tilt HUD fookus.'
+ }
+ ]
+ }
+ }
}
}
diff --git a/data/gaming-products.json b/data/gaming-products.json
index 7084ce9..66827eb 100644
--- a/data/gaming-products.json
+++ b/data/gaming-products.json
@@ -699,60 +699,344 @@
{
"id": "gaming-valorant",
"slug": "gaming-valorant",
- "name": "Valorant",
+ "name": "Valorant PulseForge",
"game": "Valorant",
"category": "gaming",
"optimizationLevel": "native",
- "description": "Suite de cheat Valorant indétectée avec aimbot, ESP et skin changer",
- "longDescription": "Valorant Oblivion est spécialement conçu pour contourner Vanguard. Ce système offre un aimbot humanisé, ESP, skinchanger et triggerbot, le tout avec des mises à jour stealth pour rester indétectable.",
+ "description": "Instance cloud Valorant calibrée Esports avec overlays fair-play et coaching phase-aware.",
+ "longDescription": "PulseForge pour Valorant est un build 100 % natif hébergé sur notre cloud gaming. Pensé pour les équipes Esports et les créateurs, il vise des fréquences d’image extrêmes sur 1080p, 1440p et 4K grâce à une orchestration CPU-bound et à notre pipeline vidéo faible latence. Les overlays, presets et mises à jour sont pilotés côté serveur pour préserver le fair-play et la conformité tournoi.",
"status": "ACTIVE",
+ "technicalSpecs": {
+ "performanceMetrics": {
+ "avgFps": 596,
+ "minFps": 507,
+ "maxFps": 685,
+ "onePercentLow": 507,
+ "latency": 0.8,
+ "inputLag": 0.24,
+ "frameTime": 1.7,
+ "cpuUsage": 42,
+ "gpuUsage": 58,
+ "ramUsage": 14.8,
+ "vramUsage": 6.4,
+ "powerDraw": 330,
+ "thermalCpu": 61,
+ "thermalGpu": 58
+ },
+ "augmentationSuite": {
+ "awarenessIndex": 97,
+ "overlayRefresh": 144,
+ "adaptiveCoaching": 94,
+ "reactionTimeMs": 42,
+ "moduleCoverage": 14,
+ "tacticalFocus": 95,
+ "modules": [
+ "Eco & Buy Advisor : calcul du loss bonus et recommandations achat/drop.",
+ "Execute Planner : plans par site avec tempo utilitaires et crossfires probables.",
+ "Post-Plant Director : timer Spike, chemins de repost et zones d'interdiction.",
+ "Retake Coach : séquence clear → trade → isolate avec alertes d'avantage numérique.",
+ "Angle & Head-Height : repères de hauteur de tête et prompts anti ego-peek.",
+ "Audio Spatial Director : priorisation pas/portes/reload, ducking automatique.",
+ "Fight Timeline : suivi picks/trades et alertes no-trade 3 s.",
+ "VOD Auto-Tag : marquage automatique des pivots et export chronologique."
+ ],
+ "notes": "Overlays rafraîchis jusqu'à 144 Hz, calibrés sur les phases Valorant (defaults, executes, retakes)."
+ },
+ "fpsByResolution": [
+ {
+ "resolution": "1920 × 1080",
+ "avgFps": 596,
+ "minFps": 507,
+ "maxFps": 685,
+ "playability": "Très fluide",
+ "bottleneck": "CPU (42%)"
+ },
+ {
+ "resolution": "2560 × 1440",
+ "avgFps": 565,
+ "minFps": 480,
+ "maxFps": 650,
+ "playability": "Très fluide",
+ "bottleneck": "CPU (36%)"
+ },
+ {
+ "resolution": "3840 × 2160",
+ "avgFps": 520,
+ "minFps": 442,
+ "maxFps": 598,
+ "playability": "Très fluide",
+ "bottleneck": "CPU (25%)"
+ }
+ ],
+ "qualityBreakdown": [
+ {
+ "resolution": "1920 × 1080",
+ "presets": {
+ "low": 701,
+ "medium": 596,
+ "high": 586,
+ "ultra": 577
+ }
+ },
+ {
+ "resolution": "2560 × 1440",
+ "presets": {
+ "low": 665,
+ "medium": 565,
+ "high": 556,
+ "ultra": 547
+ }
+ },
+ {
+ "resolution": "3840 × 2160",
+ "presets": {
+ "low": 617,
+ "medium": 520,
+ "high": 495,
+ "ultra": 471
+ }
+ }
+ ],
+ "resolutionGuidance": [
+ {
+ "resolution": "1920 × 1080",
+ "avgFps": 596,
+ "fpsWindow": "507 – 685 FPS",
+ "refreshAdvice": "Cible 240–360 Hz compétitif",
+ "description": "Le profil 1080p Esports maintient ~596 FPS, avec 577 FPS en Ultra. Idéal pour scrims, ranked et LAN virtuelles.",
+ "note": "Activez le Focus HUD pour lisser les 1% low en clutch."
+ },
+ {
+ "resolution": "2560 × 1440",
+ "avgFps": 565,
+ "fpsWindow": "480 – 650 FPS",
+ "refreshAdvice": "Netteté + fréquence 240 Hz",
+ "description": "Passer en 1440p conserve une fenêtre de 480–650 FPS. Ultra reste exploitable à ~547 FPS pour streaming détaillé.",
+ "note": "Parfait pour un rendu net sur les VOD et le co-stream."
+ },
+ {
+ "resolution": "3840 × 2160",
+ "avgFps": 520,
+ "fpsWindow": "442 – 598 FPS",
+ "refreshAdvice": "4K à 200+ Hz",
+ "description": "En 4K Medium, la moyenne reste ~520 FPS avec réserve CPU. Ultra tourne autour de 471 FPS pour des showcases coach/stream.",
+ "note": "Utilisez ce preset pour les analyses spectateur et le contenu premium."
+ }
+ ],
+ "improvementTips": [
+ "Utilisez le preset Esports et désactivez les post-FX superflus.",
+ "Laissez PulseForge piloter le cap d'images (évitez les limites externes).",
+ "Activez le Focus HUD pour masquer les modules non essentiels en fight.",
+ "Si vous ciblez un 240 Hz parfait, réduisez l'anti-aliasing plutôt que la résolution."
+ ],
+ "advice": "Option « CPU Boost » : +5 % → 598/508/687 FPS · +10 % → 602/512/692 FPS · +15 % → 609/518/701 FPS · +20 % → 620/527/713 FPS (requiert un nœud Thermal-Premium).",
+ "heroSynergy": [
+ {
+ "hero": "Duelist (Entry)",
+ "overlayFocus": 97,
+ "clarityBoost": 94,
+ "preset": "Esports",
+ "coachingNotes": "Timeline engage, rappels dash/satchel et alertes anti dry-peak."
+ },
+ {
+ "hero": "Controller",
+ "overlayFocus": 94,
+ "clarityBoost": 91,
+ "preset": "Macro",
+ "coachingNotes": "Plans de smokes synchronisés, timers post-plant et rappel des re-smokes."
+ },
+ {
+ "hero": "Initiator",
+ "overlayFocus": 95,
+ "clarityBoost": 92,
+ "preset": "Recon",
+ "coachingNotes": "Séquençage drone/flash, line-ups et signal anti double-push."
+ },
+ {
+ "hero": "Sentinel",
+ "overlayFocus": 92,
+ "clarityBoost": 90,
+ "preset": "Anchor",
+ "coachingNotes": "Alertes trap, rotations safe et monitoring économie adversaire."
+ },
+ {
+ "hero": "Operator / Sniper",
+ "overlayFocus": 96,
+ "clarityBoost": 95,
+ "preset": "Sniper Focus",
+ "coachingNotes": "Head-height map, glint minimisé et rappel reposition instant."
+ },
+ {
+ "hero": "Flex / Support",
+ "overlayFocus": 93,
+ "clarityBoost": 90,
+ "preset": "Support",
+ "coachingNotes": "Gestion drop utilitaires, callouts auto et focus anti-tilt HUD."
+ }
+ ],
+ "networkStats": {
+ "serverLocations": 22,
+ "avgPing": 14,
+ "maxBandwidth": 950,
+ "packetLoss": 0.1,
+ "jitter": 2.4,
+ "ddosProtection": true,
+ "encryption": "TLS 1.3 + SRTP"
+ },
+ "securityMetrics": {
+ "detectionRate": 0,
+ "banRate": 0.05,
+ "uptimePercentage": 99.99,
+ "avgResponseTime": 5,
+ "incidentsLastMonth": 0,
+ "securityUpdatesPerWeek": 6,
+ "encryptionLevel": "AES-256",
+ "obfuscationLayers": 4,
+ "antiDebug": true,
+ "antiVM": true,
+ "kernelProtection": true
+ },
+ "updateHistory": {
+ "totalUpdates": 172,
+ "lastUpdateDate": "2025-02-24",
+ "avgUpdatesPerMonth": 6.2,
+ "criticalPatches": 8,
+ "securityPatches": 48,
+ "featureUpdates": 68,
+ "bugFixes": 48
+ },
+ "userStats": {
+ "totalUsers": 7120,
+ "activeUsersLast30Days": 5890,
+ "avgSessionDuration": 2.9,
+ "avgGamesPerDay": 7.4,
+ "satisfactionScore": 4.8,
+ "recommendationRate": 93
+ }
+ },
"variants": [
{
- "id": "oblivion",
- "name": "Oblivion",
- "tier": "enterprise",
- "gpu": "RTX 3080 Ti",
- "ram": "32 GB DDR5",
- "cpu": "AMD Ryzen 9 5950X",
- "usage": "Suite indétectée",
- "description": "Suite de cheat Valorant indétectée avec aimbot, ESP et skin changer",
+ "id": "pulseforge-valorant",
+ "name": "PulseForge Valorant Esports",
+ "tier": "premium",
+ "gpu": "RTX 4080",
+ "ram": "96 GB DDR5",
+ "cpu": "Intel i9-14900KS",
+ "storage": "1TB NVMe Gen4",
+ "motherboard": "ASUS ROG Strix Z790-E",
+ "psu": "1000W 80+ Platinum",
+ "cooling": "360mm AIO Liquid",
+ "usage": "Instance cloud Valorant Esports",
+ "description": "Build Valorant cloud native calibrée pour la compétition et le streaming 240+ Hz.",
"use_cases": [
- "Classement Radiant",
- "Avantage compétitif",
- "Amélioration de skill",
- "Boost de compte",
- "Aperçu des skins"
+ "Scrims pro et ranked Immortal/Radiant",
+ "Coaching staff et review tactique",
+ "Production stream Esports & watch parties",
+ "Line-up practice PulseForge Lobby",
+ "Sessions VOD & sandbox utilitaires"
],
"features": [
- "Aimbot humanisé",
- "ESP joueurs",
- "ESP capacités",
- "Skinchanger toutes armes",
- "Triggerbot",
- "Équipe support élite",
- "Système de mise à jour furtif"
+ "Overlays modulaires phase-aware",
+ "Analyse post-match & export (timeline, economy)",
+ "Coach macro (tempo, rotations, retakes)",
+ "Thèmes d’équipe stream-safe (PulseForge Lobby)",
+ "Intégration multi-input (clavier/souris, manette)",
+ "Mises à jour continues & profils partagés d’équipe"
+ ],
+ "featureHighlights": [
+ "Ranked / tournois — overlays 100 % fair-play basés sur HUD, audio et minimap",
+ "PulseForge Lobby — scrims synchronisés, lineup sandbox et caster mode intégré"
],
- "target_audience": "Joueurs compétitifs Valorant",
- "highlight": "Contourne l'anti-cheat Vanguard",
- "protection": "Vanguard bypass",
- "updates": "Stealth updates",
+ "featureGroups": [
+ {
+ "title": "Modules tactiques en temps réel",
+ "description": "Suite contextuelle pour les phases Valorant",
+ "items": [
+ "Eco & Buy Advisor : calcul du loss bonus, recommandations full/half/force et rappel drop.",
+ "Execute Planner : cartes-plans par site avec tempo flash/smoke/plant et crossfires probables.",
+ "Post-Plant Director : timer Spike précis, chemins de repost safe et zones d’interdiction.",
+ "Retake Coach : séquence clear → trade → isolate avec alerte avantage numérique (killfeed).",
+ "Angle & Head-Height : repères de hauteur de tête et prompts “don’t ego-peek”.",
+ "Audio Spatial Director : priorisation pas/portes/reload, ducking des sons non critiques.",
+ "Fight Timeline : suivi picks/trades, alerte “no-trade 3 s” et indicateurs de man-advantage.",
+ "VOD Auto-Tag : marquage des pivots (retake tardif, dry peek, spike late) avec export chronologique."
+ ]
+ },
+ {
+ "title": "Réactivité & couverture",
+ "items": [
+ "Overlay refresh jusqu’à 144 Hz sur preset Esports.",
+ "Modules actifs phase-aware : 10 à 14 selon la carte et le mode.",
+ "Temps de réaction moyen ~40–45 ms sur événements visibles.",
+ "Focus HUD : masquage automatique des overlays non essentiels en fight."
+ ]
+ },
+ {
+ "title": "PulseForge Lobby",
+ "description": "Options scrim & entraînement (tous joueurs sur PulseForge)",
+ "items": [
+ "Cosmétiques partagés : thèmes d’armes et kill-banners PulseForge visibles côté lobby.",
+ "Lineup Sandbox : trajectoires stream-safe de flashes/smokes/molotovs et time-trial d’exec.",
+ "Draft & Role Rules : rôles IGL/Entry/Anchor/Support et contraintes d’achat par round.",
+ "Retake/Execute Scenario Runner : séquences scriptées avec scoreboard d’exécution.",
+ "Ghost-Run & Pathing : fantômes de vos meilleures entrées/retakes, replays synchronisés.",
+ "Caster Mode : HUD élargi (killfeed, economy), replays 8 s et marqueurs de manches."
+ ]
+ },
+ {
+ "title": "Capacité multi-jeux",
+ "description": "Profil medium sur top 100 jeux",
+ "items": [
+ "1080p : 100 % ≥30/60/90 FPS, 96 % ≥120 FPS, 86 % ≥144 FPS.",
+ "1440p : 100 % ≥30/60 FPS, 96 % ≥90 FPS, 75 % ≥120 FPS, 51 % ≥144 FPS.",
+ "4K : 100 % ≥30 FPS, 94 % ≥60 FPS, 52 % ≥90 FPS, 24 % ≥120 FPS, 14 % ≥144 FPS."
+ ]
+ },
+ {
+ "title": "Compatibilité & prérequis",
+ "items": [
+ "1080p : CPU min Core2 Duo E6550, GPU GTX 550 Ti / HD 6790, 4 Go RAM.",
+ "1440p : CPU min Pentium E5200, GPU GT 1030 / R7 450, 4 Go RAM.",
+ "4K : CPU min Core2 Duo E6700, GPU GTX 750 Ti / RX 550X, 8 Go RAM.",
+ "Sur PulseForge : seules une connexion stable et notre client léger sont requis."
+ ]
+ },
+ {
+ "title": "Pourquoi choisir notre build natif Valorant ?",
+ "items": [
+ "Intégration native synchronisée après chaque patch Riot.",
+ "Suite overlays et coaching conforme tournois & stream-safe.",
+ "Performances calibrées : 596/565/520 FPS moyens (1080p/1440p/4K).",
+ "Support créatif : scrims, VOD analytics et thèmes d’équipe PulseForge Lobby."
+ ]
+ }
+ ],
+ "implementationNotes": [
+ "En parties classées/publiques, les overlays utilisent uniquement HUD, audio et minimap visibles. Aucune lecture mémoire, aucun aim-assist.",
+ "Les modules sandbox (lineups projetées, caster mode complet) nécessitent PulseForge Lobby avec build partagé.",
+ "Les overlays sont opt-in et s’ajustent automatiquement pour éviter la surcharge visuelle."
+ ],
+ "target_audience": "Équipes Valorant, coachs Esports, créateurs",
+ "highlight": "Profil Esports 240–360 Hz stabilisé",
+ "protection": "Overlays fair-play stream-safe",
+ "updates": "Sync patch Riot & maintenance continue",
"pricing": {
- "hourly": 1.13,
- "monthly": 450
+ "hourly": 1.6,
+ "monthly": 640
},
- "sla": "99.99%",
+ "sla": "99.98%",
"support_level": "enterprise",
"badges": [
- "Valorant Pro",
- "Vanguard Bypass",
- "Humanized"
+ "Esports Ready",
+ "Stream Safe",
+ "PulseForge Lobby"
],
"image": "/images/products/valorant/main.png"
}
],
"reviews": {
- "average": 4.8,
- "count": 267
+ "average": 4.9,
+ "count": 438
},
"discount": {
"active": false,
@@ -761,7 +1045,8 @@
},
"gallery": [
"/images/products/valorant/main.png",
- "/images/products/valorant/1.png"
+ "/images/products/valorant/1.png",
+ "/images/products/valorant/2.png"
]
},
{
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index a915245..c669d6a 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2103,3 +2103,26 @@ if (hasDecimal) {
#### État:
✅ Offre Warzone alignée avec PulseForge et métriques fournies
✅ Localisation FR/EN/ET opérationnelle via overrides
+
+### Feature: PulseForge Valorant native build
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Déployer la fiche Valorant PulseForge avec les métriques CPU-bound (596/565/520 FPS) et les tableaux fournis par l’équipe produit.
+- Harmoniser l’expérience native avec les modules Esports (PulseForge Lobby, CPU Boost, astuces FPS) tout en conservant le sélecteur d’onglets compact.
+- Assurer une localisation complète FR/EN/ET via `localeOverridesByProduct` et mettre à jour la documentation centrale.
+
+#### Actions réalisées:
+1. Actualisation de `gaming-valorant` dans `data/gaming-products.json` : métriques par résolution/preset, option CPU Boost, capacités multi-jeux et notes de conformité fair-play.
+2. Ajout des overrides `localeOverridesByProduct['gaming-valorant']` dans `NativeGamingProductPage.tsx` pour injecter les textes FR/EN/ET (performances, expérience cloud, onglets PulseForge).
+3. Mise à jour de `docs/README.md` pour référencer la fiche Valorant et consigner la dernière action côté catalogue.
+
+#### Fichiers modifiés:
+- `/data/gaming-products.json`
+- `/components/NativeGamingProductPage.tsx`
+- `/docs/README.md`
+
+#### État:
+✅ Fiche Valorant PulseForge conforme aux métriques fournies
+✅ Localisation FR/EN/ET opérationnelle avec onglets PulseForge
diff --git a/docs/README.md b/docs/README.md
index 9ca1fba..31af5b2 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -81,6 +81,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
- Les tableaux `resolutionGuidance` et `technicalSpecs` exposent les FPS, la latence et les informations réseau injectées telles quelles dans l'interface.
- Les variantes peuvent embarquer `featureHighlights`, `featureGroups` (titre, description, éléments) et `implementationNotes` pour décrire les suites PulseForge ; le rendu se base maintenant sur un sélecteur interactif qui affiche un groupe à la fois pour limiter le scroll. Ces blocs sont traduits via les overrides de `copyByLocale.product.variants`.
- L’entrée `gaming-warzone` suit cette structure pour Call of Duty: Warzone : métriques BR (FPS multi-résolutions, option « CPU Boost »), variantes PulseForge et suites de fonctionnalités orientées Battle Royale.
+- L’entrée `gaming-valorant` applique le même modèle pour Valorant : performances Esports 1080p/1440p/4K, contrôleur de résolution, onglets PulseForge Lobby et notes de conformité fair-play.
- Les utilitaires d'accès et les types associés vivent dans [`lib/gaming-products.ts`](../lib/gaming-products.ts).
- `getAllGamingProducts()` et `getGamingProductBySlug()` alimentent les routes dynamiques.
@@ -106,8 +107,8 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
4. Compléter les traductions génériques dans `public/locales//common.json` si besoin.
5. Lancer `npm run lint` pour valider les schémas avant de publier.
-**Dernière action:** Ajout de l’offre native Warzone PulseForge et overrides de localisation FR/EN/ET (25/10/2025)
+**Dernière action:** Ajout de l’offre native Valorant PulseForge et overrides de localisation FR/EN/ET (22/10/2025)
---
-*Documentation maintenue selon les standards définis dans `/CLAUDE.md`*
\ No newline at end of file
+*Documentation maintenue selon les standards définis dans `/CLAUDE.md`*
From 20ac0657d4bbcff8855dc0119b77eef793775c1f Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Wed, 22 Oct 2025 21:37:56 +0200
Subject: [PATCH 15/25] feat: add PulseForge Battlefield 6 native product
---
components/NativeGamingProductPage.tsx | 690 +++++++++++++++++++++++++
data/gaming-products.json | 330 ++++++++++--
docs/JOURNAL.md | 23 +
docs/README.md | 3 +-
4 files changed, 1012 insertions(+), 34 deletions(-)
diff --git a/components/NativeGamingProductPage.tsx b/components/NativeGamingProductPage.tsx
index a2d9523..bd1f044 100644
--- a/components/NativeGamingProductPage.tsx
+++ b/components/NativeGamingProductPage.tsx
@@ -2822,10 +2822,700 @@ const localeOverridesByProduct: Record
+ `${productName} tourne entièrement sur notre infrastructure : provisioning instantané, routage adaptatif et latence stabilisée à ${latency} ms.`,
+ bullets: [
+ 'Overlays, presets et mises à jour appliqués côté serveur — aucune installation locale.',
+ 'Monitoring ping/jitter/pertes en temps réel avec bascule automatique de région si nécessaire.',
+ 'Profilage spécifique Conquest/Breakthrough et véhicules mis à jour après chaque patch.'
+ ],
+ profileSubtitle: 'Moyenne mesurée en 1080p Medium',
+ lowLabel: 'Min observé 1080p Medium',
+ lowSubtitle: 'Fenêtre basse relevée'
+ },
+ improvement: {
+ adviceTitle: 'Option « CPU Boost » (côté hôte)'
+ },
+ augmentation: {
+ description: 'Suite tactique Battlefield 6 : objectifs, rotations, véhicules et analytics tickets.'
+ },
+ hero: {
+ badge: 'PROFILS ESCOUADE & VÉHICULES',
+ title: 'Optimisations dédiées',
+ description: 'Chaque preset couvre un rôle Battlefield (infanterie, reconnaissance, véhicules, commandement).',
+ headers: {
+ hero: 'Rôle',
+ overlay: 'Focus overlay',
+ clarity: 'Clarté visuelle',
+ preset: 'Preset conseillé',
+ notes: 'Notes coaching'
+ },
+ fallbackDescription: (game: string) => `Optimisations par rôle pour ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `Optimisé de bout en bout pour ${game} côté cloud avec overlays fair-play.`
+ },
+ product: {
+ description: 'Instance Battlefield 6 cloud native calibrée Conquest/Breakthrough.',
+ longDescription:
+ 'PulseForge Battlefield 6 combine profils objectifs, pipeline vidéo faible latence et monitoring réseau pour maintenir une réactivité stable en 1080p, 1440p et 4K. Les overlays, modules véhicules et Focus HUD sont pilotés côté serveur afin de rester conformes en ranked comme en scrim.',
+ variants: {
+ 'pulseforge-battlefield6': {
+ name: 'PulseForge Battlefield 6 Command',
+ usage: 'Instance Battlefield 6 PulseForge',
+ description: 'Build cloud Battlefield 6 orienté objectifs, véhicules et production stream.',
+ use_cases: [
+ 'Compétitions Conquest & Breakthrough',
+ 'Coaching escouade et analytics tickets',
+ 'Production stream Battlefield',
+ 'Scrims privés PulseForge Lobby',
+ 'Sandbox véhicules & drills objectifs'
+ ],
+ features: [
+ 'Overlays modulaires objectifs/escouade',
+ 'Analytics post-match tickets & timeline',
+ 'Coach rotations et spawn waves',
+ 'Vehicle drill suite PulseForge Lobby',
+ 'Profils audio Battlefield calibrés',
+ 'Mises à jour synchronisées patch Battlefield',
+ 'Compatibilité PulseForge Lobby sandbox'
+ ],
+ featureHighlights: [
+ 'Ranked/Tous serveurs – 100 % fair-play (lecture d’écran, killfeed, audio, sans injection mémoire)',
+ 'Lobbies privés PulseForge – builds synchronisés où tout le monde est sur PulseForge (cosmétique & entraînement avancé)'
+ ],
+ featureGroups: [
+ {
+ title: 'Ranked / fair-play (live)',
+ items: [
+ 'Ticket & Pressure Overlay : pression par secteur, fenêtres de neutralisation/capture et rappel des tickets.',
+ 'Rotation Coach : routes d’escouade safe/fast, backcaps opportunistes et timings de regroupement.',
+ 'Spawn Wave Planner : estimation vagues alliées/ennemies, choix beacon/squad/base.',
+ 'Vehicle Ops Assistant : cycles réparation/sortie et angles sûrs (sans assistance d’aim).',
+ 'Suppression & Visibility : indicateurs suppression et fenêtres de punition.',
+ 'Killfeed Intelligence : synthèse wipes d’escouade et détection avantage numérique.',
+ 'Focus HUD : masquage contextuel des modules non essentiels pendant les fights massifs.'
+ ]
+ },
+ {
+ title: 'Réactivité & couverture',
+ items: [
+ 'Overlay refresh jusqu’à 144 Hz sur profils Medium/High.',
+ 'Modules actifs phase-aware : objectifs, escouade, véhicules.',
+ 'Temps de réaction moyen ~45 ms sur événements visibles.',
+ 'Monitoring réseau continu avec bascule automatique de région.'
+ ]
+ },
+ {
+ title: 'PulseForge Lobby',
+ description: 'Options de jeu & d’entraînement (tous joueurs sur build PulseForge)',
+ items: [
+ 'Cosmétiques partagés : thèmes d’escouade, tracers & kill-banners PulseForge.',
+ 'Vehicle Drill Suite : circuits tank/IFV/heli/jet, duels blindés et ateliers réparation coordonnée.',
+ 'Objective Scenario Runner : scripts Conquest/Breakthrough avec scoreboard captures/retakes/tickets.',
+ 'Stratboard Live : tableau tactique par carte avec annotations coach/lead.',
+ 'Draft & Role Rules : verrouillage Lead/Anchor/Recon/Support et loadouts imposés.',
+ 'Caster Mode : HUD élargi (objectifs, véhicules, tickets), replays instantanés et marqueurs d’actions.'
+ ]
+ },
+ {
+ title: 'Pourquoi choisir notre build natif Battlefield 6 ?',
+ items: [
+ 'Intégration native synchronisée après chaque mise à jour DICE.',
+ 'Suite overlays fair-play, stream-safe et conforme ranked/tournoi.',
+ 'Performances calibrées : 208/186/154 FPS moyens (1080p/1440p/4K).',
+ 'Support créatif : scrims, VOD analytics et thèmes d’escouade PulseForge Lobby.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'En parties publiques/ranked, les overlays reposent uniquement sur HUD/son/killfeed visibles. Aucune lecture mémoire ni injection.',
+ 'Cosmétiques partagés, sandbox véhicules et stratboards temps réel sont réservés aux lobbies PulseForge avec build commun.',
+ 'Overlays opt-in avec masquage automatique en fight pour limiter la surcharge visuelle.'
+ ],
+ target_audience: 'Escouades Battlefield, coachs véhicules, créateurs',
+ highlight: 'Suite Conquest & véhicules dédiée',
+ protection: 'Fair-play stream-safe',
+ updates: 'Mises à jour synchronisées patch Battlefield'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Très fluide', bottleneck: 'CPU (≈ 88%)' },
+ { playability: 'Très fluide', bottleneck: 'GPU (≈ 61%)' },
+ { playability: 'Très fluide', bottleneck: 'GPU (≈ 76%)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: 'Cible 144–200 Hz compétitif',
+ description: 'Idéal pour l’infanterie et les combats rapprochés ; la marge reste confortable même en High.',
+ note: 'Activez Focus HUD pour réduire la charge visuelle lors des push massifs.'
+ },
+ {
+ refreshAdvice: 'Netteté + stabilité',
+ description: 'Excellent compromis pour le streaming Conquest et les VOD détaillées.',
+ note: 'Préférez le preset High pour lisser les 1% low sans perte visuelle majeure.'
+ },
+ {
+ refreshAdvice: '4K fluide 120 Hz',
+ description: 'Parfait pour du showcase cinématographique tout en gardant une bonne réactivité.',
+ note: 'Utilisez ce mode pour les prises de vue premium ou la production stream.'
+ }
+ ],
+ improvementTips: [
+ 'Baissez ombres et Post-FX en priorité tout en conservant la résolution native.',
+ 'Activez Focus HUD afin de masquer les modules non essentiels lors des grands teamfights.',
+ 'Préférez le preset High plutôt que Ultra en 1440p/4K pour lisser les 1% low.'
+ ],
+ advice:
+ 'Option « CPU Boost » : +5 % → ~210/178/240 FPS · +10 % → ~212/180/244 FPS · +15 % → ~215/183/247 FPS · +20 % → ~219/186/251 FPS (nécessite un nœud Thermal-Premium).',
+ augmentationSuite: {
+ modules: [
+ 'Ticket & Pressure Overlay : pression par secteur et fenêtres de capture.',
+ 'Rotation Coach : routes safe/fast et timings de regroupement.',
+ 'Spawn Wave Planner : estimation des vagues alliées/ennemies.',
+ 'Vehicle Ops Assistant : cycles réparation/sortie sans assistance intrusive.',
+ 'Suppression & Visibility : indicateurs de suppression et fenêtres de punition.',
+ 'Ballistics Trainer : visualisation de la balistique en entraînement.',
+ 'Killfeed Intelligence : synthèse wipes d’escouade et avantage numérique.'
+ ],
+ notes: 'Modules calibrés Conquest/Breakthrough, rafraîchis après chaque patch DICE.'
+ },
+ heroSynergy: [
+ { preset: 'Assault', coachingNotes: 'Priorité points chauds et rappels utilitaires anti-véhicule.' },
+ { preset: 'Recon', coachingNotes: 'Surveillance drones et trajectoires de backcap.' },
+ { preset: 'Support', coachingNotes: 'Gestion beacons et cycles de réparation.' },
+ { preset: 'Armor', coachingNotes: 'Angles sûrs et cycles réparation/sortie.' },
+ { preset: 'Air', coachingNotes: 'Routes nap-of-the-earth et timers de contre-mesures.' },
+ { preset: 'Command', coachingNotes: 'Synthèse tickets et priorités d’objectif.' }
+ ]
+ }
+ },
+ en: {
+ nativeAdvantages: [
+ {
+ icon: Code,
+ title: 'Native Battlefield optimization',
+ description: 'Conquest/Breakthrough profiles tuned with a balanced CPU↔GPU pipeline.'
+ },
+ {
+ icon: Zap,
+ title: 'Instant cloud provisioning',
+ description: 'Battlefield 6 instances spin up in seconds with automatic region failover based on ping.'
+ },
+ {
+ icon: Shield,
+ title: 'Fair-play tactical suite',
+ description: 'Objective/squad overlays stay stream-safe with zero memory injection or intrusive assists.'
+ },
+ {
+ icon: Trophy,
+ title: 'Vehicle & production support',
+ description: 'Vehicle coaching, ticket analytics, and integrated streaming tools via PulseForge Lobby.'
+ }
+ ],
+ metrics: {
+ title: 'Performance calibrated for Battlefield 6',
+ description:
+ 'PulseForge competitive Medium profile: 208 average FPS, 176 FPS minimum, and peaks at 238 FPS in 1080p. 1440p and 4K remain very smooth thanks to dynamic CPU↔GPU allocation.',
+ statCards: {
+ maxFps: 'Max FPS observed (1080p Medium)',
+ onePercentLow: 'Min observed (1080p Medium)',
+ inputLag: 'Average input lag'
+ },
+ allocationTitle: 'Dominant bottleneck (Medium profile)',
+ datacenterTitle: 'PulseForge cloud monitoring',
+ usage: {
+ cpu: 'CPU load',
+ gpu: 'GPU load',
+ ram: 'Memory usage',
+ vram: 'VRAM usage'
+ },
+ thermals: {
+ cpu: 'Cloud CPU temperature',
+ gpu: 'GPU temperature',
+ power: 'Power draw'
+ },
+ stabilityNote: '1080p is CPU-bound; the 1440p/4K presets leverage GPU headroom to keep the curve stable.'
+ },
+ fpsTable: {
+ footnote: 'Internal Battlefield 6 benchmarks (Conquest & Breakthrough, competitive Medium profile).'
+ },
+ resolution: {
+ title: 'How to adjust resolution from the cloud',
+ description:
+ 'Our internal measurements show the actual FPS buffer when you change definition via the PulseForge panel.',
+ windowLabel: 'Measured window',
+ footnote: 'Values captured on Medium/Ultra presets with overlays enabled.',
+ avgLabel: 'Average FPS'
+ },
+ experience: {
+ description: (productName: string, latency: number) =>
+ `${productName} runs entirely on our infrastructure: instant provisioning, adaptive routing, and latency stabilized around ${latency} ms.`,
+ bullets: [
+ 'Overlays, presets, and updates are applied server-side—nothing to install locally.',
+ 'Real-time ping/jitter/loss monitoring with automatic region failover when needed.',
+ 'Battlefield-specific profiling for Conquest/Breakthrough and vehicles refreshed after every patch.'
+ ],
+ profileSubtitle: 'Average measured at 1080p Medium',
+ lowLabel: 'Min observed 1080p Medium',
+ lowSubtitle: 'Recorded low window'
+ },
+ improvement: {
+ adviceTitle: 'CPU Boost option (host side)'
+ },
+ augmentation: {
+ description: 'Battlefield 6 tactical suite covering objectives, rotations, vehicles, and ticket analytics.'
+ },
+ hero: {
+ badge: 'SQUAD & VEHICLE PROFILES',
+ title: 'Dedicated optimizations',
+ description: 'Each preset covers a Battlefield role (infantry, recon, vehicles, command).',
+ headers: {
+ hero: 'Role',
+ overlay: 'Overlay focus',
+ clarity: 'Visual clarity',
+ preset: 'Recommended preset',
+ notes: 'Coaching notes'
+ },
+ fallbackDescription: (game: string) => `Role-specific optimizations for ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `Optimized end to end for ${game} in the cloud with fair-play overlays.`
+ },
+ product: {
+ description: 'Cloud-native Battlefield 6 instance tuned for Conquest/Breakthrough.',
+ longDescription:
+ 'PulseForge Battlefield 6 blends objective profiles, a low-latency video pipeline, and live network monitoring to keep responsiveness steady at 1080p, 1440p, and 4K. Overlays, vehicle modules, and Focus HUD are orchestrated server-side to remain compliant in ranked and scrims.',
+ variants: {
+ 'pulseforge-battlefield6': {
+ name: 'PulseForge Battlefield 6 Command',
+ usage: 'Battlefield 6 PulseForge instance',
+ description: 'Cloud Battlefield 6 build focused on objectives, vehicles, and premium streaming.',
+ use_cases: [
+ 'Conquest & Breakthrough competition',
+ 'Squad coaching and ticket analytics',
+ 'Battlefield stream production',
+ 'Private scrims with PulseForge Lobby',
+ 'Vehicle sandbox & objective drills'
+ ],
+ features: [
+ 'Modular objective/squad overlays',
+ 'Post-match ticket analytics & timeline',
+ 'Rotation and spawn-wave coaching',
+ 'PulseForge Lobby vehicle drill suite',
+ 'Calibrated Battlefield audio profiles',
+ 'Patch-synced Battlefield updates',
+ 'PulseForge Lobby sandbox compatibility'
+ ],
+ featureHighlights: [
+ 'Ranked/all servers – 100% fair play (screen reading, killfeed, audio, no memory injection)',
+ 'PulseForge private lobbies – synchronized builds with every player on PulseForge (cosmetics & advanced training)'
+ ],
+ featureGroups: [
+ {
+ title: 'Ranked / fair-play (live)',
+ items: [
+ 'Ticket & Pressure Overlay: sector pressure, capture windows, and ticket reminders.',
+ 'Rotation Coach: safe/fast squad routes, opportunistic backcaps, and regroup timings.',
+ 'Spawn Wave Planner: estimates ally/enemy waves and optimizes beacon/squad/base respawns.',
+ 'Vehicle Ops Assistant: repair/exit cycles and safe angles without aim assistance.',
+ 'Suppression & Visibility: suppression indicators and punishment windows.',
+ 'Killfeed Intelligence: squad wipe synthesis and numeric advantage detection.',
+ 'Focus HUD: contextually hides non-essential modules during large fights.'
+ ]
+ },
+ {
+ title: 'Reactivity & coverage',
+ items: [
+ 'Overlay refresh up to 144 Hz on Medium/High profiles.',
+ 'Phase-aware modules covering objectives, squads, and vehicles.',
+ 'Average reaction time ~45 ms on visible events.',
+ 'Continuous network monitoring with automatic region switching.'
+ ]
+ },
+ {
+ title: 'PulseForge Lobby',
+ description: 'Training options when everyone runs the PulseForge build',
+ items: [
+ 'Shared cosmetics: squad themes, tracers, and PulseForge kill banners.',
+ 'Vehicle Drill Suite: timed tank/IFV/heli/jet circuits, armor duels, coordinated repair workshops.',
+ 'Objective Scenario Runner: scripted Conquest/Breakthrough drills with capture/retake/ticket scoreboards.',
+ 'Stratboard Live: map-tied tactical board with coach/leader annotations.',
+ 'Draft & Role Rules: locks Lead/Anchor/Recon/Support roles and enforces loadouts.',
+ 'Caster Mode: expanded HUD (objectives, vehicles, tickets), instant replays, and key event markers.'
+ ]
+ },
+ {
+ title: 'Why choose our native Battlefield 6 build?',
+ items: [
+ 'Native integration synchronized after every DICE update.',
+ 'Fair-play, stream-safe overlay suite compliant with ranked and tournaments.',
+ 'Calibrated performance: 208/186/154 average FPS (1080p/1440p/4K).',
+ 'Creative support: scrims, VOD analytics, and PulseForge Lobby squad themes.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'In public/ranked games overlays rely solely on visible HUD/audio/killfeed data. No memory reading or injection.',
+ 'Shared cosmetics, vehicle sandboxes, and live stratboards are limited to PulseForge lobbies with a shared build.',
+ 'Overlays are opt-in and auto-hide during fights to avoid visual overload.'
+ ],
+ target_audience: 'Battlefield squads, vehicle coaches, creators',
+ highlight: 'Dedicated Conquest & vehicle suite',
+ protection: 'Stream-safe fair play',
+ updates: 'Battlefield patch-synced updates'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Very smooth', bottleneck: 'CPU (≈ 88%)' },
+ { playability: 'Very smooth', bottleneck: 'GPU (≈ 61%)' },
+ { playability: 'Very smooth', bottleneck: 'GPU (≈ 76%)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: '144–200 Hz competitive target',
+ description: 'Ideal for infantry and close-quarters fights; the buffer stays generous even on High.',
+ note: 'Enable Focus HUD to trim visual noise during large pushes.'
+ },
+ {
+ refreshAdvice: 'Sharpness + stability',
+ description: 'A strong balance for streaming Conquest and detailed VOD work.',
+ note: 'Stay on the High preset to smooth 1% lows without major visual loss.'
+ },
+ {
+ refreshAdvice: '120 Hz-ready 4K',
+ description: 'Great for cinematic showcases while keeping the experience reactive.',
+ note: 'Use this mode for premium capture or stream production.'
+ }
+ ],
+ improvementTips: [
+ 'Lower shadows and post-FX first while keeping native resolution.',
+ 'Enable Focus HUD to hide non-essential modules during massive firefights.',
+ 'Prefer High instead of Ultra at 1440p/4K to stabilize 1% lows.'
+ ],
+ advice:
+ 'CPU Boost option: +5% → ~210/178/240 FPS · +10% → ~212/180/244 FPS · +15% → ~215/183/247 FPS · +20% → ~219/186/251 FPS (requires a Thermal-Premium node).',
+ augmentationSuite: {
+ modules: [
+ 'Ticket & Pressure Overlay: sector pressure and capture windows.',
+ 'Rotation Coach: safe/fast routes and regroup timings.',
+ 'Spawn Wave Planner: predicts ally/enemy waves.',
+ 'Vehicle Ops Assistant: repair/exit cycles without intrusive assistance.',
+ 'Suppression & Visibility: suppression indicators and punish windows.',
+ 'Ballistics Trainer: ballistic visualization in training.',
+ 'Killfeed Intelligence: squad wipe synthesis and numeric advantage.'
+ ],
+ notes: 'Modules calibrated for Conquest/Breakthrough and refreshed after every DICE patch.'
+ },
+ heroSynergy: [
+ { preset: 'Assault', coachingNotes: 'Hot zone priority and anti-vehicle utility reminders.' },
+ { preset: 'Recon', coachingNotes: 'Drone coverage and backcap pathing.' },
+ { preset: 'Support', coachingNotes: 'Beacon management and repair cycles.' },
+ { preset: 'Armor', coachingNotes: 'Safe angles and repair/exit timing.' },
+ { preset: 'Air', coachingNotes: 'Nap-of-the-earth routes and countermeasure timers.' },
+ { preset: 'Command', coachingNotes: 'Ticket synthesis and objective priorities.' }
+ ]
+ }
+ },
+ et: {
+ nativeAdvantages: [
+ {
+ icon: Code,
+ title: 'Battlefieldi natiivne optimeerimine',
+ description: 'Conquest/Breakthrough profiilid on häälestatud tasakaalus CPU↔GPU toruga.'
+ },
+ {
+ icon: Zap,
+ title: 'Viivitusteta pilveprovision',
+ description: 'Battlefield 6 instants käivituvad sekunditega ja vahetavad regiooni automaatselt vastavalt pingile.'
+ },
+ {
+ icon: Shield,
+ title: 'Fair-play taktikamoodulid',
+ description: 'Eesmärkide/eskadroni overlayd on stream-safe – mälu ei loeta ja abivahendeid ei lisata.'
+ },
+ {
+ icon: Trophy,
+ title: 'Sõiduki- ja produktsioonitugi',
+ description: 'Sõidukitreening, piletite analüütika ja PulseForge Lobby integreeritud striimitööriistad.'
+ }
+ ],
+ metrics: {
+ title: 'Battlefield 6 jõudlus',
+ description:
+ 'PulseForge’i Medium võistlusprofiil: keskmiselt 208 FPS, miinimum 176 FPS ja maksimum 238 FPS 1080p juures. 1440p ja 4K jäävad väga sujuvaks tänu dünaamilisele CPU↔GPU jaotusele.',
+ statCards: {
+ maxFps: 'Maks FPS (1080p Medium)',
+ onePercentLow: 'Min märgatud (1080p Medium)',
+ inputLag: 'Keskmine sisendviivitus'
+ },
+ allocationTitle: 'Domineeriv kitsaskoht (Medium profiil)',
+ datacenterTitle: 'PulseForge’i pilvemonitoring',
+ usage: {
+ cpu: 'CPU koormus',
+ gpu: 'GPU koormus',
+ ram: 'Mälu kasutus',
+ vram: 'VRAM kasutus'
+ },
+ thermals: {
+ cpu: 'Pilve CPU temperatuur',
+ gpu: 'GPU temperatuur',
+ power: 'Voolutarve'
+ },
+ stabilityNote: '1080p on CPU-põhine; 1440p/4K presetid kasutavad GPU varu, et hoida FPS kõvera stabiilsena.'
+ },
+ fpsTable: {
+ footnote: 'Sisemised Battlefield 6 benchmark’id (Conquest & Breakthrough, Medium profiil).'
+ },
+ resolution: {
+ title: 'Resolutsiooni muutmine pilves',
+ description:
+ 'Meie mõõtmised näitavad tegelikku FPS varu, kui muudad PulseForge’i paneelist resolutsiooni.',
+ windowLabel: 'Mõõdetud aken',
+ footnote: 'Väärtused Medium/Ultra presetitel koos overlaydega.',
+ avgLabel: 'Keskmine FPS'
+ },
+ experience: {
+ description: (productName: string, latency: number) =>
+ `${productName} töötab täielikult meie infrastruktuuris: kohene provisioning, adaptiivne marsruut ja latentsus umbes ${latency} ms.`,
+ bullets: [
+ 'Overlayd, presetid ja uuendused rakenduvad serveripoolselt – lokaalset installi pole vaja.',
+ 'Reaalajas ping/jitter/kadude jälgimine automaatse regiooni vahetusega vajadusel.',
+ 'Battlefieldi-spetsiifiline profiil Conquest/Breakthrough ja sõidukitele, värskendatakse iga patchi järel.'
+ ],
+ profileSubtitle: 'Keskmine 1080p Medium mõõtmine',
+ lowLabel: 'Min 1080p Medium',
+ lowSubtitle: 'Salvestatud alumine aken'
+ },
+ improvement: {
+ adviceTitle: '„CPU Boost” valik (hosti pool)'
+ },
+ augmentation: {
+ description: 'Battlefield 6 taktikaline suite: eesmärgid, rotatsioonid, sõidukid ja piletianalüütika.'
+ },
+ hero: {
+ badge: 'ESKADRONI JA SÕIDUKI PROFIILID',
+ title: 'Pühendatud optimisatsioonid',
+ description: 'Iga preset katab Battlefieldi rolli (jalavägi, luure, sõidukid, juhtimine).',
+ headers: {
+ hero: 'Roll',
+ overlay: 'Overlay fookus',
+ clarity: 'Visuaalne selgus',
+ preset: 'Soovitatud preset',
+ notes: 'Treeningmärkused'
+ },
+ fallbackDescription: (game: string) => `Rollipõhised optimeerimised mängule ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `Täielikult pilves optimeeritud lahendus mängule ${game} fair-play overlaydega.`
+ },
+ product: {
+ description: 'Pilvepõhine Battlefield 6 instants Conquest/Breakthrough jaoks.',
+ longDescription:
+ 'PulseForge Battlefield 6 ühendab eesmärgiprofiilid, väikse latentsusega videotoru ja võrgujälgimise, et hoida reaktsioon stabiilsena 1080p, 1440p ja 4K juures. Overlayd, sõidukimoodulid ja Focus HUD juhitakse serverist, et jääda vastavusse ranked ja scrim nõuetega.',
+ variants: {
+ 'pulseforge-battlefield6': {
+ name: 'PulseForge Battlefield 6 Command',
+ usage: 'Battlefield 6 PulseForge instants',
+ description: 'Pilvepõhine Battlefield 6 build eesmärkide, sõidukite ja premium-striimi jaoks.',
+ use_cases: [
+ 'Conquest & Breakthrough võistlused',
+ 'Eskadroni coaching ja piletianalüütika',
+ 'Battlefieldi striimiproduktsioon',
+ 'Privaat-scrimid PulseForge Lobbyga',
+ 'Sõiduki sandbox ja eesmärgiharjutused'
+ ],
+ features: [
+ 'Modulaarsed overlayd eesmärkide/eskadroni jaoks',
+ 'Post-matši piletianalüütika ja ajajoon',
+ 'Rotatsiooni ja spawn-wave’i coaching',
+ 'PulseForge Lobby sõidukitreeningu suite',
+ 'Kalibreeritud Battlefieldi audioprofiilid',
+ 'Patchidega sünkroonitud uuendused',
+ 'PulseForge Lobby sandboxi tugi'
+ ],
+ featureHighlights: [
+ 'Ranked/kõik serverid – 100% fair-play (ekraani lugemine, killfeed, audio, ilma mälu süstita)',
+ 'PulseForge’i privaatlobbyd – sünkroonitud buildid kõigile mängijatele (kosmeetika ja edasijõudnud treening)'
+ ],
+ featureGroups: [
+ {
+ title: 'Ranked / fair-play (live)',
+ items: [
+ 'Ticket & Pressure Overlay: sektori surve, vallutuse aknad ja piletimärguanded.',
+ 'Rotation Coach: turvalised/kiired marsruudid, backcap’i võimalused ja kogunemise ajastus.',
+ 'Spawn Wave Planner: liitlaste/vastaste lainete hinnang ja beacon/squad/base optimeerimine.',
+ 'Vehicle Ops Assistant: remondi/väljumise tsüklid ja turvalised nurgad (ilma aim-abita).',
+ 'Suppression & Visibility: suppressiooni indikaatorid ja karistuse aknad.',
+ 'Killfeed Intelligence: eskadroni wipe’i kokkuvõte ja arvulise eelise tuvastus.',
+ 'Focus HUD: peidab suurtes võitlustes ebaolulised moodulid.'
+ ]
+ },
+ {
+ title: 'Reaktsioon ja katvus',
+ items: [
+ 'Overlay värskendus kuni 144 Hz Medium/High profiilidel.',
+ 'Faaditeadlikud moodulid: eesmärgid, eskadron, sõidukid.',
+ 'Keskmine reaktsiooniaeg ~45 ms nähtavate sündmuste puhul.',
+ 'Järjepidev võrgujälgimine automaatse regiooni vahetusega.'
+ ]
+ },
+ {
+ title: 'PulseForge Lobby',
+ description: 'Treeninguvõimalused, kui kõik kasutavad PulseForge’i buildi',
+ items: [
+ 'Jagatud kosmeetika: eskadroni teemad, tracer’id ja PulseForge’i kill-bannerid.',
+ 'Vehicle Drill Suite: ajastatud tank/IFV/heli/jeti rajad, soomusduellid ja koordineeritud remondiharjutused.',
+ 'Objective Scenario Runner: skriptitud Conquest/Breakthrough harjutused capture/retake/pileti tabelitega.',
+ 'Stratboard Live: kaardiga seotud taktikalaud treeneri/liidri annotatsioonidega.',
+ 'Draft & Role Rules: lukustab Lead/Anchor/Recon/Support rollid ja kehtestab loadout’id.',
+ 'Caster Mode: laiendatud HUD (eesmärgid, sõidukid, piletid), kiired kordused ja võtmesündmuste markerid.'
+ ]
+ },
+ {
+ title: 'Miks valida meie natiivne Battlefield 6 build?',
+ items: [
+ 'Natiivne integratsioon sünkroonis iga DICE uuendusega.',
+ 'Fair-play ja stream-safe overlayd, mis vastavad ranked ja turniiri nõuetele.',
+ 'Kalibreeritud jõudlus: 208/186/154 FPS keskmiselt (1080p/1440p/4K).',
+ 'Loominguline tugi: scrimid, VOD-analüütika ja PulseForge Lobby eskadroni teemad.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'Avalikes/ranked mängudes tuginevad overlayd ainult nähtavale HUDile/helile/killfeedile. Mälulugemist ega süsti pole.',
+ 'Jagatud kosmeetika, sõidukisandboxid ja live-stratboardid on piiratud PulseForge’i lobbydega, kus on ühine build.',
+ 'Overlayd on opt-in ja peidavad end suure võitluse ajal, et vältida visuaalset ülekoormust.'
+ ],
+ target_audience: 'Battlefieldi eskadronid, sõidukitreenerid, loojad',
+ highlight: 'Conquesti ja sõidukite fokusseeritud suite',
+ protection: 'Stream-safe fair-play',
+ updates: 'Battlefieldi patchidega sünkroonitud uuendused'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Väga sujuv', bottleneck: 'CPU (≈ 88%)' },
+ { playability: 'Väga sujuv', bottleneck: 'GPU (≈ 61%)' },
+ { playability: 'Väga sujuv', bottleneck: 'GPU (≈ 76%)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: '144–200 Hz võistlussiht',
+ description: 'Ideaalne jalaväele ja lähivõitlusele; puhver jääb heldeks isegi High presetil.',
+ note: 'Aktiveeri Focus HUD, et suurte rünnakute ajal visuaalset müra vähendada.'
+ },
+ {
+ refreshAdvice: 'Teravus + stabiilsus',
+ description: 'Tugev tasakaal Conquesti striimimiseks ja detailseks VOD tööks.',
+ note: 'Kasuta High presetit, et 1% madalaid ilma suure visuaalkaota siluda.'
+ },
+ {
+ refreshAdvice: '120 Hz valmis 4K',
+ description: 'Sobib hästi kinemaatilisteks esitluste ja samas säilitab reaktsioonivõime.',
+ note: 'Kasuta seda režiimi premium-salvestuseks või striimiproduktsiooniks.'
+ }
+ ],
+ improvementTips: [
+ 'Vähenda esmalt varje ja post-FX’e, jättes resolutsiooni natiivseks.',
+ 'Lülita sisse Focus HUD, et peita massiivsetes lahingutes ebaolulised moodulid.',
+ 'Eelista 1440p/4K puhul High presetit Ultra asemel, et stabiliseerida 1% madalaid.'
+ ],
+ advice:
+ '„CPU Boost” valik: +5% → ~210/178/240 FPS · +10% → ~212/180/244 FPS · +15% → ~215/183/247 FPS · +20% → ~219/186/251 FPS (vajab Thermal-Premium sõlme).',
+ augmentationSuite: {
+ modules: [
+ 'Ticket & Pressure Overlay: sektori surve ja vallutuse aknad.',
+ 'Rotation Coach: turvalised/kiired teed ja kogunemise ajastus.',
+ 'Spawn Wave Planner: ennustab liitlaste/vastaste laineid.',
+ 'Vehicle Ops Assistant: remondi/väljumise tsüklid ilma pealetükkiva abita.',
+ 'Suppression & Visibility: suppressiooni indikaatorid ja karistusaknad.',
+ 'Ballistics Trainer: ballistika visualiseerimine treeningus.',
+ 'Killfeed Intelligence: eskadroni wipe’i kokkuvõte ja arvuline eelis.'
+ ],
+ notes: 'Moodulid on häälestatud Conquest/Breakthrough jaoks ja värskendatakse iga DICE patchiga.'
+ },
+ heroSynergy: [
+ { preset: 'Assault', coachingNotes: 'Kuumade tsoonide prioriteet ja anti-sõiduki utiliidi meeldetuletused.' },
+ { preset: 'Recon', coachingNotes: 'Droonikatvus ja backcap’i trajektoorid.' },
+ { preset: 'Support', coachingNotes: 'Beaconite haldus ja remonditsüklid.' },
+ { preset: 'Armor', coachingNotes: 'Turvalised nurgad ja remondi/väljumise ajastus.' },
+ { preset: 'Air', coachingNotes: 'Nap-of-the-earth marsruudid ja vastumeetmete taimerid.' },
+ { preset: 'Command', coachingNotes: 'Piletite kokkuvõte ja eesmärkide prioriteedid.' }
+ ]
+ }
+ }
}
}
interface NativeGamingProductPageProps {
+
product: GamingProduct
}
diff --git a/data/gaming-products.json b/data/gaming-products.json
index 66827eb..c069c45 100644
--- a/data/gaming-products.json
+++ b/data/gaming-products.json
@@ -1052,60 +1052,323 @@
{
"id": "gaming-battlefield6",
"slug": "gaming-battlefield6",
- "name": "Battlefield 6",
+ "name": "Battlefield 6 PulseForge",
"game": "Battlefield 6",
"category": "gaming",
"optimizationLevel": "native",
- "description": "Solution Battlefield 6 premium avec build privé et protection avancée",
- "longDescription": "Battlefield 6 God Mode offre une expérience de jeu optimale avec GPU RTX 4090, 128GB RAM DDR5 et Intel i9-13900K. Build privé exclusif avec HWID spoofer intégré, parfait pour la domination sur le champ de bataille.",
+ "description": "Instance cloud Battlefield 6 calibrée Conquest/Breakthrough avec overlays tactiques et support escouade.",
+ "longDescription": "PulseForge pour Battlefield 6 est un build natif hébergé sur notre cloud gaming. Pensé pour les escouades compétitives, il combine profils Conquest/Breakthrough, optimisation CPU↔GPU et pipeline vidéo faible latence afin de maintenir la fluidité jusqu’en 4K. Overlays, modules et mises à jour sont appliqués côté serveur pour préserver le fair-play et la conformité tournois.",
"status": "ACTIVE",
+ "technicalSpecs": {
+ "performanceMetrics": {
+ "avgFps": 208,
+ "minFps": 176,
+ "maxFps": 238,
+ "onePercentLow": 176,
+ "latency": 1.3,
+ "inputLag": 0.36,
+ "frameTime": 4.8,
+ "cpuUsage": 88,
+ "gpuUsage": 76,
+ "ramUsage": 21.4,
+ "vramUsage": 10.7,
+ "powerDraw": 405,
+ "thermalCpu": 68,
+ "thermalGpu": 65
+ },
+ "augmentationSuite": {
+ "awarenessIndex": 92,
+ "overlayRefresh": 144,
+ "adaptiveCoaching": 88,
+ "reactionTimeMs": 45,
+ "moduleCoverage": 16,
+ "tacticalFocus": 93,
+ "modules": [
+ "Ticket & Pressure Overlay : pression par secteur, fenêtres de neutralisation/capture et rappel des tickets restants.",
+ "Rotation Coach : propositions de routes d’escouade (safe vs fast), backcaps et timings de regroupement.",
+ "Spawn Wave Planner : estimation des vagues de réapparition alliées/ennemies et choix optimisé beacon/squad/base.",
+ "Vehicle Ops Assistant : gestion des sièges, cycles réparation/sortie et angles sûrs sans assistance d’aim.",
+ "Suppression & Visibility : indicateurs de suppression et fenêtres de punition quand l’adversaire est affaibli.",
+ "Ballistics Trainer : visualisation stream-safe de la chute/temps de vol des projectiles (mode entraînement).",
+ "Killfeed Intelligence : synthèse des wipes d’escouade et détection d’avantage numérique."
+ ],
+ "notes": "Modules calibrés Conquest/Breakthrough et rafraîchis après chaque patch DICE."
+ },
+ "fpsByResolution": [
+ {
+ "resolution": "1920 × 1080",
+ "avgFps": 208,
+ "minFps": 176,
+ "maxFps": 238,
+ "playability": "Très fluide",
+ "bottleneck": "CPU (≈ 88%)"
+ },
+ {
+ "resolution": "2560 × 1440",
+ "avgFps": 186,
+ "minFps": 158,
+ "maxFps": 215,
+ "playability": "Très fluide",
+ "bottleneck": "GPU (≈ 61%)"
+ },
+ {
+ "resolution": "3840 × 2160",
+ "avgFps": 154,
+ "minFps": 130,
+ "maxFps": 182,
+ "playability": "Très fluide",
+ "bottleneck": "GPU (≈ 76%)"
+ }
+ ],
+ "qualityBreakdown": [
+ {
+ "resolution": "1920 × 1080",
+ "presets": {
+ "low": 214,
+ "medium": 208,
+ "high": 191,
+ "ultra": 173
+ }
+ },
+ {
+ "resolution": "2560 × 1440",
+ "presets": {
+ "low": 196,
+ "medium": 186,
+ "high": 172,
+ "ultra": 158
+ }
+ },
+ {
+ "resolution": "3840 × 2160",
+ "presets": {
+ "low": 166,
+ "medium": 154,
+ "high": 140,
+ "ultra": 127
+ }
+ }
+ ],
+ "resolutionGuidance": [
+ {
+ "resolution": "1920 × 1080",
+ "avgFps": 208,
+ "fpsWindow": "176 – 238 FPS",
+ "refreshAdvice": "Cible 144–200 Hz compétitif",
+ "description": "Idéal pour l’infanterie et les combats rapprochés ; la marge reste confortable même en High.",
+ "note": "Activez Focus HUD pour réduire la charge visuelle lors des push massifs."
+ },
+ {
+ "resolution": "2560 × 1440",
+ "avgFps": 186,
+ "fpsWindow": "158 – 215 FPS",
+ "refreshAdvice": "Netteté + stabilité",
+ "description": "Excellent compromis pour le streaming Conquest et les VOD détaillées.",
+ "note": "Préférez le preset High pour lisser les 1% low sans perte visuelle majeure."
+ },
+ {
+ "resolution": "3840 × 2160",
+ "avgFps": 154,
+ "fpsWindow": "130 – 182 FPS",
+ "refreshAdvice": "4K fluide 120 Hz",
+ "description": "Parfait pour du showcase cinématographique tout en gardant une bonne réactivité.",
+ "note": "Utilisez ce mode pour les prises de vue premium ou la production stream."
+ }
+ ],
+ "improvementTips": [
+ "Baissez ombres et Post-FX en priorité tout en conservant la résolution native.",
+ "Activez Focus HUD afin de masquer les modules non essentiels lors des grands teamfights.",
+ "Préférez le preset High plutôt que Ultra en 1440p/4K pour lisser les 1% low."
+ ],
+ "advice": "Option « CPU Boost » (1080p) : +5 % → ~210/178/240 FPS · +10 % → ~212/180/244 FPS · +15 % → ~215/183/247 FPS · +20 % → ~219/186/251 FPS (nécessite un nœud Thermal-Premium).",
+ "heroSynergy": [
+ {
+ "hero": "Infanterie Assaut",
+ "overlayFocus": 92,
+ "clarityBoost": 90,
+ "preset": "Assault",
+ "coachingNotes": "Priorité points chauds, prompts de push coordonnés et rappel utilitaires anti-véhicule."
+ },
+ {
+ "hero": "Recon éclaireur",
+ "overlayFocus": 90,
+ "clarityBoost": 88,
+ "preset": "Recon",
+ "coachingNotes": "Surveillance drones, trajectoires de backcap et rappels de spotters."
+ },
+ {
+ "hero": "Support ingénieur",
+ "overlayFocus": 91,
+ "clarityBoost": 89,
+ "preset": "Support",
+ "coachingNotes": "Gestion beacons, cycles réparation et alertes artillerie."
+ },
+ {
+ "hero": "Pilote blindé",
+ "overlayFocus": 93,
+ "clarityBoost": 92,
+ "preset": "Armor",
+ "coachingNotes": "Angles sûrs, cycles réparation/sortie et surveillance menaces anti-char."
+ },
+ {
+ "hero": "Aérien / Hélico",
+ "overlayFocus": 95,
+ "clarityBoost": 93,
+ "preset": "Air",
+ "coachingNotes": "Routes nap-of-the-earth, callouts anti-AA et timers de contre-mesures."
+ },
+ {
+ "hero": "Chef d’escouade",
+ "overlayFocus": 94,
+ "clarityBoost": 90,
+ "preset": "Command",
+ "coachingNotes": "Planification rotations, priorités d’objectif et synthèse tickets en temps réel."
+ }
+ ],
+ "networkStats": {
+ "serverLocations": 26,
+ "avgPing": 19,
+ "maxBandwidth": 1300,
+ "packetLoss": 0.25,
+ "jitter": 3.4,
+ "ddosProtection": true,
+ "encryption": "TLS 1.3 + SRTP"
+ },
+ "securityMetrics": {
+ "detectionRate": 0,
+ "banRate": 0.08,
+ "uptimePercentage": 99.96,
+ "avgResponseTime": 7,
+ "incidentsLastMonth": 0,
+ "securityUpdatesPerWeek": 4,
+ "encryptionLevel": "AES-256",
+ "obfuscationLayers": 4,
+ "antiDebug": true,
+ "antiVM": true,
+ "kernelProtection": true
+ },
+ "updateHistory": {
+ "totalUpdates": 132,
+ "lastUpdateDate": "2025-02-22",
+ "avgUpdatesPerMonth": 5.2,
+ "criticalPatches": 8,
+ "securityPatches": 38,
+ "featureUpdates": 49,
+ "bugFixes": 37
+ },
+ "userStats": {
+ "totalUsers": 5780,
+ "activeUsersLast30Days": 4416,
+ "avgSessionDuration": 3.1,
+ "avgGamesPerDay": 4.7,
+ "satisfactionScore": 4.7,
+ "recommendationRate": 87
+ }
+ },
"variants": [
{
- "id": "godmode",
- "name": "God Mode",
+ "id": "pulseforge-battlefield6",
+ "name": "PulseForge Battlefield 6 Command",
"tier": "premium",
"gpu": "RTX 4090",
"ram": "128 GB DDR5",
- "cpu": "Intel i9-13900K",
- "usage": "Build privé",
- "description": "Solution Battlefield 6 premium avec build privé et protection avancée",
+ "cpu": "Intel i9-14900KS",
+ "storage": "2TB NVMe Gen4",
+ "motherboard": "ASUS ROG Maximus Z790",
+ "psu": "1200W 80+ Platinum",
+ "cooling": "Custom Loop Liquid",
+ "usage": "Instance Battlefield 6 cloud native",
+ "description": "Instance Battlefield 6 cloud native calibrée Conquest/Breakthrough et véhicules.",
"use_cases": [
- "Gaming compétitif",
- "Conquête dominante",
- "Stream professionnel",
- "Statistiques optimales",
- "Performance maximale"
+ "Compétitions Conquest & Breakthrough",
+ "Coaching escouade et analytics tickets",
+ "Production stream Battlefield",
+ "Scrims privés PulseForge Lobby",
+ "Sandbox véhicules & drills objectifs"
],
"features": [
- "Build privé personnalisé",
- "ESP avancé véhicules et infanterie",
- "Aimbot prédictif",
- "HWID spoofer intégré",
- "Protection kernel-level",
- "Support premium 24/7",
- "Mises à jour garanties"
+ "Overlays modulaires objectifs/escouade",
+ "Analytics post-match tickets & timeline",
+ "Coach rotations et spawn waves",
+ "Vehicle drill suite PulseForge Lobby",
+ "Profils audio Battlefield calibrés",
+ "Mises à jour synchronisées patch Battlefield",
+ "Compatibilité PulseForge Lobby sandbox"
+ ],
+ "featureHighlights": [
+ "Ranked/Tous serveurs – 100 % fair-play (lecture d’écran, killfeed, audio, sans injection mémoire)",
+ "Lobbies privés PulseForge – builds synchronisés où tout le monde est sur PulseForge (cosmétique & entraînement avancé)"
+ ],
+ "featureGroups": [
+ {
+ "title": "Ranked / fair-play (live)",
+ "items": [
+ "Ticket & Pressure Overlay : pression par secteur, fenêtres de neutralisation/capture et rappel des tickets.",
+ "Rotation Coach : routes d’escouade safe/fast, backcaps opportunistes et timings de regroupement.",
+ "Spawn Wave Planner : estimation vagues alliées/ennemies, choix beacon/squad/base.",
+ "Vehicle Ops Assistant : cycles réparation/sortie et angles sûrs (sans assistance d’aim).",
+ "Suppression & Visibility : indicateurs suppression et fenêtres de punition.",
+ "Killfeed Intelligence : synthèse wipes d’escouade et détection avantage numérique.",
+ "Focus HUD : masquage contextuel des modules non essentiels pendant les fights massifs."
+ ]
+ },
+ {
+ "title": "Réactivité & couverture",
+ "items": [
+ "Overlay refresh jusqu’à 144 Hz sur profils Medium/High.",
+ "Modules actifs phase-aware : objectifs, escouade, véhicules.",
+ "Temps de réaction moyen ~45 ms sur événements visibles.",
+ "Monitoring réseau continu avec bascule automatique de région."
+ ]
+ },
+ {
+ "title": "PulseForge Lobby",
+ "description": "Options de jeu & d’entraînement (tous joueurs sur build PulseForge)",
+ "items": [
+ "Cosmétiques partagés : thèmes d’escouade, tracers & kill-banners PulseForge.",
+ "Vehicle Drill Suite : circuits tank/IFV/heli/jet, duels blindés et ateliers réparation coordonnée.",
+ "Objective Scenario Runner : scripts Conquest/Breakthrough avec scoreboard captures/retakes/tickets.",
+ "Stratboard Live : tableau tactique par carte avec annotations coach/lead.",
+ "Draft & Role Rules : verrouillage Lead/Anchor/Recon/Support et loadouts imposés.",
+ "Caster Mode : HUD élargi (objectifs, véhicules, tickets), replays instantanés et marqueurs d’actions."
+ ]
+ },
+ {
+ "title": "Pourquoi choisir notre build natif Battlefield 6 ?",
+ "items": [
+ "Intégration native synchronisée après chaque mise à jour DICE.",
+ "Suite overlays fair-play, stream-safe et conforme ranked/tournoi.",
+ "Performances calibrées : 208/186/154 FPS moyens (1080p/1440p/4K).",
+ "Support créatif : scrims, VOD analytics et thèmes d’escouade PulseForge Lobby."
+ ]
+ }
],
- "target_audience": "Joueurs compétitifs, Équipes esport",
- "highlight": "Build privé exclusif",
- "protection": "Undetectable",
- "updates": "Priority updates",
+ "implementationNotes": [
+ "En parties publiques/ranked, les overlays reposent uniquement sur HUD/son/killfeed visibles. Aucune lecture mémoire ni injection.",
+ "Les cosmétiques partagés, scénarios sandbox et stratboards temps réel sont réservés aux lobbies PulseForge avec build commun.",
+ "Les overlays sont opt-in et se masquent automatiquement en fight pour éviter la surcharge visuelle."
+ ],
+ "target_audience": "Escouades Battlefield, coachs véhicules, créateurs",
+ "highlight": "Suite Conquest & véhicules dédiée",
+ "protection": "Fair-play stream-safe",
+ "updates": "Mises à jour synchronisées patch Battlefield",
"pricing": {
- "hourly": 2.25,
- "monthly": 900
+ "hourly": 1.95,
+ "monthly": 680
},
- "sla": "99.999%",
+ "sla": "99.97%",
"support_level": "enterprise",
"badges": [
- "Premium",
- "Exclusive",
- "Next-Gen"
+ "Conquest Optimized",
+ "Stream Safe",
+ "PulseForge Lobby"
],
"image": "/images/products/battlefield6/main.png"
}
],
"reviews": {
- "average": 4.9,
- "count": 342
+ "average": 4.8,
+ "count": 368
},
"discount": {
"active": false,
@@ -1114,7 +1377,8 @@
},
"gallery": [
"/images/products/battlefield6/main.png",
- "/images/products/battlefield6/1.png"
+ "/images/products/battlefield6/1.png",
+ "/images/products/battlefield6/2.png"
]
},
{
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index c669d6a..7b0bbf1 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2126,3 +2126,26 @@ if (hasDecimal) {
#### État:
✅ Fiche Valorant PulseForge conforme aux métriques fournies
✅ Localisation FR/EN/ET opérationnelle avec onglets PulseForge
+
+### Feature: PulseForge Battlefield 6 native build
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Déployer la fiche Battlefield 6 PulseForge avec les métriques Conquest/Breakthrough (208/186/154 FPS) et la suite d’assistances véhicules/escouade.
+- Étendre les overrides de localisation FR/EN/ET pour les performances, l’expérience cloud et les variantes PulseForge spécifiques à Battlefield.
+- Actualiser la documentation centrale afin de référencer l’offre Battlefield et consigner la mise à jour du catalogue.
+
+#### Actions réalisées:
+1. Réécriture de `gaming-battlefield6` dans `data/gaming-products.json` avec les benchmarks 1080p/1440p/4K, l’option « CPU Boost » et les groupes de fonctionnalités PulseForge.
+2. Ajout de `localeOverridesByProduct['gaming-battlefield6']` dans `NativeGamingProductPage.tsx` pour fournir les textes FR/EN/ET (performances, expérience cloud, onglets PulseForge Lobby).
+3. Mise à jour de `docs/README.md` pour inclure la fiche Battlefield et noter la dernière action cataloguée.
+
+#### Fichiers modifiés:
+- `/data/gaming-products.json`
+- `/components/NativeGamingProductPage.tsx`
+- `/docs/README.md`
+
+#### État:
+✅ Offre Battlefield 6 PulseForge alignée sur les métriques fournies
+✅ Localisation FR/EN/ET opérationnelle avec onglets PulseForge Lobby
diff --git a/docs/README.md b/docs/README.md
index 31af5b2..83e5a91 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -82,6 +82,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
- Les variantes peuvent embarquer `featureHighlights`, `featureGroups` (titre, description, éléments) et `implementationNotes` pour décrire les suites PulseForge ; le rendu se base maintenant sur un sélecteur interactif qui affiche un groupe à la fois pour limiter le scroll. Ces blocs sont traduits via les overrides de `copyByLocale.product.variants`.
- L’entrée `gaming-warzone` suit cette structure pour Call of Duty: Warzone : métriques BR (FPS multi-résolutions, option « CPU Boost »), variantes PulseForge et suites de fonctionnalités orientées Battle Royale.
- L’entrée `gaming-valorant` applique le même modèle pour Valorant : performances Esports 1080p/1440p/4K, contrôleur de résolution, onglets PulseForge Lobby et notes de conformité fair-play.
+- L’entrée `gaming-battlefield6` décline l’offre Battlefield 6 PulseForge : profils Conquest/Breakthrough, benchmarks CPU/GPU, option « CPU Boost » et onglets PulseForge Lobby pour les scénarios véhicules et objectifs.
- Les utilitaires d'accès et les types associés vivent dans [`lib/gaming-products.ts`](../lib/gaming-products.ts).
- `getAllGamingProducts()` et `getGamingProductBySlug()` alimentent les routes dynamiques.
@@ -107,7 +108,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
4. Compléter les traductions génériques dans `public/locales//common.json` si besoin.
5. Lancer `npm run lint` pour valider les schémas avant de publier.
-**Dernière action:** Ajout de l’offre native Valorant PulseForge et overrides de localisation FR/EN/ET (22/10/2025)
+**Dernière action:** Ajout de l’offre native Battlefield 6 PulseForge et overrides de localisation FR/EN/ET (23/10/2025)
---
From dfd4308b5a5d33d5c8b2109a7228914a6a097b84 Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Thu, 23 Oct 2025 23:19:45 +0200
Subject: [PATCH 16/25] feat: add PulseForge Destiny 2 native product
---
components/NativeGamingProductPage.tsx | 727 +++++++++++++++++++++++++
data/gaming-products.json | 342 ++++++++++--
docs/JOURNAL.md | 24 +
docs/README.md | 3 +-
4 files changed, 1062 insertions(+), 34 deletions(-)
diff --git a/components/NativeGamingProductPage.tsx b/components/NativeGamingProductPage.tsx
index bd1f044..386d568 100644
--- a/components/NativeGamingProductPage.tsx
+++ b/components/NativeGamingProductPage.tsx
@@ -3509,6 +3509,732 @@ const localeOverridesByProduct: Record
+ `${productName} tourne entièrement sur notre infrastructure : provisioning instantané, routage adaptatif et latence stabilisée à ${latency} ms.`,
+ bullets: [
+ 'Overlays, presets et mises à jour appliqués côté serveur — aucune installation locale.',
+ 'Bascule 1080p/1440p/4K instantanée tout en respectant la fenêtre FPS mesurée.',
+ 'Monitoring ping/jitter/pertes avec bascule automatique de région pour Trials ou raids critiques.'
+ ],
+ profileSubtitle: 'Moyenne mesurée en 1080p Medium',
+ lowLabel: 'Min observé 1080p Medium',
+ lowSubtitle: 'Fenêtre basse relevée'
+ },
+ improvement: { adviceTitle: 'Option « CPU Boost » (côté hôte)' },
+ augmentation: {
+ description: 'Modules situationnels PvE/PvP pour raids, Trials et sandbox stream-safe.'
+ },
+ hero: {
+ badge: 'PROFILS ARME / RÔLE',
+ title: 'Optimisations dédiées',
+ description: 'Chaque preset couvre un archétype Destiny 2 (AR, SMG, LMG, Sniper, Shotgun, Support).',
+ headers: {
+ hero: 'Rôle / Arme',
+ overlay: 'Focus overlay',
+ clarity: 'Clarté visuelle',
+ preset: 'Preset conseillé',
+ notes: 'Notes coaching'
+ },
+ fallbackDescription: (game: string) => `Optimisations par archétype pour ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `Optimisé de bout en bout pour ${game} en PvE/PvP, overlays stream-safe et support raid.`
+ },
+ product: {
+ description: 'Instance Destiny 2 cloud native calibrée Trials/Raids.',
+ longDescription:
+ 'PulseForge Destiny 2 associe stabilité 1% low et pipeline vidéo faible latence pour Crucible, Trials et PvE endgame. Toutes les assistances (Focus HUD, timeline encounters, economy Supers) sont orchestrées côté serveur pour rester conformes aux guidelines Bungie.',
+ variants: {
+ 'pulseforge-destiny2': {
+ name: 'PulseForge Destiny 2 Vanguard',
+ usage: 'Instance Destiny 2 PulseForge',
+ description: 'Build cloud Destiny 2 orienté PvE/PvP avec overlays situationnels et support raids.',
+ use_cases: [
+ 'Trials of Osiris et PvP compétitif',
+ 'Raids, donjons et Nuit Noire GM',
+ 'Scrims privés PulseForge Lobby',
+ 'Production stream et VOD analytics',
+ 'Entraînement DPS et sandbox mécaniques'
+ ],
+ features: [
+ 'Overlays modulaires PvE/PvP stream-safe',
+ 'Analyse post-match & export (timeline, DPS, deaths)',
+ 'Coach macro Supers, economy et rotations',
+ 'Thèmes d’escouade PulseForge Lobby',
+ 'Intégration multi-input clavier/souris/manette',
+ 'Mises à jour synchronisées patch Destiny 2',
+ 'Compatibilité PulseForge Lobby sandbox'
+ ],
+ featureHighlights: [
+ 'Public/Ranked – overlays purement visuels (HUD, audio, killfeed) sans injection mémoire',
+ 'PulseForge Lobby – cosmétiques partagés, sandbox DPS et stratboard live pour tous les joueurs PulseForge'
+ ],
+ featureGroups: [
+ {
+ title: 'Modules tactiques PvE',
+ items: [
+ 'Encounter Timeline : jalons mécaniques, phases DPS et safe spots stream-safe.',
+ 'Champions & Mods Planner : rappel champions/mods requis par escouade.',
+ 'Super & Buff Orchestrator : cycle Supers et buffs/débuffs visibles pour éviter l’overlap.',
+ 'Ammo Economy : prompts heavy/special avant les phases DPS critiques.',
+ 'DPS Estimator : lecture relative du DPS de phase basée sur les ticks affichés.',
+ 'Survival Cues : alertes résilience/recovery et fenêtres sans rez.'
+ ]
+ },
+ {
+ title: 'Modules tactiques PvP',
+ items: [
+ 'Zone & Pressure Map : pression par zone et lecture du man-advantage via killfeed.',
+ 'Super Economy Read : estimation charge Supers visible pour rounds clés.',
+ 'Peek Discipline : repères head-height, tempo jiggle/swing et prompts anti ego-peek.',
+ 'Fight Timeline : suivi trades, alerte no-trade 3 s et rappel stabiliser quand l’équipe mène.',
+ 'Audio Spatial Director : priorisation pas/portes/reloads, ducking automatique du bruit non critique.'
+ ]
+ },
+ {
+ title: 'Réactivité & couverture',
+ items: [
+ 'Overlay refresh jusqu’à 144 Hz.',
+ 'Modules actifs selon mode PvE/PvP détecté.',
+ 'Temps de réaction moyen ~40–45 ms sur événements visibles.',
+ 'Monitoring réseau avec bascule automatique de région.'
+ ]
+ },
+ {
+ title: 'PulseForge Lobby',
+ description: 'Options de jeu & d’entraînement (tous joueurs sur build PulseForge)',
+ items: [
+ 'Raid Lab : salles mécaniques avec timelines partageables et scoring d’exécution.',
+ 'DPS Check Lab : mannequins et cibles mobiles avec scoreboard DPS de phase.',
+ 'Movement & Ability Sandbox : parcours chronométrés et drills capacité avec reset rapide.',
+ 'Ghost-Run & Pathing : fantômes de vos meilleures exécutions et replays synchronisés.',
+ 'Cosmétiques partagés : bannières d’escouade, finisher FX, kill-banners PulseForge.',
+ 'Caster Mode : HUD élargi, replays instantanés 8 s et export highlights.'
+ ]
+ },
+ {
+ title: 'Pourquoi choisir notre build natif Destiny 2 ?',
+ items: [
+ 'Intégration native synchronisée après chaque patch Bungie.',
+ 'Suite fair-play stream-safe pour PvE/PvP sans injection ni assistance intrusive.',
+ 'Performances calibrées : 402/356/246 FPS moyens avec marge sur chaque preset.',
+ 'Support créatif : scrims, analytics VOD et thèmes d’escouade PulseForge Lobby.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'En parties publiques/ranked, les overlays reposent uniquement sur HUD, audio et killfeed visibles.',
+ 'Cosmétiques, sandbox DPS et stratboards live sont réservés aux lobbies PulseForge avec build partagé.',
+ 'Overlays opt-in et auto-masquage lors des phases à forte intensité visuelle.'
+ ],
+ target_audience: 'Escouades Destiny, raid leads, créateurs',
+ highlight: 'Stabilité 1% low pour PvE/PvP intensif',
+ protection: 'Fair-play stream-safe certifié',
+ updates: 'Mises à jour synchronisées patch Destiny 2'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Très fluide', bottleneck: 'CPU (≈76%)' },
+ { playability: 'Très fluide', bottleneck: 'CPU (≈64%)' },
+ { playability: 'Très fluide', bottleneck: 'GPU (≈41%)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: 'Cible 240–360 Hz',
+ description: 'Le profil 1080p Medium maintient ~402 FPS avec Ultra à ~342 FPS pour Trials et Crucible.',
+ note: 'Activez Focus HUD pour lisser les phases clutch.'
+ },
+ {
+ refreshAdvice: 'Netteté + fréquence 240 Hz',
+ description: '1440p conserve une fenêtre 302–410 FPS, idéale pour streaming et VOD détaillées.',
+ note: 'Conservez le preset High pour stabiliser les 1% low.'
+ },
+ {
+ refreshAdvice: '4K 200+ Hz jouable',
+ description: 'Même en 4K Medium (~246 FPS), l’expérience reste très fluide pour les raids showcase.',
+ note: 'Ultra (~206 FPS) convient aux sessions stream premium.'
+ }
+ ],
+ improvementTips: [
+ 'Utilisez le preset Esports/Low pour Trials/Compétitif, Medium pour le PvE endgame.',
+ 'Laissez PulseForge piloter le cap FPS et l’anti-tear ; évitez les limites externes.',
+ 'Activez Focus HUD pour masquer les modules non essentiels pendant les fights.',
+ 'En 4K, privilégiez High plutôt qu’Ultra pour conserver la régularité des combats.'
+ ],
+ advice:
+ 'Option « CPU Boost » : +5 % → ~410/348/470 FPS · +10 % → ~418/355/478 FPS · +15 % → ~428/364/490 FPS · +20 % → ~440/374/505 FPS (nœud Thermal-Premium requis).',
+ augmentationSuite: {
+ modules: [
+ 'Encounter Timeline : jalons mécaniques, phases DPS et safe spots stream-safe.',
+ 'Champions & Mods Planner : rappel champions/mods requis par escouade.',
+ 'Super & Buff Orchestrator : cycle Supers et buffs/débuffs visibles.',
+ 'Ammo Economy : suivi heavy/special et fenêtres probables de drop.',
+ 'DPS Estimator : lecture relative du DPS de phase basée sur les ticks affichés.',
+ 'Survival Cues : alertes résilience/recovery et fenêtres sans rez.',
+ 'Zone & Pressure Map : pression par zone et man-advantage via killfeed.',
+ 'Super Economy Read : estimation charge Supers visible pour rounds clés.',
+ 'Peek Discipline : repères head-height, tempo jiggle/swing et prompts anti ego-peek.',
+ 'Fight Timeline : suivi trades et alerte no-trade 3 s.'
+ ],
+ notes: 'Modules PvE/PvP rafraîchis après chaque patch Destiny 2.'
+ },
+ heroSynergy: [
+ { preset: 'Balance', coachingNotes: 'Angles d’ouverture sécurisés et rappels anti ego-peek.' },
+ { preset: 'Esports', coachingNotes: 'Timing d’entrée, engage windows et routes d’évasion courtes.' },
+ { preset: 'Stability', coachingNotes: 'Contrôle des lanes longues et discipline reload.' },
+ { preset: 'Sniper Focus', coachingNotes: 'Pré-aim hauteur tête et gestion du glint.' },
+ { preset: 'Indoor', coachingNotes: 'Consolidation des pushes rapprochés et duo-timings.' },
+ { preset: 'Macro', coachingNotes: 'Macro-calls, economy Supers et alertes rotations.' }
+ ]
+ }
+ },
+ en: {
+ nativeAdvantages: [
+ {
+ icon: Code,
+ title: 'Native Destiny 2 profile',
+ description: 'Stable 1% lows and low-latency pipeline tuned for PvE and PvP.'
+ },
+ {
+ icon: Zap,
+ title: 'Instant cloud provisioning',
+ description: 'Destiny instances spin up in seconds with automatic region failover based on ping.'
+ },
+ {
+ icon: Shield,
+ title: 'Fair-play situational suite',
+ description: 'PvE/PvP overlays stay stream-safe with zero memory injection or intrusive assists.'
+ },
+ {
+ icon: Trophy,
+ title: 'Raid & Trials support',
+ description: 'PulseForge Lobby sandbox, DPS analytics, and macro Super guidance.'
+ }
+ ],
+ metrics: {
+ title: 'Calibrated performance for Destiny 2',
+ description:
+ 'PulseForge competitive Medium profile: 402 average FPS, 342 FPS observed low, and 462 FPS peak at 1080p. 1440p and 4K remain very smooth thanks to CPU↔GPU allocation and our low-latency pipeline.',
+ statCards: {
+ maxFps: 'Max observed FPS (1080p Medium)',
+ onePercentLow: 'Min observed (1% low proxy, 1080p Medium)',
+ inputLag: 'Average input lag'
+ },
+ allocationTitle: 'Dominant bottleneck (Medium profile)',
+ datacenterTitle: 'PulseForge cloud monitoring',
+ usage: {
+ cpu: 'CPU load',
+ gpu: 'GPU load',
+ ram: 'Memory used',
+ vram: 'VRAM used'
+ },
+ thermals: {
+ cpu: 'Cloud CPU temperature',
+ gpu: 'GPU temperature',
+ power: 'Power draw'
+ },
+ stabilityNote:
+ 'Destiny 2 is CPU-bound at 1080p/1440p; our profiles preserve headroom while keeping input lag steady at 4K.'
+ },
+ fpsTable: {
+ footnote: 'Internal Destiny 2 benchmarks (competitive Medium profile across Crucible/Trials and endgame PvE).'
+ },
+ resolution: {
+ title: 'How to adjust resolution from the cloud',
+ description:
+ 'Our internal measurements show the real FPS buffer when you change resolution via the PulseForge panel.',
+ windowLabel: 'Measured window',
+ footnote: 'Values captured on Destiny 2 Medium/Ultra presets with overlays enabled.',
+ avgLabel: 'Average FPS'
+ },
+ experience: {
+ description: (productName: string, latency: number) =>
+ `${productName} runs entirely on our infrastructure: instant provisioning, adaptive routing, and latency held around ${latency} ms.`,
+ bullets: [
+ 'Server-side overlays, presets, and updates—nothing to install locally.',
+ 'Instant 1080p/1440p/4K switching while respecting the measured FPS window.',
+ 'Live ping/jitter/loss monitoring with automatic region failover for critical Trials or raid sessions.'
+ ],
+ profileSubtitle: 'Average measured at 1080p Medium',
+ lowLabel: 'Min observed 1080p Medium',
+ lowSubtitle: 'Recorded low window'
+ },
+ improvement: { adviceTitle: 'CPU Boost option (host side)' },
+ augmentation: {
+ description: 'Situational PvE/PvP modules covering raids, Trials, and stream-safe sandbox drills.'
+ },
+ hero: {
+ badge: 'WEAPON / ROLE PROFILES',
+ title: 'Dedicated optimizations',
+ description: 'Each preset covers a Destiny 2 archetype (AR, SMG, LMG, Sniper, Shotgun, Support).',
+ headers: {
+ hero: 'Role / weapon',
+ overlay: 'Overlay focus',
+ clarity: 'Visual clarity',
+ preset: 'Recommended preset',
+ notes: 'Coaching notes'
+ },
+ fallbackDescription: (game: string) => `Archetype-specific optimizations for ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `Optimized end to end for ${game} PvE/PvP with stream-safe overlays and raid support.`
+ },
+ product: {
+ description: 'Cloud-native Destiny 2 instance tuned for Trials and raid stability.',
+ longDescription:
+ 'PulseForge Destiny 2 balances 1% low stability with a low-latency video pipeline for Crucible, Trials, and endgame PvE. Focus HUD, encounter timelines, and Super economy coaching are orchestrated server-side to respect Bungie’s guidelines.',
+ variants: {
+ 'pulseforge-destiny2': {
+ name: 'PulseForge Destiny 2 Vanguard',
+ usage: 'Destiny 2 PulseForge instance',
+ description: 'Cloud Destiny 2 build focused on PvE/PvP overlays and raid-ready support.',
+ use_cases: [
+ 'Trials of Osiris and competitive PvP',
+ 'Raids, dungeons, and Grandmaster Nightfalls',
+ 'Private scrims with PulseForge Lobby',
+ 'Stream production and VOD analytics',
+ 'DPS training and encounter sandbox'
+ ],
+ features: [
+ 'Stream-safe PvE/PvP modular overlays',
+ 'Post-match analysis & exports (timeline, DPS, deaths)',
+ 'Macro coaching for Supers, economy, and rotations',
+ 'PulseForge Lobby squad theming',
+ 'Multi-input integration (keyboard/mouse, controller)',
+ 'Patch-synced Destiny 2 updates',
+ 'PulseForge Lobby sandbox compatibility'
+ ],
+ featureHighlights: [
+ 'Public/ranked – purely visual overlays (HUD, audio, killfeed) with no memory injection',
+ 'PulseForge Lobby – shared cosmetics, DPS sandbox, and live stratboard for every PulseForge player'
+ ],
+ featureGroups: [
+ {
+ title: 'PvE tactical modules',
+ items: [
+ 'Encounter Timeline: mechanical milestones, DPS windows, and safe spots.',
+ 'Champions & Mods Planner: reminders for champion types and required anti-barrier/overload mods.',
+ 'Super & Buff Orchestrator: visible Super and buff/debuff cycles to avoid overlap.',
+ 'Ammo Economy: heavy/special prompts before critical DPS phases.',
+ 'DPS Estimator: phase DPS read based on visible ticks.',
+ 'Survival Cues: resilience/recovery prompts and no-rez windows.'
+ ]
+ },
+ {
+ title: 'PvP tactical modules',
+ items: [
+ 'Zone & Pressure Map: area pressure and man-advantage from the killfeed.',
+ 'Super Economy Read: visible Super charge estimation for clutch rounds.',
+ 'Peek Discipline: head-height markers, jiggle/swing pacing, and anti ego-peek prompts.',
+ 'Fight Timeline: trade tracking, 3-second no-trade alert, and stabilize reminders.',
+ 'Audio Spatial Director: footsteps/doors/reload prioritization with automatic ducking.'
+ ]
+ },
+ {
+ title: 'Reactivity & coverage',
+ items: [
+ 'Overlay refresh up to 144 Hz.',
+ 'Modules adapt automatically to PvE or PvP contexts.',
+ 'Average reaction time ~40–45 ms on visible events.',
+ 'Network monitoring with automatic region failover.'
+ ]
+ },
+ {
+ title: 'PulseForge Lobby',
+ description: 'Training options when everyone runs the PulseForge build',
+ items: [
+ 'Raid Lab: mechanic rooms with shareable timelines and execution scoring.',
+ 'DPS Check Lab: dummies and moving targets with phase DPS scoreboards.',
+ 'Movement & Ability Sandbox: timed routes and ability drills with quick resets.',
+ 'Ghost-Run & Pathing: ghost replays of best clears and synchronized playback.',
+ 'Shared cosmetics: squad banners, finisher FX, PulseForge kill banners.',
+ 'Caster Mode: expanded HUD, 8-second instant replays, and highlight exports.'
+ ]
+ },
+ {
+ title: 'Why choose our native Destiny 2 build?',
+ items: [
+ 'Native integration synchronized after every Bungie patch.',
+ 'Stream-safe fair-play overlays for PvE/PvP without intrusive assists.',
+ 'Calibrated performance: 402/356/246 average FPS across 1080p/1440p/4K.',
+ 'Creative support: scrims, VOD analytics, and PulseForge Lobby squad theming.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'In public/ranked games overlays rely solely on visible HUD/audio/killfeed data.',
+ 'Cosmetics, DPS sandbox, and live stratboards stay limited to PulseForge lobbies with a shared build.',
+ 'Overlays are opt-in and auto-hide during high-visibility phases.'
+ ],
+ target_audience: 'Destiny fireteams, raid leads, creators',
+ highlight: 'Stable 1% lows for intense PvE/PvP',
+ protection: 'Certified stream-safe fair play',
+ updates: 'Destiny 2 patch-synced updates'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Very smooth', bottleneck: 'CPU (≈76%)' },
+ { playability: 'Very smooth', bottleneck: 'CPU (≈64%)' },
+ { playability: 'Very smooth', bottleneck: 'GPU (≈41%)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: '240–360 Hz competitive target',
+ description: 'The 1080p Medium profile holds ~402 FPS with Ultra near 342 FPS for Trials and Crucible.',
+ note: 'Enable Focus HUD to smooth clutch phases.'
+ },
+ {
+ refreshAdvice: '240 Hz sharpness balance',
+ description: '1440p maintains a 302–410 FPS window, perfect for detailed streaming and VOD work.',
+ note: 'Stay on the High preset to stabilize 1% lows.'
+ },
+ {
+ refreshAdvice: 'Playable 4K above 200 Hz',
+ description: '4K Medium (~246 FPS) stays very smooth for raid showcases; Ultra (~206 FPS) suits premium streams.',
+ note: 'Use this mode for broadcast-ready captures.'
+ }
+ ],
+ improvementTips: [
+ 'Use the Esports/Low preset for Trials/competitive play and Medium for endgame PvE.',
+ 'Let PulseForge control frame capping and anti-tear; avoid external limits.',
+ 'Enable Focus HUD to hide non-essential modules mid-fight.',
+ 'At 4K, prefer High over Ultra to keep combat pacing consistent.'
+ ],
+ advice:
+ 'CPU Boost option: +5% → ~410/348/470 FPS · +10% → ~418/355/478 FPS · +15% → ~428/364/490 FPS · +20% → ~440/374/505 FPS (requires a Thermal-Premium node).',
+ augmentationSuite: {
+ modules: [
+ 'Encounter Timeline: mechanical milestones, DPS windows, and safe spots.',
+ 'Champions & Mods Planner: champion/mod reminders for the fireteam.',
+ 'Super & Buff Orchestrator: visible Super and buff/debuff cycles.',
+ 'Ammo Economy: heavy/special tracking with drop windows.',
+ 'DPS Estimator: phase DPS read based on visible ticks.',
+ 'Survival Cues: resilience/recovery prompts and no-rez windows.',
+ 'Zone & Pressure Map: zone pressure and numeric advantage from the killfeed.',
+ 'Super Economy Read: visible Super charge estimation.',
+ 'Peek Discipline: head-height markers and anti ego-peek prompts.',
+ 'Fight Timeline: trade tracking with a 3-second no-trade alert.'
+ ],
+ notes: 'PvE/PvP modules refreshed after every Destiny 2 patch.'
+ },
+ heroSynergy: [
+ { preset: 'Balance', coachingNotes: 'Secure opening angles with anti ego-peek reminders.' },
+ { preset: 'Esports', coachingNotes: 'Engage timing, windows, and short escape routes.' },
+ { preset: 'Stability', coachingNotes: 'Long lane control and reload discipline.' },
+ { preset: 'Sniper Focus', coachingNotes: 'Head-height pre-aim and glint management.' },
+ { preset: 'Indoor', coachingNotes: 'Structured close-range pushes and duo timings.' },
+ { preset: 'Macro', coachingNotes: 'Macro calls, Super economy, and rotation alerts.' }
+ ]
+ }
+ },
+ et: {
+ nativeAdvantages: [
+ {
+ icon: Code,
+ title: 'Destiny 2 natiivne profiil',
+ description: 'Stabiilsed 1% low väärtused ja madala latentsusega toru PvE/PvP jaoks.'
+ },
+ {
+ icon: Zap,
+ title: 'Kohene pilveprovision',
+ description: 'Destiny instantsid käivituvad sekunditega ja vahetavad regiooni automaatselt vastavalt pingile.'
+ },
+ {
+ icon: Shield,
+ title: 'Fair-play situatsiooniline suite',
+ description: 'PvE/PvP overlayd on stream-safe – mälu ei loeta ja abivahendeid ei lisata.'
+ },
+ {
+ icon: Trophy,
+ title: 'Raidide ja Trials tugi',
+ description: 'PulseForge Lobby sandbox, DPS analüütika ja makro-Superite juhendamine.'
+ }
+ ],
+ metrics: {
+ title: 'Destiny 2 jõudlus',
+ description:
+ 'PulseForge’i Medium võistlusprofiil: keskmiselt 402 FPS, miinimum 342 FPS ja maksimum 462 FPS 1080p juures. 1440p ja 4K püsivad väga sujuvana tänu CPU↔GPU jaotusele ja madala latentsusega torule.',
+ statCards: {
+ maxFps: 'Maks FPS (1080p Medium)',
+ onePercentLow: 'Min täheldatud (1% low proxy, 1080p Medium)',
+ inputLag: 'Keskmine sisendviivitus'
+ },
+ allocationTitle: 'Domineeriv kitsaskoht (Medium profiil)',
+ datacenterTitle: 'PulseForge’i pilvemonitoring',
+ usage: {
+ cpu: 'CPU koormus',
+ gpu: 'GPU koormus',
+ ram: 'Mälu kasutus',
+ vram: 'VRAM kasutus'
+ },
+ thermals: {
+ cpu: 'Pilve CPU temperatuur',
+ gpu: 'GPU temperatuur',
+ power: 'Võimsustarve'
+ },
+ stabilityNote:
+ 'Destiny 2 on 1080p/1440p juures CPU-bound; meie profiilid hoiavad varu ja sisendviivituse stabiilsena isegi 4K-s.'
+ },
+ fpsTable: {
+ footnote: 'Sisemised Destiny 2 benchmarkid (Medium profiil Crucible/Trials ja PvE endgame stsenaariumites).'
+ },
+ resolution: {
+ title: 'Kuidas pilves resolutsiooni muuta',
+ description:
+ 'Sisemised mõõtmised näitavad tegelikku FPS varu, kui muudate PulseForge’i paneelist resolutsiooni.',
+ windowLabel: 'Mõõdetud aken',
+ footnote: 'Väärtused mõõdetud Destiny 2 Medium/Ultra presetidel koos overlaydega.',
+ avgLabel: 'Keskmine FPS'
+ },
+ experience: {
+ description: (productName: string, latency: number) =>
+ `${productName} töötab täielikult meie infrastruktuuris: kohene provisioning, adaptiivne marsruut ja latentsus umbes ${latency} ms.`,
+ bullets: [
+ 'Overlayd, presetid ja uuendused rakenduvad serveripoolselt – lokaalset installi pole vaja.',
+ 'Vaheta 1080p/1440p/4K koheselt, säilitades mõõdetud FPS akna.',
+ 'Elav ping/jitter/kao jälgimine automaatse regiooni vahetusega Trials’i või raidide kriitilistel hetkedel.'
+ ],
+ profileSubtitle: 'Keskmine 1080p Medium mõõtmine',
+ lowLabel: 'Min 1080p Medium',
+ lowSubtitle: 'Salvestatud madalaken'
+ },
+ improvement: { adviceTitle: '„CPU Boost” valik (hosti pool)' },
+ augmentation: {
+ description: 'Situatsioonilised PvE/PvP moodulid raidide, Trials’i ja stream-safe sandboxi jaoks.'
+ },
+ hero: {
+ badge: 'RELV / ROLL PROFIILID',
+ title: 'Pühendatud optimeerimised',
+ description: 'Iga preset katab Destiny 2 arhetüübi (AR, SMG, LMG, snaiper, shotgun, tugi).',
+ headers: {
+ hero: 'Roll / relv',
+ overlay: 'Overlay fookus',
+ clarity: 'Visuaalne selgus',
+ preset: 'Soovitatud preset',
+ notes: 'Coaching märkused'
+ },
+ fallbackDescription: (game: string) => `Arhetüübi optimeerimised mängule ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `Täielikult optimeeritud lahendus mängule ${game} PvE/PvP jaoks stream-safe overlaydega.`
+ },
+ product: {
+ description: 'Pilvepõhine Destiny 2 instants Trials’i ja raidi stabiilsuseks.',
+ longDescription:
+ 'PulseForge Destiny 2 ühendab stabiilsed 1% low väärtused ja madala latentsusega videotoru Crucible’i, Trials’i ja PvE endgame’i jaoks. Focus HUD, encounter timeline’id ja Superite majandus juhitakse serveripoolselt, järgides Bungie juhiseid.',
+ variants: {
+ 'pulseforge-destiny2': {
+ name: 'PulseForge Destiny 2 Vanguard',
+ usage: 'Destiny 2 PulseForge instants',
+ description: 'Pilvepõhine Destiny 2 build PvE/PvP overlayde ja raidivalmiduse jaoks.',
+ use_cases: [
+ 'Trials of Osiris ja konkurentsitihe PvP',
+ 'Raidid, dungeonid ja Grandmaster Nightfallid',
+ 'Privaat-scrimid PulseForge Lobbyga',
+ 'Striimitootmine ja VOD analüütika',
+ 'DPS treening ja encounter sandbox'
+ ],
+ features: [
+ 'Stream-safe PvE/PvP modulaarsed overlayd',
+ 'Post-matši analüüs ja eksport (timeline, DPS, deaths)',
+ 'Makro coaching Superite, majanduse ja rotatsioonide jaoks',
+ 'PulseForge Lobby eskadroni teemad',
+ 'Multi-input integratsioon (klaviatuur/hiir, kontroller)',
+ 'Patchidega sünkroonitud Destiny 2 uuendused',
+ 'PulseForge Lobby sandboxi tugi'
+ ],
+ featureHighlights: [
+ 'Avalik/ranked – puhtalt visuaalsed overlayd (HUD, audio, killfeed), mälu ei loeta',
+ 'PulseForge Lobby – jagatud kosmeetika, DPS sandbox ja live stratboard kõigile PulseForge’i mängijatele'
+ ],
+ featureGroups: [
+ {
+ title: 'PvE taktikamoodulid',
+ items: [
+ 'Encounter Timeline: mehaanika verstapostid, DPS aknad ja safe spotid.',
+ 'Champions & Mods Planner: meeldetuletused champion-tüüpidest ja vajaminevatest modidest.',
+ 'Super & Buff Orchestrator: nähtavad Superite ja buff/debuff’i tsüklid ülekattest hoidumiseks.',
+ 'Ammo Economy: heavy/special meeldetuletused enne DPS faase.',
+ 'DPS Estimator: faasi DPS lugemine nähtavate tickide põhjal.',
+ 'Survival Cues: vastupidavuse/taastumise vihjed ja no-rez aknad.'
+ ]
+ },
+ {
+ title: 'PvP taktikamoodulid',
+ items: [
+ 'Zone & Pressure Map: surve tsoonides ja killfeedist loetav arvuline eelis.',
+ 'Super Economy Read: nähtav Superi laetuse hinnang otsustavate roundide jaoks.',
+ 'Peek Discipline: pea kõrguse märgised, jiggle/swing tempo ja anti ego-peek vihjed.',
+ 'Fight Timeline: trade’i jälgimine, 3-sekundiline no-trade hoiatus ja stabiliseerimise meeldetuletused.',
+ 'Audio Spatial Director: sammude/uste/reload’i prioriseerimine automaatse summutusega.'
+ ]
+ },
+ {
+ title: 'Reageerimine ja katvus',
+ items: [
+ 'Overlay värskendus kuni 144 Hz.',
+ 'Moodulid kohanevad automaatselt PvE või PvP kontekstiga.',
+ 'Keskmine reaktsiooniaeg ~40–45 ms nähtavate sündmuste puhul.',
+ 'Võrgu jälgimine automaatse regiooni vahetusega.'
+ ]
+ },
+ {
+ title: 'PulseForge Lobby',
+ description: 'Treeningvõimalused, kui kõik kasutavad PulseForge’i buildi',
+ items: [
+ 'Raid Lab: mehaanikaruumid jagatavate timeline’ide ja soorituspunktidega.',
+ 'DPS Check Lab: mannekeenid ja liikuvad sihtmärgid DPS scoreboardiga.',
+ 'Movement & Ability Sandbox: ajastatud rajad ja võimeharjutused kiire resetiga.',
+ 'Ghost-Run & Pathing: parimate soorituste „fantoomid” ja sünkroniseeritud taasesitused.',
+ 'Jagatud kosmeetika: eskadroni bännerid, finisher FX, PulseForge’i kill-bannerid.',
+ 'Caster Mode: laiendatud HUD, 8-sekundilised kohesed kordused ja highlight’ide eksport.'
+ ]
+ },
+ {
+ title: 'Miks valida meie natiivne Destiny 2 build?',
+ items: [
+ 'Natiivne integratsioon sünkroonis iga Bungie patchiga.',
+ 'Stream-safe fair-play overlayd PvE/PvP jaoks ilma pealetükkivate abideta.',
+ 'Kalibreeritud jõudlus: 402/356/246 FPS keskmiselt 1080p/1440p/4K juures.',
+ 'Loominguline tugi: scrimid, VOD analüütika ja PulseForge Lobby eskadroni teemad.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'Avalikes/ranked mängudes tuginevad overlayd ainult nähtavale HUDile/helile/killfeedile.',
+ 'Kosmeetika, DPS sandbox ja live stratboardid on piiratud PulseForge’i lobbydega, kus on ühine build.',
+ 'Overlayd on opt-in ja peidavad end intensiivsetel visuaalsetel faasidel.'
+ ],
+ target_audience: 'Destiny fireteamid, raid lead’id, loojad',
+ highlight: 'Stabiilsed 1% low väärtused intensiivseks PvE/PvP-ks',
+ protection: 'Sertifitseeritud stream-safe fair-play',
+ updates: 'Destiny 2 patchidega sünkroonitud uuendused'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Väga sujuv', bottleneck: 'CPU (≈76%)' },
+ { playability: 'Väga sujuv', bottleneck: 'CPU (≈64%)' },
+ { playability: 'Väga sujuv', bottleneck: 'GPU (≈41%)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: '240–360 Hz siht',
+ description: '1080p Medium hoiab ~402 FPS, Ultra on ~342 FPS Trials’i ja Crucible’i jaoks.',
+ note: 'Aktiveeri Focus HUD, et clutch-situatsioonides kõver sujuvaks jääks.'
+ },
+ {
+ refreshAdvice: '240 Hz teravuse tasakaal',
+ description: '1440p säilitab 302–410 FPS akna – ideaalne detailseks striimiks ja VOD tööks.',
+ note: 'Hoia High presetit, et 1% madalad stabiilsed oleksid.'
+ },
+ {
+ refreshAdvice: 'Mängitav 4K üle 200 Hz',
+ description: '4K Medium (~246 FPS) püsib väga sujuv raidide showcase’ideks; Ultra (~206 FPS) sobib premium-striimiks.',
+ note: 'Kasuta seda režiimi edastusvalmis salvestusteks.'
+ }
+ ],
+ improvementTips: [
+ 'Kasuta Trials/konkurentsimängus Esports/Low presetit ja PvE endgame’is Medium presetit.',
+ 'Lase PulseForge’il kontrollida FPS piiramist ja anti-tear’i; väldi väliseid limite.',
+ 'Lülita Focus HUD sisse, et võitluse ajal mittevajalikud moodulid peita.',
+ '4K juures eelista High presetit Ultra asemel, et hoida lahingutempo ühtlane.'
+ ],
+ advice:
+ '„CPU Boost” valik: +5% → ~410/348/470 FPS · +10% → ~418/355/478 FPS · +15% → ~428/364/490 FPS · +20% → ~440/374/505 FPS (vajab Thermal-Premium sõlme).',
+ augmentationSuite: {
+ modules: [
+ 'Encounter Timeline: mehaanika verstapostid, DPS aknad ja safe spotid.',
+ 'Champions & Mods Planner: championite/modide meeldetuletused tiimile.',
+ 'Super & Buff Orchestrator: nähtavad Superite ja buff/debuff’i tsüklid.',
+ 'Ammo Economy: heavy/special jälgimine ja drop-aknad.',
+ 'DPS Estimator: faasi DPS lugemine nähtavate tickide järgi.',
+ 'Survival Cues: vastupidavuse/taastumise vihjed ja no-rez aknad.',
+ 'Zone & Pressure Map: surve tsoonides ja killfeedist loetav arvuline eelis.',
+ 'Super Economy Read: Superi laetuse hinnang nähtava info põhjal.',
+ 'Peek Discipline: pea kõrguse märgised ja anti ego-peek vihjed.',
+ 'Fight Timeline: trade’i jälgimine ja 3-sekundiline no-trade hoiatus.'
+ ],
+ notes: 'PvE/PvP moodulid värskendatakse iga Destiny 2 patchi järel.'
+ },
+ heroSynergy: [
+ { preset: 'Balance', coachingNotes: 'Turvalised avamisnurgad ja anti ego-peek meeldetuletused.' },
+ { preset: 'Esports', coachingNotes: 'Engage’i ajastus, aknad ja lühikesed põgenemisteed.' },
+ { preset: 'Stability', coachingNotes: 'Pikamaa kontroll ja reload’i distsipliin.' },
+ { preset: 'Sniper Focus', coachingNotes: 'Pea kõrguse pre-aim ja glindi haldus.' },
+ { preset: 'Indoor', coachingNotes: 'Struktureeritud lähivõitlused ja duo-timingud.' },
+ { preset: 'Macro', coachingNotes: 'Makrokõned, Superi majandus ja rotatsiooni hoiatused.' }
+ ]
}
}
}
@@ -3516,6 +4242,7 @@ const localeOverridesByProduct: Record/common.json` si besoin.
5. Lancer `npm run lint` pour valider les schémas avant de publier.
-**Dernière action:** Ajout de l’offre native Battlefield 6 PulseForge et overrides de localisation FR/EN/ET (23/10/2025)
+**Dernière action:** Ajout de l’offre native Destiny 2 PulseForge et overrides de localisation FR/EN/ET (23/10/2025)
---
From 83780041e91d412c525ed00978efb3ebe2dc36f3 Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Fri, 24 Oct 2025 17:04:06 +0200
Subject: [PATCH 17/25] feat: add PulseForge Dota 2 native product
---
components/NativeGamingProductPage.tsx | 683 +++++++++++++++++++++++++
data/gaming-products.json | 388 ++++++++++----
docs/JOURNAL.md | 24 +
docs/README.md | 3 +-
4 files changed, 998 insertions(+), 100 deletions(-)
diff --git a/components/NativeGamingProductPage.tsx b/components/NativeGamingProductPage.tsx
index 386d568..6c1640b 100644
--- a/components/NativeGamingProductPage.tsx
+++ b/components/NativeGamingProductPage.tsx
@@ -4237,6 +4237,689 @@ const localeOverridesByProduct: Record
+ `${productName} tourne entièrement sur notre infrastructure : provisioning instantané, routage adaptatif et latence stabilisée à ${latency} ms.`,
+ bullets: [
+ 'Overlays, presets et mises à jour appliqués côté serveur — rien à installer localement.',
+ 'Bascule 1080p/1440p/4K instantanée tout en respectant la fenêtre FPS mesurée.',
+ 'Monitoring ping/jitter/pertes avec bascule automatique de région lors des tournois et scrims.'
+ ],
+ profileSubtitle: 'Moyenne mesurée en 1080p Medium',
+ lowLabel: 'Min observé 1080p Medium',
+ lowSubtitle: 'Fenêtre basse relevée'
+ },
+ improvement: { adviceTitle: 'Option « CPU Boost » (côté hôte)' },
+ augmentation: {
+ description: 'Modules tactiques sobres pour teamfights, macro économies et confort stream-safe.'
+ },
+ hero: {
+ badge: 'PROFILS PAR RÔLE',
+ title: 'Optimisations dédiées',
+ description: 'Chaque preset couvre les positions 1 à 5 avec feedback overlay dédié.',
+ headers: {
+ hero: 'Rôle',
+ overlay: 'Focus overlay',
+ clarity: 'Clarté visuelle',
+ preset: 'Preset conseillé',
+ notes: 'Notes coaching'
+ },
+ fallbackDescription: (game: string) => `Optimisations par rôle pour ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `Optimisé de bout en bout pour ${game} avec overlays fair-play et sandbox scrims.`
+ },
+ product: {
+ description: 'Instance Dota 2 cloud native calibrée compétitif.',
+ longDescription:
+ 'PulseForge Dota 2 vise une fréquence d’image stable tout en respectant le fair-play : overlays purement visuels, pipeline vidéo faible latence et sandbox PulseForge Lobby pour scrims et entraînements.',
+ variants: {
+ 'pulseforge-dota2': {
+ name: 'PulseForge Dota 2 Ancients',
+ usage: 'Instance Dota 2 PulseForge',
+ description: 'Build cloud Dota 2 orienté compétitif avec overlays sobres et sandbox scrim.',
+ use_cases: [
+ 'Ranked haut niveau et scrims',
+ 'Coaching équipe et analyst desk',
+ 'Production stream MOBA',
+ 'Revues VOD stratégiques',
+ 'Sandbox PulseForge Lobby'
+ ],
+ features: [
+ 'Overlays modulaires stream-safe',
+ 'Analyse post-match et exports timeline',
+ 'Coach macro rotations & buybacks',
+ 'Thèmes d’équipe PulseForge Lobby',
+ 'Intégration multi-input clavier/souris/manette',
+ 'Mises à jour synchronisées patch Dota 2',
+ 'Compatibilité PulseForge Lobby sandbox'
+ ],
+ featureHighlights: [
+ 'Public/Ranked – overlays purement visuels (HUD, audio, killfeed, minimap) sans lecture mémoire',
+ 'PulseForge Lobby – cosmétiques partagés et sandbox lanes/warding pour tous les joueurs PulseForge'
+ ],
+ featureGroups: [
+ {
+ title: 'Modules tactiques publics',
+ items: [
+ 'Roshan/Aegis & Runes : rappels Aegis, Power/Bounty et alternance Day/Night.',
+ 'Stack & Pull Helper : minuteurs pull/stack affichés sur la carte.',
+ 'Buyback & Économie : suivi buybacks alliés, stocks smokes/dusts/TPs et rappels shop.',
+ 'Fight Timeline : suivi trades, alerte no-trade 3 s et man-advantage.',
+ 'Post-fight Digest : récap morts, ultis et TPs disponibles par camp.',
+ 'Focus HUD : masquage intelligent des stats toxiques pendant les fights.'
+ ]
+ },
+ {
+ title: 'Lisibilité & confort',
+ items: [
+ 'Audio Spatial Director : priorisation pas/TP/ult, ducking du bruit non critique.',
+ 'Color grading optionnel pour highlight spells critiques.',
+ 'Anti-tilt HUD avec prompts respiration entre fights.',
+ 'Support multi-moniteur pour analyst desk stream.',
+ 'Latency Guard : maintien du jitter et adaptation du buffer de stream.'
+ ]
+ },
+ {
+ title: 'PulseForge Lobby',
+ description: 'Options de jeu & d’entraînement (tous joueurs sur build PulseForge)',
+ items: [
+ 'Lane & Last-hit Lab : vagues scriptées, scoreboard CS delta et sandbox freeze/push.',
+ 'Warding Planner : plan sentries/obs par zone avec partage live coach/équipe.',
+ 'Draft & Role Rules : règles pos 1–5, rotations imposées et répétitions d’openings.',
+ 'Ghost-Run & Pathing : fantômes de rotations support/carry avec replays synchronisés.',
+ 'Cosmétiques partagés : kill-banners & emotes PulseForge visibles par le lobby PF.',
+ 'Caster Mode : HUD élargi, replays 8 s et marqueurs de fights stream-ready.'
+ ]
+ },
+ {
+ title: 'Pourquoi choisir notre build natif Dota 2 ?',
+ items: [
+ 'Intégration native synchronisée après chaque patch Valve.',
+ 'Conformité totale : overlays stream-safe, aucune assistance intrusive.',
+ 'Performances calibrées : ~405/380/300 FPS moyens avec réserve CPU.',
+ 'Support créatif : scrims outillés, analytics VOD et thèmes d’équipe PulseForge Lobby.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'En parties publiques, toutes les données proviennent uniquement du HUD, du son et du killfeed visibles.',
+ 'Cosmétiques, sandbox lanes et stratboards sont réservés aux lobbies PulseForge avec build partagé.',
+ 'Les overlays restent opt-in et se masquent lors des teamfights pour limiter le bruit visuel.'
+ ],
+ target_audience: 'Teams Dota 2, coachs, analystes',
+ highlight: 'Stabilité CPU-bound calibrée',
+ protection: 'Fair-play stream-safe certifié',
+ updates: 'Mises à jour synchronisées patch Dota 2'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Très fluide', bottleneck: 'CPU (majoritaire)' },
+ { playability: 'Très fluide', bottleneck: 'CPU' },
+ { playability: 'Très fluide', bottleneck: 'Mixte (tendance CPU)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: 'Cible 240–360 Hz',
+ description: 'Le profil 1080p Medium maintient ~405 FPS avec 1% low à ~310 FPS pour les teamfights denses.',
+ note: 'Conservez fps_max piloté par PulseForge pour lisser l’input-lag.'
+ },
+ {
+ refreshAdvice: 'Netteté + fréquence 240 Hz',
+ description: '1440p garde 300–440 FPS, idéal pour streaming et VOD détaillées.',
+ note: 'Maintenez Focus HUD actif pour éviter la surcharge visuelle en fight.'
+ },
+ {
+ refreshAdvice: '4K 200+ Hz jouable',
+ description: 'Même en 4K Medium (~300 FPS), l’expérience reste très fluide pour les showcases et coachings.',
+ note: 'Ultra (~260 FPS) convient aux reviews premium.'
+ }
+ ],
+ improvementTips: [
+ 'Gardez V-Sync off, fps_max piloté par PulseForge et overlay limité aux modules essentiels en fight.',
+ 'Baissez post-FX et ombres si vous ciblez un 1% low encore plus serré.',
+ 'Le jeu étant CPU-bound, l’overclock contrôlé côté hôte améliore surtout les 1% low.'
+ ],
+ advice:
+ 'Option « CPU Boost » : +5 % → ~410/312/476 FPS · +10 % → ~415/316/482 FPS · +15 % → ~422/323/490 FPS · +20 % → ~432/332/502 FPS (nœud Thermal-Premium requis).',
+ augmentationSuite: {
+ modules: [
+ 'Roshan/Aegis & Runes : rappels non intrusifs (Aegis, Power/Bounty, Day/Night) basés sur l’horloge.',
+ 'Stack & Pull Helper : minuteurs pull/stack par camp synchronisés sur l’horloge in-game.',
+ 'Buyback & Économie : suivi buyback/économie alliée (smokes, dusts, TPs) sans infos ennemies cachées.',
+ 'Fight Timeline : suivi trades & man-advantage avec alerte no-trade 3 s.',
+ 'Post-fight Digest : récap morts/ult/TP par camp pour décider push ou retreat.',
+ 'Audio Spatial Director : priorisation pas/TP/ult et ducking du bruit non critique.',
+ 'Focus HUD : masquage intelligent des stats non pertinentes pendant 5–8 s critiques.'
+ ],
+ notes: 'Overlays rafraîchis jusqu’à 144 Hz, calibrés pour les teamfights Source 2 et conformes aux règles publiques.'
+ },
+ heroSynergy: [
+ { preset: 'Hyperfarm', coachingNotes: 'Timers stack, rappel buyback et lanes safe pour scaling mid/late.' },
+ { preset: 'Tempo', coachingNotes: 'Runes, rotations et Fight Timeline pour sécuriser les power spikes.' },
+ { preset: 'Pressure', coachingNotes: 'Rotation Coach, Post-fight Digest et prompts tower trades.' },
+ { preset: 'Playmaker', coachingNotes: 'Stack & Pull Helper, warding cues et Fight Timeline pour initier sans feed.' },
+ { preset: 'Vision', coachingNotes: 'Warding Planner, Buyback Economy et rappels smoke/dust.' }
+ ]
+ }
+ },
+ en: {
+ nativeAdvantages: [
+ {
+ icon: Code,
+ title: 'Native Dota 2 profile',
+ description: 'CPU-bound stability and low-latency video pipeline tuned for teamfights.'
+ },
+ {
+ icon: Zap,
+ title: 'Instant cloud provisioning',
+ description: 'Dota 2 instances spin up in seconds with automatic region failover.'
+ },
+ {
+ icon: Shield,
+ title: 'Fair-play overlay stack',
+ description: 'Stream-safe modules built from HUD/audio/killfeed with zero memory reads.'
+ },
+ {
+ icon: Trophy,
+ title: 'PulseForge Lobby sandbox',
+ description: 'Lane lab, warding planner, and shared cosmetics for scrims and coaching.'
+ }
+ ],
+ metrics: {
+ title: 'Calibrated performance for Dota 2',
+ description:
+ 'PulseForge competitive Medium profile: 405 average FPS, 310 FPS 1% low proxy, and 470 FPS peaks at 1080p. The 1440p and 4K profiles stay very smooth thanks to CPU↔GPU allocation and controlled cloud overhead.',
+ statCards: {
+ maxFps: 'Max observed FPS (1080p Medium)',
+ onePercentLow: 'Min observed (1% low proxy, 1080p Medium)',
+ inputLag: 'Average input lag'
+ },
+ allocationTitle: 'Dominant bottleneck (Medium profile)',
+ datacenterTitle: 'PulseForge cloud monitoring',
+ usage: {
+ cpu: 'CPU load',
+ gpu: 'GPU load',
+ ram: 'Memory used',
+ vram: 'VRAM used'
+ },
+ thermals: {
+ cpu: 'Cloud CPU temperature',
+ gpu: 'GPU temperature',
+ power: 'Power draw'
+ },
+ stabilityNote:
+ 'Dota 2 remains mostly CPU-bound; our profiles keep enough headroom up to 4K while stabilising 1% lows.'
+ },
+ fpsTable: {
+ footnote: 'Internal Dota 2 benchmarks (Medium competitive profile across 5v5 scrims and high-MMR pubs).'
+ },
+ resolution: {
+ title: 'How to adjust resolution from the cloud',
+ description:
+ 'Our measurements reflect the real FPS headroom when you change resolution inside the PulseForge panel.',
+ windowLabel: 'Observed window',
+ footnote: 'Values captured on Dota 2 Medium/Ultra presets with overlays enabled.',
+ avgLabel: 'Average FPS'
+ },
+ experience: {
+ description: (productName: string, latency: number) =>
+ `${productName} runs entirely on our infrastructure: instant provisioning, adaptive routing, and latency held around ${latency} ms.`,
+ bullets: [
+ 'Overlays, presets, and updates ship server-side—nothing to install locally.',
+ 'Swap 1080p/1440p/4K instantly while staying within the measured FPS window.',
+ 'Ping/jitter/loss monitoring with automatic region failover for tournaments and scrims.'
+ ],
+ profileSubtitle: 'Average recorded at 1080p Medium',
+ lowLabel: 'Observed minimum 1080p Medium',
+ lowSubtitle: 'Low-end window'
+ },
+ improvement: { adviceTitle: '“CPU Boost” option (host side)' },
+ augmentation: {
+ description: 'Minimal, fair-play tactical modules for teamfights, economy reads, and stream-safe comfort.'
+ },
+ hero: {
+ badge: 'ROLE PROFILES',
+ title: 'Dedicated optimisations',
+ description: 'Each preset covers positions 1 to 5 with role-specific overlay feedback.',
+ headers: {
+ hero: 'Role',
+ overlay: 'Overlay focus',
+ clarity: 'Visual clarity',
+ preset: 'Suggested preset',
+ notes: 'Coaching notes'
+ },
+ fallbackDescription: (game: string) => `Role-based optimisations for ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `End-to-end optimisation for ${game} with fair-play overlays and scrim sandbox.`
+ },
+ product: {
+ description: 'Native Dota 2 cloud instance tuned for competitive play.',
+ longDescription:
+ 'PulseForge Dota 2 targets extreme frame rates while staying fair-play: overlays remain purely visual, the video pipeline stays low-latency, and the PulseForge Lobby sandbox powers scrims and training.',
+ variants: {
+ 'pulseforge-dota2': {
+ name: 'PulseForge Dota 2 Ancients',
+ usage: 'PulseForge Dota 2 instance',
+ description: 'Competitive cloud build with minimalist overlays and full scrim sandbox.',
+ use_cases: [
+ 'High-level ranked and scrims',
+ 'Team coaching and analyst desks',
+ 'MOBA stream production',
+ 'Strategic VOD reviews',
+ 'PulseForge Lobby sandbox'
+ ],
+ features: [
+ 'Stream-safe modular overlays',
+ 'Post-match analysis and timeline exports',
+ 'Macro coaching for rotations and buybacks',
+ 'PulseForge Lobby team themes',
+ 'Multi-input integration (mouse/keyboard, controller)',
+ 'Patch-synchronised Dota 2 updates',
+ 'PulseForge Lobby sandbox compatibility'
+ ],
+ featureHighlights: [
+ 'Public/Ranked – overlays stay purely visual (HUD, audio, killfeed, minimap) with no memory access',
+ 'PulseForge Lobby – shared cosmetics plus lane/warding sandbox for every PulseForge player'
+ ],
+ featureGroups: [
+ {
+ title: 'Public tactical modules',
+ items: [
+ 'Roshan/Aegis & Runes: Aegis, Power/Bounty, and Day/Night reminders.',
+ 'Stack & Pull Helper: on-screen stack/pull timers per camp.',
+ 'Buyback & Economy: allied buyback tracker, smoke/dust/TP stocks, and shop reminders.',
+ 'Fight Timeline: trade tracking with 3 s no-trade alerts and advantage reads.',
+ 'Post-fight Digest: deaths, ultimates, and TP availability by team.',
+ 'Focus HUD: hides distracting stats during fights.'
+ ]
+ },
+ {
+ title: 'Readability & comfort',
+ items: [
+ 'Audio Spatial Director: prioritised footsteps/TP/ult cues with ducking.',
+ 'Optional colour grading to highlight critical spells.',
+ 'Anti-tilt HUD with breathing prompts between fights.',
+ 'Multi-monitor support for analyst desk streams.',
+ 'Latency Guard: jitter control and adaptive stream buffer.'
+ ]
+ },
+ {
+ title: 'PulseForge Lobby',
+ description: 'Practice options when every player runs the PulseForge build',
+ items: [
+ 'Lane & Last-hit Lab: scripted waves, CS delta scoreboard, freeze/push sandbox.',
+ 'Warding Planner: shared sentry/obs plans with live coach collaboration.',
+ 'Draft & Role Rules: enforced pos1–5 rules, rotation drills, and opening rehearsals.',
+ 'Ghost-Run & Pathing: ghosts of support/carry rotations with synced replays.',
+ 'Shared cosmetics: PulseForge kill banners and emotes visible to the lobby.',
+ 'Caster Mode: expanded HUD, 8 s instant replays, and fight markers ready for broadcast.'
+ ]
+ },
+ {
+ title: 'Why choose our native Dota 2 build?',
+ items: [
+ 'Native integration refreshed after every Valve patch.',
+ 'Full compliance: stream-safe overlays with no intrusive assistance.',
+ 'Calibrated performance: ~405/380/300 average FPS with CPU headroom.',
+ 'Creative support: tooled scrims, VOD analytics, and PulseForge Lobby themes.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'In public/ranked games, data comes only from visible HUD, audio, and killfeed.',
+ 'Cosmetics, lane sandbox, and stratboards stay exclusive to PulseForge Lobby sessions.',
+ 'Overlays remain opt-in and auto-hide during heavy teamfight moments.'
+ ],
+ target_audience: 'Dota 2 teams, coaches, analysts',
+ highlight: 'Calibrated CPU-bound stability',
+ protection: 'Certified stream-safe fair play',
+ updates: 'Patch-synchronised Dota 2 updates'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Very smooth', bottleneck: 'CPU (majority)' },
+ { playability: 'Very smooth', bottleneck: 'CPU' },
+ { playability: 'Very smooth', bottleneck: 'Mixed (CPU-leaning)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: 'Target 240–360 Hz',
+ description: 'The 1080p Medium profile holds ~405 FPS with ~310 FPS 1% lows for intense teamfights.',
+ note: 'Let PulseForge control fps_max to keep input latency tight.'
+ },
+ {
+ refreshAdvice: 'Sharpness + 240 Hz balance',
+ description: '1440p sustains 300–440 FPS, ideal for streaming and detailed VODs.',
+ note: 'Keep Focus HUD active to avoid clutter during fights.'
+ },
+ {
+ refreshAdvice: 'Playable 4K above 200 Hz',
+ description: 'Even at 4K Medium (~300 FPS), the experience stays snappy for showcases and coaching.',
+ note: 'Ultra (~260 FPS) suits premium reviews and broadcast capture.'
+ }
+ ],
+ improvementTips: [
+ 'Keep V-Sync off, let PulseForge drive fps_max, and only enable essential overlays during fights.',
+ 'Lower post-FX and shadows if you want even tighter 1% lows.',
+ 'Because the game is CPU-bound, host-side overclocking mostly helps the 1% lows.'
+ ],
+ advice:
+ '“CPU Boost” option: +5% → ~410/312/476 FPS · +10% → ~415/316/482 FPS · +15% → ~422/323/490 FPS · +20% → ~432/332/502 FPS (requires a Thermal-Premium node).',
+ augmentationSuite: {
+ modules: [
+ 'Roshan/Aegis & Runes: non-intrusive reminders (Aegis, Power/Bounty, Day/Night) keyed to the clock.',
+ 'Stack & Pull Helper: synced stack/pull timers per camp using the in-game clock.',
+ 'Buyback & Economy: allied buyback tracker plus smoke/dust/TP stock without enemy leaks.',
+ 'Fight Timeline: trade tracking with 3 s no-trade alerts and advantage calls.',
+ 'Post-fight Digest: deaths/ultimates/TPs summarised per side for push vs retreat decisions.',
+ 'Audio Spatial Director: prioritised footsteps/TP/ult cues with noise ducking.',
+ 'Focus HUD: context-aware stat hiding during the 5–8 s critical windows.'
+ ],
+ notes: 'Overlays refresh up to 144 Hz, tuned for Source 2 teamfights and public-rule compliance.'
+ },
+ heroSynergy: [
+ { preset: 'Hyperfarm', coachingNotes: 'Stack timers, buyback reminders, and safe lanes for mid/late scaling.' },
+ { preset: 'Tempo', coachingNotes: 'Rune tracking, rotations, and Fight Timeline to secure power spikes.' },
+ { preset: 'Pressure', coachingNotes: 'Rotation guidance, post-fight digest, and tower trade prompts.' },
+ { preset: 'Playmaker', coachingNotes: 'Stack & Pull Helper, ward cues, and Fight Timeline to engage cleanly.' },
+ { preset: 'Vision', coachingNotes: 'Warding Planner, buyback economy, and smoke/dust reminders.' }
+ ]
+ }
+ },
+ et: {
+ nativeAdvantages: [
+ {
+ icon: Code,
+ title: 'Dota 2 natiivprofiil',
+ description: 'CPU-põhine stabiilsus ja madala latentsusega videotoru, mis on häälestatud teamfight’ideks.'
+ },
+ {
+ icon: Zap,
+ title: 'Kohene pilveprovisioneerimine',
+ description: 'Dota 2 instantsid käivitatakse sekunditega, piirkonna automaatne vahetus pingist lähtuvalt.'
+ },
+ {
+ icon: Shield,
+ title: 'Fair-play overlay pakett',
+ description: 'Stream-safe moodulid, mis tuginevad HUDile/helile/killfeedile ilma mälu lugemata.'
+ },
+ {
+ icon: Trophy,
+ title: 'PulseForge Lobby liivakast',
+ description: 'Lane lab, wardingu planner ja jagatud kosmeetika scrimideks ning coachinguks.'
+ }
+ ],
+ metrics: {
+ title: 'Kalibreeritud jõudlus Dota 2 jaoks',
+ description:
+ 'PulseForge’i Medium konkurentsiprofiil: keskmiselt 405 FPS, 1% low umbes 310 FPS ja tipud 470 FPS 1080p juures. 1440p ja 4K profiilid püsivad väga sujuvad tänu CPU↔GPU jaotusele ja kontrollitud pilve overhead’ile.',
+ statCards: {
+ maxFps: 'Maksimaalne täheldatud FPS (1080p Medium)',
+ onePercentLow: 'Min täheldatud (1% low proxy, 1080p Medium)',
+ inputLag: 'Keskmine sisendviivitus'
+ },
+ allocationTitle: 'Domineeriv pudelkits (Medium profiil)',
+ datacenterTitle: 'PulseForge’i pilvemonitoring',
+ usage: {
+ cpu: 'CPU koormus',
+ gpu: 'GPU koormus',
+ ram: 'Mälu kasutus',
+ vram: 'VRAM kasutus'
+ },
+ thermals: {
+ cpu: 'Pilve CPU temperatuur',
+ gpu: 'GPU temperatuur',
+ power: 'Voolutarve'
+ },
+ stabilityNote:
+ 'Dota 2 on valdavalt CPU-põhine; meie profiilid hoiavad varu kuni 4K resolutsioonini ja stabiliseerivad 1% low väärtused.'
+ },
+ fpsTable: {
+ footnote: 'Sisemised Dota 2 testid (Medium konkurentsiprofiil 5v5 scrimidel ja kõrge MMR pubides).'
+ },
+ resolution: {
+ title: 'Kuidas pilves resolutsiooni kohandada',
+ description:
+ 'Mõõtmised näitavad tegelikku FPS varu, kui muudate resolutsiooni PulseForge’i paneelist.',
+ windowLabel: 'Täheldatud aken',
+ footnote: 'Väärtused Medium/Ultra presetitel koos overlaydega.',
+ avgLabel: 'Keskmine FPS'
+ },
+ experience: {
+ description: (productName: string, latency: number) =>
+ `${productName} töötab täielikult meie infrastruktuuris: kohene provisioning, adaptiivne ruuting ja latentsus hoitud umbes ${latency} ms juures.`,
+ bullets: [
+ 'Overlayd, presetid ja uuendused tulevad serveri kaudu — lokaalne paigaldus puudub.',
+ 'Vaheta 1080p/1440p/4K kohe, püsides mõõdetud FPS aknas.',
+ 'Ping/jitter/loss monitooring automaatse regiooni vahetusega turniirideks ja scrimideks.'
+ ],
+ profileSubtitle: 'Keskmine väärtus 1080p Medium profiilil',
+ lowLabel: 'Min täheldatud 1080p Medium',
+ lowSubtitle: 'Madalaim aken'
+ },
+ improvement: { adviceTitle: '„CPU Boost” valik (hosti pool)' },
+ augmentation: {
+ description: 'Minimalistlikud, fair-play taktikamoodulid teamfight’ideks, majanduse lugemiseks ja stream-safe mugavuseks.'
+ },
+ hero: {
+ badge: 'ROLLIPÕHISED PROFIILID',
+ title: 'Pühendatud optimeerimised',
+ description: 'Iga preset katab positsioonid 1–5 rollipõhise overlay tagasisidega.',
+ headers: {
+ hero: 'Roll',
+ overlay: 'Overlay fookus',
+ clarity: 'Visuaalne selgus',
+ preset: 'Soovitatud preset',
+ notes: 'Coaching märkused'
+ },
+ fallbackDescription: (game: string) => `Rollipõhised optimeerimised mängule ${game}`
+ },
+ nativeReasons: {
+ description: (game: string) => `Täielikult optimeeritud ${game} lahendus fair-play overlayde ja scrim-liivakastiga.`
+ },
+ product: {
+ description: 'Natiivne Dota 2 pilveinstants, mis on häälestatud konkurentsimänguks.',
+ longDescription:
+ 'PulseForge Dota 2 sihib väga kõrgeid kaadrisagedusi jäädes samas fair-play reeglitele truuks: overlayd on puhtalt visuaalsed, videotoru hoiab madalat latentsust ja PulseForge Lobby liivakast katab scrimid ning treeningud.',
+ variants: {
+ 'pulseforge-dota2': {
+ name: 'PulseForge Dota 2 Ancients',
+ usage: 'PulseForge’i Dota 2 instants',
+ description: 'Konkurentsile suunatud pilvebuild minimalistlike overlayde ja täisliivakastiga.',
+ use_cases: [
+ 'Kõrgetasemeline ranked ja scrimid',
+ 'Tiimitreening ja analüütikute töö',
+ 'MOBA striimitootmine',
+ 'Strateegilised VOD-ülevaated',
+ 'PulseForge Lobby liivakast'
+ ],
+ features: [
+ 'Stream-safe modulaarsed overlayd',
+ 'Post-matši analüüs ja timeline’i eksport',
+ 'Makro coaching rotatsioonide ja buyback’ide jaoks',
+ 'PulseForge Lobby tiimiteemad',
+ 'Multi-input integratsioon (klaviatuur/hiir, kontroller)',
+ 'Patchidega sünkroonis Dota 2 uuendused',
+ 'PulseForge Lobby liivakasti tugi'
+ ],
+ featureHighlights: [
+ 'Avalik/ranked – overlayd on puhtalt visuaalsed (HUD, audio, killfeed, minimapp) ilma mälu lugemata',
+ 'PulseForge Lobby – jagatud kosmeetika ja lane/wardingu liivakast kõikidele PulseForge’i mängijatele'
+ ],
+ featureGroups: [
+ {
+ title: 'Avalikud taktikamoodulid',
+ items: [
+ 'Roshan/Aegis & Runes: Aegise, Power/Bounty rune’ide ja Day/Night meeldetuletused.',
+ 'Stack & Pull Helper: laagripõhised stack/pull taimerid ekraanil.',
+ 'Buyback & Economy: liitlaste buyback jälgija, smoke/dust/TP varud ja poe meeldetuletused.',
+ 'Fight Timeline: trade’ide jälgimine, 3 s no-trade hoiatused ja eelisinfo.',
+ 'Post-fight Digest: surmad, ulti’d ja TP-d mõlema poole kohta.',
+ 'Focus HUD: peidab häirivad statistilised näidikud võitluse ajal.'
+ ]
+ },
+ {
+ title: 'Loetavus ja mugavus',
+ items: [
+ 'Audio Spatial Director: eelistab samme/TP/ult helisid ja summutab müra.',
+ 'Valikuline värvikorrektsioon kriitiliste loitsude esiletõstmiseks.',
+ 'Anti-tilt HUD hingamispromptidega võitluste vahel.',
+ 'Mitme monitori tugi analüütikute striimidele.',
+ 'Latency Guard: kontrollib jitterit ja kohandab striimi puhvrit.'
+ ]
+ },
+ {
+ title: 'PulseForge Lobby',
+ description: 'Harjutusvõimalused, kui kõik mängijad on PulseForge’i buildil',
+ items: [
+ 'Lane & Last-hit Lab: skriptitud lained, CS delta tabel ja freeze/push liivakast.',
+ 'Warding Planner: jagatud sentry/obs plaanid koos live coach’iga.',
+ 'Draft & Role Rules: pos1–5 reeglid, rotatsiooni harjutused ja avangute kordused.',
+ 'Ghost-Run & Pathing: tugi/kandja rotatsioonide “kummitused” sünkroniseeritud taasesitusega.',
+ 'Jagatud kosmeetika: PulseForge’i kill-bannerid ja emotsioonid nähtavad kogu lobbys.',
+ 'Caster Mode: laiendatud HUD, 8 s kohesed kordused ja võitluse markerid ülekandeks.'
+ ]
+ },
+ {
+ title: 'Miks valida meie natiivne Dota 2 build?',
+ items: [
+ 'Natiivne integratsioon, värskendatud pärast iga Valve patchi.',
+ 'Täielik vastavus: stream-safe overlayd, intrusiivseid abisid pole.',
+ 'Kalibreeritud jõudlus: ~405/380/300 FPS keskmiselt koos CPU varuga.',
+ 'Loov tugi: scrimid, VOD analüütika ja PulseForge Lobby tiimiteemad.'
+ ]
+ }
+ ],
+ implementationNotes: [
+ 'Avalikes/ranked mängudes pärinevad andmed ainult nähtavast HUDist, helist ja killfeedist.',
+ 'Kosmeetika, lane-liivakast ja stratboardid on eksklusiivsed PulseForge Lobby seanssidele.',
+ 'Overlayd on opt-in ja peituvad automaatselt intensiivsete teamfight’ide ajal.'
+ ],
+ target_audience: 'Dota 2 tiimid, coach’id, analüütikud',
+ highlight: 'Häälestatud CPU-põhine stabiilsus',
+ protection: 'Sertifitseeritud stream-safe fair play',
+ updates: 'Patchidega sünkroonis Dota 2 uuendused'
+ }
+ }
+ },
+ technical: {
+ fpsByResolution: [
+ { playability: 'Väga sujuv', bottleneck: 'CPU (enamus)' },
+ { playability: 'Väga sujuv', bottleneck: 'CPU' },
+ { playability: 'Väga sujuv', bottleneck: 'Segapudelkael (CPU eelis)' }
+ ],
+ resolutionGuidance: [
+ {
+ refreshAdvice: 'Siht 240–360 Hz',
+ description: '1080p Medium hoiab ~405 FPS ja ~310 FPS 1% low väärtusi tihedate teamfight’ide jaoks.',
+ note: 'Lase PulseForge’il juhtida fps_max seadet, et hoida input viivitus madal.'
+ },
+ {
+ refreshAdvice: 'Teravus + 240 Hz tasakaal',
+ description: '1440p säilitab 300–440 FPS ja sobib suurepäraselt striimide ja detailsete VODide jaoks.',
+ note: 'Hoia Focus HUD aktiivne, et vältida ekraanikära võitluses.'
+ },
+ {
+ refreshAdvice: 'Mängitav 4K üle 200 Hz',
+ description: '4K Medium (~300 FPS) püsib väga reageeriv showcase’ideks ja coachinguks.',
+ note: 'Ultra (~260 FPS) sobib premium-ülekannete ja analüüside jaoks.'
+ }
+ ],
+ improvementTips: [
+ 'Hoia V-Sync väljas, lase PulseForge’il juhtida fps_max’i ja aktiveeri vaid vajalikud overlayd võitluse ajal.',
+ 'Vähenda post-FX ja varje, kui soovid veel stabiilsemat 1% low väärtust.',
+ 'Kuna mäng on CPU-põhine, aitab hosti poolne ülekiirendus peamiselt 1% low väärtusi.'
+ ],
+ advice:
+ '„CPU Boost” valik: +5% → ~410/312/476 FPS · +10% → ~415/316/482 FPS · +15% → ~422/323/490 FPS · +20% → ~432/332/502 FPS (vajab Thermal-Premium sõlme).',
+ augmentationSuite: {
+ modules: [
+ 'Roshan/Aegis & Runes: mitteintrusiivsed meeldetuletused (Aegis, Power/Bounty, Day/Night) mängukella järgi.',
+ 'Stack & Pull Helper: sünkroonitud stack/pull taimerid iga laagri kohta.',
+ 'Buyback & Economy: liitlaste buyback’i ja tarvikute (smoke, dust, TP) jälgimine ilma vastase infot lekitamata.',
+ 'Fight Timeline: trade’ide jälgimine koos 3 s no-trade hoiatustega ja eelisinfoga.',
+ 'Post-fight Digest: surmad/ultid/TP-d mõlema poole kohta push vs retreat otsusteks.',
+ 'Audio Spatial Director: eelistatud sammude/TP/ult helid mürasummutusega.',
+ 'Focus HUD: peidab kontekstuaalselt mittevajalikud näitajad 5–8 kriitilise sekundi jooksul.'
+ ],
+ notes: 'Overlayd värskenevad kuni 144 Hz, häälestatud Source 2 teamfight’idele ja avalikele reeglitele.'
+ },
+ heroSynergy: [
+ { preset: 'Hyperfarm', coachingNotes: 'Stacki taimerid, buyback’i meeldetuletused ja turvalised rajad mid/late skaleerimiseks.' },
+ { preset: 'Tempo', coachingNotes: 'Rune jälgimine, rotatsioonid ja Fight Timeline power spike’ide kindlustamiseks.' },
+ { preset: 'Pressure', coachingNotes: 'Rotatsiooni juhendid, post-fight kokkuvõtted ja tower trade soovitused.' },
+ { preset: 'Playmaker', coachingNotes: 'Stack & Pull Helper, wardingu vihjed ja Fight Timeline puhaste engage’ide jaoks.' },
+ { preset: 'Vision', coachingNotes: 'Warding Planner, buyback majandus ja smoke/dust meeldetuletused.' }
+ ]
+ }
+ }
}
}
diff --git a/data/gaming-products.json b/data/gaming-products.json
index 6119272..2577451 100644
--- a/data/gaming-products.json
+++ b/data/gaming-products.json
@@ -1728,60 +1728,316 @@
{
"id": "gaming-dota2",
"slug": "gaming-dota2",
- "name": "Dota 2",
+ "name": "Dota 2 PulseForge",
"game": "Dota 2",
"category": "gaming",
"optimizationLevel": "native",
- "description": "Solution Dota 2 professionnelle avec scripts avancés et map awareness",
- "longDescription": "Dota 2 God Mode est conçu pour les joueurs exigeants. RTX 4070 Ti, 64GB RAM et Intel i9-12900K garantissent des performances fluides. Build privé avec scripts personnalisés et protection VAC.",
+ "description": "Instance cloud Dota 2 calibrée compétitif avec overlays fair-play et sandbox scrim.",
+ "longDescription": "PulseForge pour Dota 2 est un build natif hébergé sur notre cloud gaming. Il cible une fréquence d’image stable avec des 1% low serrés en teamfight tout en respectant strictement le fair-play grâce à des overlays purement visuels et un pipeline vidéo faible latence.",
"status": "ACTIVE",
+ "technicalSpecs": {
+ "performanceMetrics": {
+ "avgFps": 405,
+ "minFps": 310,
+ "maxFps": 470,
+ "onePercentLow": 310,
+ "latency": 0.95,
+ "inputLag": 0.25,
+ "frameTime": 2.1,
+ "cpuUsage": 78,
+ "gpuUsage": 45,
+ "ramUsage": 16.2,
+ "vramUsage": 7.4,
+ "powerDraw": 315,
+ "thermalCpu": 60,
+ "thermalGpu": 55
+ },
+ "augmentationSuite": {
+ "awarenessIndex": 93,
+ "overlayRefresh": 144,
+ "adaptiveCoaching": 89,
+ "reactionTimeMs": 41,
+ "moduleCoverage": 12,
+ "tacticalFocus": 94,
+ "modules": [
+ "Roshan/Aegis & Runes : rappels non intrusifs (Aegis, Power/Bounty, Day/Night) basés sur l’horloge à l’écran.",
+ "Stack & Pull Helper : minuteurs de pull/stack par camp synchronisés sur l’horloge in-game.",
+ "Buyback & Économie : suivi de votre buyback, de l’économie d’équipe (smokes, dusts, TPs) sans infos ennemies cachées.",
+ "Fight Timeline : suivi trades & man-advantage dès le premier kill avec alerte no-trade 3 s.",
+ "Post-fight Digest : récap mort/ult/TP par camp pour décider push ou retreat.",
+ "Audio Spatial Director : priorisation pas/TP/ult sonores avec ducking du bruit non critique.",
+ "Focus HUD : masquage intelligent des stats non pertinentes pendant 5–8 s critiques."
+ ],
+ "notes": "Overlays rafraîchis jusqu’à 144 Hz, calibrés pour les teamfights Source 2 et conformes aux règles publiques."
+ },
+ "fpsByResolution": [
+ {
+ "resolution": "1920 × 1080",
+ "avgFps": 405,
+ "minFps": 310,
+ "maxFps": 470,
+ "playability": "Très fluide",
+ "bottleneck": "CPU (majoritaire)"
+ },
+ {
+ "resolution": "2560 × 1440",
+ "avgFps": 380,
+ "minFps": 300,
+ "maxFps": 440,
+ "playability": "Très fluide",
+ "bottleneck": "CPU"
+ },
+ {
+ "resolution": "3840 × 2160",
+ "avgFps": 300,
+ "minFps": 250,
+ "maxFps": 340,
+ "playability": "Très fluide",
+ "bottleneck": "Mixte (tendance CPU)"
+ }
+ ],
+ "qualityBreakdown": [
+ {
+ "resolution": "1920 × 1080",
+ "presets": {
+ "low": 440,
+ "medium": 405,
+ "high": 385,
+ "ultra": 360
+ }
+ },
+ {
+ "resolution": "2560 × 1440",
+ "presets": {
+ "low": 410,
+ "medium": 380,
+ "high": 355,
+ "ultra": 330
+ }
+ },
+ {
+ "resolution": "3840 × 2160",
+ "presets": {
+ "low": 320,
+ "medium": 300,
+ "high": 280,
+ "ultra": 260
+ }
+ }
+ ],
+ "resolutionGuidance": [
+ {
+ "resolution": "1920 × 1080",
+ "avgFps": 405,
+ "fpsWindow": "310 – 470 FPS",
+ "refreshAdvice": "Cible 240–360 Hz compétitif",
+ "description": "Idéal pour teamfights denses ; 1% low stables avec marge confortable même en High.",
+ "note": "Conservez fps_max piloté par PulseForge pour lisser l’input-lag."
+ },
+ {
+ "resolution": "2560 × 1440",
+ "avgFps": 380,
+ "fpsWindow": "300 – 440 FPS",
+ "refreshAdvice": "Netteté + fréquence 240 Hz",
+ "description": "Parfait pour streaming et VOD détaillées tout en gardant le snap Source 2.",
+ "note": "Maintenez Focus HUD actif pour éviter la surcharge visuelle en fight."
+ },
+ {
+ "resolution": "3840 × 2160",
+ "avgFps": 300,
+ "fpsWindow": "250 – 340 FPS",
+ "refreshAdvice": "4K 200+ Hz jouable",
+ "description": "Mode showcase/coach : l’écart reste contenu car le jeu reste surtout CPU-limited.",
+ "note": "Parfait pour analyses spectateur et contenu premium."
+ }
+ ],
+ "improvementTips": [
+ "Gardez V-Sync off, fps_max piloté par PulseForge et overlay limité aux modules essentiels en fight.",
+ "Baissez post-FX et ombres si vous ciblez un 1% low encore plus serré.",
+ "Le jeu étant CPU-bound, l’overclock contrôlé côté hôte améliore surtout les 1% low."
+ ],
+ "advice": "Option « CPU Boost » (1080p) : +5 % → ~410/312/476 FPS · +10 % → ~415/316/482 FPS · +15 % → ~422/323/490 FPS · +20 % → ~432/332/502 FPS (nœud Thermal-Premium requis).",
+ "heroSynergy": [
+ {
+ "hero": "Carry (Pos 1)",
+ "overlayFocus": 92,
+ "clarityBoost": 90,
+ "preset": "Hyperfarm",
+ "coachingNotes": "Timers stack, rappel buyback et lanes safe pour scaling mid/late."
+ },
+ {
+ "hero": "Mid (Pos 2)",
+ "overlayFocus": 94,
+ "clarityBoost": 91,
+ "preset": "Tempo",
+ "coachingNotes": "Runes, rotations et Fight Timeline pour sécuriser les power spikes."
+ },
+ {
+ "hero": "Offlane (Pos 3)",
+ "overlayFocus": 90,
+ "clarityBoost": 88,
+ "preset": "Pressure",
+ "coachingNotes": "Rotation Coach, Post-fight Digest et prompts tower trades."
+ },
+ {
+ "hero": "Soft Support (Pos 4)",
+ "overlayFocus": 91,
+ "clarityBoost": 89,
+ "preset": "Playmaker",
+ "coachingNotes": "Stack & Pull Helper, warding cues et Fight Timeline pour initier sans feed."
+ },
+ {
+ "hero": "Hard Support (Pos 5)",
+ "overlayFocus": 93,
+ "clarityBoost": 92,
+ "preset": "Vision",
+ "coachingNotes": "Warding Planner, Buyback Economy et prompts smoke/dust."
+ }
+ ],
+ "networkStats": {
+ "serverLocations": 21,
+ "avgPing": 16,
+ "maxBandwidth": 980,
+ "packetLoss": 0.18,
+ "jitter": 2.6,
+ "ddosProtection": true,
+ "encryption": "TLS 1.3 + SRTP"
+ },
+ "securityMetrics": {
+ "detectionRate": 0,
+ "banRate": 0.06,
+ "uptimePercentage": 99.97,
+ "avgResponseTime": 5,
+ "incidentsLastMonth": 0,
+ "securityUpdatesPerWeek": 5,
+ "encryptionLevel": "AES-256",
+ "obfuscationLayers": 4,
+ "antiDebug": true,
+ "antiVM": true,
+ "kernelProtection": true
+ },
+ "updateHistory": {
+ "totalUpdates": 133,
+ "lastUpdateDate": "2025-03-07",
+ "avgUpdatesPerMonth": 4.8,
+ "criticalPatches": 6,
+ "securityPatches": 38,
+ "featureUpdates": 49,
+ "bugFixes": 40
+ },
+ "userStats": {
+ "totalUsers": 5480,
+ "activeUsersLast30Days": 4212,
+ "avgSessionDuration": 3.6,
+ "avgGamesPerDay": 4.7,
+ "satisfactionScore": 4.7,
+ "recommendationRate": 87
+ }
+ },
"variants": [
{
- "id": "godmode",
- "name": "God Mode",
+ "id": "pulseforge-dota2",
+ "name": "PulseForge Dota 2 Ancients",
"tier": "premium",
- "gpu": "RTX 4070 Ti",
- "ram": "64 GB DDR5",
- "cpu": "Intel i9-12900K",
- "usage": "Build privé",
- "description": "Solution Dota 2 professionnelle avec scripts avancés et map awareness",
+ "gpu": "RTX 4090",
+ "ram": "128 GB DDR5",
+ "cpu": "Intel i9-14900KS",
+ "storage": "2TB NVMe Gen4",
+ "motherboard": "ASUS ROG Maximus Z790",
+ "psu": "1200W 80+ Platinum",
+ "cooling": "Custom Loop Liquid",
+ "usage": "Instance Dota 2 PulseForge",
+ "description": "Build cloud Dota 2 orienté compétitif avec overlays sobres et sandbox scrim.",
"use_cases": [
- "Ranked compétitif",
- "Tournois professionnels",
- "MMR grinding",
- "Stream gameplay",
- "Practice optimisée"
+ "Ranked haut niveau et scrims",
+ "Coaching équipe et analyst desk",
+ "Production stream MOBA",
+ "Revues VOD stratégiques",
+ "Sandbox PulseForge Lobby"
],
"features": [
- "Build privé Dota 2",
- "Map awareness complète",
- "Last-hit perfection",
- "Ability tracker",
- "Ward detection",
- "Protection VAC",
- "Scripts personnalisables"
+ "Overlays modulaires stream-safe",
+ "Analyse post-match et exports timeline",
+ "Coach macro rotations & buybacks",
+ "Thèmes d’équipe PulseForge Lobby",
+ "Intégration multi-input clavier/souris/manette",
+ "Mises à jour synchronisées patch Dota 2",
+ "Compatibilité PulseForge Lobby sandbox"
],
- "target_audience": "Joueurs compétitifs, Pro teams",
- "highlight": "Scripts professionnels",
- "protection": "VAC bypass",
- "updates": "Patch-day updates",
+ "featureHighlights": [
+ "Public/Ranked – overlays purement visuels (HUD, audio, killfeed, minimap) sans lecture mémoire",
+ "PulseForge Lobby – cosmétiques partagés et sandbox lanes/warding pour tous les joueurs PulseForge"
+ ],
+ "featureGroups": [
+ {
+ "title": "Modules tactiques publics",
+ "items": [
+ "Roshan/Aegis & Runes : rappels Aegis, Power/Bounty et alternance Day/Night.",
+ "Stack & Pull Helper : minuteurs pull/stack affichés sur la carte.",
+ "Buyback & Économie : suivi buybacks alliés, stocks smokes/dusts/TPs et rappels shop.",
+ "Fight Timeline : suivi trades, alerte no-trade 3 s et man-advantage.",
+ "Post-fight Digest : récap morts, ultis et TPs disponibles par camp.",
+ "Focus HUD : masquage intelligent des stats toxiques pendant les fights."
+ ]
+ },
+ {
+ "title": "Lisibilité & confort",
+ "items": [
+ "Audio Spatial Director : priorisation pas/TP/ult, ducking du bruit non critique.",
+ "Color grading optionnel pour highlight spells critiques.",
+ "Anti-tilt HUD avec prompts respiration entre fights.",
+ "Support multi-moniteur pour analyst desk stream.",
+ "Latency Guard : maintien du jitter et adaptation du buffer de stream."
+ ]
+ },
+ {
+ "title": "PulseForge Lobby",
+ "description": "Options de jeu & d’entraînement (tous joueurs sur build PulseForge)",
+ "items": [
+ "Lane & Last-hit Lab : vagues scriptées, scoreboard CS delta et sandbox freeze/push.",
+ "Warding Planner : plan sentries/obs par zone avec partage live coach/équipe.",
+ "Draft & Role Rules : règles pos 1–5, rotations imposées et répétitions d’openings.",
+ "Ghost-Run & Pathing : fantômes de rotations support/carry avec replays synchronisés.",
+ "Cosmétiques partagés : kill-banners & emotes PulseForge visibles par le lobby PF.",
+ "Caster Mode : HUD élargi, replays 8 s et marqueurs de fights stream-ready."
+ ]
+ },
+ {
+ "title": "Pourquoi choisir notre build natif Dota 2 ?",
+ "items": [
+ "Intégration native synchronisée après chaque patch Valve.",
+ "Conformité totale : overlays stream-safe, aucune assistance intrusive.",
+ "Performances calibrées : ~405/380/300 FPS moyens avec réserve CPU.",
+ "Support créatif : scrims outillés, analytics VOD et thèmes d’équipe PulseForge Lobby."
+ ]
+ }
+ ],
+ "implementationNotes": [
+ "En parties publiques, toutes les données proviennent uniquement du HUD, du son et du killfeed visibles.",
+ "Cosmétiques, sandbox lanes et stratboards sont réservés aux lobbies PulseForge avec build partagé.",
+ "Les overlays restent opt-in et se masquent lors des teamfights pour limiter le bruit visuel."
+ ],
+ "target_audience": "Teams Dota 2, coachs, analystes",
+ "highlight": "Stabilité CPU-bound calibrée",
+ "protection": "Fair-play stream-safe certifié",
+ "updates": "Mises à jour synchronisées patch Dota 2",
"pricing": {
- "hourly": 1.88,
- "monthly": 750
+ "hourly": 1.65,
+ "monthly": 610
},
- "sla": "99.99%",
+ "sla": "99.97%",
"support_level": "enterprise",
"badges": [
- "Premium",
- "Pro Scripts",
- "Competitive"
+ "MOBA Optimized",
+ "Stream Safe",
+ "PulseForge Lobby"
],
"image": "/images/products/dota2/main.png"
}
],
"reviews": {
"average": 4.7,
- "count": 215
+ "count": 368
},
"discount": {
"active": false,
@@ -1793,72 +2049,6 @@
"/images/products/dota2/1.png"
]
},
- {
- "id": "gaming-apex",
- "slug": "gaming-apex",
- "name": "Apex Legends",
- "game": "Apex Legends",
- "category": "gaming",
- "optimizationLevel": "community",
- "description": "Configuration cloud optimisée pour Apex Legends",
- "longDescription": "Environnement gaming cloud pour Apex Legends avec configuration standard et support communautaire.",
- "status": "ACTIVE",
- "gfnData": {
- "playType": "READY_TO_PLAY",
- "minimumTier": null,
- "stores": [
- "EA_APP"
- ],
- "iconUrl": "https://img.nvidiagrid.net/apps/100885211/ZZ/GAME_ICON_01_20f4b569-4620-4c87-a7fd-6ea51b87cade.png",
- "logoUrl": "https://img.nvidiagrid.net/apps/100885211/ZZ/GAME_LOGO_01_b747bcf5-01b6-46ba-bfb0-0193e2b4a50b.png"
- },
- "variants": [
- {
- "id": "standard",
- "name": "Standard",
- "tier": "standard",
- "gpu": "RTX 3060",
- "ram": "16 GB",
- "cpu": "Intel i5-12400",
- "usage": "Configuration standard",
- "description": "Environnement cloud pour Apex Legends",
- "use_cases": [
- "Jeu casual",
- "Practice",
- "Ranked"
- ],
- "features": [
- "VM cloud optimisée",
- "Support communautaire",
- "Mises à jour régulières"
- ],
- "target_audience": "Joueurs Apex",
- "highlight": "Support communautaire",
- "protection": "Standard",
- "updates": "Regular",
- "pricing": {
- "hourly": 0.5,
- "monthly": 199
- },
- "sla": "99.9%",
- "support_level": "community",
- "badges": [
- "Community",
- "Standard"
- ],
- "image": "/images/products/apex/standard/main.png"
- }
- ],
- "reviews": {
- "average": 4.3,
- "count": 89
- },
- "discount": {
- "active": false,
- "percentage": 0,
- "code": ""
- }
- },
{
"id": "gaming-cs2",
"slug": "gaming-cs2",
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index 15793ff..c257ee0 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2173,3 +2173,27 @@ if (hasDecimal) {
#### État:
✅ Offre Destiny 2 PulseForge alignée sur les métriques fournies
✅ Localisation FR/EN/ET opérationnelle avec onglets raids/Trials et PulseForge Lobby
+
+### Feature: PulseForge Dota 2 native build
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Déployer la fiche Dota 2 PulseForge avec les métriques Medium 405/380/300 FPS, l’option « CPU Boost » et les modules fair-play fournis.
+- Étendre les overrides de localisation FR/EN/ET pour refléter les avantages, l’expérience cloud et les onglets PulseForge Lobby (lane lab, warding planner, sandbox cosmétiques).
+- Actualiser la documentation centrale et ce journal afin de consigner l’arrivée de Dota 2 dans le catalogue natif.
+
+#### Actions réalisées:
+1. Remplacement de `gaming-dota2` dans `data/gaming-products.json` par la fiche PulseForge native (performances, suites tactiques, variante « Ancients »).
+2. Ajout de `localeOverridesByProduct['gaming-dota2']` dans `NativeGamingProductPage.tsx` pour injecter les textes FR/EN/ET (avantages, expérience cloud, variantes PulseForge Lobby).
+3. Mise à jour de `docs/README.md` et de ce journal pour référencer l’offre Dota 2 et la mise à jour des traductions.
+
+#### Fichiers modifiés:
+- `/data/gaming-products.json`
+- `/components/NativeGamingProductPage.tsx`
+- `/docs/README.md`
+- `/docs/JOURNAL.md`
+
+#### État:
+✅ Offre Dota 2 PulseForge alignée sur les métriques fournies
+✅ Localisation FR/EN/ET opérationnelle avec onglets PulseForge Lobby et modules fair-play
diff --git a/docs/README.md b/docs/README.md
index fa4e8b4..78ef4bb 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -84,6 +84,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
- L’entrée `gaming-valorant` applique le même modèle pour Valorant : performances Esports 1080p/1440p/4K, contrôleur de résolution, onglets PulseForge Lobby et notes de conformité fair-play.
- L’entrée `gaming-battlefield6` décline l’offre Battlefield 6 PulseForge : profils Conquest/Breakthrough, benchmarks CPU/GPU, option « CPU Boost » et onglets PulseForge Lobby pour les scénarios véhicules et objectifs.
- L’entrée `gaming-destiny2` reprend la même logique pour Destiny 2 : métriques PvE/PvP (402/356/246 FPS), option « CPU Boost », modules tactiques raids/Trials et onglets PulseForge Lobby pour les sandbox DPS.
+- L’entrée `gaming-dota2` étend l’offre PulseForge pour Dota 2 : profils Medium 405/380/300 FPS, option « CPU Boost », modules teamfight fair-play et onglets PulseForge Lobby (lane lab, warding planner, cosmétiques partagés).
- Les utilitaires d'accès et les types associés vivent dans [`lib/gaming-products.ts`](../lib/gaming-products.ts).
- `getAllGamingProducts()` et `getGamingProductBySlug()` alimentent les routes dynamiques.
@@ -109,7 +110,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
4. Compléter les traductions génériques dans `public/locales//common.json` si besoin.
5. Lancer `npm run lint` pour valider les schémas avant de publier.
-**Dernière action:** Ajout de l’offre native Destiny 2 PulseForge et overrides de localisation FR/EN/ET (23/10/2025)
+**Dernière action:** Ajout de l’offre native Dota 2 PulseForge et overrides de localisation FR/EN/ET (24/10/2025)
---
From 6d0da2466ad9361e287a7bb974913960c87945c4 Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Fri, 24 Oct 2025 18:47:15 +0200
Subject: [PATCH 18/25] fix: remove pc config block from community page
---
components/CommunityGamingProductPage.tsx | 24 ---------------------
docs/JOURNAL.md | 26 +++++++++++++++++++++++
docs/README.md | 1 +
public/locales/en/common.json | 8 -------
public/locales/et/common.json | 8 -------
public/locales/fr/common.json | 8 -------
6 files changed, 27 insertions(+), 48 deletions(-)
diff --git a/components/CommunityGamingProductPage.tsx b/components/CommunityGamingProductPage.tsx
index b0e22b9..c253133 100644
--- a/components/CommunityGamingProductPage.tsx
+++ b/components/CommunityGamingProductPage.tsx
@@ -56,7 +56,6 @@ type CommunityPageCopy = {
breadcrumb: { home: string; games: string }
badges: { catalog: string; support: string }
subscription: { title: string; description: string; popular: string; viewDetails: string }
- configuration: { title: string; gpu: string; ram: string; cpu: string; support: string; supportValue: string }
about: { title: string }
featuresTitle: string
benefits: { title: string; items: Array<{ title: string; description: string }> }
@@ -219,29 +218,6 @@ export default function CommunityGamingProductPage({ product }: CommunityGamingP
))}
-
-
-
{copy.configuration.title}
-
- {[
- { label: copy.configuration.gpu, value: variant.gpu },
- { label: copy.configuration.ram, value: variant.ram },
- { label: copy.configuration.cpu, value: variant.cpu },
- { label: copy.configuration.support, value: copy.configuration.supportValue }
- ].map((item, idx) => (
-
- {item.label}
- {item.value}
-
- ))}
-
-
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index c257ee0..a17e992 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2197,3 +2197,29 @@ if (hasDecimal) {
#### État:
✅ Offre Dota 2 PulseForge alignée sur les métriques fournies
✅ Localisation FR/EN/ET opérationnelle avec onglets PulseForge Lobby et modules fair-play
+
+### Maintenance: Simplification de la page produit communautaire
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Supprimer la section « configuration standard » des pages produits communautaires conformément à la demande.
+- Conserver la mise en page actuelle (abonnements, description longue, avantages) et garantir la compatibilité i18n.
+- Mettre à jour la documentation centrale et le journal pour refléter le changement.
+
+#### Actions réalisées:
+1. Retrait de la grille configuration/support dans `components/CommunityGamingProductPage.tsx` et simplification du typage associé.
+2. Nettoyage des traductions FR/EN/ET dans `public/locales/*/common.json` afin de retirer les clés inutilisées.
+3. Mise à jour de `docs/README.md` et de ce journal pour détailler le comportement actualisé de la page communautaire.
+
+#### Fichiers modifiés:
+- `/components/CommunityGamingProductPage.tsx`
+- `/public/locales/en/common.json`
+- `/public/locales/et/common.json`
+- `/public/locales/fr/common.json`
+- `/docs/README.md`
+- `/docs/JOURNAL.md`
+
+#### État:
+✅ Page communautaire épurée (plus de section configuration locale)
+✅ Traductions synchronisées et documentation alignée
diff --git a/docs/README.md b/docs/README.md
index 78ef4bb..bf796d4 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -94,6 +94,7 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
- Ajouter une langue consiste à dupliquer l'objet existant et adapter les champs textuels.
- Les textes spécifiques à une offre (ex. PulseForge Warzone) sont fusionnés via `localeOverridesByProduct` pour injecter les métriques, descriptions cloud et variantes traduites dans chaque langue.
- Les pages communautaires réutilisent les traductions du dossier `public/locales` et les textes définis directement dans [`components/CommunityGamingProductPage.tsx`](../components/CommunityGamingProductPage.tsx).
+ - La grille « configuration standard » a été retirée : la vue se concentre désormais sur les abonnements, la description longue et les avantages génériques du catalogue.
### 🏗️ Construction des pages
- Le routeur [`app/[locale]/products/[slug]/page.tsx`](../app/%5Blocale%5D/products/%5Bslug%5D/page.tsx) charge le produit demandé et choisit quel composant rendre :
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 9ee27db..f276ef6 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -917,14 +917,6 @@
"popular": "Most popular",
"viewDetails": "View details"
},
- "configuration": {
- "title": "Standard Configuration",
- "gpu": "GPU",
- "ram": "RAM",
- "cpu": "CPU",
- "support": "Support",
- "supportValue": "Community"
- },
"about": {
"title": "About {{productName}}"
},
diff --git a/public/locales/et/common.json b/public/locales/et/common.json
index 969982b..8a98b3a 100644
--- a/public/locales/et/common.json
+++ b/public/locales/et/common.json
@@ -917,14 +917,6 @@
"popular": "Kõige populaarsem",
"viewDetails": "Vaata üksikasju"
},
- "configuration": {
- "title": "Standardkonfiguratsioon",
- "gpu": "GPU",
- "ram": "RAM",
- "cpu": "CPU",
- "support": "Tugi",
- "supportValue": "Kogukond"
- },
"about": {
"title": "{{productName}} tutvustus"
},
diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json
index 74bbe90..f21043a 100644
--- a/public/locales/fr/common.json
+++ b/public/locales/fr/common.json
@@ -917,14 +917,6 @@
"popular": "Le plus populaire",
"viewDetails": "Voir les détails"
},
- "configuration": {
- "title": "Configuration Standard",
- "gpu": "GPU",
- "ram": "RAM",
- "cpu": "CPU",
- "support": "Support",
- "supportValue": "Communautaire"
- },
"about": {
"title": "À propos de {{productName}}"
},
From 38257de71579c2996820c966b3fe611b40dbd8f2 Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Fri, 24 Oct 2025 21:07:02 +0200
Subject: [PATCH 19/25] feat: enhance mobile menu motion
---
components/Header.tsx | 42 +++++++++++++++++++-----
components/SiteHeader.tsx | 68 ++++++++++++++++++++-------------------
docs/JOURNAL.md | 23 +++++++++++++
3 files changed, 92 insertions(+), 41 deletions(-)
diff --git a/components/Header.tsx b/components/Header.tsx
index 321e400..908c5d2 100644
--- a/components/Header.tsx
+++ b/components/Header.tsx
@@ -1,6 +1,7 @@
'use client'
import { useState, useEffect, useMemo } from 'react'
+import { AnimatePresence, motion } from 'framer-motion'
import Link from 'next/link'
import { usePathname, useRouter } from 'next/navigation'
import LanguageSelectorSimplest from '@/components/LanguageSelectorSimplest'
@@ -38,6 +39,16 @@ const Header = () => {
return () => window.removeEventListener('scroll', handleScroll)
}, [])
+ const overlayTransition = useMemo(
+ () => ({ duration: 0.25, ease: [0.4, 0, 0.2, 1] }),
+ []
+ )
+
+ const panelTransition = useMemo(
+ () => ({ type: 'spring', stiffness: 260, damping: 28, mass: 0.9 }),
+ []
+ )
+
const navigation = [
{ name: t?.nav?.home || 'Accueil', href: basePath },
{ name: t?.nav?.games || 'Jeux', href: `${basePath}/games` },
@@ -135,17 +146,32 @@ const Header = () => {
{/* Mobile Menu */}
- {isMobileMenuOpen && (
- <>
-
+ {isMobileMenuOpen && (
+ setIsMobileMenuOpen(false)}
aria-label="Fermer le menu"
+ initial={{ opacity: 0 }}
+ animate={{ opacity: 1 }}
+ exit={{ opacity: 0 }}
+ transition={overlayTransition}
/>
-
+
+
+ {isMobileMenuOpen && (
+
+ )}
+
>
)
}
diff --git a/components/SiteHeader.tsx b/components/SiteHeader.tsx
index 358f2c5..fc59b2a 100644
--- a/components/SiteHeader.tsx
+++ b/components/SiteHeader.tsx
@@ -1,6 +1,7 @@
'use client'
import { useCallback, useEffect, useMemo, useState } from 'react'
+import { AnimatePresence, motion } from 'framer-motion'
import Link from 'next/link'
import { usePathname, useRouter } from 'next/navigation'
import LanguageSelectorSimplest from '@/components/LanguageSelectorSimplest'
@@ -23,7 +24,6 @@ const isSupportedLocale = (value: string | undefined): value is SupportedLocale
const SiteHeader = () => {
const [isScrolled, setIsScrolled] = useState(false)
const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false)
- const [shouldRenderMobileMenu, setShouldRenderMobileMenu] = useState(false)
const pathname = usePathname()
const router = useRouter()
const { t, locale: activeLocale } = useI18n()
@@ -82,13 +82,7 @@ const SiteHeader = () => {
}, [buildHref, router])
const toggleMobileMenu = useCallback(() => {
- setIsMobileMenuOpen((open) => {
- const next = !open
- if (next) {
- setShouldRenderMobileMenu(true)
- }
- return next
- })
+ setIsMobileMenuOpen((open) => !open)
}, [])
const closeMobileMenu = useCallback(() => {
@@ -108,18 +102,15 @@ const SiteHeader = () => {
setIsMobileMenuOpen(false)
}, [pathname])
- useEffect(() => {
- if (!isMobileMenuOpen && shouldRenderMobileMenu) {
- const timeout = window.setTimeout(() => {
- setShouldRenderMobileMenu(false)
- }, 320)
- return () => window.clearTimeout(timeout)
- }
- if (isMobileMenuOpen) {
- setShouldRenderMobileMenu(true)
- }
- return undefined
- }, [isMobileMenuOpen, shouldRenderMobileMenu])
+ const overlayTransition = useMemo(
+ () => ({ duration: 0.25, ease: [0.4, 0, 0.2, 1] }),
+ []
+ )
+
+ const panelTransition = useMemo(
+ () => ({ type: 'spring', stiffness: 260, damping: 28, mass: 0.9 }),
+ []
+ )
const ctaLabel = t?.nav?.getStarted ?? 'Commencer'
@@ -191,21 +182,32 @@ const SiteHeader = () => {
- {shouldRenderMobileMenu && (
- <>
-
+ {isMobileMenuOpen && (
+
-
+
+
+ {isMobileMenuOpen && (
+
+ )}
+
>
)
}
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index a17e992..d08ccba 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2223,3 +2223,26 @@ if (hasDecimal) {
#### État:
✅ Page communautaire épurée (plus de section configuration locale)
✅ Traductions synchronisées et documentation alignée
+
+### UI: Animation enrichie du menu mobile global
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Offrir une animation d’apparition plus dynamique pour le menu mobile (header principal et site header).
+- Garantir une transition fluide à l’ouverture/fermeture en utilisant les helpers `framer-motion` déjà présents dans le projet.
+- Conserver l’accessibilité (overlay cliquable, fermeture automatique lors de la navigation).
+
+#### Actions réalisées:
+1. Intégration de `AnimatePresence` et de transitions spring dans `components/SiteHeader.tsx` pour gérer l’overlay et le panneau mobile avec un slide-in/tilt léger.
+2. Application du même schéma d’animation dans `components/Header.tsx` afin d’harmoniser l’expérience sur les autres pages.
+3. Vérification via `npm run lint` et tentative de build (`npm run build`) – ce dernier échoue toujours hors repo à cause de la dépendance `framer-motion` manquante côté environnement Netlify.
+
+#### Fichiers modifiés:
+- `/components/SiteHeader.tsx`
+- `/components/Header.tsx`
+- `/docs/JOURNAL.md`
+
+#### État:
+✅ Animations mobiles plus riches sur les deux headers
+⚠️ Build Netlify toujours bloqué (module `framer-motion` absent côté environnement externe)
From 3d25a7ee5a2bbb1ee295b0b30e34941de95ef841 Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Sat, 25 Oct 2025 00:08:18 +0200
Subject: [PATCH 20/25] fix: streamline services page motion
---
app/[locale]/services/page.tsx | 10 +-
components/services/AnimatedCounter.tsx | 82 ++++++++----
components/services/FlipCard3D.tsx | 58 +++++++--
components/services/GlowingCard.tsx | 35 ++++--
components/services/InteractiveTimeline.tsx | 33 +++--
components/services/ParticleBackground.tsx | 132 +++++++++++++-------
docs/JOURNAL.md | 31 +++++
docs/README.md | 10 ++
8 files changed, 284 insertions(+), 107 deletions(-)
diff --git a/app/[locale]/services/page.tsx b/app/[locale]/services/page.tsx
index 7521e98..ad16f5b 100644
--- a/app/[locale]/services/page.tsx
+++ b/app/[locale]/services/page.tsx
@@ -491,22 +491,22 @@ export default function ServicesPage() {
/>
-
+
{/* Hero Section */}
-
+
{badge}
-
+
{title}
-
+
{subtitle}
@@ -543,7 +543,7 @@ export default function ServicesPage() {
{/* Flip Cards Grid */}
-
+
{pillars.map((pillar) => (
(null)
+ const textRef = useRef(null)
+ const isInView = useInView(ref, { once: true, margin: '-50px' })
const [displayValue, setDisplayValue] = useState(value)
useEffect(() => {
- if (!isInView) return
+ if (textRef.current) {
+ textRef.current.textContent = displayValue
+ }
+ }, [displayValue])
+
+ useEffect(() => {
+ if (!isInView) {
+ return
+ }
+
+ if (typeof window !== 'undefined') {
+ const prefersReducedMotion = window.matchMedia(
+ '(prefers-reduced-motion: reduce)',
+ )
+ if (prefersReducedMotion.matches) {
+ setDisplayValue(value)
+ if (textRef.current) {
+ textRef.current.textContent = value
+ }
+ return
+ }
+ }
const numericValue = parseFloat(value.replace(/[^0-9.]/g, ''))
const suffix = value.replace(/[0-9.]/g, '')
- if (isNaN(numericValue)) {
+ if (Number.isNaN(numericValue)) {
setDisplayValue(value)
+ if (textRef.current) {
+ textRef.current.textContent = value
+ }
return
}
- let startTime: number | null = null
- const animate = (currentTime: number) => {
- if (!startTime) startTime = currentTime
- const elapsed = currentTime - startTime
- const progress = Math.min(elapsed / (duration * 1000), 1)
+ const controls = animate(0, numericValue, {
+ duration,
+ ease: 'easeOut',
+ onUpdate: (latest) => {
+ const rounded = Math.round(latest)
+ const formatted = `${rounded}${suffix}`
+ if (textRef.current) {
+ textRef.current.textContent = formatted
+ }
+ },
+ onComplete: () => {
+ setDisplayValue(value)
+ if (textRef.current) {
+ textRef.current.textContent = value
+ }
+ },
+ })
- const currentValue = Math.floor(numericValue * progress)
- setDisplayValue(`${currentValue}${suffix}`)
-
- if (progress < 1) {
- requestAnimationFrame(animate)
- }
+ return () => {
+ controls.stop()
}
-
- requestAnimationFrame(animate)
- }, [isInView, value, duration])
+ }, [duration, isInView, value])
return (
-
+
{displayValue}
-
+
{label}
)
diff --git a/components/services/FlipCard3D.tsx b/components/services/FlipCard3D.tsx
index cdc03f8..cd18471 100644
--- a/components/services/FlipCard3D.tsx
+++ b/components/services/FlipCard3D.tsx
@@ -1,6 +1,6 @@
'use client'
-import { useState } from 'react'
+import { useEffect, useState } from 'react'
import { motion } from 'framer-motion'
import type { LucideIcon } from 'lucide-react'
import { CheckCircle2 } from 'lucide-react'
@@ -27,18 +27,58 @@ export default function FlipCard3D({
highlights,
}: FlipCard3DProps) {
const [isFlipped, setIsFlipped] = useState(false)
+ const [isInteractive, setIsInteractive] = useState(false)
+
+ useEffect(() => {
+ if (typeof window === 'undefined') return
+ const query = window.matchMedia('(hover: hover) and (pointer: fine)')
+ const update = () => setIsInteractive(query.matches)
+ update()
+ query.addEventListener('change', update)
+ return () => query.removeEventListener('change', update)
+ }, [])
+
+ const handlePointerEnter = () => {
+ if (isInteractive) {
+ setIsFlipped(true)
+ }
+ }
+
+ const handlePointerLeave = () => {
+ if (isInteractive) {
+ setIsFlipped(false)
+ }
+ }
+
+ const handleToggle = () => {
+ if (!isInteractive) {
+ setIsFlipped((prev) => !prev)
+ }
+ }
return (
setIsFlipped(true)}
- onMouseLeave={() => setIsFlipped(false)}
+ className={`relative perspective-1000 ${
+ isInteractive ? 'h-[420px]' : 'min-h-[420px]'
+ }`}
+ onMouseEnter={handlePointerEnter}
+ onMouseLeave={handlePointerLeave}
+ onClick={handleToggle}
+ onKeyDown={(event) => {
+ if (!isInteractive && (event.key === 'Enter' || event.key === ' ')) {
+ event.preventDefault()
+ handleToggle()
+ }
+ }}
+ role={isInteractive ? undefined : 'button'}
+ aria-pressed={isInteractive ? undefined : isFlipped}
+ tabIndex={isInteractive ? -1 : 0}
>
{/* Front */}
@@ -53,9 +93,9 @@ export default function FlipCard3D({
{title}
- {description}
+ {description}
-
+
{bullets.map((bullet, idx) => (
- Survolez pour voir plus
+ {isInteractive ? 'Survolez pour voir plus' : 'Touchez pour explorer'}
@@ -98,7 +138,7 @@ export default function FlipCard3D({
Fonctionnalités
-
+
{highlights.slice(0, 6).map((highlight, idx) => (
(null)
+ const [isInteractive, setIsInteractive] = useState(false)
+
+ useEffect(() => {
+ if (typeof window === 'undefined') return
+ const query = window.matchMedia('(hover: hover) and (pointer: fine)')
+ const update = () => setIsInteractive(query.matches)
+ update()
+ query.addEventListener('change', update)
+ return () => query.removeEventListener('change', update)
+ }, [])
const handleMouseMove = (e: React.MouseEvent
) => {
if (!cardRef.current) return
@@ -35,27 +45,32 @@ export default function GlowingCard({
})
}
+ const glowBackground = isInteractive
+ ? `radial-gradient(520px circle at ${mousePosition.x}px ${mousePosition.y}px, rgba(139, 92, 246, 0.16), transparent 45%)`
+ : 'radial-gradient(520px circle at 50% 50%, rgba(139, 92, 246, 0.12), transparent 55%)'
+
return (
{/* Glowing effect */}
diff --git a/components/services/InteractiveTimeline.tsx b/components/services/InteractiveTimeline.tsx
index 4fd9685..4fab9c3 100644
--- a/components/services/InteractiveTimeline.tsx
+++ b/components/services/InteractiveTimeline.tsx
@@ -21,18 +21,24 @@ export default function InteractiveTimeline({ steps }: InteractiveTimelineProps)
{/* Timeline Bar */}
-
+
{steps.map((step, index) => (
-
+
setActiveStep(index)}
- className={`relative z-10 w-12 h-12 rounded-full border-2 flex items-center justify-center transition-all ${
+ className={`relative z-10 w-12 h-12 rounded-full border-2 flex items-center justify-center transition-all focus:outline-none focus:ring-2 focus:ring-purple-400/60 ${
index <= activeStep
- ? 'border-purple-500 bg-gradient-to-br from-purple-500 to-cyan-600'
- : 'border-white/20 bg-black/50'
+ ? 'border-purple-500 bg-gradient-to-br from-purple-500 to-cyan-600 shadow-lg shadow-purple-500/20'
+ : 'border-white/15 bg-black/50'
}`}
- whileHover={{ scale: 1.1 }}
- whileTap={{ scale: 0.95 }}
+ whileHover={{ scale: 1.06 }}
+ whileTap={{ scale: 0.92 }}
+ role="tab"
+ aria-selected={index === activeStep}
+ aria-controls={`timeline-step-${step.id}`}
>
{index < activeStep ? (
@@ -43,8 +49,8 @@ export default function InteractiveTimeline({ steps }: InteractiveTimelineProps)
{step.title}
@@ -55,12 +61,14 @@ export default function InteractiveTimeline({ steps }: InteractiveTimelineProps)
{/* Progress Line */}
-
+
1 ? (activeStep / (steps.length - 1)) * 100 : 100
+ }%`,
}}
transition={{ duration: 0.5, ease: 'easeInOut' }}
/>
@@ -74,8 +82,9 @@ export default function InteractiveTimeline({ steps }: InteractiveTimelineProps)
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
exit={{ opacity: 0, y: -20 }}
- transition={{ duration: 0.3 }}
+ transition={{ duration: 0.28, ease: 'easeOut' }}
className="glass-effect rounded-2xl p-8 border border-white/10"
+ id={`timeline-step-${steps[activeStep].id}`}
>
{steps[activeStep].title}
diff --git a/components/services/ParticleBackground.tsx b/components/services/ParticleBackground.tsx
index 6719653..a25ab62 100644
--- a/components/services/ParticleBackground.tsx
+++ b/components/services/ParticleBackground.tsx
@@ -2,6 +2,36 @@
import { useEffect, useRef } from 'react'
+type Particle = {
+ x: number
+ y: number
+ vx: number
+ vy: number
+ size: number
+ color: string
+}
+
+const PARTICLE_COLORS = [
+ 'rgba(139, 92, 246, 0.45)',
+ 'rgba(6, 182, 212, 0.45)',
+ 'rgba(16, 185, 129, 0.45)',
+]
+
+function createParticles(
+ width: number,
+ height: number,
+ count: number,
+): Particle[] {
+ return Array.from({ length: count }, () => ({
+ x: Math.random() * width,
+ y: Math.random() * height,
+ vx: (Math.random() - 0.5) * 0.35,
+ vy: (Math.random() - 0.5) * 0.35,
+ size: Math.random() * 2.2 + 0.8,
+ color: PARTICLE_COLORS[Math.floor(Math.random() * PARTICLE_COLORS.length)],
+ }))
+}
+
export default function ParticleBackground() {
const canvasRef = useRef(null)
@@ -12,87 +42,95 @@ export default function ParticleBackground() {
const ctx = canvas.getContext('2d')
if (!ctx) return
- canvas.width = window.innerWidth
- canvas.height = window.innerHeight
-
- const particles: Array<{
- x: number
- y: number
- vx: number
- vy: number
- size: number
- color: string
- }> = []
-
- const colors = [
- 'rgba(139, 92, 246, 0.5)',
- 'rgba(6, 182, 212, 0.5)',
- 'rgba(16, 185, 129, 0.5)',
- ]
-
- for (let i = 0; i < 50; i++) {
- particles.push({
- x: Math.random() * canvas.width,
- y: Math.random() * canvas.height,
- vx: (Math.random() - 0.5) * 0.5,
- vy: (Math.random() - 0.5) * 0.5,
- size: Math.random() * 3 + 1,
- color: colors[Math.floor(Math.random() * colors.length)],
- })
+ const prefersReducedMotion = window.matchMedia(
+ '(prefers-reduced-motion: reduce)',
+ ).matches
+ if (prefersReducedMotion) {
+ return
+ }
+
+ const isMobile = window.matchMedia('(max-width: 768px)').matches
+ const particleCount = isMobile ? 18 : 32
+ const connectionThreshold = isMobile ? 110 : 150
+
+ let dpr = window.devicePixelRatio || 1
+
+ let particles = createParticles(
+ canvas.width || window.innerWidth,
+ canvas.height || window.innerHeight,
+ particleCount,
+ )
+
+ let animationFrame = 0
+
+ const resizeCanvas = () => {
+ dpr = window.devicePixelRatio || 1
+ canvas.width = window.innerWidth * dpr
+ canvas.height = window.innerHeight * dpr
+ ctx.setTransform(dpr, 0, 0, dpr, 0, 0)
+ particles = createParticles(window.innerWidth, window.innerHeight, particleCount)
}
- const animate = () => {
+ resizeCanvas()
+
+ const draw = () => {
+ ctx.save()
+ ctx.setTransform(1, 0, 0, 1, 0, 0)
ctx.clearRect(0, 0, canvas.width, canvas.height)
+ ctx.restore()
- particles.forEach((particle, i) => {
+ particles.forEach((particle, index) => {
particle.x += particle.vx
particle.y += particle.vy
- if (particle.x < 0 || particle.x > canvas.width) particle.vx *= -1
- if (particle.y < 0 || particle.y > canvas.height) particle.vy *= -1
+ if (particle.x <= 0 || particle.x >= window.innerWidth) {
+ particle.vx *= -1
+ }
+ if (particle.y <= 0 || particle.y >= window.innerHeight) {
+ particle.vy *= -1
+ }
ctx.beginPath()
ctx.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2)
ctx.fillStyle = particle.color
ctx.fill()
- particles.forEach((other, j) => {
- if (i === j) return
+ for (let otherIndex = index + 1; otherIndex < particles.length; otherIndex++) {
+ const other = particles[otherIndex]
const dx = particle.x - other.x
const dy = particle.y - other.y
- const distance = Math.sqrt(dx * dx + dy * dy)
+ const distance = Math.hypot(dx, dy)
- if (distance < 150) {
+ if (distance < connectionThreshold) {
ctx.beginPath()
ctx.moveTo(particle.x, particle.y)
ctx.lineTo(other.x, other.y)
ctx.strokeStyle = `rgba(139, 92, 246, ${
- 0.15 * (1 - distance / 150)
+ 0.12 * (1 - distance / connectionThreshold)
})`
- ctx.lineWidth = 0.5
+ ctx.lineWidth = 0.35 / dpr
ctx.stroke()
}
- })
+ }
})
- requestAnimationFrame(animate)
+ animationFrame = requestAnimationFrame(draw)
}
- animate()
+ animationFrame = requestAnimationFrame(draw)
- const handleResize = () => {
- canvas.width = window.innerWidth
- canvas.height = window.innerHeight
- }
+ window.addEventListener('resize', resizeCanvas)
- window.addEventListener('resize', handleResize)
- return () => window.removeEventListener('resize', handleResize)
+ return () => {
+ cancelAnimationFrame(animationFrame)
+ window.removeEventListener('resize', resizeCanvas)
+ }
}, [])
return (
)
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index d08ccba..6c063f2 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2246,3 +2246,34 @@ if (hasDecimal) {
#### État:
✅ Animations mobiles plus riches sur les deux headers
⚠️ Build Netlify toujours bloqué (module `framer-motion` absent côté environnement externe)
+
+### UI: Optimisation de la page Services premium
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Fluidifier les animations et arrière-plans de la page services tout en réduisant la charge GPU.
+- Corriger les soucis responsive (titre qui déborde, timeline difficile à utiliser sur mobile).
+- Adapter les interactions pour les terminaux tactiles et respecter `prefers-reduced-motion`.
+
+#### Actions réalisées:
+1. Réécriture de `ParticleBackground` avec détection mobile, respect de `prefers-reduced-motion`, gestion du DPR et connexions O(n) pour éviter les ralentissements.
+2. Migration d’`AnimatedCounter` vers `framer-motion.animate` en écriture directe pour supprimer les re-rendus successifs et appliquer un timing plus court.
+3. Mise à jour de `FlipCard3D` et `GlowingCard` pour différencier les pointeurs tactiles (tap pour retourner, glow statique) et ajuster les transitions.
+4. Amélioration de `InteractiveTimeline` (scroll horizontal, rôles ARIA, progression sécurisée) et révision du hero services pour une typographie responsive.
+5. Documentation synchronisée (`docs/README.md`, `docs/JOURNAL.md`) afin de refléter les optimisations et bonnes pratiques associées.
+
+#### Fichiers modifiés:
+- `/app/[locale]/services/page.tsx`
+- `/components/services/AnimatedCounter.tsx`
+- `/components/services/FlipCard3D.tsx`
+- `/components/services/GlowingCard.tsx`
+- `/components/services/InteractiveTimeline.tsx`
+- `/components/services/ParticleBackground.tsx`
+- `/docs/README.md`
+- `/docs/JOURNAL.md`
+
+#### État:
+✅ Animations et interactions fluides sur desktop & mobile
+✅ Titre hero contenu et timeline utilisable en responsive
+⚠️ Build Netlify toujours dépendant de `framer-motion` côté environnement distant
diff --git a/docs/README.md b/docs/README.md
index bf796d4..b03a49e 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -113,6 +113,16 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
**Dernière action:** Ajout de l’offre native Dota 2 PulseForge et overrides de localisation FR/EN/ET (24/10/2025)
+## 🛠️ Page Services premium
+
+La page services (`app/[locale]/services/page.tsx`) combine plusieurs composants interactifs optimisés pour les appareils mobiles et desktop.
+
+- **Arrière-plan allégé** : `ParticleBackground` ajuste dynamiquement le nombre de particules selon la taille d’écran, respecte `prefers-reduced-motion` et recycle les connexions pour éviter les ralentissements.
+- **Cartes 3D adaptatives** : `FlipCard3D` bascule en mode « tap to flip » sur les terminaux tactiles et conserve les animations 3D uniquement sur les pointeurs précis.
+- **Cartes lumineuses** : `GlowingCard` réduit les effets coûteux sur mobile tout en conservant une lueur statique.
+- **Counters et timeline** : `AnimatedCounter` s’appuie sur `framer-motion.animate` pour animer les chiffres sans re-rendu massif, tandis que `InteractiveTimeline` devient scrollable horizontalement et accessible clavier.
+- **Mise en page responsive** : le hero ajuste la taille du titre (`text-4xl → text-8xl`) avec `tracking-tight` et `leading` resserrés pour éviter que le texte ne déborde sur les petits écrans.
+
---
*Documentation maintenue selon les standards définis dans `/CLAUDE.md`*
From 4ade44fa2772a46d20ed0f85853409599a9b8a0b Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Sat, 25 Oct 2025 01:51:28 +0200
Subject: [PATCH 21/25] fix: stabilize service card flip animation
---
components/services/FlipCard3D.tsx | 14 +++++++++++---
docs/JOURNAL.md | 21 +++++++++++++++++++++
2 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/components/services/FlipCard3D.tsx b/components/services/FlipCard3D.tsx
index cd18471..5981afe 100644
--- a/components/services/FlipCard3D.tsx
+++ b/components/services/FlipCard3D.tsx
@@ -78,13 +78,20 @@ export default function FlipCard3D({
className="relative w-full h-full"
initial={false}
animate={{ rotateY: isFlipped ? 180 : 0 }}
- transition={{ duration: 0.45, type: 'spring', damping: 22, stiffness: 180 }}
- style={{ transformStyle: 'preserve-3d' }}
+ transition={{ duration: 0.55, ease: [0.22, 1, 0.36, 1] }}
+ style={{
+ transformStyle: 'preserve-3d',
+ transformPerspective: 1400,
+ willChange: 'transform',
+ }}
>
{/* Front */}
Statistiques
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index 6c063f2..03841d5 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2277,3 +2277,24 @@ if (hasDecimal) {
✅ Animations et interactions fluides sur desktop & mobile
✅ Titre hero contenu et timeline utilisable en responsive
⚠️ Build Netlify toujours dépendant de `framer-motion` côté environnement distant
+
+### UI: Stabilisation du flip 3D des cartes services
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Supprimer les glitches pendant l’animation de rotation des cartes 3D sur la page services.
+- Conserver l’expérience différenciée desktop/mobile sans modifier le design existant.
+
+#### Actions réalisées:
+1. Ajustement du composant `FlipCard3D` pour utiliser une transition easing maîtrisée, une perspective explicite et un `will-change` ciblé.
+2. Gestion des `pointer-events` côté recto/verso afin d’éviter les oscillations lors du flip sur desktop et tactile.
+3. Vérification du comportement accessibilité (toggle clavier) après refactor animation.
+
+#### Fichiers modifiés:
+- `/components/services/FlipCard3D.tsx`
+- `/docs/JOURNAL.md`
+
+#### État:
+✅ Animation fluide sans rebond parasite
+⚠️ Build Netlify toujours dépendant de `framer-motion` (environnement distant)
From 9cdcf20b81e6dd9a49196b03642ec0d36bd974d2 Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Sat, 25 Oct 2025 12:11:27 +0200
Subject: [PATCH 22/25] fix: smooth service card flip with react-spring
---
components/services/FlipCard3D.tsx | 23 +++++++---
docs/JOURNAL.md | 24 ++++++++++
docs/README.md | 1 +
package-lock.json | 73 ++++++++++++++++++++++++++++++
package.json | 1 +
5 files changed, 115 insertions(+), 7 deletions(-)
diff --git a/components/services/FlipCard3D.tsx b/components/services/FlipCard3D.tsx
index 5981afe..0296b18 100644
--- a/components/services/FlipCard3D.tsx
+++ b/components/services/FlipCard3D.tsx
@@ -1,7 +1,8 @@
'use client'
import { useEffect, useState } from 'react'
-import { motion } from 'framer-motion'
+import { useReducedMotion } from 'framer-motion'
+import { animated, useSpring } from '@react-spring/web'
import type { LucideIcon } from 'lucide-react'
import { CheckCircle2 } from 'lucide-react'
@@ -28,6 +29,12 @@ export default function FlipCard3D({
}: FlipCard3DProps) {
const [isFlipped, setIsFlipped] = useState(false)
const [isInteractive, setIsInteractive] = useState(false)
+ const prefersReducedMotion = useReducedMotion()
+
+ const [spring, api] = useSpring(() => ({
+ rotate: 0,
+ config: { tension: 520, friction: 40, precision: 0.01 },
+ }))
useEffect(() => {
if (typeof window === 'undefined') return
@@ -38,6 +45,11 @@ export default function FlipCard3D({
return () => query.removeEventListener('change', update)
}, [])
+ useEffect(() => {
+ const target = isFlipped && !prefersReducedMotion ? 180 : 0
+ api.start({ rotate: target, immediate: prefersReducedMotion })
+ }, [api, isFlipped, prefersReducedMotion])
+
const handlePointerEnter = () => {
if (isInteractive) {
setIsFlipped(true)
@@ -74,15 +86,12 @@ export default function FlipCard3D({
aria-pressed={isInteractive ? undefined : isFlipped}
tabIndex={isInteractive ? -1 : 0}
>
- `perspective(1400px) rotateY(${angle}deg)`),
}}
>
{/* Front */}
@@ -158,7 +167,7 @@ export default function FlipCard3D({
))}
-
+
)
}
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index 03841d5..3850dce 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2298,3 +2298,27 @@ if (hasDecimal) {
#### État:
✅ Animation fluide sans rebond parasite
⚠️ Build Netlify toujours dépendant de `framer-motion` (environnement distant)
+
+### UI: Flip Services via @react-spring
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Remplacer l’animation custom par une bibliothèque dédiée pour éliminer les saccades signalées.
+- Respecter les préférences de mouvement réduit sans sacrifier le mode tactile « tap to flip ».
+
+#### Actions réalisées:
+1. Adoption de `@react-spring/web` dans `FlipCard3D` avec un spring contrôlé (tension/friction) et interpolation perspective.
+2. Synchronisation du flip avec `prefers-reduced-motion` pour désactiver l’animation lorsque requis.
+3. Mise à jour de la documentation centrale afin de signaler la nouvelle dépendance et les bonnes pratiques associées.
+
+#### Fichiers modifiés:
+- `/components/services/FlipCard3D.tsx`
+- `/package.json`
+- `/package-lock.json`
+- `/docs/README.md`
+- `/docs/JOURNAL.md`
+
+#### État:
+✅ Flip fluide sur desktop & mobile avec transitions stables
+⚠️ Build Netlify toujours tributaire de `framer-motion` côté environnement distant
diff --git a/docs/README.md b/docs/README.md
index b03a49e..6b90b48 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -119,6 +119,7 @@ La page services (`app/[locale]/services/page.tsx`) combine plusieurs composants
- **Arrière-plan allégé** : `ParticleBackground` ajuste dynamiquement le nombre de particules selon la taille d’écran, respecte `prefers-reduced-motion` et recycle les connexions pour éviter les ralentissements.
- **Cartes 3D adaptatives** : `FlipCard3D` bascule en mode « tap to flip » sur les terminaux tactiles et conserve les animations 3D uniquement sur les pointeurs précis.
+ - Animation gérée par `@react-spring/web` pour un flip fluide sans glitch, avec respect de `prefers-reduced-motion`.
- **Cartes lumineuses** : `GlowingCard` réduit les effets coûteux sur mobile tout en conservant une lueur statique.
- **Counters et timeline** : `AnimatedCounter` s’appuie sur `framer-motion.animate` pour animer les chiffres sans re-rendu massif, tandis que `InteractiveTimeline` devient scrollable horizontalement et accessible clavier.
- **Mise en page responsive** : le hero ajuste la taille du titre (`text-4xl → text-8xl`) avec `tracking-tight` et `leading` resserrés pour éviter que le texte ne déborde sur les petits écrans.
diff --git a/package-lock.json b/package-lock.json
index 87d05a0..b9c2c24 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,6 +9,7 @@
"version": "1.0.0",
"license": "ISC",
"dependencies": {
+ "@react-spring/web": "^10.0.3",
"clsx": "^2.1.1",
"framer-motion": "^12.23.24",
"i18next": "^25.5.2",
@@ -982,6 +983,78 @@
"node": ">=14"
}
},
+ "node_modules/@react-spring/animated": {
+ "version": "10.0.3",
+ "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-10.0.3.tgz",
+ "integrity": "sha512-7MrxADV3vaUADn2V9iYhaIL6iOWRx9nCJjYrsk2AHD2kwPr6fg7Pt0v+deX5RnCDmCKNnD6W5fasiyM8D+wzJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@react-spring/shared": "~10.0.3",
+ "@react-spring/types": "~10.0.3"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/@react-spring/core": {
+ "version": "10.0.3",
+ "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-10.0.3.tgz",
+ "integrity": "sha512-D4DwNO68oohDf/0HG2G0Uragzb9IA1oXblxrd6MZAcBcUQG2EHUWXewjdECMPLNmQvlYVyyBRH6gPxXM5DX7DQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@react-spring/animated": "~10.0.3",
+ "@react-spring/shared": "~10.0.3",
+ "@react-spring/types": "~10.0.3"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/react-spring/donate"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/@react-spring/rafz": {
+ "version": "10.0.3",
+ "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-10.0.3.tgz",
+ "integrity": "sha512-Ri2/xqt8OnQ2iFKkxKMSF4Nqv0LSWnxXT4jXFzBDsHgeeH/cHxTLupAWUwmV9hAGgmEhBmh5aONtj3J6R/18wg==",
+ "license": "MIT"
+ },
+ "node_modules/@react-spring/shared": {
+ "version": "10.0.3",
+ "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-10.0.3.tgz",
+ "integrity": "sha512-geCal66nrkaQzUVhPkGomylo+Jpd5VPK8tPMEDevQEfNSWAQP15swHm+MCRG4wVQrQlTi9lOzKzpRoTL3CA84Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@react-spring/rafz": "~10.0.3",
+ "@react-spring/types": "~10.0.3"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/@react-spring/types": {
+ "version": "10.0.3",
+ "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-10.0.3.tgz",
+ "integrity": "sha512-H5Ixkd2OuSIgHtxuHLTt7aJYfhMXKXT/rK32HPD/kSrOB6q6ooeiWAXkBy7L8F3ZxdkBb9ini9zP9UwnEFzWgQ==",
+ "license": "MIT"
+ },
+ "node_modules/@react-spring/web": {
+ "version": "10.0.3",
+ "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-10.0.3.tgz",
+ "integrity": "sha512-ndU+kWY81rHsT7gTFtCJ6mrVhaJ6grFmgTnENipzmKqot4HGf5smPNK+cZZJqoGeDsj9ZsiWPW4geT/NyD484A==",
+ "license": "MIT",
+ "dependencies": {
+ "@react-spring/animated": "~10.0.3",
+ "@react-spring/core": "~10.0.3",
+ "@react-spring/shared": "~10.0.3",
+ "@react-spring/types": "~10.0.3"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
diff --git a/package.json b/package.json
index f214539..00663b6 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
},
"homepage": "https://github.com/Hackboot-Dev/hackboot#readme",
"dependencies": {
+ "@react-spring/web": "^10.0.3",
"clsx": "^2.1.1",
"framer-motion": "^12.23.24",
"i18next": "^25.5.2",
From 1aad779597335707a8a1ccc90424ec98eb7bd51d Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Sat, 25 Oct 2025 12:42:45 +0200
Subject: [PATCH 23/25] fix: stop glow cards from tanking frame rate
---
components/services/GlowingCard.tsx | 59 +++++++++++++++++++++++------
docs/JOURNAL.md | 21 ++++++++++
2 files changed, 69 insertions(+), 11 deletions(-)
diff --git a/components/services/GlowingCard.tsx b/components/services/GlowingCard.tsx
index 44c00dc..3f6f300 100644
--- a/components/services/GlowingCard.tsx
+++ b/components/services/GlowingCard.tsx
@@ -1,6 +1,7 @@
'use client'
import { useEffect, useRef, useState } from 'react'
+import type { CSSProperties, MouseEvent } from 'react'
import { motion } from 'framer-motion'
import Link from 'next/link'
import type { LucideIcon } from 'lucide-react'
@@ -23,8 +24,9 @@ export default function GlowingCard({
link,
linkLabel,
}: GlowingCardProps) {
- const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 })
const cardRef = useRef
(null)
+ const glowRef = useRef(null)
+ const frameRef = useRef(null)
const [isInteractive, setIsInteractive] = useState(false)
useEffect(() => {
@@ -36,23 +38,57 @@ export default function GlowingCard({
return () => query.removeEventListener('change', update)
}, [])
- const handleMouseMove = (e: React.MouseEvent) => {
- if (!cardRef.current) return
- const rect = cardRef.current.getBoundingClientRect()
- setMousePosition({
- x: e.clientX - rect.left,
- y: e.clientY - rect.top,
+ const cancelFrame = () => {
+ if (frameRef.current !== null) {
+ cancelAnimationFrame(frameRef.current)
+ frameRef.current = null
+ }
+ }
+
+ const updateGlow = (xPercent: number, yPercent: number) => {
+ if (!glowRef.current) return
+ glowRef.current.style.setProperty('--glow-x', `${xPercent}%`)
+ glowRef.current.style.setProperty('--glow-y', `${yPercent}%`)
+ }
+
+ const scheduleGlow = (xPercent: number, yPercent: number) => {
+ cancelFrame()
+ frameRef.current = requestAnimationFrame(() => {
+ updateGlow(xPercent, yPercent)
+ frameRef.current = null
})
}
- const glowBackground = isInteractive
- ? `radial-gradient(520px circle at ${mousePosition.x}px ${mousePosition.y}px, rgba(139, 92, 246, 0.16), transparent 45%)`
- : 'radial-gradient(520px circle at 50% 50%, rgba(139, 92, 246, 0.12), transparent 55%)'
+ useEffect(() => {
+ updateGlow(50, 50)
+ return cancelFrame
+ }, [])
+
+ const handleMouseMove = (event: MouseEvent) => {
+ if (!isInteractive || !cardRef.current) return
+ const rect = cardRef.current.getBoundingClientRect()
+ const x = ((event.clientX - rect.left) / rect.width) * 100
+ const y = ((event.clientY - rect.top) / rect.height) * 100
+ scheduleGlow(Math.min(100, Math.max(0, x)), Math.min(100, Math.max(0, y)))
+ }
+
+ const handleMouseLeave = () => {
+ if (!isInteractive) return
+ scheduleGlow(50, 50)
+ }
+
+ const glowStyle: CSSProperties = {
+ '--glow-x': '50%',
+ '--glow-y': '50%',
+ background:
+ 'radial-gradient(520px circle at var(--glow-x) var(--glow-y), rgba(139, 92, 246, 0.16), transparent 45%)',
+ }
return (
{/* Glowing effect */}
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index 3850dce..39d2520 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2322,3 +2322,24 @@ if (hasDecimal) {
#### État:
✅ Flip fluide sur desktop & mobile avec transitions stables
⚠️ Build Netlify toujours tributaire de `framer-motion` côté environnement distant
+
+### UI: Stabilisation du glow des cartes services
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Supprimer les chutes de FPS causées par le recalcul React du fond lumineux sur mouvement de souris.
+- Préserver le rendu interactif desktop tout en conservant une expérience stable sur mobile/tactile.
+
+#### Actions réalisées:
+1. Remplacement du `setState` à chaque `mousemove` par un pilotage via variables CSS mises à jour avec `requestAnimationFrame`.
+2. Ajout d’un reset automatique du glow au centre lors du `mouseleave` et au montage pour éviter les valeurs résiduelles.
+3. Nettoyage de la frame planifiée pour empêcher les fuites et garantir une animation fluide.
+
+#### Fichiers modifiés:
+- `/components/services/GlowingCard.tsx`
+- `/docs/JOURNAL.md`
+
+#### État:
+✅ Glow interactif fluide sans re-rendu complet
+⚠️ Build distant toujours bloqué tant que `framer-motion` manque côté Netlify
From 05e368b2f3ead5a73a5b85d4832266099cfeb235 Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Sat, 25 Oct 2025 12:55:52 +0200
Subject: [PATCH 24/25] refactor: rebuild services page with lightweight motion
---
app/[locale]/services/page.tsx | 1138 ++++++++++---------
components/services/AnimatedCounter.tsx | 97 --
components/services/FlipCard3D.tsx | 173 ---
components/services/GlowingCard.tsx | 128 ---
components/services/InteractiveTimeline.tsx | 118 --
docs/JOURNAL.md | 30 +
docs/README.md | 15 +-
package-lock.json | 73 --
package.json | 1 -
9 files changed, 657 insertions(+), 1116 deletions(-)
delete mode 100644 components/services/AnimatedCounter.tsx
delete mode 100644 components/services/FlipCard3D.tsx
delete mode 100644 components/services/GlowingCard.tsx
delete mode 100644 components/services/InteractiveTimeline.tsx
diff --git a/app/[locale]/services/page.tsx b/app/[locale]/services/page.tsx
index ad16f5b..94fe2b1 100644
--- a/app/[locale]/services/page.tsx
+++ b/app/[locale]/services/page.tsx
@@ -1,7 +1,7 @@
'use client'
-import { useMemo } from 'react'
-import { useI18n } from '@/lib/i18n-simple'
+import { useMemo, useState } from 'react'
+import { LazyMotion, domAnimation, m, useReducedMotion } from 'framer-motion'
import dynamic from 'next/dynamic'
import Link from 'next/link'
import { useParams } from 'next/navigation'
@@ -10,24 +10,19 @@ import {
Cpu,
HeadphonesIcon,
Cloud,
- ArrowRight,
- TrendingUp,
- Award,
Rocket,
Target,
Users,
+ Sparkles,
+ Compass,
+ Layers,
} from 'lucide-react'
import type { LucideIcon } from 'lucide-react'
import SiteHeader from '@/components/SiteHeader'
-import FlipCard3D from '@/components/services/FlipCard3D'
-import AnimatedCounter from '@/components/services/AnimatedCounter'
-import InteractiveTimeline from '@/components/services/InteractiveTimeline'
-import ParticleBackground from '@/components/services/ParticleBackground'
-import GlowingCard from '@/components/services/GlowingCard'
-import MorphingShape from '@/components/services/MorphingShape'
+import { useI18n } from '@/lib/i18n-simple'
const Footer = dynamic(() => import('@/components/Footer'), {
- loading: () =>
,
+ loading: () =>
,
ssr: false,
})
@@ -57,28 +52,6 @@ type ServicesStep = {
description: string
}
-type PillarCard = {
- id: string
- icon: LucideIcon
- gradient: string
- iconColor: string
- title: string
- description: string
- bullets: string[]
- stats: { label: string; value: string }[]
- highlights: string[]
-}
-
-type SolutionCard = {
- id: string
- icon: LucideIcon
- gradient: string
- title: string
- description: string
- link: string
- linkLabel: string
-}
-
type ServicesContent = {
badge?: string
title?: string
@@ -109,30 +82,209 @@ type ServicesContent = {
}
}
+type PillarBlueprint = {
+ id: string
+ icon: LucideIcon
+ label: string
+ accent: string
+ stats: { label: string; value: string }[]
+ defaultDescription: string
+ defaultBullets: string[]
+}
+
+type SolutionBlueprint = {
+ id: string
+ icon: LucideIcon
+ accent: string
+ defaultTitle: string
+ defaultDescription: string
+ defaultLinkLabel: string
+ linkBuilder: (locale: string) => string
+}
+
+const HERO_METRIC_FALLBACK: ServicesMetric[] = [
+ { id: 'uptime', value: '99,9 %', label: 'Disponibilité garantie' },
+ { id: 'clients', value: '120+', label: 'Clients pro accompagnés' },
+ { id: 'regions', value: '8', label: 'Régions cloud actives' },
+ { id: 'sla', value: '<5 min', label: 'SLA support moyen' },
+]
+
+const PILLAR_BLUEPRINTS: PillarBlueprint[] = [
+ {
+ id: 'security',
+ icon: Shield,
+ label: 'Sécurité proactive',
+ accent: 'from-purple-500/90 to-purple-700/60',
+ stats: [
+ { label: 'Kernel shield', value: 'Propriétaire' },
+ { label: 'Audits', value: 'Quotidiens' },
+ { label: 'Détection', value: '0%' },
+ ],
+ defaultDescription:
+ 'Protection multi-couches, supervision anti-détection et chiffrement bout en bout.',
+ defaultBullets: [
+ 'Surveillance continue et audits dynamiques',
+ 'Gestion proactive des incidents',
+ 'Playbooks de mitigation personnalisés',
+ ],
+ },
+ {
+ id: 'performance',
+ icon: Cpu,
+ label: 'Performance calibrée',
+ accent: 'from-sky-500/90 to-indigo-700/60',
+ stats: [
+ { label: 'GPU', value: 'RTX 4090' },
+ { label: 'Latency', value: '<1 ms' },
+ { label: 'Scaling', value: 'Instantané' },
+ ],
+ defaultDescription:
+ 'Clusters bare-metal optimisés, pipeline CI/CD gaming et monitoring temps réel.',
+ defaultBullets: [
+ 'Optimisation GPU frame-by-frame',
+ 'Auto-scaling multi-régions',
+ 'Benchmarks et rapports mensuels',
+ ],
+ },
+ {
+ id: 'partnership',
+ icon: HeadphonesIcon,
+ label: 'Support dédié',
+ accent: 'from-emerald-500/90 to-teal-700/60',
+ stats: [
+ { label: 'Réponse', value: '<5 min' },
+ { label: 'Disponibilité', value: '24/7' },
+ { label: 'Satisfaction', value: '98%' },
+ ],
+ defaultDescription:
+ 'Account manager senior, escalade prioritaire et canaux privés Discord/WhatsApp.',
+ defaultBullets: [
+ 'Veille & recommandations proactives',
+ 'Workshops adaptés à votre roster',
+ 'Documentation personnalisée',
+ ],
+ },
+ {
+ id: 'infrastructure',
+ icon: Cloud,
+ label: 'Cloud orchestration',
+ accent: 'from-cyan-500/90 to-slate-700/60',
+ stats: [
+ { label: 'Régions', value: '12+' },
+ { label: 'Uptime', value: '99.99%' },
+ { label: 'Déploiement', value: '<2 min' },
+ ],
+ defaultDescription:
+ 'Provisionnement instantané, bascule automatique de région et sauvegardes en continu.',
+ defaultBullets: [
+ 'Réseau 10 Gbps sécurisé',
+ 'Disaster recovery automatisé',
+ 'Intégration API PulseForge',
+ ],
+ },
+]
+
+const SOLUTION_BLUEPRINTS: SolutionBlueprint[] = [
+ {
+ id: 'cloud',
+ icon: Rocket,
+ accent: 'from-blue-500/90 to-purple-500/60',
+ defaultTitle: 'Cloud Ops & Scaling',
+ defaultDescription:
+ 'Provisionnement automatisé, régions multiples et pipelines CI/CD prêts pour PulseForge.',
+ defaultLinkLabel: 'Découvrir Premium',
+ linkBuilder: (locale) => `/${locale}/premium`,
+ },
+ {
+ id: 'competitive',
+ icon: Target,
+ accent: 'from-rose-500/90 to-orange-500/60',
+ defaultTitle: 'Labs Anti-Cheat',
+ defaultDescription:
+ 'Reverse engineering continu, correctifs jour zéro et protocoles d’audit conformes.',
+ defaultLinkLabel: 'Voir les jeux',
+ linkBuilder: (locale) => `/${locale}/games`,
+ },
+ {
+ id: 'custom',
+ icon: Users,
+ accent: 'from-emerald-500/90 to-cyan-500/60',
+ defaultTitle: 'Coaching & Integrations',
+ defaultDescription:
+ 'Sessions 1:1, assistance en direct et intégrations personnalisées dans vos outils.',
+ defaultLinkLabel: 'Planifier un call',
+ linkBuilder: (locale) => `/${locale}/contact`,
+ },
+]
+
+const PROCESS_FALLBACK: ServicesStep[] = [
+ {
+ id: 'discover',
+ title: 'Kick-off & audit',
+ description:
+ 'Analyse de votre roster, objectifs de performance et contraintes de sécurité.',
+ },
+ {
+ id: 'prototype',
+ title: 'Prototype guidé',
+ description:
+ 'Instance pilote PulseForge avec profils calibrés et supervision conjointe.',
+ },
+ {
+ id: 'deploy',
+ title: 'Déploiement orchestré',
+ description:
+ 'Activation progressive, documentation et transfert de compétences.',
+ },
+ {
+ id: 'optimize',
+ title: 'Optimisation continue',
+ description:
+ 'Revues, benchmarks et évolution proactive selon vos retours terrain.',
+ },
+]
+
+const CONTACT_METRIC_FALLBACK: ServicesMetric[] = [
+ { id: 'sla', value: '<5 min', label: 'Temps de réponse moyen' },
+ { id: 'coverage', value: '24/7', label: 'Support global' },
+ { id: 'satisfaction', value: '98 %', label: 'Satisfaction client' },
+]
+
+const heroReveal = {
+ hidden: { opacity: 0, y: 32 },
+ show: { opacity: 1, y: 0 },
+}
+
+const sectionReveal = {
+ hidden: { opacity: 0, y: 40 },
+ show: { opacity: 1, y: 0 },
+}
+
+const cardReveal = {
+ hidden: { opacity: 0, y: 24 },
+ show: { opacity: 1, y: 0 },
+}
+
export default function ServicesPage() {
const { t } = useI18n()
const params = useParams()
const locale = (params?.locale as string) || 'fr'
const servicesContent = (t.services ?? {}) as ServicesContent
+ const shouldReduceMotion = useReducedMotion()
- const badge = servicesContent.badge ?? 'Services Premium'
- const title = servicesContent.title ?? 'Infrastructure & Sécurité'
+ const badge = servicesContent.badge ?? 'Services PulseForge'
+ const title =
+ servicesContent.title ??
+ 'Infrastructure et sécurité professionnelles pour vos opérations gaming'
const subtitle =
servicesContent.subtitle ??
- 'Des services sur-mesure pour les joueurs et équipes qui exigent la perfection technique et la performance maximale.'
+ 'Nous combinons cloud, sécurité et coaching technique pour déployer des expériences PulseForge irréprochables.'
const primaryCta = servicesContent.cta ?? 'Parler à un expert'
- const heroMetricFallback: ServicesMetric[] = [
- { id: 'uptime', value: '99.9%', label: 'Uptime garanti' },
- { id: 'clients', value: '500+', label: 'Clients satisfaits' },
- { id: 'regions', value: '12', label: 'Régions globales' },
- { id: 'support', value: '24/7', label: 'Support dédié' },
- ]
- const heroMetricsSource = Array.isArray(servicesContent.metrics)
- ? servicesContent.metrics
- : []
- const heroMetrics = heroMetricFallback.map((metric) => {
- const match = heroMetricsSource.find((item) => item?.id === metric.id)
+ const heroMetrics = HERO_METRIC_FALLBACK.map((metric) => {
+ const match = Array.isArray(servicesContent.metrics)
+ ? servicesContent.metrics.find((item) => item?.id === metric.id)
+ : undefined
return {
...metric,
value: match?.value ?? metric.value,
@@ -140,517 +292,467 @@ export default function ServicesPage() {
}
})
- const pillarDefaults: PillarCard[] = [
- {
- id: 'security',
- icon: Shield,
- gradient: 'from-purple-500 via-violet-500 to-purple-600',
- iconColor: 'text-purple-400',
- title: 'Sécurité Maximale',
- description:
- 'Protection multi-couches avec supervision continue et technologies anti-détection de pointe pour une tranquillité totale.',
- bullets: [
- 'Surveillance anti-cheat 24/7',
- 'Kernel shield propriétaire',
- 'Chiffrement E2E permanent',
- ],
- stats: [
- { label: 'Protection', value: 'Kernel-level' },
- { label: 'Détection', value: '0%' },
- { label: 'Uptime', value: '99.9%' },
- { label: 'Audits', value: 'Quotidiens' },
- ],
- highlights: [
- 'Protection kernel-level avancée',
- 'HWID spoofer intégré',
- 'Bypass EAC/BE/Vanguard',
- 'Stream-proof garanti',
- 'Chiffrement bout en bout',
- 'Monitoring en temps réel',
- 'Alertes instantanées',
- 'Backup automatique',
- ],
- },
- {
- id: 'performance',
- icon: Cpu,
- gradient: 'from-blue-500 via-indigo-500 to-blue-600',
- iconColor: 'text-blue-400',
- title: 'Performance Extrême',
- description:
- 'Infrastructure bare-metal avec optimisation GPU frame-by-frame et pipelines CI/CD pensés pour le gaming compétitif.',
- bullets: [
- 'Clusters bare-metal dédiés',
- 'Optimisation GPU à la frame',
- 'Monitoring de latence en direct',
- ],
- stats: [
- { label: 'CPU', value: 'i9-13900K' },
- { label: 'GPU', value: 'RTX 4090' },
- { label: 'RAM', value: '128GB DDR5' },
- { label: 'Latence', value: '<1ms' },
- ],
- highlights: [
- 'Processeurs dernière génération',
- 'GPU RTX 4090 dédiés',
- 'RAM DDR5 ultra-rapide',
- 'SSD NVMe Gen4',
- 'Réseau 10Gbps',
- 'Optimisation automatique',
- 'Scaling instantané',
- 'Zero downtime',
- ],
- },
- {
- id: 'partnership',
- icon: HeadphonesIcon,
- gradient: 'from-emerald-500 via-teal-500 to-emerald-600',
- iconColor: 'text-emerald-400',
- title: 'Support Dédié',
- description:
- 'Account manager personnel, playbooks sur-mesure et support prioritaire sur canaux privés Discord et WhatsApp.',
- bullets: [
- 'Account manager dédié',
- 'Playbooks personnalisés',
- 'Escalade instantanée sur Discord',
- ],
- stats: [
- { label: 'Réponse', value: '<5min' },
- { label: 'Disponibilité', value: '24/7' },
- { label: 'Satisfaction', value: '98%' },
- { label: 'Résolution', value: '<30min' },
- ],
- highlights: [
- 'Manager dédié à votre compte',
- 'Canal Discord prioritaire',
- 'Support WhatsApp direct',
- 'Documentation personnalisée',
- 'Formations régulières',
- 'Veille technologique',
- 'Recommendations proactives',
- 'Revues mensuelles',
- ],
- },
- {
- id: 'infrastructure',
- icon: Cloud,
- gradient: 'from-cyan-500 via-sky-500 to-cyan-600',
- iconColor: 'text-cyan-400',
- title: 'Cloud Enterprise',
- description:
- 'Infrastructure cloud redondante multi-régions avec provisionnement automatisé et scaling intelligent en temps réel.',
- bullets: [
- 'Multi-régions global',
- 'Auto-scaling intelligent',
- 'Déploiement automatisé',
- ],
- stats: [
- { label: 'Régions', value: '12+' },
- { label: 'Uptime', value: '99.99%' },
- { label: 'Déploiement', value: '<2min' },
- { label: 'Backup', value: 'Temps réel' },
- ],
- highlights: [
- 'Présence dans 12 régions',
- 'Load balancing automatique',
- 'CDN global optimisé',
- 'Disaster recovery',
- 'Backup redondant',
- 'Migration à chaud',
- 'Scaling élastique',
- 'Monitoring avancé',
- ],
- },
- {
- id: 'analytics',
- icon: TrendingUp,
- gradient: 'from-amber-500 via-yellow-500 to-amber-600',
- iconColor: 'text-amber-400',
- title: 'Analytics & Insights',
- description:
- 'Tableaux de bord en temps réel avec métriques de performance détaillées et rapports d\'optimisation personnalisés.',
- bullets: [
- 'Dashboard temps réel',
- 'Métriques détaillées',
- 'Rapports personnalisés',
- ],
- stats: [
- { label: 'Métriques', value: '50+' },
- { label: 'Refresh', value: 'Temps réel' },
- { label: 'Historique', value: '6 mois' },
- { label: 'Exports', value: 'Illimités' },
- ],
- highlights: [
- 'Dashboard interactif',
- 'KPIs personnalisables',
- 'Alertes intelligentes',
- 'Rapports automatiques',
- 'Comparaisons périodiques',
- 'Prédictions IA',
- 'Export données brutes',
- 'API complète',
- ],
- },
- {
- id: 'compliance',
- icon: Award,
- gradient: 'from-pink-500 via-rose-500 to-pink-600',
- iconColor: 'text-pink-400',
- title: 'Conformité & Certifications',
- description:
- 'Infrastructure certifiée aux standards internationaux avec audits réguliers et conformité RGPD garantie.',
- bullets: [
- 'Certifications ISO',
- 'Conformité RGPD',
- 'Audits trimestriels',
- ],
- stats: [
- { label: 'Certifs', value: 'ISO 27001' },
- { label: 'RGPD', value: 'Conforme' },
- { label: 'Audits', value: 'Trimestriels' },
- { label: 'SOC', value: 'Type II' },
- ],
- highlights: [
- 'Certification ISO 27001',
- 'SOC 2 Type II compliant',
- 'RGPD full compliance',
- 'Audits indépendants',
- 'Documentation complète',
- 'Formation équipes',
- 'Politiques mises à jour',
- 'Transparence totale',
- ],
- },
- ]
-
- const pillarSource = Array.isArray(servicesContent.pillars)
- ? servicesContent.pillars
- : []
- const pillars = pillarDefaults.map((pillar) => {
- const match = pillarSource.find((item) => item?.id === pillar.id)
- return {
- ...pillar,
- title: match?.title ?? pillar.title,
- description: match?.description ?? pillar.description,
- bullets:
- Array.isArray(match?.bullets) && match?.bullets?.length
- ? (match?.bullets as string[])
- : pillar.bullets,
- }
- })
+ const pillars = useMemo(() => {
+ const source = Array.isArray(servicesContent.pillars)
+ ? servicesContent.pillars
+ : []
+ return PILLAR_BLUEPRINTS.map((pillar) => {
+ const match = source.find((item) => item?.id === pillar.id)
+ return {
+ ...pillar,
+ title: match?.title ?? pillar.label,
+ description: match?.description ?? pillar.defaultDescription,
+ bullets:
+ Array.isArray(match?.bullets) && match?.bullets?.length
+ ? (match?.bullets as string[])
+ : pillar.defaultBullets,
+ }
+ })
+ }, [servicesContent.pillars])
+
+ const [activePillarId, setActivePillarId] = useState
(
+ () => PILLAR_BLUEPRINTS[0]?.id ?? 'security',
+ )
+
+ const activePillar = pillars.find((pillar) => pillar.id === activePillarId)
const pillarsHeading = {
- title: servicesContent.pillarsHeading?.title ?? 'Nos Services Premium',
+ title:
+ servicesContent.pillarsHeading?.title ?? 'Des fondations pensées pour le pro',
subtitle:
servicesContent.pillarsHeading?.subtitle ??
- 'Une suite complète de services professionnels pour maximiser vos performances et votre sécurité.',
+ 'Chaque pilier combine nos briques cloud, sécurité et support pour une exécution PulseForge sans faille.',
}
- const solutionDefaults: SolutionCard[] = [
- {
- id: 'cloud',
- icon: Rocket,
- gradient: 'from-sky-500 via-blue-600 to-indigo-600',
- title: 'Cloud Gaming Infrastructure',
- description:
- 'Infrastructure cloud complète avec machines virtuelles optimisées, auto-scaling intelligent et déploiement multi-régions instantané.',
- link: `/${locale}/premium`,
- linkLabel: 'Découvrir Premium',
- },
- {
- id: 'competitive',
- icon: Target,
- gradient: 'from-purple-500 via-fuchsia-500 to-purple-600',
- title: 'Solutions Anti-Cheat',
- description:
- 'Protection avancée avec reverse engineering continu, correctifs jour zéro et protocoles d\'audit pour rester indétectable sur tous les anti-cheats.',
- link: `/${locale}/games`,
- linkLabel: 'Voir les jeux',
- },
- {
- id: 'custom',
- icon: Users,
- gradient: 'from-emerald-500 via-teal-500 to-emerald-600',
- title: 'Coaching & Intégrations',
- description:
- 'Accompagnement personnalisé avec sessions 1:1, assistance en direct, intégrations API sur-mesure et formation continue de vos équipes.',
- link: `/${locale}/contact`,
- linkLabel: 'Nous contacter',
- },
- ]
-
- const solutionsSource = servicesContent.solutions?.items ?? []
- const solutions = solutionDefaults.map((solution) => {
- const match = solutionsSource.find((item) => item?.id === solution.id)
- return {
- ...solution,
- title: match?.title ?? solution.title,
- description: match?.description ?? solution.description,
- linkLabel: match?.linkLabel ?? solution.linkLabel,
- }
- })
+ const solutions = useMemo(() => {
+ const source = Array.isArray(servicesContent.solutions?.items)
+ ? servicesContent.solutions?.items ?? []
+ : []
+ return SOLUTION_BLUEPRINTS.map((solution) => {
+ const match = source.find((item) => item?.id === solution.id)
+ return {
+ ...solution,
+ title: match?.title ?? solution.defaultTitle,
+ description: match?.description ?? solution.defaultDescription,
+ linkLabel: match?.linkLabel ?? solution.defaultLinkLabel,
+ link: solution.linkBuilder(locale),
+ }
+ })
+ }, [servicesContent.solutions?.items, locale])
const solutionsHeading = {
- title: servicesContent.solutions?.title ?? 'Solutions Complètes',
+ title: servicesContent.solutions?.title ?? 'Modules prêts à activer',
subtitle:
servicesContent.solutions?.subtitle ??
- 'Des modules flexibles qui s\'intègrent parfaitement à votre workflow pour un écosystème gaming complet.',
+ 'Composez votre stack PulseForge en sélectionnant les modules adaptés à vos besoins opérationnels.',
}
- const processFallback = [
- {
- id: 'discover',
- title: 'Découverte & Audit',
- description:
- 'Analyse approfondie de vos besoins, objectifs de performance et contraintes techniques pour créer une solution parfaitement adaptée.',
- },
- {
- id: 'prototype',
- title: 'Prototype & Test',
- description:
- 'Mise en place d\'un environnement de test avec configurations optimisées et validation complète avant déploiement production.',
- },
- {
- id: 'deploy',
- title: 'Déploiement Production',
- description:
- 'Migration progressive avec supervision continue, formation de vos équipes et documentation technique complète.',
- },
- {
- id: 'optimize',
- title: 'Optimisation Continue',
- description:
- 'Monitoring permanent, revues mensuelles, ajustements proactifs et évolution de l\'infrastructure selon vos besoins.',
- },
- ]
-
- const processSource = servicesContent.process?.steps ?? []
- const processSteps = processFallback.map((step) => {
- const match = processSource.find((item) => item?.id === step.id)
- return {
- ...step,
- title: match?.title ?? step.title,
- description: match?.description ?? step.description,
- }
- })
+ const processSteps = useMemo(() => {
+ const source = Array.isArray(servicesContent.process?.steps)
+ ? servicesContent.process?.steps ?? []
+ : []
+ return PROCESS_FALLBACK.map((step) => {
+ const match = source.find((item) => item?.id === step.id)
+ return {
+ ...step,
+ title: match?.title ?? step.title,
+ description: match?.description ?? step.description,
+ }
+ })
+ }, [servicesContent.process?.steps])
const processHeading = {
- title: servicesContent.process?.title ?? 'Notre Méthodologie',
+ title: servicesContent.process?.title ?? 'Notre méthode accompagnée',
subtitle:
servicesContent.process?.subtitle ??
- 'Un processus éprouvé qui garantit une intégration fluide et des résultats mesurables dès le premier jour.',
+ 'Un cadre en quatre phases pour intégrer PulseForge sans rupture et avec un pilotage constant.',
}
const contactContent = servicesContent.contact ?? {}
- const contactMetricFallback: ServicesMetric[] = [
- { id: 'sla', value: '5', label: 'Temps de réponse (min)' },
- { id: 'coverage', value: '365', label: 'Jours par an' },
- { id: 'satisfaction', value: '98', label: 'Satisfaction (%)' },
- ]
-
- const contactMetricsSource = Array.isArray(contactContent.metrics)
- ? contactContent.metrics
- : []
- const contactMetrics = contactMetricFallback.map((metric) => {
- const match = contactMetricsSource.find((item) => item?.id === metric.id)
- return {
- ...metric,
- value: match?.value ?? metric.value,
- label: match?.label ?? metric.label,
- }
- })
-
- const contactNote =
- contactContent.note ??
- 'Un canal prioritaire Discord & WhatsApp est activé dès la signature du contrat.'
-
- const contactTitle = contactContent.title ?? 'Prêt à démarrer ?'
+ const contactMetrics = useMemo(() => {
+ const source = Array.isArray(contactContent.metrics)
+ ? contactContent.metrics
+ : []
+ return CONTACT_METRIC_FALLBACK.map((metric) => {
+ const match = source.find((item) => item?.id === metric.id)
+ return {
+ ...metric,
+ value: match?.value ?? metric.value,
+ label: match?.label ?? metric.label,
+ }
+ })
+ }, [contactContent.metrics])
+
+ const contactTitle =
+ contactContent.title ?? 'Prêt à lancer votre build PulseForge ?'
const contactDescription =
contactContent.description ??
- 'Notre équipe vous répond sous 24h pour évaluer vos besoins et préparer un plan d\'action personnalisé.'
- const contactCta = contactContent.cta ?? 'Planifier un call'
+ 'Nos ingénieurs vous répondent sous 24 h pour cadrer les besoins, planifier les tests et verrouiller la mise en production.'
+ const contactCta = contactContent.cta ?? 'Planifier un call dédié'
+ const contactNote =
+ contactContent.note ??
+ 'Un canal prioritaire (Discord + WhatsApp) est ouvert dès la signature pour les escalades critiques.'
return (
-
+
-
- {/* Background Effects */}
-
-
-
- {/* Background grid */}
-
-
-
-
- {/* Hero Section */}
-
-
-
- {badge}
-
-
-
-
- {title}
-
-
-
-
- {subtitle}
-
-
- {/* Animated Counters */}
-
- {heroMetrics.map((metric) => (
-
- ))}
-
-
-
- {primaryCta}
-
-
-
-
- {/* Pillars Title */}
-
-
-
- {pillarsHeading.title}
-
-
-
- {pillarsHeading.subtitle}
-
-
-
- {/* Flip Cards Grid */}
-
- {pillars.map((pillar) => (
-
+
+
+
+ {/* Hero */}
+
+
+
- ))}
-
-
- {/* Solutions Section */}
-
-
-
-
- {solutionsHeading.title}
+
+
+
+
+ {badge}
+
+
+
+
+ {title}
-
-
- {solutionsHeading.subtitle}
-
+
+
+
+ {subtitle}
+
+
+
+
+ {primaryCta}
+
+
+ Explorer les offres
+
+
+
+
+ {heroMetrics.map((metric, index) => (
+
+
+ {metric.label}
+ {metric.value}
+
+ ))}
+
+
+
+ {/* Pillars */}
+
+
+
+ Pillars
+
+
+ {pillarsHeading.title}
+
+
+ {pillarsHeading.subtitle}
+
+
+
+
+ {pillars.map((pillar) => {
+ const Icon = pillar.icon
+ const isActive = pillar.id === activePillarId
+ return (
+
setActivePillarId(pillar.id)}
+ className={`group relative flex min-w-[220px] items-center gap-3 rounded-2xl border px-4 py-3 text-left transition ${
+ isActive
+ ? 'border-white/40 bg-white/10'
+ : 'border-white/10 bg-white/5 hover:border-white/20 hover:bg-white/[0.08]'
+ }`}
+ >
+
+
+
+
+
{pillar.title}
+
{pillar.label}
+
+
+
+ )
+ })}
+
- {/* Glowing Cards */}
-
- {solutions.map((solution) => (
-
- ))}
+
+
+
+
+
+
+ {activePillar?.title ?? pillars[0]?.title}
+
+
+ {activePillar?.description ?? pillars[0]?.description}
+
+
+
+ {(activePillar?.stats ?? pillarBlueprints[0].stats).map((stat) => (
+
+
{stat.label}
+
{stat.value}
+
+ ))}
+
+
+
+
+ {(activePillar?.bullets ?? pillars[0]?.bullets ?? []).map((bullet) => (
+
+
+ {bullet}
+
+ ))}
+
+
+
+
-
-
- {/* Process Section - Interactive Timeline */}
-
-
-
-
- {processHeading.title}
-
-
-
- {processHeading.subtitle}
-
+
+
+ {/* Solutions */}
+
+
+
+ Modules
+
+
+ {solutionsHeading.title}
+
+
+ {solutionsHeading.subtitle}
+
+
+
+ {solutions.map((solution, index) => {
+ const Icon = solution.icon
+ return (
+
+
+
+
+
+
+
{solution.title}
+
+ {solution.description}
+
+
+
+ {solution.linkLabel}
+
+
+
+
+
+ )
+ })}
+
-
-
-
-
- {/* CTA Section */}
-
-
-
-
-
- {contactTitle}
+
+
+ {/* Process */}
+
+
+
+ Process
+
+
+ {processHeading.title}
+
-
- {contactDescription}
-
-
- {/* Contact Metrics with Animation */}
-
- {contactMetrics.map((metric) => (
-
- ))}
+
{processHeading.subtitle}
+
+
+
+ {processSteps.map((step, index) => (
+
+
+
+
+
+ {index + 1}
+
+
{step.title}
+
+
{step.description}
+
+
+ ))}
+
+
+
+
+ {/* Contact */}
+
+
+
+
+
+
Contact
+
{contactTitle}
+
{contactDescription}
+
+
+ {contactMetrics.map((metric) => (
+
+
{metric.label}
+
+ {metric.value}
+
+
+ ))}
+
- {contactNote}
-
-
+
{contactCta}
-
-
-
- Voir les offres
+
{contactNote}
-
+
-
-
-
-
+
+
+
)
diff --git a/components/services/AnimatedCounter.tsx b/components/services/AnimatedCounter.tsx
deleted file mode 100644
index 951411d..0000000
--- a/components/services/AnimatedCounter.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-'use client'
-
-import { useEffect, useRef, useState } from 'react'
-import { animate, motion, useInView } from 'framer-motion'
-
-interface AnimatedCounterProps {
- value: string
- label: string
- duration?: number
-}
-
-export default function AnimatedCounter({
- value,
- label,
- duration = 1.25,
-}: AnimatedCounterProps) {
- const ref = useRef
(null)
- const textRef = useRef(null)
- const isInView = useInView(ref, { once: true, margin: '-50px' })
- const [displayValue, setDisplayValue] = useState(value)
-
- useEffect(() => {
- if (textRef.current) {
- textRef.current.textContent = displayValue
- }
- }, [displayValue])
-
- useEffect(() => {
- if (!isInView) {
- return
- }
-
- if (typeof window !== 'undefined') {
- const prefersReducedMotion = window.matchMedia(
- '(prefers-reduced-motion: reduce)',
- )
- if (prefersReducedMotion.matches) {
- setDisplayValue(value)
- if (textRef.current) {
- textRef.current.textContent = value
- }
- return
- }
- }
-
- const numericValue = parseFloat(value.replace(/[^0-9.]/g, ''))
- const suffix = value.replace(/[0-9.]/g, '')
-
- if (Number.isNaN(numericValue)) {
- setDisplayValue(value)
- if (textRef.current) {
- textRef.current.textContent = value
- }
- return
- }
-
- const controls = animate(0, numericValue, {
- duration,
- ease: 'easeOut',
- onUpdate: (latest) => {
- const rounded = Math.round(latest)
- const formatted = `${rounded}${suffix}`
- if (textRef.current) {
- textRef.current.textContent = formatted
- }
- },
- onComplete: () => {
- setDisplayValue(value)
- if (textRef.current) {
- textRef.current.textContent = value
- }
- },
- })
-
- return () => {
- controls.stop()
- }
- }, [duration, isInView, value])
-
- return (
-
-
- {displayValue}
-
- {label}
-
- )
-}
diff --git a/components/services/FlipCard3D.tsx b/components/services/FlipCard3D.tsx
deleted file mode 100644
index 0296b18..0000000
--- a/components/services/FlipCard3D.tsx
+++ /dev/null
@@ -1,173 +0,0 @@
-'use client'
-
-import { useEffect, useState } from 'react'
-import { useReducedMotion } from 'framer-motion'
-import { animated, useSpring } from '@react-spring/web'
-import type { LucideIcon } from 'lucide-react'
-import { CheckCircle2 } from 'lucide-react'
-
-interface FlipCard3DProps {
- icon: LucideIcon
- gradient: string
- iconColor: string
- title: string
- description: string
- bullets: string[]
- stats: { label: string; value: string }[]
- highlights: string[]
-}
-
-export default function FlipCard3D({
- icon: Icon,
- gradient,
- iconColor,
- title,
- description,
- bullets,
- stats,
- highlights,
-}: FlipCard3DProps) {
- const [isFlipped, setIsFlipped] = useState(false)
- const [isInteractive, setIsInteractive] = useState(false)
- const prefersReducedMotion = useReducedMotion()
-
- const [spring, api] = useSpring(() => ({
- rotate: 0,
- config: { tension: 520, friction: 40, precision: 0.01 },
- }))
-
- useEffect(() => {
- if (typeof window === 'undefined') return
- const query = window.matchMedia('(hover: hover) and (pointer: fine)')
- const update = () => setIsInteractive(query.matches)
- update()
- query.addEventListener('change', update)
- return () => query.removeEventListener('change', update)
- }, [])
-
- useEffect(() => {
- const target = isFlipped && !prefersReducedMotion ? 180 : 0
- api.start({ rotate: target, immediate: prefersReducedMotion })
- }, [api, isFlipped, prefersReducedMotion])
-
- const handlePointerEnter = () => {
- if (isInteractive) {
- setIsFlipped(true)
- }
- }
-
- const handlePointerLeave = () => {
- if (isInteractive) {
- setIsFlipped(false)
- }
- }
-
- const handleToggle = () => {
- if (!isInteractive) {
- setIsFlipped((prev) => !prev)
- }
- }
-
- return (
- {
- if (!isInteractive && (event.key === 'Enter' || event.key === ' ')) {
- event.preventDefault()
- handleToggle()
- }
- }}
- role={isInteractive ? undefined : 'button'}
- aria-pressed={isInteractive ? undefined : isFlipped}
- tabIndex={isInteractive ? -1 : 0}
- >
-
`perspective(1400px) rotateY(${angle}deg)`),
- }}
- >
- {/* Front */}
-
-
-
-
-
-
{title}
-
{description}
-
-
- {bullets.map((bullet, idx) => (
-
-
- {bullet}
-
- ))}
-
-
-
- {isInteractive ? 'Survolez pour voir plus' : 'Touchez pour explorer'}
-
-
-
- {/* Back */}
-
-
Statistiques
-
-
- {stats.map((stat, idx) => (
-
-
{stat.label}
-
- {stat.value}
-
-
- ))}
-
-
-
- Fonctionnalités
-
-
- {highlights.slice(0, 6).map((highlight, idx) => (
-
- ))}
-
-
-
-
- )
-}
diff --git a/components/services/GlowingCard.tsx b/components/services/GlowingCard.tsx
deleted file mode 100644
index 3f6f300..0000000
--- a/components/services/GlowingCard.tsx
+++ /dev/null
@@ -1,128 +0,0 @@
-'use client'
-
-import { useEffect, useRef, useState } from 'react'
-import type { CSSProperties, MouseEvent } from 'react'
-import { motion } from 'framer-motion'
-import Link from 'next/link'
-import type { LucideIcon } from 'lucide-react'
-import { ArrowRight } from 'lucide-react'
-
-interface GlowingCardProps {
- icon: LucideIcon
- gradient: string
- title: string
- description: string
- link: string
- linkLabel: string
-}
-
-export default function GlowingCard({
- icon: Icon,
- gradient,
- title,
- description,
- link,
- linkLabel,
-}: GlowingCardProps) {
- const cardRef = useRef(null)
- const glowRef = useRef(null)
- const frameRef = useRef(null)
- const [isInteractive, setIsInteractive] = useState(false)
-
- useEffect(() => {
- if (typeof window === 'undefined') return
- const query = window.matchMedia('(hover: hover) and (pointer: fine)')
- const update = () => setIsInteractive(query.matches)
- update()
- query.addEventListener('change', update)
- return () => query.removeEventListener('change', update)
- }, [])
-
- const cancelFrame = () => {
- if (frameRef.current !== null) {
- cancelAnimationFrame(frameRef.current)
- frameRef.current = null
- }
- }
-
- const updateGlow = (xPercent: number, yPercent: number) => {
- if (!glowRef.current) return
- glowRef.current.style.setProperty('--glow-x', `${xPercent}%`)
- glowRef.current.style.setProperty('--glow-y', `${yPercent}%`)
- }
-
- const scheduleGlow = (xPercent: number, yPercent: number) => {
- cancelFrame()
- frameRef.current = requestAnimationFrame(() => {
- updateGlow(xPercent, yPercent)
- frameRef.current = null
- })
- }
-
- useEffect(() => {
- updateGlow(50, 50)
- return cancelFrame
- }, [])
-
- const handleMouseMove = (event: MouseEvent) => {
- if (!isInteractive || !cardRef.current) return
- const rect = cardRef.current.getBoundingClientRect()
- const x = ((event.clientX - rect.left) / rect.width) * 100
- const y = ((event.clientY - rect.top) / rect.height) * 100
- scheduleGlow(Math.min(100, Math.max(0, x)), Math.min(100, Math.max(0, y)))
- }
-
- const handleMouseLeave = () => {
- if (!isInteractive) return
- scheduleGlow(50, 50)
- }
-
- const glowStyle: CSSProperties = {
- '--glow-x': '50%',
- '--glow-y': '50%',
- background:
- 'radial-gradient(520px circle at var(--glow-x) var(--glow-y), rgba(139, 92, 246, 0.16), transparent 45%)',
- }
-
- return (
-
- {/* Glowing effect */}
-
-
-
-
-
-
-
-
{title}
-
{description}
-
-
- {linkLabel}
-
-
-
-
- )
-}
diff --git a/components/services/InteractiveTimeline.tsx b/components/services/InteractiveTimeline.tsx
deleted file mode 100644
index 4fab9c3..0000000
--- a/components/services/InteractiveTimeline.tsx
+++ /dev/null
@@ -1,118 +0,0 @@
-'use client'
-
-import { useState } from 'react'
-import { motion, AnimatePresence } from 'framer-motion'
-import { CheckCircle } from 'lucide-react'
-
-interface TimelineStep {
- id: string
- title: string
- description: string
-}
-
-interface InteractiveTimelineProps {
- steps: TimelineStep[]
-}
-
-export default function InteractiveTimeline({ steps }: InteractiveTimelineProps) {
- const [activeStep, setActiveStep] = useState(0)
-
- return (
-
- {/* Timeline Bar */}
-
-
- {steps.map((step, index) => (
-
-
setActiveStep(index)}
- className={`relative z-10 w-12 h-12 rounded-full border-2 flex items-center justify-center transition-all focus:outline-none focus:ring-2 focus:ring-purple-400/60 ${
- index <= activeStep
- ? 'border-purple-500 bg-gradient-to-br from-purple-500 to-cyan-600 shadow-lg shadow-purple-500/20'
- : 'border-white/15 bg-black/50'
- }`}
- whileHover={{ scale: 1.06 }}
- whileTap={{ scale: 0.92 }}
- role="tab"
- aria-selected={index === activeStep}
- aria-controls={`timeline-step-${step.id}`}
- >
- {index < activeStep ? (
-
- ) : (
- {index + 1}
- )}
-
-
-
-
- ))}
-
-
- {/* Progress Line */}
-
- 1 ? (activeStep / (steps.length - 1)) * 100 : 100
- }%`,
- }}
- transition={{ duration: 0.5, ease: 'easeInOut' }}
- />
-
-
-
- {/* Step Content */}
-
-
-
- {steps[activeStep].title}
-
-
- {steps[activeStep].description}
-
-
-
- setActiveStep(Math.max(0, activeStep - 1))}
- disabled={activeStep === 0}
- className="px-4 py-2 rounded-lg bg-white/5 hover:bg-white/10 disabled:opacity-30 disabled:cursor-not-allowed transition-all text-sm font-medium"
- >
- Précédent
-
-
- setActiveStep(Math.min(steps.length - 1, activeStep + 1))
- }
- disabled={activeStep === steps.length - 1}
- className="px-4 py-2 rounded-lg bg-gradient-to-r from-purple-500 to-cyan-600 hover:scale-105 disabled:opacity-30 disabled:cursor-not-allowed transition-all text-sm font-medium"
- >
- Suivant
-
-
-
-
-
- )
-}
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index 39d2520..d92ab27 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2343,3 +2343,33 @@ if (hasDecimal) {
#### État:
✅ Glow interactif fluide sans re-rendu complet
⚠️ Build distant toujours bloqué tant que `framer-motion` manque côté Netlify
+
+### UI: Refonte radicale de la page services
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Supprimer les ralentissements sévères (≈3 FPS) signalés sur l’ouverture du menu, les modales et les interactions des cartes services.
+- Repenser la structure pour offrir une narration claire (hero → piliers → modules → process → contact) avec des animations légères et contrôlées.
+- Réduire la dette technique en retirant les composants expérimentaux et la dépendance `@react-spring/web` devenue inutile.
+
+#### Actions réalisées:
+1. Réécriture complète de `app/[locale]/services/page.tsx` avec `LazyMotion`, hero radial statique, onglets piliers, cartes modules et grille process – toutes animées via `whileInView`/hover conditionnés par `useReducedMotion`.
+2. Suppression des anciens composants (`AnimatedCounter`, `FlipCard3D`, `GlowingCard`, `InteractiveTimeline`) désormais inutilisés, ainsi que de la dépendance `@react-spring/web`.
+3. Actualisation de la documentation (`docs/README.md`) pour décrire la nouvelle architecture et journalisation de l’intervention.
+
+#### Fichiers modifiés:
+- `/app/[locale]/services/page.tsx`
+- `/components/services/AnimatedCounter.tsx` (supprimé)
+- `/components/services/FlipCard3D.tsx` (supprimé)
+- `/components/services/GlowingCard.tsx` (supprimé)
+- `/components/services/InteractiveTimeline.tsx` (supprimé)
+- `/package.json`
+- `/package-lock.json`
+- `/docs/README.md`
+- `/docs/JOURNAL.md`
+
+#### État:
+✅ Page services fluide et responsive sans stutters
+✅ Bundle allégé (suppression @react-spring)
+⚠️ Build Netlify encore dépendant de la présence de `framer-motion` côté environnement distant
diff --git a/docs/README.md b/docs/README.md
index 6b90b48..d233b26 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -115,14 +115,13 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
## 🛠️ Page Services premium
-La page services (`app/[locale]/services/page.tsx`) combine plusieurs composants interactifs optimisés pour les appareils mobiles et desktop.
-
-- **Arrière-plan allégé** : `ParticleBackground` ajuste dynamiquement le nombre de particules selon la taille d’écran, respecte `prefers-reduced-motion` et recycle les connexions pour éviter les ralentissements.
-- **Cartes 3D adaptatives** : `FlipCard3D` bascule en mode « tap to flip » sur les terminaux tactiles et conserve les animations 3D uniquement sur les pointeurs précis.
- - Animation gérée par `@react-spring/web` pour un flip fluide sans glitch, avec respect de `prefers-reduced-motion`.
-- **Cartes lumineuses** : `GlowingCard` réduit les effets coûteux sur mobile tout en conservant une lueur statique.
-- **Counters et timeline** : `AnimatedCounter` s’appuie sur `framer-motion.animate` pour animer les chiffres sans re-rendu massif, tandis que `InteractiveTimeline` devient scrollable horizontalement et accessible clavier.
-- **Mise en page responsive** : le hero ajuste la taille du titre (`text-4xl → text-8xl`) avec `tracking-tight` et `leading` resserrés pour éviter que le texte ne déborde sur les petits écrans.
+La page services (`app/[locale]/services/page.tsx`) a été reconstruite autour d’un socle léger et cohérent :
+
+- **Hero immersif** : `LazyMotion` + `domAnimation` pilotent les apparitions (badge, titre, CTA, métriques) avec un halo radial statique. Les hover effects s’annulent automatiquement quand `useReducedMotion` retourne `true`.
+- **Piliers tabulaires** : les données issues des traductions sont fusionnées aux blueprints (`security`, `performance`, `partnership`, `infrastructure`). La colonne de gauche sélectionne un pilier, la carte de droite affiche description, stats et points clés dans une grille bi-colonne.
+- **Modules & process** : les solutions cloud sont présentées en cartes animées verticales (`whileInView` + hover lift). Le process adopte des dalles numérotées en grille 2×2, chacune animée à l’entrée sans scroll horizontal.
+- **Bloc contact** : CTA principal, métriques SLA et note additionnelle sont regroupés dans un panneau gradient unique (structure flex → grille), garantissant un rendu fluide mobile/desktop.
+- **Performances** : plus aucune dépendance `@react-spring/web`. Les anciens composants (`FlipCard3D`, `GlowingCard`, `AnimatedCounter`, `InteractiveTimeline`) ont été retirés pour réduire le bundle et éliminer les 3 FPS observés.
---
diff --git a/package-lock.json b/package-lock.json
index b9c2c24..87d05a0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,6 @@
"version": "1.0.0",
"license": "ISC",
"dependencies": {
- "@react-spring/web": "^10.0.3",
"clsx": "^2.1.1",
"framer-motion": "^12.23.24",
"i18next": "^25.5.2",
@@ -983,78 +982,6 @@
"node": ">=14"
}
},
- "node_modules/@react-spring/animated": {
- "version": "10.0.3",
- "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-10.0.3.tgz",
- "integrity": "sha512-7MrxADV3vaUADn2V9iYhaIL6iOWRx9nCJjYrsk2AHD2kwPr6fg7Pt0v+deX5RnCDmCKNnD6W5fasiyM8D+wzJQ==",
- "license": "MIT",
- "dependencies": {
- "@react-spring/shared": "~10.0.3",
- "@react-spring/types": "~10.0.3"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- }
- },
- "node_modules/@react-spring/core": {
- "version": "10.0.3",
- "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-10.0.3.tgz",
- "integrity": "sha512-D4DwNO68oohDf/0HG2G0Uragzb9IA1oXblxrd6MZAcBcUQG2EHUWXewjdECMPLNmQvlYVyyBRH6gPxXM5DX7DQ==",
- "license": "MIT",
- "dependencies": {
- "@react-spring/animated": "~10.0.3",
- "@react-spring/shared": "~10.0.3",
- "@react-spring/types": "~10.0.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/react-spring/donate"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- }
- },
- "node_modules/@react-spring/rafz": {
- "version": "10.0.3",
- "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-10.0.3.tgz",
- "integrity": "sha512-Ri2/xqt8OnQ2iFKkxKMSF4Nqv0LSWnxXT4jXFzBDsHgeeH/cHxTLupAWUwmV9hAGgmEhBmh5aONtj3J6R/18wg==",
- "license": "MIT"
- },
- "node_modules/@react-spring/shared": {
- "version": "10.0.3",
- "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-10.0.3.tgz",
- "integrity": "sha512-geCal66nrkaQzUVhPkGomylo+Jpd5VPK8tPMEDevQEfNSWAQP15swHm+MCRG4wVQrQlTi9lOzKzpRoTL3CA84Q==",
- "license": "MIT",
- "dependencies": {
- "@react-spring/rafz": "~10.0.3",
- "@react-spring/types": "~10.0.3"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- }
- },
- "node_modules/@react-spring/types": {
- "version": "10.0.3",
- "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-10.0.3.tgz",
- "integrity": "sha512-H5Ixkd2OuSIgHtxuHLTt7aJYfhMXKXT/rK32HPD/kSrOB6q6ooeiWAXkBy7L8F3ZxdkBb9ini9zP9UwnEFzWgQ==",
- "license": "MIT"
- },
- "node_modules/@react-spring/web": {
- "version": "10.0.3",
- "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-10.0.3.tgz",
- "integrity": "sha512-ndU+kWY81rHsT7gTFtCJ6mrVhaJ6grFmgTnENipzmKqot4HGf5smPNK+cZZJqoGeDsj9ZsiWPW4geT/NyD484A==",
- "license": "MIT",
- "dependencies": {
- "@react-spring/animated": "~10.0.3",
- "@react-spring/core": "~10.0.3",
- "@react-spring/shared": "~10.0.3",
- "@react-spring/types": "~10.0.3"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- }
- },
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
diff --git a/package.json b/package.json
index 00663b6..f214539 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,6 @@
},
"homepage": "https://github.com/Hackboot-Dev/hackboot#readme",
"dependencies": {
- "@react-spring/web": "^10.0.3",
"clsx": "^2.1.1",
"framer-motion": "^12.23.24",
"i18next": "^25.5.2",
From 821f9a1ca8e0206c37a63fe002e98b77c5cd0cd2 Mon Sep 17 00:00:00 2001
From: MxOLT <96215380+lynxerinc@users.noreply.github.com>
Date: Sun, 26 Oct 2025 18:35:16 +0100
Subject: [PATCH 25/25] style: align services page with site design
---
app/[locale]/services/page.tsx | 250 ++++++++++++++++-----------------
docs/JOURNAL.md | 24 ++++
docs/PROJECT_STATUS.md | 5 +-
docs/README.md | 12 +-
4 files changed, 151 insertions(+), 140 deletions(-)
diff --git a/app/[locale]/services/page.tsx b/app/[locale]/services/page.tsx
index 94fe2b1..dac7128 100644
--- a/app/[locale]/services/page.tsx
+++ b/app/[locale]/services/page.tsx
@@ -314,7 +314,18 @@ export default function ServicesPage() {
() => PILLAR_BLUEPRINTS[0]?.id ?? 'security',
)
+ const fallbackPillar = useMemo(() => {
+ const blueprint = PILLAR_BLUEPRINTS[0]
+ return {
+ ...blueprint,
+ title: blueprint.label,
+ description: blueprint.defaultDescription,
+ bullets: blueprint.defaultBullets,
+ }
+ }, [])
+
const activePillar = pillars.find((pillar) => pillar.id === activePillarId)
+ const displayedPillar = activePillar ?? fallbackPillar
const pillarsHeading = {
title:
@@ -395,105 +406,101 @@ export default function ServicesPage() {
'Un canal prioritaire (Discord + WhatsApp) est ouvert dès la signature pour les escalades critiques.'
return (
-
+
-
-
+
+
- {/* Hero */}
-
-
-
-
-
-
-
- {badge}
-
-
-
-
- {title}
-
-
+
+
+
+
+
+
+ {badge}
+
-
- {subtitle}
-
+
+ {title}
+
-
-
- {primaryCta}
-
-
- Explorer les offres
-
-
+
+ {subtitle}
+
-
- {heroMetrics.map((metric, index) => (
-
- {metric.label}
- {metric.value}
+
+ {primaryCta}
+
+
+ Explorer les offres
+
- ))}
+
+
+
+ {heroMetrics.map((metric, index) => (
+
+
+ {metric.label}
+ {metric.value}
+
+ ))}
+
- {/* Pillars */}
-
-
+
+
Pillars
-
- {pillarsHeading.title}
-
+ {pillarsHeading.title}
{pillarsHeading.subtitle}
-
-
+
+
{pillars.map((pillar) => {
const Icon = pillar.icon
const isActive = pillar.id === activePillarId
@@ -521,10 +526,10 @@ export default function ServicesPage() {
key={pillar.id}
type="button"
onClick={() => setActivePillarId(pillar.id)}
- className={`group relative flex min-w-[220px] items-center gap-3 rounded-2xl border px-4 py-3 text-left transition ${
+ className={`group relative flex min-w-[220px] items-center gap-3 rounded-2xl glass-effect px-4 py-3 text-left transition ${
isActive
- ? 'border-white/40 bg-white/10'
- : 'border-white/10 bg-white/5 hover:border-white/20 hover:bg-white/[0.08]'
+ ? 'border-white/30 ring-1 ring-purple-400/30'
+ : 'hover:border-white/25'
}`}
>
@@ -546,8 +551,8 @@ export default function ServicesPage() {
-
- {activePillar?.title ?? pillars[0]?.title}
-
-
- {activePillar?.description ?? pillars[0]?.description}
-
+
{displayedPillar.title}
+
{displayedPillar.description}
-
- {(activePillar?.stats ?? pillarBlueprints[0].stats).map((stat) => (
+
+ {displayedPillar.stats.map((stat) => (
{stat.label}
{stat.value}
@@ -576,10 +577,10 @@ export default function ServicesPage() {
- {(activePillar?.bullets ?? pillars[0]?.bullets ?? []).map((bullet) => (
+ {displayedPillar.bullets.map((bullet) => (
{bullet}
@@ -592,9 +593,8 @@ export default function ServicesPage() {
- {/* Solutions */}
-
-
+
+
Modules
-
- {solutionsHeading.title}
-
+ {solutionsHeading.title}
{solutionsHeading.subtitle}
@@ -618,7 +616,7 @@ export default function ServicesPage() {
return (
{solution.title}
-
- {solution.description}
-
+ {solution.description}
- {/* Process */}
-
-
+
+
Process
-
- {processHeading.title}
-
+ {processHeading.title}
{processHeading.subtitle}
@@ -685,7 +678,7 @@ export default function ServicesPage() {
{processSteps.map((step, index) => (
- {/* Contact */}
-
-
+
+
{contactMetrics.map((metric) => (
-
+
{metric.label}
-
- {metric.value}
-
+
{metric.value}
))}
diff --git a/docs/JOURNAL.md b/docs/JOURNAL.md
index d92ab27..7a3d4d6 100644
--- a/docs/JOURNAL.md
+++ b/docs/JOURNAL.md
@@ -2373,3 +2373,27 @@ if (hasDecimal) {
✅ Page services fluide et responsive sans stutters
✅ Bundle allégé (suppression @react-spring)
⚠️ Build Netlify encore dépendant de la présence de `framer-motion` côté environnement distant
+
+### UI: Harmonisation du design Services avec la charte PulseForge
+**Heure**: Session actuelle
+**Développeur**: Assistant Claude
+
+#### Objectifs:
+- Recalibrer la page services pour qu’elle partage les mêmes codes visuels (glass-effect, gradient-text, fond `bg-dark`) que les pages produits et premium.
+- Réduire les écarts de ton (fonds, bordures, hover) qui faisaient paraître la page hors charte.
+- Documenter la nouvelle approche pour les équipes contenu/design.
+
+#### Actions réalisées:
+1. Ajustement du hero, des cartes métriques et des CTA pour utiliser les classes globales (`glass-effect`, `gradient-text`) et une grille cohérente avec le reste du site.
+2. Uniformisation des sections piliers/modules/process/contact : panneaux `glass-effect`, transitions `whileInView` partagées et suppression des teintes dépareillées.
+3. Mise à jour de la documentation (`docs/README.md`) pour détailler le nouvel alignement visuel.
+
+#### Fichiers modifiés:
+- `/app/[locale]/services/page.tsx`
+- `/docs/README.md`
+- `/docs/JOURNAL.md`
+
+#### État:
+✅ Page Services visuellement cohérente avec les autres pages PulseForge
+✅ Animations et hover uniformes
+⚠️ Build Netlify toujours dépendant de `framer-motion` côté environnement distant
diff --git a/docs/PROJECT_STATUS.md b/docs/PROJECT_STATUS.md
index d5ef906..fa7efe2 100644
--- a/docs/PROJECT_STATUS.md
+++ b/docs/PROJECT_STATUS.md
@@ -3,7 +3,7 @@
## 📊 Vue d'ensemble
**Statut global:** 🟡 En développement actif
-**Dernière mise à jour:** 26 Septembre 2025
+**Dernière mise à jour:** 27 Octobre 2025
**Version:** 0.3.0
## 🎯 Fonctionnalités implémentées
@@ -19,7 +19,7 @@
- [x] Page d'accueil avec Hero, sections parallax, cartes interactives
- [x] Section produits avec grille
- [x] Pages produits individuelles dynamiques
-- [ ] Page Services
+- [x] Page Services
- [x] Page About (design complet avec sections timeline, équipe, valeurs, légal)
- [x] Page Contact (formulaire interactif, cartes de contact, animations)
@@ -39,7 +39,6 @@
## 🚧 En cours de développement
-- Création de la page Services
- Intégration backend pour le formulaire de contact
- Tests et optimisations
- Amélioration des performances
diff --git a/docs/README.md b/docs/README.md
index d233b26..aeedb39 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -115,13 +115,13 @@ Cette section résume le fonctionnement des pages produits cloud gaming : où so
## 🛠️ Page Services premium
-La page services (`app/[locale]/services/page.tsx`) a été reconstruite autour d’un socle léger et cohérent :
+La page services (`app/[locale]/services/page.tsx`) reprend désormais les codes visuels du reste du site :
-- **Hero immersif** : `LazyMotion` + `domAnimation` pilotent les apparitions (badge, titre, CTA, métriques) avec un halo radial statique. Les hover effects s’annulent automatiquement quand `useReducedMotion` retourne `true`.
-- **Piliers tabulaires** : les données issues des traductions sont fusionnées aux blueprints (`security`, `performance`, `partnership`, `infrastructure`). La colonne de gauche sélectionne un pilier, la carte de droite affiche description, stats et points clés dans une grille bi-colonne.
-- **Modules & process** : les solutions cloud sont présentées en cartes animées verticales (`whileInView` + hover lift). Le process adopte des dalles numérotées en grille 2×2, chacune animée à l’entrée sans scroll horizontal.
-- **Bloc contact** : CTA principal, métriques SLA et note additionnelle sont regroupés dans un panneau gradient unique (structure flex → grille), garantissant un rendu fluide mobile/desktop.
-- **Performances** : plus aucune dépendance `@react-spring/web`. Les anciens composants (`FlipCard3D`, `GlowingCard`, `AnimatedCounter`, `InteractiveTimeline`) ont été retirés pour réduire le bundle et éliminer les 3 FPS observés.
+- **Hero harmonisé** : fond `bg-dark`, badge en `glass-effect` et titre `gradient-text` pour rester aligné avec l’accueil et les pages produits. Les apparitions reposent sur `LazyMotion` et respectent `useReducedMotion`.
+- **Piliers tabulaires** : boutons latéraux et carte détaillée utilisent le même glassmorphism que les fiches produits. Les stats sont encapsulées dans des panneaux `glass-effect` pour garder une lecture homogène.
+- **Modules & process** : cartes et étapes réemploient le combo `glass-effect` + border blanche, avec les mêmes animations `whileInView` que le catalogue PulseForge.
+- **Bloc contact** : panel gradient adouci, métriques SLA et CTA principal conservent le rendu premium tout en respectant les proportions et micro-interactions communes.
+- **Performances** : structure légère (plus de dépendances tierces), hover subtils et suppression des artefacts 3 FPS observés auparavant.
---