Founder @ R21 Digital · Arizona + Puerto Rico · US Citizen · Bilingual EN/ES
Open to Forward-Deployed, Applied-AI, and Solutions Engineering roles — remote.
- Agent infrastructure. A self-hosted fleet of autonomous agents, each on its own least-privilege identity, routed across Claude, GPT, Gemini, and Groq per task for cost and latency. Failed steps degrade instead of cascading.
- MCP servers. The tools that connect those agents to real systems — EHR data over FHIR, legislative records, game campaign state. Read-only by default, scoped by row-level security, audit-logged where the data is regulated.
- Civic data. Federal and territorial records — FEC filings, FEMA and NFIP claims, USASpending awards, the Congressional Record, SAM.gov contracts — pulled on a schedule and joined into something a resident of Puerto Rico can actually read.
- Mobile. A Flutter app on the App Store since December 2025, built for six targets off one codebase. When a store listing is the wrong answer, an installable PWA instead.
- Full-stack product. Next.js + Supabase + Vercel on the web, Make.com / n8n for automation, AWS where the compliance story requires it.
- AI-search visibility. Schema, llms.txt, citability, and crawler access tuned across production client sites, so the model answering a query can actually reach and cite them.
- Enterprise IT underneath. 15+ years, including HIPAA-regulated systems run under change control. It shapes how I design AI: for audit and real load, not for a demo.
| Project | What it is |
|---|---|
| practice-fusion-mcp | FHIR-first, read-only MCP server for the Practice Fusion EHR. Audit-logged and HIPAA-conscious — every tool call is scoped and recorded. TypeScript. |
| pr-legislative-x402 | Pay-per-call access to structured Puerto Rico legislative data over the x402 agent-payment standard. HTTP API + MCP server. TypeScript. |
| social-triage-agent | Multi-model social-inbox triage. Claude Haiku classifies, a deterministic keyword layer overrides it to force healthcare-safety routing, then DeepSeek drafts in brand voice. The safety layer is deliberately not a model. Python. |
| ftthelper-mcp | Connects Claude Desktop, Cursor, or Codex to Fantasy Tabletop Helper campaigns. Read-only, scoped by Postgres row-level security. Python. |
| hermes-agent_Video-Research-Ingest | Local-first pipeline turning videos and URLs into markdown notes, transcripts, metadata, and frames. Free-first by design — no paid transcription in the default path. Python. |
| ai-engineering-stack | The models, agent infra, RAG, voice, and app stack I actually build and ship with. Field notes, not a link dump. |
Client and product work I own end to end. The code isn't public, but the architecture is mine and I can walk anyone through it.
PRLTA angler platform — Flutter. On the App Store since December 2025, now at 2.5.9. Tournament standings, catch logging, and vessel records for Puerto Rico Light Tackle Anglers. 154 Dart files across 17 feature modules over a shared core: a dependency-injection container, 27 domain services, and a 12-widget component library. One codebase targets iOS, Android, web, macOS, Windows, and Linux; iOS is the one I ship. Crash reports carry a breadcrumb buffer, so a report arrives with the path that produced it, not just a stack trace. Account deletion is built in, because App Review requires it of anything with sign-in.
Fantasy Tabletop Helper — Next.js + Supabase. 1,128 TypeScript files with 390 test files, 116 migrations, three CI workflows. Installable as a PWA from a hand-written 81-line service worker instead of a plugin, because the caching rules are specific to campaign data. Its MCP server is public, above.
CivicaPR — Next.js + Supabase. Public-records aggregation for Puerto Rico: FEC committee spend and independent expenditures, OpenFEMA NFIP claims and coverage by municipio, USASpending federal accounts with period of performance on the island, GovInfo public laws and Congressional Record mentions, and SAM.gov contract awards. Each source is its own scheduled ingest that writes a sync-run row, so a silent upstream change surfaces as a stale run instead of a page that quietly stops updating.
41 production sites on the books, 34 of them on Vercel, the rest mid-migration. Transactional mail on AWS SES. Uptime and platform drift come from a canary that measures the live response headers, so the registry can contradict me — and has. I learned most of what I know about designing for failure by being the one who gets paged.
Merged into Effect (#7154, #7166) and t3code (#7141, #6223), with #6228 open. Mostly Windows and WSL correctness — the paths that break when the maintainers are all on macOS.
Languages TypeScript · JavaScript · Python · Dart · SQL · PHP
Web Next.js · React · Tailwind · shadcn/ui Mobile Flutter · PWA
Data & backend Supabase · PostgreSQL · Node.js · Laravel
Cloud & CI Vercel · AWS · GitHub Actions · GitLab CI
AI & automation Claude · OpenAI · MCP · Make.com · n8n



