Waigs
Applied AI Engineer

WaigsI build production
LLM systems.

Orchestrators, queues, webhooks, evals — the engineering layer between a foundation model and a user who actually depends on it.

← 22.15w-mark / v1.0→ 53.53
cursor / parallax-active◇ trackingz: 0 / 0 / 0
← Portfolio · 2026Scroll for case studyLondon / Remote
§ 01 — Case study

An LLM estimate workflow, end to end.

Host My Nest · 2026 · Solo buildLead → estimate → WhatsApp, in under 30 seconds.

A short-let management company was hand-quoting every inbound lead. I built the system that turns a website form submission into a Claude-generated estimate delivered over WhatsApp Business — with idempotency, parallel data fetches, signed webhooks, and an async worker tier that survives the model misbehaving.

Latency
~ 28s p50
Surface
Lead → WhatsApp
Model
Sonnet 4.6

arch / estimate-workflow.v1

last-deploy · 2026.05
Scroll horizontally to explore
Ingress · VercelLead formmarketing sitePOSTNext.jsorchestratorOrchestrator stageZod schemavalidate · normalizeIdempotency keyx-lead-id · 24h windowSupabasepersist lead rowZoho CRMcontact upsertPriceLabscomp ratesparallel · Promise.allHMAC-signed webhookafter() · sha256 · timestampVercel after()200 OK · < 1sWorker tier · DigitalOcean dropletFastifyverify HMACBullMQqueue + retriesRedisWorkerprompt buildClaude Sonnet 4.6structured outputTwilioWA templateCustomer surfaceWhatsApp Businessestimate · template msgInbound replycustomer respondsRedis cooldowndedupe · 5min TTLAuto-ack"we'll be in touch"Slack #ai-alertsfailures · DLQ drainson failure / DLQw · estimate workflow · v1.0solid = sync · dashed = internal · signal = signed/LLM
sync request internal / async signed or LLM hop service / node
§ 01.2 — Tradeoffs

Three choices I made on purpose.

01 / 03Messaging
Template vs. free-form

The first outbound goes as an approved WhatsApp Business template so it can legally land outside the 24-hour session. We give up creative copy to gain guaranteed deliverability — the model fills slots, not paragraphs.

02 / 03Hand-off
after() vs. queue-only

Vercel's after() hook lets the orchestrator respond instantly while the heavy LLM call runs out-of-band. We still queue on the droplet — after() is the bridge, not the worker. Crash-safety via BullMQ retries.

03 / 03Hosting
Droplet vs. serverless

A single DigitalOcean droplet running Fastify + Redis beats a cold-starting Lambda for 90-second LLM jobs. Persistent connection pools, no per-invocation billing surprise, and we own the queue.

§ 01.3 — Stack

Tools in use.

stack ↓
Surface
  • Next.js 15 · App Router
  • Zod 3 · request schema
  • Vercel after()
Worker
  • Fastify 4 · TypeScript
  • BullMQ · job retries + DLQ
  • Redis 7 · cooldown + queue
  • DigitalOcean · droplet
Data & integrations
  • Supabase Postgres
  • Zoho CRM · Bigin
  • PriceLabs · comp rates
  • Twilio · WhatsApp BA
Model & ops
  • Claude Sonnet 4.6
  • Anthropic SDK · streaming
  • Slack webhook · alerts
  • HMAC sha256 · signing
§ 02 — About

I work in the gap between model and product.

✕ Note

I'm Waigs — applied AI engineer, 16 years shipping software, the last three on LLM systems end-to-end. Background in distributed backends; current obsession is making models feel like reliable infrastructure to the people calling them.

I move fast as a solo build and integrate cleanly into existing teams. I prefer boring infra and ambitious product behavior over the other way round.

§ 03 — What I do

Five things I do unusually well.

01LLM orchestrationMulti-step model pipelines: tool use, structured output, streaming, fallbacks. Anthropic SDK, OpenAI SDK, MCP.
02Async infrastructureQueues, workers, retries, dead-letter handling. BullMQ + Redis on plain hardware when serverless is wrong.
03Webhook securityHMAC signing, idempotency keys, timestamp windows, replay protection. The parts of integration that bite later.
04Prompt & template engineeringStructured prompts, slot-filling, WhatsApp Business templates, JSON-mode contracts that survive model upgrades.
05ObservabilityTraces, eval harnesses, Slack alerts on DLQ drains. You can't ship what you can't measure.
§ 04 — Contact

Building something AI-native?