Single-binary self-hosted Markdown blog on Rust axum: no database, live search, Typst PDF export, and strong SEO.
axumblogdockermarkdownminijinjarustself-hostedtypstvite
1<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="630" viewBox="0 0 1200 630">
2 <defs>
3 <linearGradient id="accent" x1="0%" y1="0%" x2="100%" y2="0%">
4 <stop offset="0%" style="stop-color:#0e3ff4"/>
5 <stop offset="100%" style="stop-color:#842bff"/>
6 </linearGradient>
7 </defs>
8 <rect width="1200" height="630" fill="#0d1117"/>
9 <rect x="80" y="80" width="5" height="160" fill="url(#accent)"/>
10 {% for line in title_lines %}
11 <text x="110" y="{{ 150 + loop.index0 * 64 }}" font-family="sans-serif" font-size="54" font-weight="bold" fill="#f0f6fc" letter-spacing="-0.01em">{{ line }}</text>
12 {% endfor %}
13 <line x1="80" y1="490" x2="1120" y2="490" stroke="#30363d" stroke-width="1"/>
14 <text x="80" y="548" font-family="sans-serif" font-size="28" fill="#c9d1d9">Isaac Bythewood</text>
15 {% if tags %}
16 {% for tag in tags[:4] %}
17 <rect x="{{ 1120 - (tags[:4]|length - loop.index0) * 140 }}" y="520" width="128" height="38" rx="19" fill="#21262d"/>
18 <text x="{{ 1120 - (tags[:4]|length - loop.index0) * 140 + 64 }}" y="545" text-anchor="middle" font-family="sans-serif" font-size="18" fill="#c9d1d9">{{ tag }}</text>
19 {% endfor %}
20 {% endif %}
21</svg>