AI Lab

What I build outside the day job. Each experiment starts from a product question: where retrieval fails, when agents should defer to people, how much of an AI system should be deterministic, and what it costs to run.

My most complete prototype, DeviceFlex, is written up in full. Read the case study

ClimaTwin: urban microclimate decision engine

  • Gemini 2.5 Flash
  • BigQuery ML
  • Earth Engine

NebulaX: a self-correcting agent swarm

  • Multi-agent
  • Provider-agnostic LLMs
  • Human in the loop

Microsoft Agents League Hackathon · Reasoning agents

Crosscheck

Hackathon build

An agent that audits a body of enterprise knowledge for contradictions between authoritative documents, citing both sides.

Why I built it

Why do enterprise assistants answer confidently and wrong? Often because two sources quietly disagree, and retrieval grounds in whichever one it fetched.

What I learned

  • Audit RAG by inverting it: extract atomic claims across sources, cluster them, and flag disagreement instead of answering.
  • A grounding guardrail beats a clever prompt: no contradiction is reported without citations from two different documents.
  • Suggested resolutions are labelled as suggestions, with the heuristic shown, never asserted as truth.

Built with

  • Python
  • FastAPI
  • Microsoft Foundry IQ
  • Azure AI Search
  • LLM reasoning

Google Gen AI Academy APAC hackathon

ClimaTwin

Live demo

Urban climate decision intelligence: pick a point in a city, read its microclimate, design an intervention within a budget and simulate the impact.

Why I built it

Climate tools show where it is hot or flood-prone. Could one prove the consequence of a fix before money is spent?

What I learned

  • Prescriptive beats descriptive: the product is the simulation and the budget optimizer, not the map.
  • Label modeled numbers honestly: every figure carries an uncertainty band, cited coefficients and its provenance.
  • Heavy pipelines run at build time (satellite exports, model training), which keeps the runtime cost close to zero.

Built with

  • React 19
  • TypeScript
  • FastAPI
  • Gemini 2.5 Flash
  • BigQuery ML
  • Earth Engine
  • Cloud Run

Independent build

NebulaX

Prototype

A self-correcting agent swarm: describe a research mission in plain language and agents gather, cross-check and reconcile findings into a ranked build plan.

Why I built it

Can an agent swarm surface conflicting data for a person to reconcile, instead of hiding it behind a confidence score?

What I learned

  • Replace opaque confidence scores with a plain Verified / Needs review badge and the number of sources.
  • Make disagreement a first-class object: a conflict shows both sides, and one click records the canonical value.
  • Meter every model run by actual token consumption, so cost is visible product state.

Built with

  • React 19
  • TypeScript
  • Express
  • Provider-agnostic LLM layer
  • Groq · Cerebras · OpenRouter

AMD Developer Hackathon: ACT II · Track 2 · team project

FourCast

Hackathon build· Team project

A containerized video-captioning agent that grounds each caption in what is on screen, writes it in four voices, and judges itself before shipping.

Why I built it

Most captioners fail by hallucinating or by crashing the grading harness. What does a captioner built for reliability look like?

What I learned

  • Ground first: a facts-only scene report is the contract. If it is not visible, it does not exist.
  • Judge with a different model family to avoid self-bias, and refine only when a caption misses the quality bar.
  • Reliability is a feature: atomic writes, per-clip timeouts and deterministic fallbacks keep the output valid.

Built with

  • Python 3.12
  • FastAPI
  • Fireworks AI (AMD-hosted)
  • Kimi K2.6
  • GLM 5.2
  • gpt-oss-120b
  • Docker

Prompt Wars Challenge 4 · FIFA World Cup 2026

MatchDay Ops

Live demo

An explainable GenAI operations platform for stadium volunteers, control rooms and fans with accessibility needs.

Why I built it

Where is a model genuinely necessary? The build answers task by task, and the interface badges which engine answered.

What I learned

  • Use the model only where language needs reasoning (intent, register, translation); thresholds and routing stay deterministic.
  • Every AI output carries a short, human-readable "why".
  • Test the deployed app: Arabic and Hindi tokenize expensively, and a low token limit was silently truncating answers.

Built with

  • React 19
  • TanStack Start
  • TypeScript
  • Gemini · Fireworks
  • Zod
  • Vitest
  • Cloud Run

This site

Hiring Agent

Running on this site

Open the Hiring Agent

Paste a job description: the agent reads each requirement, maps it to evidence from my record, scores the fit, and drafts an outreach email, a calendar invite and a brief for you to approve.

Why I built it

Can an agent do a recruiter's first screen honestly: cite proof for every match and show the gaps instead of hiding them?

What I learned

  • The model perceives, code decides: the LLM reads the job description into a fixed skills vocabulary and writes the brief, while matching and scoring stay deterministic and explainable.
  • Conservative ratings make the score credible. Every skill states its basis, and a role outside my record scores low.
  • Every action is a draft the visitor approves: the email opens in their own mail app and the invite downloads as a file.

Built with

  • React
  • TypeScript
  • Gemini 2.5 Flash
  • Qwen 2.5 72B
  • Rules engine

This site

AI Twin

Running on this site

A résumé assistant that answers recruiter questions from a verified fact sheet and acts on the site: it plays demos, opens pages, drafts email and hands job descriptions to the Hiring Agent.

Why I built it

Can a portfolio answer a recruiter's specific question faster than a PDF, and do the next step for them, without inventing anything?

What I learned

  • Constrain the model to a verified fact sheet and have it say "I don't know" outside it; let it propose actions only from an allowlist.
  • Commands take a deterministic fast path; only open questions reach the model, which keeps answers fast and cheap.
  • Hedge model calls across two providers: the first answer wins, and curated answers cover a full outage.

Built with

  • React
  • OpenAI-compatible gateway
  • Gemini 2.5 Flash
  • Qwen 2.5 72B

Building an AI product, scaling an enterprise AI experience, or figuring out where AI actually creates value?

I work at the intersection of product strategy, AI systems and execution.