Ein selbst gehostetes CV mit Astro, SQLite und einem lokalen LLM erstellen
Diese Seite hat eine WordPress-Installation durch etwas schlankeres und vollständig unter meiner Kontrolle stehendes ersetzt: einen einzigen Astro (SSR) Container, SQLite als einzige Quelle der Wahrheit und keine Drittanbieterdienste im Request Path.
Die beweglichen Teile
- Astro + Node adapter rendern jede öffentliche Seite auf dem Server, wobei der gesamte Lebenslauf von SQLite gespeist wird. Hell-/Dunkelthemen, drei Sprachen (EN/RU/UK) und ein Print-Stylesheet, das gleichzeitig als herunterladbares PDF dient.
- Passkey-only Admin. Keine Passwörter – WebAuthn mit mehreren Anmeldeinformationen und einem Notfall-CLI, um einen neuen Schlüssel zu registrieren, falls alle verloren gehen.
- Eine tägliche Pipeline. Ein Cronjob listet meine privaten GitHub-Repositories auf und lässt für diejenigen, die sich geändert haben, ein lokales Gemma-Modell (Ollama) einen kurzen, sachlichen Textentwurf erstellen. Neue Repos landen als unveröffentlichte Entwürfe – nichts Privates wird live geschaltet, bevor ich es manuell veröffentliche.
- First-party Analytics. Besuche werden geolokalisiert und mit einer lokalen MaxMind-Datenbank (keine externen Aufrufe) nach ASN aufgelöst, zusammen mit einem GDPR-Einverständnisbanner, das GA und den Client Beacon blockiert.
Warum es wichtig ist
Das LLM und die GitHub-Synchronisierung laufen vollständig in einem offline Batch Path – wenn das Modell ausgefallen ist, merkt die Seite nichts davon; sie bedient einfach weiterhin aus SQLite und versucht die Anreicherung am nächsten Tag erneut. Diese Trennung ist der ganze Punkt: Die interessante Automatisierung sitzt niemals zwischen einem Besucher und einer Seite.
Weitere Beiträge über die Infrastruktur dahinter – BGP, Transport, Monitoring – folgen.
Transparenz: Die meisten Beiträge werden mit KI-Unterstützung verfasst, und die nicht-englischen Versionen werden von einem lokalen LLM maschinell übersetzt und anschließend geprüft. Fehler entdeckt? Bitte gib mir Bescheid.