Ryan Malloy b892189f21 Add SEO infrastructure: sitemap, OG meta, JSON-LD, custom 404
- Integrate @astrojs/sitemap for automatic sitemap generation
- Add robots.txt with sitemap reference
- Add Open Graph and Twitter Card meta tags to Layout
- Add canonical URL and structured data slot to Layout
- Add JSON-LD schema (WebSite, CollectionPage, Book, BreadcrumbList)
- Create custom 404 page with navigation links
- Create default OG image (SVG with graph-paper theme)
- Wire SITE_URL through Docker build args for production builds
- Update Caddyfile for proper 404 handling instead of SPA fallback
2026-02-13 07:32:57 -07:00

27 lines
1.6 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="630" viewBox="0 0 1200 630">
<rect width="1200" height="630" fill="#f5f0e8"/>
<!-- Graph paper grid -->
<defs>
<pattern id="grid" width="20" height="20" patternUnits="userSpaceOnUse">
<path d="M 20 0 L 0 0 0 20" fill="none" stroke="#d4cfc5" stroke-width="0.5" opacity="0.5"/>
</pattern>
</defs>
<rect width="1200" height="630" fill="url(#grid)"/>
<!-- Circuit trace decoration -->
<line x1="100" y1="530" x2="400" y2="530" stroke="#4a8c6f" stroke-width="3"/>
<circle cx="100" cy="530" r="6" fill="#4a8c6f"/>
<circle cx="400" cy="530" r="6" fill="#4a8c6f"/>
<line x1="800" y1="100" x2="1100" y2="100" stroke="#4a8c6f" stroke-width="3"/>
<circle cx="800" cy="100" r="6" fill="#4a8c6f"/>
<circle cx="1100" cy="100" r="6" fill="#4a8c6f"/>
<!-- Title -->
<text x="600" y="260" text-anchor="middle" font-family="Georgia, serif" font-size="52" fill="#1e293b" letter-spacing="-1">Electronics Reference Library</text>
<!-- Subtitle -->
<text x="600" y="330" text-anchor="middle" font-family="Georgia, serif" font-size="28" fill="#64748b">Forrest M. Mims III &amp; Classic References</text>
<!-- Tagline -->
<text x="600" y="400" text-anchor="middle" font-family="system-ui, sans-serif" font-size="20" fill="#94a3b8">Hand-drawn circuit notebooks preserved digitally</text>
<!-- Book icon hint -->
<rect x="555" y="440" width="90" height="70" rx="4" fill="none" stroke="#3b5998" stroke-width="2.5"/>
<line x1="600" y1="445" x2="600" y2="505" stroke="#3b5998" stroke-width="1.5"/>
</svg>