Full Stack Developer — NestJS · Next.js · React Native
I build multi-tenant SaaS end to end — NestJS API, Next.js web, React Native app — and take it all the way to production, including the parts nobody wants to touch: WhatsApp Cloud API, Meta Ads, Argentine e-invoicing, CRM integrations.
Full stack developer based in Buenos Aires, with the weight on the backend. I design and ship complete products on my own: a NestJS + Prisma + PostgreSQL API, a Next.js or React web app, and a React Native Android app when the product needs one — plus the deploy, the migrations and the seeded data that let a stranger open the demo and click around. The systems I work on are multi-tenant by default: one install, many clients, isolated data, role-based access and per-tenant encrypted credentials.
What I'm actually good at is the unglamorous half. Asynchronous work with BullMQ and Redis, webhooks with retries and full execution logs, imports that survive a real client's spreadsheet, and third-party integrations that have no happy path: WhatsApp Cloud API, the Meta Marketing API, Argentine electronic invoicing with ARCA/AFIP, Kommo, HubSpot, Shopify and Google Workspace. The largest system I maintain runs on 185 migrations and around fifty modules and is in daily production use; the newest one carries 879 automated tests. A WhatsApp bot I built processes about 27,000 messages a week.
My path here wasn't a straight line. I spent eight years in the United States, where I learned the language and founded my own computer company, and along the way I've led teams, run a business and managed operations. In 2022 I went all-in on software at Henry Bootcamp, and I haven't stopped building since. I work with AI as part of the toolchain — both to move faster and inside the products themselves, where I've built copilots, transcription and LLM-backed features. That mix of hands-on engineering, real-world leadership and C2 English (EF SET 94/100) is what I bring to a team.
Selected work
Projects
A selection of things I've built — from multi-tenant SaaS to high-volume automations.
Peajes
2026
Mobile app to track toll-booth crossings
React Native app that auto-detects toll crossings via GPS geofencing (plus manual logging), tracks spending per vehicle, and is built to verify charges against operator billing. NestJS + PostgreSQL backend with 294 geocoded Argentine toll booths. Android beta.
Multi-tenant SaaS connecting kindergartens and families
Communication & management platform between a kindergarten and parents: per-classroom photo/video gallery (Cloudinary), parent↔teacher messaging, announcements, daily reports (meals/naps/mood) and a shared calendar. Multi-tenant with role-based access (super admin / direction / teacher / parent) — a super admin manages multiple kindergartens. NestJS + Prisma + PostgreSQL backend, React + Vite + MUI web, plus a native Android app (Expo / React Native) for families and teachers. Live demo seeded with a sample kindergarten.
NestJS
Prisma
PostgreSQL
React
Vite
Material UI
React Native
Expo
Cloudinary
SaaSMulti-tenantFull StackMobile
Demo login: admin@jardin.com · secret123
Logs in to the demo kindergarten as Direction (full management). The slug 'jardin-la-estacion' is pre-filled. Other roles share the password secret123: teacher seño@jardin.com, family papa@jardin.com — and superadmin@laestacion.app manages multiple kindergartens.
Conversational CRM: the inbox and the sale in one system
WhatsApp, Instagram and Messenger messages from several companies at once land in a shared team inbox and become contacts, companies and deals with an amount and a stage. It adds what messaging platforms don't give you: revenue reporting, measured first-response time, campaigns by audience, automation flows built on a canvas, and each Meta ad's spend cross-referenced against the sales it actually closed — two ads that look identical inside a CRM stop looking identical. Also does two things the market leader can't: it embeds the live WhatsApp thread inside the client's own system, and it migrates a whole contact base from a legacy CRM with a dry run first. Multi-tenant NestJS 11 + Prisma + BullMQ backend (54 migrations, ~45 modules, 879 automated tests) with a Next.js app. Deployed and operating in technical beta.
Everything an agency runs on, tied to the client record instead of scattered across spreadsheets, boards and mailboxes: tickets and developer workflow with handoff and time tracking, client CRM, sales pipeline and quoting, an onboarding engine, recurring billing across three payment processors, ARCA (AFIP) electronic invoicing, treasury and contractor settlements, internal chat and a WhatsApp inbox, calendar and Google Workspace, a marketing/SEO suite with YouTube analytics, and an AI layer that meters its own cost. Because hours, contracts and invoices all hang off the same client record, it answers what an agency usually can’t: what each account really cost, and how much work is being delivered outside contract. A single-company install — not a multi-tenant SaaS — in production and in daily use. Built solo over five months: 769 commits, one author.
NestJS 11
Prisma
PostgreSQL
Next.js
Socket.IO
ARCA / AFIP
Stripe
Mercado Pago
Google Workspace
Full StackBackendAutomationIntegrations
Full technical breakdown
769
commits, all by one author
191,612
lines of TypeScript, in 986 files
117
tables in the schema, 193 migrations
613
HTTP endpoints across 76 controllers
56
NestJS modules on the backend
82
screens in the web app
1,197
automated tests
5 months
March to August 2026, no collaborators
What's in it
Work
Tickets and developments with a work plan in subtasks, handoff between developers, time tracked against the client, comments, attachments and full history. Quality closes the loop with a satisfaction survey that will not go out while a warranty bug is still open.
Clients
Client companies with groups, contacts, contracts and the products each one bought, plus an encrypted credential vault where who may decrypt what is part of the role matrix, not an afterthought.
Onboarding
A form engine rather than a form: templates with sections, fields and steps, one instance per client, answer validation and digital signature, with the link sent over WhatsApp or email.
Sales
Pipeline, opportunities, targets, and a quoting tool that states what is being sold and not only how much. Winning a deal accepts the quote and the contract is derived from it, so nobody retypes what was already agreed.
Billing and collections
Recurring billing across Mercado Pago, HubSpot Payments and Stripe, direct-debit links, automatic dunning of an unpaid invoice, a notice to the client when a payment bounces, and ARCA (AFIP) electronic invoicing.
Treasury
Accounts and movements, collections with allocation and partial payments, a monthly exchange rate that consolidates currencies, suppliers and purchase invoices, payables, recurring portfolio and MRR, and contractor settlements that email the receipt attached.
Communication
Internal chat, a WhatsApp inbox bridged in over signed webhooks so a ticket can be opened without leaving the thread, push notifications, team presence with heartbeat, and a calendar wired to Google Workspace — Calendar, Gmail and Drive.
Marketing, SEO and paid media
Content channels and pieces on a publishing calendar, organic positions pulled from Search Console instead of typed in by hand, Meta spend cross-referenced with per-client attribution, and a YouTube suite — channel analytics, tag explorer, keyword research, SERP analysis and SEO scoring.
AI layer
Dotsy, an in-app assistant, and a scrum master that gives a daily read of team and projects. Behind both, a provider-neutral LLM service switchable between OpenAI, Anthropic and Gemini from an environment variable, with fast and deep tiers.
Platform
Nine roles over a capability matrix, two-factor authentication with trusted devices and a security audit trail, real time over Socket.IO, an installable PWA with push, a spend panel that reads 25 infrastructure projects, in-app documentation, and a changelog that announces itself instead of waiting to be looked at.
The hard parts
Reconciling money three processors already moved
Mercado Pago, HubSpot Payments and Stripe each bring their own signature scheme and their own idea of what a subscription is, and the system has to be the source of truth over all three. The failures worth chasing are the quiet ones: an invoice with no subscription attached being dropped without a trace, a double click issuing two tax receipts for the same sale, charges the processor made that were never recorded on this side. Signed webhooks with idempotency, and a backfill for what had already slipped through before anyone noticed.
A YouTube suite running on someone else’s quota
The Data API budget is ten thousand units a day for the entire project, not per user, so every call passes through a quota ledger and a discovery cache before it leaves. Three things the documentation does not warn about: view counts on a viral video overflow a 32-bit integer and have to be persisted as BigInt; the unofficial autocomplete endpoint serves latin-1, so accents arrive broken unless UTF-8 is forced; and channel-level analytics is owner-only — being a manager of the channel is not enough, which costs a day of debugging to discover. Competitor data is purged at thirty days by a cron with no feature flag, because that one is compliance, not a setting.
An AI layer with a budget
The LLM service talks to OpenAI, Anthropic or Gemini by direct fetch behind one interface, so changing provider is an environment variable rather than a refactor. Every call logs its tokens and its cost, which is what makes the assistant show up in the monthly spend panel next to Railway, Vercel, Meta and WhatsApp — with a cap that warns, and can block sends before the bill is a surprise.
A test that compiles the wiring
One spec builds the entire dependency-injection graph without connecting to anything. It exists because a module that asks for a service another module never exported still compiles, still passes every other test, and only fails when the deploy comes up. Fifty-six modules in, that is not a hypothetical.
Scheduling, medical records, cash desk and collections for medical, dental, aesthetic, physiotherapy, plastic-surgery and hair-medicine clinics. Multi-site, white-labelled per client (colors, logo, typography), with modules that switch on per site according to its specialty — each site sees its own menu, not its neighbour's. August 2026 added surgeries with informed consent (an operation cannot be marked as performed without a signed consent, and the consent stores a frozen copy of the exact text the patient read), product sales with stock, an inbound API that lets an outside system read free slots and book an appointment under its own key, with idempotency, and the DotsFlow CRM embedded with no second login. Electronic invoicing issues a real ARCA (AFIP) CAE, verified against the homologation environment. The AI in it is deliberately narrow — clinical-history summaries, a formulary assistant and an on-screen assistant, with tokens and cost metered per organisation — and it does not diagnose. Multi-tenant by logical isolation over a shared database, scoped per organisation and clinic. In production.
Multi-tenant SaaS for pharmacies and drug wholesalers
Built around the case that motivates it: an Argentine drug wholesaler that opens its own retail pharmacy and has to sell to itself. Where the incumbent system is a generic ERP dressed as pharmacy software — and hands the pharmacist a wall of a hundred voucher types — this one makes the medicine a first-class citizen: batch stock with FEFO expiry control, health-insurer coverage per drug with exclusions and unit caps, DDM batch closing and settlement with per-dispense debits and reconciliation, purchase connectors to wholesalers, ARCA/AFIP electronic invoicing and ANMAT traceability. NestJS + Prisma monorepo (pnpm + Turborepo) over PostgreSQL, using row-level security for tenant isolation — 19 modules. In development; a working codename, not the final brand. Live demo seeded with a wholesaler and its pharmacy.
NestJS
Prisma
PostgreSQL
Postgres RLS
Next.js
Turborepo
Docker
ARCA WSFEv1
SaaSMulti-tenantBackendFull Stack
Demo login: dueno@demo.test · botica1234
The login form comes pre-filled — company 'demo', owner account, one click to enter. The demo group is a drug wholesaler that has just opened its own pharmacy, so the intercompany sale, batch stock and insurer coverage all have data to show.
Replaced an Excel-based workflow with a full platform: policy lifecycle, automated debt/collections tracking, follow-ups and multi-step XLSX import (scaled to ~8K policies in production). Live demo seeded with sample data.
Full-stack BI platform: weekly KPIs, automated alerts, health scores, GMV projections and rankings, with role-based access (admin/supervisor/consultant) and CSV/XLSX imports. Live demo seeded with sample data.
Sends template-based WhatsApp campaigns via the WhatsApp Cloud API: multi-tenant, per-source API keys, OTP, delivery-status webhooks, rate limiting and audit logs. NestJS + BullMQ/Redis backend with a Next.js admin panel. Live demo seeded with sample campaigns.
Config-as-data rule engine connecting a CRM (Kommo) with Shopify/Tiendanube/WooCommerce and shipping providers, so a new client integration is a configuration change rather than a new backend: per-tenant AES-encrypted credentials, webhook ingestion, async workers with retries, declarative rules and full execution logs. NestJS + BullMQ/Redis backend with a Next.js admin. In production, internal use — no public demo.
Led multidisciplinary teams through job-simulation programs, shipping backend projects on time as both developer and team leader.
2022
Full Stack Web Developer
Henry Bootcamp
800+ hours of intensive full-stack training. Built React and Node apps, including MangaCoffee — an e-commerce platform delivered with an 8-person team.
2008 — 2019
Database Programmer
National Library of Argentina
Database programming (FileMaker) and data systems supporting the human resources department.
2002 — 2007
Founder & Owner
Compubyte Corp · Miami, FL
Founded and ran a computer sales and repair business in Miami for five years.
Get in touch
Contact
Let's build something. Reach me through any of these.