Things I have built.
Open any one to see the decisions behind it, including the ones I got wrong first.
- 012025ShippedShipped
OMD Farm
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.
NestJSPrisma ORMPostgreSQLAngularDockerGitHub ActionsMQTTRedisTypeScript - 022026ShippedShipped
Curriculum SaaS
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.
Next.jsPostgreSQLDrizzle ORMStripenext-intlTypeScript - 032026ShippedShipped
SaaS Templates
An opinionated starting point for SaaS products, with Hono, Drizzle ORM, Better Auth and Biome. I use it as the base for my own projects, which is also where its rules get tested and, when they do not survive, dropped on purpose.
HonoDrizzle ORMBetter AuthBiomeTypeScript - 042026
OMD Eco Control
Fleet telemetry platform at OMD do Brasil. I started the project and wrote its initial structure: the monorepo, the data model, the multi-tenant isolation and the geospatial layer. The team builds on it today.
NestJSDrizzle ORMPostgreSQLPostGISBetter AuthCASLTurborepoNext.jsTypeScript - 052026ShippedShipped
Multi-tenant scheduling platform
A booking SaaS I built on my own, around 27 thousand lines. Clients book through a widget embedded in the business's own site, the owner runs everything from a panel, and each tenant's data is isolated by Row Level Security.
Next.jsDrizzle ORMPostgreSQLDockerVitestPlaywrightTypeScript - 062026ShippedShipped
WhatsApp assistant on the Meta Cloud API
An assistant that answers a business's WhatsApp and books the appointment during the conversation. It runs on Meta's official Cloud API, approved through their app review, and reaches my scheduling platform through three tools and nothing else.
Node.jsExpressPostgreSQLDockerWhatsApp Cloud APIClaude API - 072026ShippedShipped
E-commerce storefront and admin
A storefront and a back office for a clothing shop: catalogue with filters, cart, Mercado Pago checkout with card and PIX, and an admin for products, variants, promotions and banners. Published as a live demo, in Portuguese and English.
Next.jsReact 19SupabasePostgreSQLRow Level Securitynext-intlMercado PagoTanStack QueryTailwind CSSTypeScript - 082026
Group travel planner
A planner for a trip taken by several people: a timeline that crosses time zones, expenses split between participants in two currencies, and invites that carry the role.
Next.jsSupabasePostgreSQLRow Level SecurityTanStack QueryZodTailwind CSSTypeScript - 092026
Inventory forecasting for shops
A multi-tenant platform that reads a shop's stock and 90 days of sales, works out the reorder point for each SKU and says what to buy and when. Live demo: sign in with visitante@nathannfs.com and the password estoque2026.
Next.jsSupabasePostgreSQLRow Level SecurityShopify APIStripenext-intlTypeScript - 102026ShippedShipped
Booking page for small studios
A booking page a salon can send by link, and a back office behind it. The visitor picks the service, the day and the time without an account. Live demo, no sign-in needed to book.
Next.jsSupabasePostgreSQLRow Level SecurityStripeMercado PagoTailwind CSSTypeScript - 112026ShippedShipped
Landing page for an aesthetics clinic
A single static page for a clinic that sells consultations: one screen to explain the treatment, show results and get the visit booked. Built to load fast on a phone over mobile data, because that is where the visitor arrives from.
AstroTailwind CSSTypeScriptSelf-hosted fontsStructured data - 122026ShippedShipped
Public product roadmap
A board where anyone can follow what a team is building, comment on an item and say what they want next. The API lives in the same app, written with Hono and described by an OpenAPI schema, and clicking an issue opens a modal without losing the list behind it.
Next.jsHonoDrizzle ORMPostgreSQLBetter AuthTanStack QueryTypeScript