Next.js 14 app with a RAG assistant, LLM i18n pipeline, and multilingual PDF resume
Overview
A resume asserts seniority; it can't demonstrate it. I wanted a portfolio that is itself a production system — every feature a verifiable work sample a recruiter can click, read, and interrogate.
Everything: product, design, backend, frontend, and operations — designed, built, and run solo.
Next.js 14 App Router with TypeScript and Prisma on Postgres. The assistant is retrieval-augmented: site content is chunked and embedded into pgvector, retrieved per question, and answered with OpenAI models — with prompt-injection defenses, per-IP rate limits, a daily token budget, and cron-driven re-indexing. An LLM translation pipeline generates the Spanish and German locales with hash-based staleness detection. The admin surface sits behind NextAuth credentials plus WebAuthn passkeys under a nonce-based CSP. The resume PDF is rendered server-side with PDFKit in all three languages. Blog search uses Postgres full-text search; every route emits canonical/hreflang metadata, JSON-LD, per-route Open Graph images, a sitemap, RSS, and llms.txt.
The site you are reading: multilingual blog and case studies, an AI assistant grounded in my own writing, and a recruiter-ready PDF resume — all generated from one codebase and operated in production.
Design the i18n routing from the start — retrofitting it meant every public page now exists in two route trees. And put project metrics in the schema instead of prose so they can render as highlight chips.
Lessons
A portfolio that is itself a production system beats screenshots — every feature doubles as a verifiable work sample, and operating it solo keeps the full-stack muscles honest.
Stack
Related writing
Talk shop
If you're hiring for similar backend, AWS, voice, or integration work — or just want to compare notes on architecture — reach out directly.