I’m Gabriel Espinheira, a senior full-stack engineer in Lisbon with 12+ years of experience. I build web products end to end, from the data model to the interface people touch, and the AI features inside them.
Selected work.
What I've been building lately. I design and engineer each product end to end, directing coding agents, and every one opens into a case study on how it was built.
Every layer, one pair of hands.
A feature usually changes hands at every layer. I carry it through all five myself, from the screen people touch to the pipeline that ships it, so nothing gets lost in between. Every change starts with a failing test.
1UX/UI Designwhat people touch
One data model, every screen. I start where people touch it: Next.js on the web, React Native on phones, Electron on the desktop. All three read the same shared types, so one change to the model is checked in every app.
- Next.js
- React Native
- Electron
2Statewhat the screen believes
Never make the user wait. The screen moves first with an optimistic update and rolls back if the server refuses. Each value has one owner, a query cache, a store or a form, so the screen and the server never argue.
- TanStack Query
- Zustand
- React Hook Form
3API / MCPwho may do what
No special door for agents. Behind the screen sits one API that apps and AI agents both call, over REST or MCP. The server validates and authorises every request, whoever sends it.
- Node.js
- MCP servers
- Zod
4Datawhat is kept
Shape data for the screen that reads it. The schema starts from the screens: in Convex or PostgreSQL, each list gets the index it needs, so it loads in order without a table scan.
- Convex
- PostgreSQL
- Prisma
5Infrastructurehow it ships
Test before it ships, measure after. Every pull request runs lint, types and tests in CI and deploys its own preview before it merges. Once it's live, PostHog shows how people use it, so the next change starts from real data.
- Vercel
- AWS
- PostHog
Need someone to own the build?
I'm open to a full-time role or a contract build. I read every message myself and reply within 2 business days.
- Full-time role
A senior engineer on your team
Remote on EU hours, or hybrid and on-site in Lisbon.Talk about a role - Contract build
Your product, built end to end
Web, desktop and mobile on TypeScript, Next.js, Convex and Expo, including AI features.Talk about a build

Blog.
Notes from building: architecture, agents, tests and interface details, each one tied to something I shipped.
Say hello.
A full-time role or a product to build. I read every message myself and reply within 2 business days.

Gabriel Espinheira
Senior Full-Stack Engineer
Gabriel Espinheira
Senior Full-Stack Engineer




































