lpazzim.com
- React
- TypeScript
- Vite
- Tailwind CSS
- Framer Motion
- TanStack Query
- i18next
- Notion API
- Vercel
- Role
- Design & Engineering
- Company
- Personal project
- Period
- 2025 — 2026
- Links
- Live site Source code
This site: a bilingual, editorial-style portfolio that doubles as a living CV, with a blog powered by Notion as a headless CMS.
Context
I wanted a portfolio that shows how I work rather than just listing technologies: typed content, motion with intent, real data and a publishing flow I actually enjoy using.
What I did
- Designed the editorial visual language: oversized serif type, restrained palette, scroll-driven reveals.
- Built a typed, bilingual content model so every case study and role is written once per language and checked by TypeScript.
- Integrated Notion as a headless CMS through Vercel Serverless Functions, keeping the API token out of the client bundle.
- Set up EN / PT-BR internationalization with persisted language preference.
Key decisions
- 01
Notion as the CMS
Writing happens where I already take notes. A serverless function queries the database, filters by a Published flag and returns plain JSON, cached at the edge with stale-while-revalidate.
- 02
Content as typed data, not markup
Case studies live in TypeScript objects instead of JSX. Missing translations become compile errors, and the same data can later generate a PDF résumé.
- 03
Generated covers over stock photos
Each case gets a generative line-art cover seeded by its id and tinted by its own accent color, so the archive stays visually consistent without stock imagery.
Results
- languages, fully translated
- 2
- image weight after asset cleanup
- -95%
- secrets shipped to the browser
- 0
Takeaway
“A portfolio is a product with one very specific user: the person deciding whether to talk to you. Every section should answer a question they have.”