Diese Seite — Portfolio als Produkt
Next.js 14 App mit einem RAG-Assistenten, LLM-i18n-Pipeline und mehrsprachigem PDF-Lebenslauf
Überblick
Kontext, Ansatz und Ergebnis.
Problem
Ein Lebenslauf behauptet Seniorität; er kann sie nicht demonstrieren. Ich wollte ein Portfolio, das selbst ein Produktionssystem ist – jede Funktion ein verifizierbares Arbeitsbeispiel, das ein Recruiter anklicken, lesen und hinterfragen kann.
Meine Rolle
Alles: Produkt, Design, Backend, Frontend und Betrieb – alles alleine entworfen, gebaut und betrieben.
Einschränkungen
- Die serverlose Bereitstellung darf die Postgres-Verbindungen nicht erschöpfen, und öffentliche Seiten müssen ISR-cachebar hinter strengen Sicherheitsheadern bleiben.
- Inhalte werden in Englisch, Spanisch und Deutsch ausgeliefert, ohne jeden Beitrag dreifach zu erstellen.
- Der KI-Assistent antwortet nur auf Basis meiner echten Inhalte, innerhalb eines täglichen Kostenbudgets, und muss gegen Prompt-Injection resistent sein.
Architektur
Next.js 14 App Router mit TypeScript und Prisma auf Postgres. Der Assistent ist retrieval-augmented: Die Site-Inhalte werden in Stücke zerlegt und in pgvector eingebettet, pro Frage abgerufen und mit OpenAI-Modellen beantwortet – mit Prompt-Injection-Schutz, IP-basierten Ratenlimits, einem täglichen Token-Budget und cron-gesteuertem Re-Indexing. Eine LLM-Übersetzungspipeline generiert die spanischen und deutschen Lokalisierungen mit hash-basierter Staleness-Erkennung. Die Admin-Oberfläche sitzt hinter NextAuth-Anmeldeinformationen plus WebAuthn-Passkeys unter einer nonce-basierten CSP. Das Lebenslauf-PDF wird serverseitig mit PDFKit in allen drei Sprachen gerendert. Die Blogsuchen verwenden die Volltextsuche von Postgres; jede Route gibt kanonische/hreflang-Metadaten, JSON-LD, pro Route Open Graph-Bilder, eine Sitemap, RSS und llms.txt aus.
Ergebnis
Die Site, die du gerade liest: mehrsprachiger Blog und Fallstudien, ein KI-Assistent, der auf meinem eigenen Schreiben basiert, und ein recruiter-bereites PDF-Lebenslauf – alles aus einem Codebase generiert und in der Produktion betrieben.
Was ich anders machen würde
Die i18n-Routing von Anfang an entwerfen – das Nachrüsten bedeutete, dass jede öffentliche Seite jetzt in zwei Routentrees existiert. Und Projektmetriken im Schema anstatt in Prosa unterbringen, damit sie als Highlight-Chips gerendert werden können.
Erkenntnisse
Was ich mitnehme.
Ein Portfolio, das selbst ein Produktionssystem ist, schlägt Screenshots — jedes Feature dient als überprüfbares Arbeitsbeispiel, und es allein zu betreiben hält die Full-Stack-Fähigkeiten aufrecht.
Stack
Tools und Plattformen.
Verwandte Texte
Notizen aus diesem Projekt.
Reden wir
Möchtest du über solche Arbeit sprechen?
Wenn du für ähnliche Backend-, AWS-, Voice- oder Integrations-Arbeit einstellst — oder einfach Architektur-Notizen vergleichen willst — melde dich direkt.