portfolio-website/index.html

80 lines
3.5 KiB
HTML

<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- DNS Prefetch & Preconnect pour les domaines tiers -->
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link rel="dns-prefetch" href="https://www.googletagmanager.com">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<title>Alexandre Pommier - Portfolio</title>
<meta name="description" content="Alexandre Pommier, étudiant en informatique à 42, développeur passionné par les technologies web et systèmes." />
<meta name="author" content="Alexandre Pommier" />
<meta property="og:title" content="Alexandre Pommier - Portfolio" />
<meta property="og:description" content="Portfolio d'Alexandre Pommier, étudiant développeur à l'école 42" />
<meta property="og:type" content="website" />
<meta property="og:image" content="https://lovable.dev/opengraph-image-p98pqg.png" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@lovable_dev" />
<meta name="twitter:image" content="https://lovable.dev/opengraph-image-p98pqg.png" />
<!-- Google Fonts - Optimisé avec display=swap -->
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Montserrat:wght@400;500;600;700&display=swap">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Montserrat:wght@400;500;600;700&display=swap" rel="stylesheet" media="print" onload="this.media='all'">
<noscript>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Montserrat:wght@400;500;600;700&display=swap" rel="stylesheet">
</noscript>
<!-- Google Tag Manager - Chargé de manière optimisée -->
<script>
// Charger GTM de manière non-bloquante avec timeout
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;
// Timeout pour éviter que GTM bloque indéfiniment
var timeout = setTimeout(function() {
if (!w[l].gtmDidInit) {
w[l].gtmDidInit = true;
f.parentNode.removeChild(j);
}
}, 3000); // 3 secondes timeout
j.onload = function() {
clearTimeout(timeout);
w[l].gtmDidInit = true;
};
// Attendre que le DOM soit prêt avant d'ajouter GTM
if (d.readyState === 'loading') {
d.addEventListener('DOMContentLoaded', function() {
f.parentNode.insertBefore(j,f);
});
} else {
f.parentNode.insertBefore(j,f);
}
})(window,document,'script','dataLayer','GTM-5V6TCG4C');
</script>
<!-- End Google Tag Manager -->
</head>
<body>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5V6TCG4C"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>