Adrian RomoAdrian Romo
Aktiv

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.

Next.jsTypeScriptPrismaPostgrespgvectorOpenAITailwind CSSWebAuthnPDFKit

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.