All checks were successful
ci/woodpecker/push/build Pipeline was successful
- Change Cache-Control from s-maxage=31536000 to max-age=0,must-revalidate for all HTML pages and sitemap (fixes stale content after settings change) - Remove Cloudflare PurgeURLs call since we're not caching HTML at CDN - Add Quicklink for client-side prefetching on public blog pages - Make main branch deploy automatic (remove manual trigger) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
78 lines
2.8 KiB
HTML
78 lines
2.8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>{{.Title}}</title>
|
|
<meta name="description" content="{{.Description}}">
|
|
<link rel="canonical" href="{{.CanonicalURL}}">
|
|
|
|
{{if .NoIndex}}<meta name="robots" content="noindex">{{end}}
|
|
|
|
<!-- Open Graph -->
|
|
<meta property="og:title" content="{{.Title}}">
|
|
<meta property="og:description" content="{{.Description}}">
|
|
<meta property="og:type" content="{{.OGType}}">
|
|
<meta property="og:url" content="{{.CanonicalURL}}">
|
|
{{if .OGImage}}<meta property="og:image" content="{{.OGImage}}">{{end}}
|
|
<meta property="og:site_name" content="{{.SiteName}}">
|
|
|
|
<!-- Twitter Card -->
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
<meta name="twitter:title" content="{{.Title}}">
|
|
<meta name="twitter:description" content="{{.Description}}">
|
|
{{if .OGImage}}<meta name="twitter:image" content="{{.OGImage}}">{{end}}
|
|
|
|
<!-- Fonts -->
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
{{if .FontURL}}<link rel="stylesheet" href="{{.FontURL}}">{{end}}
|
|
|
|
<link rel="stylesheet" href="/static/css/style.css">
|
|
|
|
<style>
|
|
:root {
|
|
--accent: {{with index .Settings "accent_color"}}{{.}}{{else}}#2563eb{{end}};
|
|
--font-body: {{or .FontFamily "system-ui, -apple-system, sans-serif"}};
|
|
}
|
|
</style>
|
|
|
|
{{if .StructuredData}}
|
|
<script type="application/ld+json">{{.StructuredData}}</script>
|
|
{{end}}
|
|
</head>
|
|
<body class="layout-{{with index .Settings "layout"}}{{.}}{{else}}default{{end}} compactness-{{with index .Settings "compactness"}}{{.}}{{else}}cozy{{end}}">
|
|
<header class="site-header">
|
|
<a href="/" class="site-name">{{.SiteName}}</a>
|
|
<nav class="site-nav">
|
|
<button type="button" id="search-trigger" class="search-trigger">
|
|
<span>Search</span>
|
|
<kbd>/</kbd>
|
|
</button>
|
|
</nav>
|
|
</header>
|
|
|
|
<main>
|
|
{{template "content" .}}
|
|
</main>
|
|
|
|
<footer class="site-footer">
|
|
<span>© {{.Year}} {{.SiteName}}</span>
|
|
{{if .ShowBadge}}<a href="https://writekit.dev" class="powered-by" target="_blank" rel="noopener">Powered by WriteKit</a>{{end}}
|
|
</footer>
|
|
|
|
<div id="search-modal" class="search-modal">
|
|
<div class="search-modal-backdrop"></div>
|
|
<div class="search-modal-content">
|
|
<input type="text" id="search-input" placeholder="Search..." autocomplete="off">
|
|
<div id="search-results" class="search-results"></div>
|
|
<div class="search-hint">Press <kbd>ESC</kbd> to close</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="/static/js/main.js"></script>
|
|
<script src="https://unpkg.com/quicklink@2.3.0/dist/quicklink.umd.js"></script>
|
|
<script>quicklink.listen({ignores: [/\/studio/, /\/api\//]});</script>
|
|
{{block "scripts" .}}{{end}}
|
|
</body>
|
|
</html>
|