I build backend systems that don't fall apart, frontend interfaces that don't feel like an afterthought, and developer tools that remove the boring glue between good libraries.
4+ years modernizing corporate systems — legacy migrations, financial workflows, REST integrations, query optimization, internal tools and production support. Off the clock, I ship my own products and open-source tooling, usually around one theme: turning repetitive engineering pain into something cleaner, typed and reusable.
I care about code that communicates intent, architecture that survives its own growth, and products that feel like someone actually thought about the person using them.
Admin dashboards repeat the same filter logic across React state, URL params, backend DTOs and table filters. Declare it once — reuse the typed schema everywhere.
const filters = defineFilters({
search: text(),
status: select(["draft", "pending", "paid", "failed"]),
tags: multiSelect(["urgent", "recurring", "manual-review"]),
})
const dto = toQueryDto(filters, state) // → backend
const params = toSearchParams(filters, state) // → URLShipped as a pnpm monorepo of 5 packages (core · react · browser · tanstack · next), with ESM/CJS output, type declarations, Vitest smoke tests and a live demo.
Every project re-writes the same wiring to connect a form to a server action: useTransition, FormData serialization, Zod error mapping, setError() calls, pending state. I abstracted it away.
const { register, handleSubmit, formState } =
useActionForm(loginAction, { validationMode: "onChange" })Full TypeScript inference, optimistic UI with rollback, multi-step wizard persistence, a floating DevTools panel and automated tests.
npm i hookform-action-coreBuilt end-to-end: Next.js + TypeScript, LLM API integration, freemium model with three tiers, payment gateway (card · PIX · boleto) and CI/CD on Vercel.
Not a tutorial clone. Not just a landing page. A real product with pricing and a full payment flow.
| Project | What it is | |
|---|---|---|
| 🪦 | Graveyard | A digital memorial for abandoned projects — death certificates, epitaphs, a funeral wizard. Next.js 15 · Prisma · Postgres · Framer Motion. "The projects that didn't work taught me more than the ones that did." |
| 💰 | FreedomCalc | Local-first FIRE & compound-interest planner. Zero servers, AES-256 in localStorage, PIN lock, PWA-ready. |
| 🎬 | Watch Planner | Turns any Letterboxd list into a personalized watch schedule. TMDB enrichment · drag-and-drop calendar · .ics export. |
| 🎤 | Setlist | Concert & festival lifecycle planner with budget guardrails and predictive alerts. IndexedDB-first, offline-capable. |
Craft & DevOps
· TDD · SOLID · Hexagonal Architecture
Library design and developer experience · Architecture decisions that age well · Testing as a design tool · Local-first and offline-capable patterns · The product side of engineering



