Agricultural management SaaS I work on at OMD do Brasil. I wrote the backend from the ground up in NestJS, Prisma and PostgreSQL, with a layered architecture of domain, use cases and repositories that the team adopted as its standard. I also containerized the application and wrote the deploy pipeline, which is what let us move the platform off Google App Engine.
NathanSantos
Full-Stack Software Engineer
|
Selected Work
A few of them, and what broke along the way.
A resume builder that generates PDFs, with billing in three currencies and routing between Stripe and PIX depending on the country. Interface and content are available in English and Portuguese through next-intl.
Most of my work is backend, and the interesting part is almost always in the database.
I work in the TypeScript ecosystem: NestJS and Node on the API, Next.js and React on the interface, PostgreSQL underneath. I care more about getting the data model right early than about the framework of the month.
I keep up with the newer parts of the stack and ship production code with Next.js, React 19, Tailwind, and Biome. I'll pick up a new tool early when it actually earns its place. Right now I'm open to full-stack roles where I own a feature from the API to the UI.
Sertãozinho, SP, Brazil- Postgraduate in Software EngineeringDescomplica EAD · Oct 2024 — Apr 2025Completed
- Technologist in Industrial MechatronicsFATEC · Jan 2019 — Dec 2023Completed
- Full Stack Web DevelopmentProgramadorBR · 60 hoursCompleted
- Node.js PathRocketseat · 50 hoursCompleted
What I actually spend my time on.
- 01
Full-Stack Product Engineering
I build and ship complete SaaS products, from the database schema to the polished UI, using the Next.js App Router, Server Actions, and edge-first deploys.
- 02
API Design & Backend Architecture
Built REST APIs with Node.js, NestJS, and Hono. I isolate tenants with Row Level Security in Postgres, applied per request, instead of trusting every query to remember the filter.
- 03
Performance & DX Optimization
Built performance-first frontends with React Server Components, Turbopack, and code-splitting. I profile before optimizing, so the work goes where the time is actually spent.
I build with AI in the loop. What makes that safe to ship is not the model, it is what happens around it.
- 01
Spec before code
Anything non-trivial starts as a written spec: the decision, the constraint, and the option I ruled out on purpose. The agent reads it, and so does whoever picks the project up next.
- 02
I read it as a reviewer, not as the author
Generated code gets the same pass as a pull request from a stranger. Most of what I throw away looks correct and is quietly wrong in one line.
- 03
Tests decide, not the diff
Business rules and access policies get tests before I trust a change. An agent that can run the suite and read the failure is worth more than one that writes the code faster.
- 04
Context has to survive the session
Versioned migrations, decisions written down next to the code, and a project file the agent reads on the way in. That is what lets me pick up a project six weeks later without reconstructing it from memory.
The tools I actually use, not the ones I have heard of.
Highlighted items are the ones I use every day.
Frontend
- Next.js
- React
- TypeScript
- Tailwind CSS
- TanStack Query
Backend & Data
- NestJS
- Node.js
- PostgreSQL
- Drizzle ORM
- Redis
Infra & Tooling
- Docker
- Git
- Playwright
- Biome
Let's build
something
Working on something, have an idea, or just want to talk about engineering? Reach out through any channel below, or send a message here.
- +55 (16) 99143-7961
- linkedin.com/in/nathannfs
- github.com/nathannfs
- Sertãozinho, SP, Brazil