about/templates/main.html

122 lines
5.5 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>{{ .Title }}</title>
<meta name="description" content="{{ .Description | default "This site is literally about me" }}">
<meta name="author" content="sanspie">
<link rel="canonical" href="{{ .Canonical | default "https://about.akarpov.ru" }}">
<meta name="robots" content="index,follow,max-snippet:-1,max-image-preview:large,max-video-preview:-1">
<meta name="google" content="notranslate">
<meta name="robots" content="noai, noimageai">
<meta name="referrer" content="strict-origin-when-cross-origin">
<meta name="color-scheme" content="dark light">
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#ffffff">
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#0d1117">
<meta property="og:type" content="website">
<meta property="og:site_name" content="sanspie">
<meta property="og:title" content="{{ .OGTitle | default .Title }}">
<meta property="og:description" content="{{ .OGDescription | default .Description }}">
<meta property="og:url" content="{{ .Canonical | default "https://about.akarpov.ru" }}">
<meta property="og:image" content="{{ .OGImage | default "https://akarpov.ru/media/logo.png" }}">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:locale" content="en_US">
<meta name="application-name" content="sanspie">
<meta name="apple-mobile-web-app-title" content="sanspie">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="mobile-web-app-capable" content="yes">
<meta name="format-detection" content="telephone=no, email=no, address=no">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon.png">
<link rel="icon" type="image/png" sizes="192x192" href="/favicon.png">
<link rel="apple-touch-icon" sizes="180x180" href="/favicon.png">
<link rel="mask-icon" href="/favicon.png" color="#0d1117">
<link rel="stylesheet" href="/static/css/main.css">
<link rel="stylesheet" href="/static/css/plugin-profile.css">
<link rel="stylesheet" href="/static/css/plugin-social.css">
<link rel="stylesheet" href="/static/css/plugin-webring.css">
<link rel="stylesheet" href="/static/css/plugin-tech.css">
<link rel="stylesheet" href="/static/css/plugin-neofetch.css">
<link rel="stylesheet" href="/static/css/plugin-lastfm.css">
<link rel="stylesheet" href="/static/css/plugin-beatleader.css">
<link rel="stylesheet" href="/static/css/plugin-steam.css">
<link rel="stylesheet" href="/static/css/plugin-visitors.css">
<link rel="stylesheet" href="/static/css/plugin-code.css">
<link rel="stylesheet" href="/static/css/plugin-meme.css">
<link rel="stylesheet" href="/static/css/plugin-projects.css">
<link rel="stylesheet" href="/static/css/plugin-services.css">
<link rel="stylesheet" href="/static/css/plugin-info.css">
<link rel="stylesheet" href="/static/css/plugin-personal.css">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Person",
"name": "sanspie",
"url": "https://about.akarpov.ru",
"image": "https://akarpov.ru/media/logo.png",
"sameAs": [
"https://github.com/Alexander-D-Karpov",
"https://t.me/sanspie"
],
"description": "This site is literally about me"
}
</script>
</head>
<body>
<div class="container">
{{ range .Plugins }}
{{ . }}
{{ end }}
</div>
<div class="status-bar">
<span class="status-indicator" id="connection-status"></span>
<span id="status-text">Connecting...</span>
</div>
<!-- Order matters: core WM first, then interactions/plugins -->
<script src="/static/js/websocket.js" defer></script>
<script src="/static/js/windowManager.js" defer></script>
<script src="/static/js/interactions.js" defer></script>
<script src="/static/js/music-player.js" defer></script>
<script src="/static/js/plugins.js" defer></script>
<script src="/static/js/greetings.js" defer></script>
<script>
function refreshMeme() {
const refreshBtns = document.querySelectorAll('.meme-refresh-btn');
refreshBtns.forEach(btn => {
btn.dataset.originalText = btn.textContent;
btn.disabled = true;
btn.textContent = 'Loading...';
});
fetch('/api/meme/refresh', { method: 'POST', headers: { 'Content-Type': 'application/json' } })
.then(r => { if (!r.ok) throw new Error('Failed to refresh meme'); return r.json(); })
.then(() => console.log('Meme refreshed successfully'))
.catch(err => console.error('Error refreshing meme:', err))
.finally(() => {
setTimeout(() => {
document.querySelectorAll('.meme-refresh-btn').forEach(btn => {
btn.disabled = false;
btn.textContent = btn.dataset.originalText || '🎲 New Meme';
delete btn.dataset.originalText;
});
}, 500);
});
}
window.addEventListener('DOMContentLoaded', function(){ window.refreshMeme = refreshMeme; });
</script>
</body>
</html>