Get in touch
Gabriel Espinheira sitting on a stool in a navy photo studio, wearing a light blue shirt and dark trousers.

Engineering with a designer’s eye.

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.

About me

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.

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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

Say hello.

A full-time role or a product to build. I read every message myself and reply within 2 business days.

What's it about?

Read how I handle your details in the privacy policy.

Gabriel Espinheira

Senior Full-Stack Engineer