Files
parenthese/landing/index.html
T
IliesAllaliandClaude Opus 5.5 fcfb7d1494 Landing : pages préchargées au survol d'un lien (speculationrules)
- Règles de préchargement dans l'accueil et les 15 guides : une page du site est préparée quand on survole
  son lien (appui sur téléphone), et s'ouvre presque tout de suite. Pages seulement, pas les fichiers ;
  l'application n'est pas concernée. Ignoré par les navigateurs qui ne connaissent pas ces règles.
- Une page préchargée ne compte pas de visite avant d'être vraiment ouverte (PostHog attend
  prerenderingchange), et l'animation du logo se joue à l'ouverture, pas pendant le préchargement.
- CSP de la landing (deploy/nginx.conf) : empreinte des règles, et nouvelle empreinte du script du logo.
  Le mot-clé 'inline-speculation-rules' ne suffisait pas à Chrome.
- Test : chaque script en ligne des pages a son empreinte dans la CSP, chaque page a ses règles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 18:05:12 +01:00

87 lines
4.8 KiB
HTML

<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#FBFAF7" />
<!-- Arrivée du logo : une fois par visite, décidée avant le premier affichage (animation dans src/index.css) -->
<script>(function(){function intro(){try{if(!sessionStorage.getItem('pz-logo')&&!matchMedia('(prefers-reduced-motion: reduce)').matches){document.documentElement.classList.add('logo-intro');sessionStorage.setItem('pz-logo','1')}}catch(e){}}if(document.prerendering)document.addEventListener('prerenderingchange',intro,{once:true});else intro()})()</script>
<title>Parenthèse : l'arbre généalogique vivant de votre famille</title>
<meta name="description" content="Créez l'arbre généalogique de votre famille en ligne, avec photos, vidéos et voix. Partagez-le en un lien : la famille consulte sans compte et contribue avec un mot de passe." />
<link rel="canonical" href="https://parenthese.io/" />
<link rel="alternate" hreflang="fr" href="https://parenthese.io/" />
<link rel="alternate" hreflang="en" href="https://parenthese.io/en/" />
<link rel="alternate" hreflang="x-default" href="https://parenthese.io/" />
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:site_name" content="Parenthèse" />
<meta property="og:locale" content="fr_FR" />
<meta property="og:url" content="https://parenthese.io/" />
<meta property="og:title" content="Parenthèse : l'arbre généalogique vivant de votre famille" />
<meta property="og:description" content="L'arbre généalogique de votre famille en ligne, avec photos, voix et souvenirs. Partageable en un lien, sans compte." />
<meta property="og:image" content="https://parenthese.io/og-image.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="Parenthèse, votre histoire familiale, vivante et partagée" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Parenthèse : l'arbre généalogique vivant de votre famille" />
<meta name="twitter:description" content="L'arbre généalogique de votre famille en ligne, avec photos, voix et souvenirs. Partageable en un lien, sans compte." />
<meta name="twitter:image" content="https://parenthese.io/og-image.png" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<link rel="stylesheet" href="/fonts/fonts.css" />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://parenthese.io/#organization",
"name": "Parenthèse",
"url": "https://parenthese.io/",
"logo": "https://parenthese.io/apple-touch-icon.png",
"founder": { "@type": "Person", "name": "Ilies Allali", "url": "https://iliesallali.design/" }
},
{
"@type": "WebSite",
"@id": "https://parenthese.io/#website",
"url": "https://parenthese.io/",
"name": "Parenthèse",
"inLanguage": "fr-FR",
"publisher": { "@id": "https://parenthese.io/#organization" }
},
{
"@type": "SoftwareApplication",
"@id": "https://parenthese.io/#app",
"name": "Parenthèse",
"url": "https://app.parenthese.io/",
"applicationCategory": "LifestyleApplication",
"operatingSystem": "Web",
"inLanguage": "fr-FR",
"description": "Web app pour créer l'arbre généalogique d'une famille en ligne, avec photos, anecdotes, vidéos et voix, partageable en un lien sans compte.",
"offers": { "@type": "Offer", "price": "0", "priceCurrency": "EUR" },
"publisher": { "@id": "https://parenthese.io/#organization" }
}
]
}
</script>
<!-- Pages du site préparées en avance quand on survole un lien (appui sur téléphone) : elles s'ouvrent presque
tout de suite. Seulement les pages, pas les fichiers ; l'application (app.parenthese.io) n'est pas concernée.
Un navigateur qui ne connaît pas ces règles les ignore. -->
<script type="speculationrules">{"prerender":[{"where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":"/*.*"}}]},"eagerness":"moderate"}]}</script>
</head>
<body>
<!-- Sans JavaScript, le contenu prérendu reste visible (les révélations au défilement demandent JS) -->
<noscript><style>[data-reveal] { opacity: 1; transform: none; }</style></noscript>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>