Refonte complète en SvelteKit (méthode OKI, AI-Overview ready)

Reconstruit le site statique mono-page (Bulma + htmx + Strapi) en SvelteKit 2 +
Svelte 5 (runes) + TypeScript, 100 % statique (adapter-static), auto-hébergé.

- Contenu enrichi à partir du dossier documentaire sourcé : 28 pages (histoire,
  Mé 67, procès 1968, 9 fiches militants, idéologie, héritage, publications,
  charte, orientation, sources, FAQ, actualités, contact, mentions légales).
- Souveraineté : retrait de Bulma/htmx/mustache/ionicons/Plausible/Google Fonts
  et de l'API Strapi. Polices Archivo/Inter et sprite SVG auto-hébergés (zéro emoji).
- Identité GONG (drapeau vert/blanc/rouge), thème sombre par défaut + clair AA,
  cadences motion gwoka, KineticText, timeline, 404 kréyòl, PWA hors-ligne.
- SEO/AI-Overview : HTML sémantique, JSON-LD (Organization, Person, Event,
  FAQPage, Article...), hreflang, sitemap dynamique, robots/humans.txt.
- Sécurité : CSP hachée + en-têtes (.htaccess o2switch + _headers Cloudflare), HSTS.
- Actualités éditées via Sveltia CMS (git-based) ; Strapi retiré.

npm run build : vert · npm run check : 0 erreur / 0 warning · JS 97 Ko gzip.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
sucupira
2026-07-24 23:57:37 -04:00
co-authored by Claude Opus 4.8
parent b89c1a80b7
commit cd9b9b093c
104 changed files with 14569 additions and 1383 deletions
+329
View File
@@ -0,0 +1,329 @@
<script lang="ts">
import Seo from '$lib/components/Seo.svelte';
import Resume from '$lib/components/Resume.svelte';
import SectionTitle from '$lib/components/SectionTitle.svelte';
import Icon from '$lib/components/Icon.svelte';
import { reveal } from '$lib/motion/reveal';
import { SITE, presentation } from '$lib/data/gong';
let { data } = $props();
const parcours = [
{ href: '/histoire/', icon: 'clock', titre: 'Histoire', desc: 'De la fondation en 1963 à la dissolution en 1968 : la chronologie complète.' },
{ href: '/me-67/', icon: 'flag', titre: 'Mé 67', desc: "Les tueries de mai 1967 à Pointe-à-Pitre, longtemps occultées." },
{ href: '/proces-1968/', icon: 'scale', titre: 'Procès de 1968', desc: '18 Guadeloupéens jugés à Paris ; Sartre et Césaire témoignent.' },
{ href: '/militants/', icon: 'users', titre: 'Militants', desc: 'Sainton, Nestor, Manville, Bangou, Glaude… les femmes et les hommes du GONG.' },
{ href: '/ideologie/', icon: 'glo', titre: 'Idéologie', desc: "Marxisme-léninisme, tiers-mondisme et lutte de libération nationale." },
{ href: '/heritage/', icon: 'memory', titre: 'Héritage', desc: 'UPLG, UGTG, mémoire de Mé 67 : ce que le GONG a laissé.' }
];
const webPage = [
{
'@type': 'WebPage',
'@id': `${SITE.url}/#webpage`,
url: `${SITE.url}/`,
name: `${SITE.nomComplet} — GONG`,
description: SITE.description,
isPartOf: { '@id': `${SITE.url}/#website` },
about: { '@id': `${SITE.url}/#organization` },
inLanguage: 'fr-FR'
}
];
</script>
<Seo
title="GONG — Groupe d'Organisation Nationale de la Guadeloupe"
description="Le GONG, organisation indépendantiste guadeloupéenne (1963-1968) : histoire, Mé 67, procès de 1968, militants et héritage. Un dossier documentaire sourcé."
path="/"
graph={webPage}
/>
<main id="contenu">
<!-- HERO -->
<section class="hero">
<div class="container hero__inner">
<img class="hero__logo" src="/img/gong.png" alt="Logo du GONG" width="132" height="132" />
<p class="hero__kicker"><span class="flag-chip" aria-hidden="true"></span> 1963 — 1968</p>
<h1 class="hero__title">GONG</h1>
<p class="hero__full">{presentation.nomComplet}</p>
<p class="hero__slogan">« Briser les urnes colonialistes.<br />Conquérir l'indépendance nationale. »</p>
<p class="hero__creole" lang="gcf">Listwa a on pèp ki goumé pou libèté a-y.</p>
<div class="hero__cta">
<a class="btn btn--fill" href="/histoire/">Découvrir l'histoire</a>
<a class="btn" href="/me-67/">Comprendre Mé 67</a>
</div>
</div>
</section>
<!-- RÉSUMÉ (zone A AI-Overview) -->
<section class="section--tight">
<div class="container lecture">
<Resume
titre="Qu'est-ce que le GONG ?"
lead="Le GONG (Groupe d'Organisation Nationale de la Guadeloupe) était une organisation politique indépendantiste et anticolonialiste guadeloupéenne, fondée le 23 juin 1963 à Paris et dissoute de facto en 1968 après la répression des émeutes de mai 1967 et le procès de ses militants."
points={[
'Fondé le 23 juin 1963 par danciens étudiants de lAGEG (dont Pierre Sainton).',
'Objectif : lindépendance nationale de la Guadeloupe et une révolution socialiste.',
'Impliqué dans les événements de « Mé 67 » (26-28 mai 1967).',
'18 de ses membres jugés à Paris en 1968 : 13 acquittés, 6 condamnés avec sursis.'
]}
/>
</div>
</section>
<!-- CHIFFRES CLÉS -->
<section class="section--tight">
<div class="container">
<div class="stats">
<div class="stat" use:reveal={0}>
<span class="stat__num">1963</span><span class="stat__lab">Fondation, à Paris</span>
</div>
<div class="stat" use:reveal={1}>
<span class="stat__num">26 mai 1967</span><span class="stat__lab">Première victime : Jacques Nestor</span>
</div>
<div class="stat" use:reveal={2}>
<span class="stat__num">80200</span><span class="stat__lab">Victimes estimées de Mé 67</span>
</div>
<div class="stat" use:reveal={3}>
<span class="stat__num">18</span><span class="stat__lab">Accusés au procès de 1968</span>
</div>
</div>
</div>
</section>
<!-- PARCOURS -->
<section class="section">
<div class="container">
<SectionTitle title="Parcourir le dossier" />
<div class="grid-cards">
{#each parcours as p, i (p.href)}
<a class="card card--link" href={p.href} use:reveal={i}>
<Icon name={p.icon} size="1.8rem" />
<h3>{p.titre}</h3>
<p>{p.desc}</p>
<span class="card__more">Lire <Icon name="arrow-right" size="1em" /></span>
</a>
{/each}
</div>
</div>
</section>
<!-- DOCUMENTS FONDATEURS -->
<section class="section">
<div class="container">
<SectionTitle title="Les textes fondateurs" />
<div class="grid-cards grid-cards--2">
<article class="card card--vert" use:reveal={0}>
<Icon name="document" size="1.6rem" />
<h3>La Charte du GONG</h3>
<p class="muted">Juin 1963 — le texte adopté en assemblée générale qui pose le droit du peuple guadeloupéen à disposer de lui-même.</p>
<div class="card__actions">
<a class="btn btn--ghost" href="/charte/">Lire la charte</a>
<a class="btn btn--ghost" href="/assets/charte-du-gong-1963.pdf" rel="external noopener noreferrer" target="_blank">
PDF <Icon name="download" size="1em" />
</a>
</div>
</article>
<article class="card card--vert" use:reveal={1}>
<Icon name="document" size="1.6rem" />
<h3>Orientation & stratégie</h3>
<p class="muted">Le rapport sur la lutte révolutionnaire du peuple guadeloupéen : lutte de masse, suffrage universel, voie révolutionnaire.</p>
<div class="card__actions">
<a class="btn btn--ghost" href="/orientation/">Lire le document</a>
<a class="btn btn--ghost" href="/assets/orientation-et-strategie-de-la-lutte-revolutionnaire-du-peuple-guadeloupeen-1963.pdf" rel="external noopener noreferrer" target="_blank">
PDF <Icon name="download" size="1em" />
</a>
</div>
</article>
</div>
</div>
</section>
<!-- ACTUALITÉS -->
{#if data.actualites.length}
<section class="section">
<div class="container">
<SectionTitle title="Actualités & mémoire" />
<div class="grid-cards">
{#each data.actualites as a, i (a.slug)}
<a class="card card--link" href="/actualites/{a.slug}/" use:reveal={i}>
{#if a.couverture}
<img class="card__cover" src={a.couverture} alt={a.couvertureAlt} loading="lazy" decoding="async" />
{/if}
<time datetime={a.iso} class="card__date">{a.date}</time>
<h3>{a.titre}</h3>
<p class="muted">{a.chapeau}</p>
</a>
{/each}
</div>
<p class="center"><a class="btn btn--ghost" href="/actualites/">Toutes les actualités</a></p>
</div>
</section>
{/if}
<!-- CTA FINAL -->
<section class="section cta-final">
<div class="container lecture center">
<SectionTitle title="Se souvenir, transmettre" />
<p>
Le GONG a été effacé des mémoires officielles pendant des décennies. Ce site rassemble des
sources académiques, journalistiques et archivistiques pour rendre son histoire accessible à
tous.
</p>
<div class="hero__cta center-cta">
<a class="btn btn--fill" href="/faq/">Questions fréquentes</a>
<a class="btn" href="/sources/">Voir les sources</a>
</div>
</div>
</section>
</main>
<style>
.hero {
text-align: center;
padding-top: var(--space-5);
background: radial-gradient(ellipse at 50% -10%, color-mix(in srgb, var(--rouge-gong) 12%, transparent), transparent 60%);
}
.hero__inner {
padding-bottom: var(--space-5);
}
.hero__logo {
width: 132px;
height: 132px;
margin: 0 auto var(--space-2);
}
.hero__kicker {
display: inline-flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
font-family: var(--font-display);
text-transform: uppercase;
letter-spacing: 0.15em;
font-size: 0.85rem;
color: var(--muted);
}
.hero__title {
font-size: clamp(3.5rem, 2rem + 9vw, 8rem);
margin: 0.25rem 0 0;
letter-spacing: 0.02em;
}
.hero__full {
font-family: var(--font-display);
font-weight: 700;
text-transform: uppercase;
font-size: clamp(1rem, 0.9rem + 0.6vw, 1.3rem);
color: var(--creme);
margin-bottom: var(--space-3);
}
.hero__slogan {
font-family: var(--font-display);
font-weight: 800;
text-transform: uppercase;
font-size: clamp(1.3rem, 1rem + 1.6vw, 2rem);
line-height: 1.15;
color: var(--accent);
margin-bottom: 0.6rem;
}
.hero__creole {
color: var(--muted);
font-style: italic;
margin-bottom: var(--space-4);
}
.hero__cta {
display: flex;
gap: var(--space-2);
justify-content: center;
flex-wrap: wrap;
}
.center-cta {
margin-top: var(--space-3);
}
.stats {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: var(--space-2);
}
.stat {
background: var(--card-bg);
border: 1px solid var(--line);
border-top: 3px solid var(--accent);
border-radius: var(--radius-md);
padding: var(--space-3);
display: flex;
flex-direction: column;
gap: 0.3rem;
}
.stat__num {
font-family: var(--font-display);
font-weight: 900;
font-size: 1.7rem;
color: var(--creme);
line-height: 1;
}
.stat__lab {
font-size: 0.88rem;
color: var(--muted);
}
.grid-cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: var(--space-3);
}
.grid-cards--2 {
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
}
.card h3 {
margin: 0.6rem 0 0.4rem;
}
.card p {
color: var(--muted);
margin: 0;
}
.card .muted {
color: var(--muted);
}
.card__more {
margin-top: 0.8rem;
display: inline-flex;
align-items: center;
gap: 0.35rem;
font-family: var(--font-display);
text-transform: uppercase;
font-size: 0.78rem;
letter-spacing: 0.05em;
color: var(--accent);
}
.card__cover {
width: calc(100% + 2 * var(--space-3));
margin: calc(-1 * var(--space-3)) calc(-1 * var(--space-3)) var(--space-2);
border-radius: var(--radius-md) var(--radius-md) 0 0;
aspect-ratio: 3 / 2;
object-fit: cover;
}
.card__date {
font-size: 0.8rem;
color: var(--muted-fort);
text-transform: uppercase;
letter-spacing: 0.04em;
}
.card__actions {
display: flex;
gap: 0.6rem;
flex-wrap: wrap;
margin-top: 0.8rem;
}
.center {
text-align: center;
}
.center .btn {
margin-inline: auto;
}
.cta-final {
background: var(--noir-profond);
border-block: 1px solid var(--line);
}
</style>