Open to remote rolesDisponible para trabajo remoto

Buenos Aires, UTC-3

AI-agent and full-stack engineerIngeniero de agentes de IA y full-stack

LucasPignataro

I build products and the LLM systems inside them, and run the infrastructure underneath. Co-founder of Unit.Construyo productos y los sistemas con LLMs que tienen adentro, y opero la infraestructura donde corren. Cofundador de Unit.

Fig. 0. The signal is a UART frame: 0x4C 0x50, 8N1.Fig. 0. La señal es una trama UART: 0x4C 0x50, 8N1.

NowAhora
Co-founder of Unit with Manuel Corcos, since December 2025Cofundador de Unit con Manuel Corcos, desde diciembre de 2025
StudyingEstudio
Electronics Engineering, University of Buenos AiresIngeniería Electrónica, Universidad de Buenos Aires
FocusFoco
AI agents, full-stack products, self-hosted infrastructureAgentes de IA, productos full-stack, infraestructura self-hosted
LanguagesIdiomas
Spanish (native), English (fluent)Español (nativo), inglés (fluido)

1

Selected workTrabajo destacado

Four systems that are running today. The first two are Unit work, built with my co-founder Manuel Corcos; Planiar and gbrain are my own.Cuatro sistemas que hoy están andando. Los dos primeros son trabajo de Unit, hechos con mi socio Manuel Corcos; Planiar y gbrain son míos.

1.1

2026

Unit, client work in productionUnit, cliente en producción

833 commitscommits

ArgenINTA

A case-file and approvals platform that replaced a paper-and-email workflow at an agricultural research foundation.Un sistema de expedientes y aprobaciones que reemplazó un circuito de papel y mail en una fundación de investigación agropecuaria.

  1. 01RequestSolicitudAn external organization submits a purchase, advance or expense report. An LLM reads the attached PDF and pre-fills the form.Un organismo externo envía una compra, un anticipo o una rendición. Un LLM lee el PDF adjunto y precarga el formulario.
  2. 02Case fileExpedienteIt becomes a numbered case file with a dynamic form for its type.Se convierte en un expediente numerado con un formulario dinámico según el tipo.
  3. 03DepartmentsÁreasIt moves between internal departments, with separate views for internal and external users.Circula entre las áreas internas, con vistas separadas para usuarios internos y externos.
  4. 04ApprovalAprobaciónApproval rules decide who signs off on what.Las reglas de aprobación definen quién firma qué.
  5. 05PaymentPagoThe file closes when the payment is made.El expediente se cierra cuando se hace el pago.

Every step is written to an immutable audit log.Cada paso queda en una auditoría inmutable.

Fig. 1 The life of a case file. Screens are not shown: the client's data is confidential.La vida de un expediente. No mostramos pantallas: los datos del cliente son confidenciales.

We built it at Unit with Manuel Corcos. External organizations submit requests (purchases, advances, expense reports) that become numbered case files and move between internal departments until payment. It has dynamic per-type forms, role-separated views, approval rules, an immutable audit log and LLM-based PDF extraction. It was piloted with staff for about five months and is now used in production.Lo hicimos en Unit con Manuel Corcos. Organismos externos envían solicitudes (compras, anticipos, rendiciones) que se convierten en expedientes numerados y circulan entre las áreas internas hasta el pago. Tiene formularios dinámicos por tipo, vistas separadas por rol, reglas de aprobación, auditoría inmutable y extracción de PDFs con LLM. Pasó por un piloto de unos cinco meses con el personal y hoy está en producción.

  • Paying client: fixed-price build plus a monthly maintenance retainer.Cliente que paga: desarrollo a precio cerrado más un abono mensual de mantenimiento.
  • In production with real users after a pilot of about five months.En producción con usuarios reales después de un piloto de unos cinco meses.
  • We moved the database to a closer region: about 26% lower latency from Argentina.Mudamos la base a una región más cercana: cerca de 26% menos latencia desde Argentina.

Next.js/React/TypeScript/Supabase (Postgres, Auth, Storage, RLS)/Tailwind CSS/shadcn/ui/Vercel/LLM PDF extractionextracción de PDFs con LLM

1.2

2026

Unit, liveUnit, en línea

With Manuel CorcosCon Manuel Corcos

Unit website and client portalWeb de Unit y portal de clientes

Our studio's front door: the landing, product pages, and a portal where clients follow project progress, invoices and payments.La puerta de entrada del estudio: la landing, las páginas de producto y un portal donde los clientes siguen el avance, las facturas y los pagos.

The Unit landing at teamunit.dev: the headline asks visitors about their idea, above a single button to tell it.
The same landing on a phone.
Fig. 2 teamunit.dev on desktop and on a phone.teamunit.dev en escritorio y en el celular.

Manuel Corcos and I built it as one Next.js deployment that serves several domains: host-based routing decides between the studio landing, a product landing and the client portal. The portal is wired for Clerk authentication and Mercado Pago payments, so a client can sign in, see where their project stands and pay from the same place.Lo construimos con Manuel Corcos como un solo deploy de Next.js que atiende varios dominios: el ruteo por host decide entre la landing del estudio, una landing de producto y el portal de clientes. El portal tiene cableado auth con Clerk y pagos con Mercado Pago, así un cliente entra, ve en qué está su proyecto y paga desde el mismo lugar.

  • One deployment, several domains, routed by host.Un deploy, varios dominios, ruteados por host.
  • Client portal for progress, invoices and payments.Portal de clientes para avance, facturas y pagos.

Next.js 16/TypeScript/Tailwind v4/Clerk/Mercado Pago/Vercel

1.3

2026

Product, liveProducto, en línea

70+ public releasesversiones públicas

Planiar

A desktop study app for university students, with an AI assistant that reads each student's own course material.Una app de escritorio para estudiantes universitarios, con un asistente de IA que lee el material de cada materia.

A native Rust and Tauri app that puts slides, a whiteboard and Octave terminals in one window, next to subjects, deadlines, a study plan and timed sessions. Paid plans meter AI through a server-side proxy that checks the plan and consumes quota atomically. Subscriptions run on Mercado Pago with a signature-verified webhook.Una app nativa en Rust y Tauri que junta diapositivas, pizarrón y terminales de Octave en una ventana, al lado de materias, entregas, plan de estudio y sesiones con timer. Los planes pagos miden la IA con un proxy del lado del servidor que valida el plan y descuenta cuota de forma atómica. Las suscripciones van por Mercado Pago con un webhook verificado por firma.

  • More than 70 public releases, now at v0.11, with signed installers and auto-update.Más de 70 versiones públicas, hoy en v0.11, con instaladores firmados y auto-update.
  • Full subscription cycle verified in production: subscribe, upgrade, metered AI, webhook, cancel.Ciclo de suscripción completo verificado en producción: alta, cambio de plan, IA medida, webhook, baja.
  • Free, Pro (US$4.99) and Ultra (US$14.99), with AI quotas enforced on the server.Free, Pro (US$4,99) y Ultra (US$14,99), con cuotas de IA aplicadas en el servidor.
  • About 10k lines of Rust in a multi-crate workspace; end-to-end tests run headless against a mocked Tauri bridge.Unas 10 mil líneas de Rust en un workspace de varios crates; tests end-to-end headless contra un puente de Tauri simulado.

Rust/Tauri v2/JavaScript/Next.js 16/Supabase/Mercado Pago/Anthropic, OpenAI, Google, DeepSeek APIs/Playwright

Planiar's landing page: the headline 'La app de la cursada' above a screenshot of the app with a PDF lecture and a whiteboard side by side.
Planiar's mobile app in demo mode, showing today's classes, tasks and upcoming deadlines.
Fig. 3 The landing page, and the read-only mobile PWA that reads the desktop app's cloud sync.La landing y la PWA móvil de solo lectura que lee la sincronización de la app de escritorio.

1.4

2026

Internal AI infrastructureInfraestructura de IA interna

1024 dims, localdims, local

gbrain

Self-hosted semantic search over company docs, meeting transcripts, notes and code, served to LLM clients as an MCP server.Búsqueda semántica self-hosted sobre docs, transcripts de reuniones, notas y código de la empresa, servida a clientes LLM como servidor MCP.

  1. ingestingestaSourcesFuentesDisk folders, the wiki database, voice notes transcribed with WhisperCarpetas del disco, la base del wiki, notas de voz transcriptas con Whisper
  2. embedbge-m31024-dim embeddings computed on a local RTX 2060 through OllamaEmbeddings de 1024 dimensiones calculados en una RTX 2060 local con Ollama
  3. storePostgres 17pgvector with an HNSW index over chunked documentspgvector con índice HNSW sobre documentos en chunks
  4. serveMCP serverServidor MCPsearch get_doc list_projects add_note, behind a bearer tokendetrás de un bearer token
  5. useLLM clientsClientes LLMClaude Code asks in plain language and gets back only the relevant fragmentsClaude Code pregunta en lenguaje natural y recibe solo los fragmentos relevantes
Fig. 4 Block diagram. Everything left of the MCP server runs on one machine.Diagrama de bloques. Todo lo que está antes del servidor MCP corre en una sola máquina.

Postgres 17 with pgvector stores chunked documents with bge-m3 embeddings computed on a consumer GPU, so no company data leaves the server. An HTTP MCP server exposes four tools behind a bearer token. A Claude Code session-end hook distills each working session into durable facts, deduplicated by meaning before they are stored.Postgres 17 con pgvector guarda documentos en chunks con embeddings bge-m3 calculados en una GPU de consumo, así ningún dato de la empresa sale del server. Un servidor MCP por HTTP expone cuatro tools detrás de un bearer token. Un hook de fin de sesión de Claude Code destila cada sesión de trabajo en hechos duraderos, deduplicados por significado antes de guardarse.

  • The secrets collection is excluded from ingestion by design.La colección de secretos queda fuera de la ingesta a propósito.
  • Session-end hook: 0.93 similarity threshold for dedup, at most 3 facts per session.Hook de fin de sesión: umbral de similitud de 0,93 para el dedup, máximo 3 hechos por sesión.

Node.js/MCP SDK/PostgreSQL 17/pgvector/Ollama/bge-m3/Whisper/Docker Compose/systemd

2

Index of other workÍndice de otros trabajos

Products, tools, hardware and experiments from the last year. Open a row for details.Productos, herramientas, hardware y experimentos del último año. Abrí una fila para ver el detalle.

  1. A Node process on the Claude Agent SDK exposes POST /chat with SQLite-persisted sessions and reaches the knowledge base over loopback, so only the authenticated agent endpoint is exposed; tool access is an explicit read-only allowlist. On top of it sit an Electron tray app that classifies typed or dictated requests (open apps, switch work/study modes, query docs, launch Claude Code on a project, show server status and per-project Claude usage) and a chat bot that transcribes voice notes with Whisper on the GPU.Un proceso Node sobre Claude Agent SDK expone POST /chat con sesiones persistidas en SQLite y llega a la base de conocimiento por loopback, así lo único expuesto es el endpoint autenticado del agente; el acceso a tools es un allowlist explícito de solo lectura. Arriba corren una app Electron en la bandeja de Windows que clasifica pedidos escritos o dictados (abrir apps, cambiar de modo trabajo/estudio, consultar docs, lanzar Claude Code en un proyecto, ver estado del server y consumo de Claude por proyecto) y un bot de chat que transcribe notas de voz con Whisper en la GPU.

    • Tool permissions are enforced by an allowlist, not by the prompt.Los permisos de tools se aplican con una allowlist, no con el prompt.

    Claude Agent SDK/Node.js/Express/SQLite (node:sqlite)/Electron/Whisper large-v3/Matrix/systemd

  2. We run Caddy with internal TLS, an internal DNS resolver, a WireGuard-based VPN mesh, password vault, wiki and a federated Matrix/Synapse homeserver with LiveKit SFU and coturn for video calls, all in Docker Compose with systemd timers. Hourly health checks across ten services feed a status dashboard; automated backups and a local GPU for inference (Ollama, Whisper, MusicGen) round it out.Corremos Caddy con TLS interno, DNS interno, VPN mesh sobre WireGuard, gestor de contraseñas, wiki y un homeserver Matrix/Synapse federado con LiveKit SFU y coturn para videollamadas, todo en Docker Compose con timers de systemd. Health checks horarios sobre diez servicios alimentan un dashboard de estado; se completa con backups automáticos y una GPU local para inferencia (Ollama, Whisper, MusicGen).

    • Hourly health checks across 10 services; every service reachable only over LAN or VPN.Health checks cada hora sobre 10 servicios; todo accesible solo por LAN o VPN.

    Linux (Ubuntu Server)/Docker Compose/Caddy/AdGuard Home/Tailscale / WireGuard/Matrix Synapse/LiveKit/coturn/Vaultwarden/Outline/PostgreSQL/systemd/NVIDIA GPU

  3. Component research and selection (optical and ECG front-ends, nRF52840 BLE MCU, IMU, PMIC, haptics), a BOM generated into docs, a block diagram and a KiCad board generated by script and routed with Freerouting in Docker. Documented in Mintlify, with an interactive 3D assembly page and an explicit stance that cuffless pressure is only a trend.Research y elección de componentes (front-ends ópticos y de ECG, MCU BLE nRF52840, IMU, PMIC, háptica), BOM que se genera en la documentación, diagrama en bloques y placa KiCad generada por script y ruteada con Freerouting en Docker. Documentada en Mintlify, con una página de armado 3D interactiva y la postura explícita de que la presión sin manguito es sólo tendencia.

    • Board layout generated programmatically from a Python script.El layout de la placa se genera por código desde un script de Python.

    KiCad 9/Python/Freerouting/Docker/nRF52840/Mintlify/Three.js

  4. An idempotent HTTP endpoint upserts health exports into SQLite; a readiness score weighs sleep, resting heart rate and acute/chronic load against rolling medians and refuses to score with fewer than seven days of data. A stdio MCP server lets Claude read the same database to build training plans.Un endpoint HTTP idempotente hace upsert de los exports de salud en SQLite; un score de recuperación pondera sueño, frecuencia cardíaca en reposo y carga aguda/crónica contra medianas móviles y no devuelve score con menos de siete días de datos. Un servidor MCP por stdio deja que Claude lea la misma base para armar rutinas.

    TypeScript/Node.js/Express/SQLite (better-sqlite3)/MCP SDK/zod/PWA

  5. A Node server scans project folders into office sectors, maps tmux sessions running Claude Code to characters, and streams each session to the browser over WebSockets with node-pty. It turns several parallel agent sessions on one server into something you can see and drive from any device on the VPN.Un server Node escanea las carpetas de proyectos y las convierte en sectores de la oficina, asocia sesiones de tmux con Claude Code a personajes y transmite cada sesión al navegador por WebSockets con node-pty. Convierte varias sesiones de agentes en paralelo en un mismo server en algo que se ve y se maneja desde cualquier dispositivo de la VPN.

    Node.js/WebSockets (ws)/node-pty/tmux/Three.js/Claude Code

  6. ESP32-WROOM-32 with an I2S MEMS microphone, a 16x2 LCD and a mechanical key switch, housed in an OpenSCAD enclosure with two variants exported to STL. The landing page uses a dependency-free canvas 2D engine (isometric projection, painter's algorithm, backface culling) to assemble the nine parts as you scroll.ESP32-WROOM-32 con micrófono MEMS I2S, LCD 16x2 y switch mecánico, en un gabinete OpenSCAD con dos variantes exportadas a STL. La landing usa un motor canvas 2D propio sin dependencias (proyección isométrica, algoritmo del pintor, backface culling) que arma las nueve piezas al hacer scroll.

    ESP32/OpenSCAD/Canvas 2D/JavaScript/HTML/CSS

    UX-1 landing page: the product name in large type, a one-line pitch and price.
  7. Certificates are requested from several provincial and municipal registries, each reporting status in its own jargon. The app stores the raw string and maps it to a plain-language meaning and next action, with drag-and-drop boards and a command palette. Built as a sales demo with fictional data, documented in Mintlify.Los certificados se piden en varios registros provinciales y municipales y cada portal informa el estado en su propia jerga. La app guarda el string crudo y lo traduce a qué significa y qué hacer, con tableros drag and drop y paleta de comandos. Hecha como demo comercial con datos ficticios y documentada en Mintlify.

    Next.js 16/TypeScript/Tailwind v4/shadcn/ui (Base UI)/dnd-kit/Playwright/Mintlify

    Escribanía demo dashboard with fictional data: certificates at risk, upcoming signings and deeds in progress.
  8. Next.js PWA fed by a public live sports API with match stats, lineups and goals, kick-off times in the viewer's timezone, and a knockout bracket resolved provisionally from current standings under the new 48-team format.PWA en Next.js alimentada por una API deportiva pública en vivo con estadísticas, alineaciones y goles, horarios en la zona del usuario y llaves que se resuelven provisoriamente desde las posiciones actuales con el nuevo formato de 48 equipos.

    Next.js 15/React 19/Tailwind CSS/PWA/Supabase/Vercel

    World Cup 2026 app home: the final, the last result and the top scorers table.
  9. One prompt per agent, coordinated by an orchestrator, with a learnings file built from the channel's own metrics that overrides the general manual. Visuals are HTML compositions rendered to video, music is generated locally with MusicGen on the GPU, and voice-credit use is budgeted per video.Un prompt por agente coordinado por un orquestador, con un archivo de aprendizajes armado a partir de las métricas del propio canal que pisa al manual general. Las imágenes son composiciones HTML renderizadas a video, la música se genera localmente con MusicGen en la GPU y los créditos de voz se presupuestan por video.

    • The first approved video reached 4,205 TikTok views.El primer video aprobado llegó a 4.205 vistas en TikTok.

    Claude Code agents/HyperFrames (HTML to video)/ElevenLabs/MusicGen/PyTorch/ffmpeg

  10. Unit Leads queries Overpass by sector and area, deduplicates and exports leads, and can take a product URL, have a local model infer which sectors would buy it, and write a cold-call pitch. Unit Casas finds lodgings with weak websites, scores the opportunity, suggests a price by country and size, and produces before screenshots, a rebuilt demo with their own photos and a draft email.Unit Leads consulta Overpass por rubro y zona, deduplica y exporta leads, y puede tomar la URL de un producto, dejar que un modelo local infiera a qué rubros venderlo y escribir un pitch de llamada en frío. Unit Casas encuentra alojamientos con webs mejorables, puntúa la oportunidad, sugiere precio por país y tamaño y genera capturas del antes, una demo rehecha con sus fotos y un borrador de mail.

    • The LLM runs locally; scraped pages never leave the server.El LLM corre local; las páginas scrapeadas no salen del server.

    Node.js/OpenStreetMap Overpass/Ollama (qwen2.5-coder)/Playwright/systemd

  11. Same strategy code drives backtests and the live loop: a dynamic universe by volume and volatility, momentum and breakout books, and inverse-volatility allocation learned every Monday. Runs hourly in paper mode with simulated fees and slippage; it refuses API keys with withdrawal rights and stops everything after a 30% drawdown.El mismo código de estrategias corre los backtests y el loop en vivo: universo dinámico por volumen y volatilidad, libros de momentum y rupturas, y reparto por volatilidad inversa que se aprende cada lunes. Corre cada hora en modo paper con comisiones y slippage simulados; rechaza keys con permiso de retiro y frena todo ante una caída del 30%.

    • Mean reversion was dropped after research showed fees ate it on 1h candles.Descarté mean reversion cuando la investigación mostró que las comisiones se la comían en velas de 1h.

    Python/Binance API/systemd timers/HTML dashboard

  12. A small Node proxy caches the city's public vehicle-position API, trims payloads for mobile and infers each bus's heading from consecutive positions since the API doesn't provide it; GTFS data drives line recommendations. Falls back to a demo mode without credentials.Un proxy Node chico cachea la API pública de posiciones de la ciudad, recorta la respuesta para el celular e infiere hacia dónde va cada colectivo comparando posiciones, porque la API no lo da; los datos GTFS alimentan el recomendador de líneas. Sin credenciales cae a un modo demo.

    Node.js/GTFS/Leaflet/MapLibre GL/PWA

Smaller thingsCosas más chicas

  • Unit FinanzasUnit Finanzas

    A multi-tenant finance SaaS we are building for Argentine companies: invoicing, quotes, collections, treasury, CRM and reports.Un SaaS financiero multi-tenant que estamos armando para empresas argentinas: facturación, presupuestos, cobros, tesorería, CRM e informes.

  • unit-docs, a LaTeX document engineunit-docs, motor de documentos LaTeX

    One LaTeX design system for every document we send from Unit: manuals, quotes, proposals, reports, specs and contracts.Un sistema de diseño en LaTeX para todos los documentos que mandamos desde Unit: instructivos, presupuestos, propuestas, informes, specs y contratos.

  • unit-project toolkitunit-project toolkit

    Per-project identity file plus scripts that sync each project's env secrets with a self-hosted password vault.Archivo de identidad por proyecto más scripts que sincronizan los secrets de cada proyecto con un vault self-hosted.

  • 3D building from architectural plansEdificio 3D desde planos

    Interactive Three.js model of a commercial site built from the architect's PDF plans and measured satellite imagery.Modelo Three.js interactivo de un predio comercial armado desde los planos PDF del arquitecto y una foto satelital medida.

  • Shift-handoff panel for a bookstorePanel de turnos para una librería

    Mobile-first PWA where shop staff leave notes for the next shift instead of paper slips.PWA pensada para el celular donde el personal de un local deja anotaciones para el turno siguiente en vez de papelitos.

  • Small household PWAsPWAs chicas para la casa

    Offline-capable PWAs for real household needs: pantry and shopping list, monthly bills tracker, QR tool.PWAs con soporte offline para necesidades reales de la casa: alacena y lista de compras, seguimiento de pagos mensuales y herramienta de QR. codigo-qr.vercel.app

3

EducationFormación

B.S. Electronics Engineering, University of Buenos Aires, in progress. Embedded systems, digital design, computer architecture, C.Ingeniería Electrónica, Universidad de Buenos Aires, en curso. Sistemas embebidos, diseño digital, arquitectura de computadoras, C.

LanguagesIdiomas

Spanish, native. English, fluent for technical discussion and interviews.Español, nativo. Inglés, fluido para discusiones técnicas y entrevistas.

AboutSobre mí

I'm an Electronics Engineering student in Buenos Aires. In December 2025 I co-founded Unit with Manuel Corcos, a two-person software studio. Between the two of us we design, ship and operate everything Unit does: client systems in production, our own products, and the server they run on.Estudio Ingeniería Electrónica en Buenos Aires. En diciembre de 2025 cofundé Unit con Manuel Corcos, un estudio de software de dos personas. Entre los dos diseñamos, construimos y operamos todo lo que hace Unit: sistemas de clientes en producción, productos propios y el server donde corren.

Outside Unit I keep building on my own, and I work best close to the whole system: the product, the model calls inside it, the database under it and the network it sits on. The electronics side shows up too, in a one-button voice recorder built on an ESP32 and a health wearable I'm designing from the board up.Fuera de Unit sigo construyendo por mi cuenta, y trabajo mejor cerca del sistema entero: el producto, las llamadas al modelo que tiene adentro, la base de datos de abajo y la red donde vive. La parte de electrónica también aparece, en una grabadora de voz de un botón hecha con un ESP32 y en una pulsera de salud que estoy diseñando desde la placa.

I'm looking for remote roles building AI agents or full-stack products.Busco puestos remotos construyendo agentes de IA o productos full-stack.

ToolboxHerramientas

LLMs and agentsLLMs y agentes
Claude Agent SDK, MCP servers and tools, tool calling, RAG and semantic search, embeddings, local inference with Ollama, prompt caching, Anthropic / OpenAI / Google
LanguagesLenguajes
TypeScript, Node.js, Rust, C, Python, SQL
Data and backendDatos y backend
PostgreSQL, pgvector, Supabase (RLS, auth, migrations), Redis, REST, SSE streaming
Frontend
Next.js, React, PWA and offline-first, OAuth, role-based access controlNext.js, React, PWA y offline-first, OAuth, control de acceso por roles
InfrastructureInfraestructura
Linux, Docker Compose, Caddy, systemd, WireGuard, Matrix/Synapse, LiveKit, Vercel, GitHub Actions, GPU inferenceLinux, Docker Compose, Caddy, systemd, WireGuard, Matrix/Synapse, LiveKit, Vercel, GitHub Actions, inferencia en GPU

4

ContactContacto

Email is the fastest way to reach me.El mail es la forma más rápida de contactarme.

lucaspignataro@proton.me