jgvilchezc.dev
Available for senior IC roles · Remote— Mérida, VE

I build software withruntime discipline,not better-written prompts.

Typed contracts, isolated subagents, verifiable state. I'm shipping ExpandCast, ProductReel and AgroAsistente solo — founder and lead engineer on all three.

Stack
Next.js · TS · Supabase
Specialty
AI agents · MCP servers
Status
Shipping solo, 2026 — now
Based
Mérida, VE · UTC−4
01 — Identity

José Gabriel Vilchez Carrasquero. AI engineer and fullstack operator in Mérida, Venezuela. I build production SaaS as a solo founder.

I treat AI agents as runtime components, not as cleverness amplifiers. The work runs on spec-driven contracts, deterministic state transitions and test-driven verification. The agent is the implementation. The system is mine.

Next.js 16TypeScriptSpec-driven devContract-based interfacesArtifact-drivenSupabaseFirebaseStripeMCP
jv.
jgvc / 1998
portrait_slot
03 — Experience

Prior role.

2023 — 2026
South Korea · Remote
AI-Integrated Software Engineer · mAI Depot

Built and shipped features for an AI services SaaS: LLM integrations, Stripe billing, Firebase Cloud Functions.

Internal architecture, product detail and metrics withheld under NDA.

04 — Engineering philosophy

Runtime discipline over prompt cleverness.

I treat AI agents as runtime components. They get contracts, isolation, verifiable state, a tool registry, and a documented path back from every failure. Then I own the system end-to-end. Seven practices below, each tied to a shipping project.

  1. 01 — Harness

    Result Contract

    Predictable state transitions. Callback architecture beats polling at the 60-second wall.

    EvidenceProductReel

    Vercel Hobby caps function maxDuration at 60s. Shotstack renders run 40–90s. The pipeline submits and returns immediately. The function never polls. When Shotstack is done, its callback writes the job state to KV — that's the only place the state can change.

    $ submit → 200 → callback
  2. 02 — Harness

    Verify

    Don't close the loop without evidence the work happened.

    EvidenceProductReel

    A render job stays incomplete until Shotstack's callback fires with the MP4 URL. The UI reads state from KV, which is the system of record, not from optimistic client memory.

    $ callback → kv → ui
  3. 03 — Harness

    Permission Boundary

    Storage, network and DB each enforce their own scope. Nothing trusts anything by default.

    EvidenceExpandCast + ProductReel

    ExpandCast runs Supabase RLS, so every row read or write goes through a policy check. The service-role admin client stays strictly behind the server boundary. ProductReel HMAC-validates each Shopify webhook before any pipeline work begins.

    $ rls · hmac · service-role
  4. 04 — Harness

    Subagent Isolation

    One pipeline, many entry points. Each caller hits the same orchestrator under the same contract.

    EvidenceProductReel

    /api/scrape, /api/backfill and /api/webhook all converge on lib/pipeline.ts. The pipeline doesn't know who called it. The contract is the same for all three. Behaviour can't drift between entry points, and there's only one place to fix bugs.

    $ scrape · backfill · webhook → pipeline
  5. 05 — Harness

    Skill Registry

    Capabilities live as explicit, modular sources. Adding knowledge is editing a folder, not retuning a model.

    EvidenceAgroAsistente

    Modular RAG over docs/cultivos, docs/plagas, docs/fertilizacion. External integrations like SoilGrids, MapBiomas and Weather wire into the agent as discrete skills. New domain knowledge ships as a text file.

    $ rag(docs) + skills(soil, climate)
  6. 06 — Harness

    Execution Mode

    Constraints drive technical choices. The market is the spec.

    EvidenceAgroAsistente

    Built for Android phones on 2G/3G in rural Venezuela. No Tailwind to keep the bundle small, native Web Speech instead of Whisper for zero network cost, localStorage queue instead of IndexedDB. The stack is the user's reality, not mine.

    $ 2g/3g · android · pwa
  7. 07 — Harness

    Rollback

    Every failure mode has a documented path back to a working state.

    EvidenceAgroAsistente

    The offline queue flushes automatically when the signal returns. Mid-response streaming cuts surface a 'continue' button. Camera permission denials show a banner with a re-grant path. Failure modes are part of the spec, not an afterthought.

    $ online → flush · cut → continue

Inspired by Alan Buscalas' Agent Harnesses framework.

05 — Skills & stack

The tools I reach for, grouped by where they live in the stack.

Drawn from production projects — Next.js apps, AI pipelines, and the infra behind them.

// Frontend

  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • SASS
  • Framer Motion
  • GSAP
  • shadcn/ui
  • Radix UI
  • TipTap
  • Monaco Editor
  • Three.js
  • Leaflet

// Backend

  • Node.js
  • Rust
  • Tauri
  • Route Handlers
  • Edge Runtime
  • Firebase Functions
  • Zod

// Data & APIs

  • Firestore
  • Supabase
  • pgvector
  • SQLite
  • Sentinel-2 / SoilGrids
  • Redux Toolkit
  • Elasticsearch
  • Axios

// Cloud & Infra

  • Vercel
  • Firebase
  • Azure Functions
  • Upstash Redis

// AI & Automation

  • Vercel AI SDK
  • Claude
  • OpenAI
  • Gemini
  • Groq / Whisper
  • Ollama
  • whisper.cpp
  • HuggingFace
  • OpenRouter
  • AI Gateway
  • RAG

// Tooling

  • Stripe
  • Resend
  • ESLint
  • Prettier
  • Playwright
  • ffmpeg (WASM)
  • pnpm
06 — Contact

Best reached by email. I respond within 24h.

Location
Mérida, VE — UTC−4