Back to projects
FeaturedYear · 2026

Dandy Portfolio

My roleSolo full-stack developer

The portfolio you're looking at right now isn't a static site — it's a full-stack application: multilingual, with lead capture, PDF generation, and database integration.

Next.js 16React 19TypeScriptSupabase

The problem

I needed a portfolio that would also work as technical proof on its own — not just list projects, but actually demonstrate architecture, i18n, backend integration, and deployment in practice.

The solution

Next.js 16 with the App Router and React 19, strict TypeScript, internationalization with next-intl (Portuguese, Spanish, and English), Supabase as the backend for the quote-request forms, and on-demand PDF generation with @react-pdf/renderer.

My responsibilities

I designed and built the entire site solo: architecture, design system, both lead-capture wizards, PDF generation, the translation system, and deployment on Vercel with a custom domain.

Architecture

Next.js App Router with its own API routes; forms use React Hook Form + Zod, with the same schema validated on both client and server; the API routes write to Supabase, generate a PDF of the brief, and trigger emails via Resend.

Key features

  • Multilingual site (PT/ES/EN) with next-intl, including per-locale routes and metadata
  • Two multi-step lead-capture wizards, with shared client/server validation via Zod
  • On-demand PDF generation from every submitted brief
  • Token-based, private project status page — no login required
  • Custom domain with continuous deployment on Vercel

Engineering decisions

  • Zod as the single source of validation, shared between the form (client) and the API route (server), so they can never drift out of sync
  • A simple honeypot field on the forms to filter bots without needing a captcha
  • Supabase's service role key confined strictly to the server, never exposed to the browser

Challenges

Still writing up the real technical challenges from this project.

What I learned

Still writing up the specific takeaways from this project.