Labs

Things I build to think.

Demos, experiments and open-source projects. Some are shipped, some are sketches, all of them taught me something I now use on real client work.

Open source

SarmaLink-AI

Next.jsTypeScriptSupabaseVercel

OpenAI-compatible multi-provider gateway with 36-engine failover. One endpoint, any model, Groq, Cerebras, SambaNova, Gemini, GitHub Models, Cohere, OpenRouter, and more. Single-provider LLM integration in production is a pager waiting to happen.

Open product page
Open source

MCP Server Toolkit

Python 3.12FastAPIOAuthOpenTelemetry

A production-grade Model Context Protocol server. Plugin architecture, stdio + streamable HTTP transports, OAuth scoped tools, OTel spans across every call. Filesystem, Postgres, GitHub, SarmaLink plugins ship in.

Open product page
Open source

Voice Agent Starter

TypeScriptWebRTCmediasoupFastify

A real-time voice agent loop with sub-second time-to-first-audio. WebRTC capture, mediasoup SFU, Fastify worker, pluggable STT/LLM/TTS adapters. Barge-in handled correctly so the agent feels alive.

Open product page
Open source

Agent Orchestrator

TypeScriptPostgresDrizzleBullMQ

Multi-agent workflows with deterministic replay, durable state, and tool budgets. Postgres event journal, BullMQ step queue, Inspector UI for the live graph and message-level replay. Run agents like payments.

Open product page
Open source

AI Eval Runner

PythonDuckDBFastAPIHTMX

Evals as code. Datasets as files, scorers as functions, traces in DuckDB. Built-in scorers (exact-match, JSON schema, BLEU, ROUGE, LLM-as-judge, rubric). Regression mode fails CI when scores drop.

Open product page
Open source

Local LLM Router

TypeScriptHonoOllamabetter-sqlite3

OpenAI-compatible proxy that routes between local Ollama and cloud LLMs from a YAML policy. Privacy pinning, rolling A/B routing, per-request audit log, sub-millisecond router overhead.

Open product page
Open source

StaffPortal

Next.jsSupabaseTailwindRLS

A small-business staff portal: rotas, payslips, document signing, leave requests. Built to replace three SaaS subscriptions with one self-hosted app.

View on GitHub
Concept

RAG over PDF

PythonpgvectorSarmaLink-AIFastAPI

Upload a PDF, ask it anything. Chunked with semantic boundaries, embedded with a multilingual model, retrieved with pgvector HNSW. Genuinely useful for contracts and reports.

Read the build
Live

n8n Receipt Scanner

n8nVision LLMSupabaseTelegram

Forward a photo of a receipt to a Telegram bot. A vision model extracts vendor, total, VAT and category. Rows land in Supabase, ready for the accountant.

Read the build
Concept

Real-time Presence with Supabase

Supabase RealtimeNext.jsPostgres

A "who else is on this page right now" indicator with avatar fan-out, idle detection and clean disconnects. Around 120 lines of TypeScript and one Supabase channel.

Read the build
Concept

LLM Code Review Bot

GitHub ActionsSarmaLink-AITypeScript

PR opens, bot reads the diff and the changed files, posts a code review focused on bugs, missing tests and security. Tuned to be terse, not chatty.

Read the build
Open source

Webhook to Email Pipeline

Cloudflare WorkersResendReact Email

A single Worker endpoint that receives webhooks, transforms the payload, and sends a typed React Email. Useful for Stripe, GitHub, Calendly: anything with hooks.

Browse the template
Concept

Vercel Cron + Supabase Scheduled Tasks

Vercel CronSupabasePostgrespg_cron

A pattern for scheduled jobs that doesn't lose state when Vercel re-deploys. Tasks live in Postgres with idempotency keys; pg_cron and Vercel Cron run them, retry, and report.

Read the pattern

Let's build something good.

You've got a problem. I solve problems with software for a living.The fastest way to find out if we can work together is to talk.

Stack I build with

Next.js 16TypeScriptPythonSupabasePostgreSQLVercelCloudflareDigitalOceanResendn8nClaudeOpenAITailwind v4