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.jsOpenAISupabaseVercel

A link-in-bio that answers questions about you. Drop your CV, work, projects, and visitors chat with an LLM that actually knows your story.

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

PythonpgvectorClaudeFastAPI

Upload a PDF, ask it anything. Chunked with semantic boundaries, embedded with text-embedding-3-small, retrieved with pgvector HNSW. Genuinely useful for contracts and reports.

Read the build
Live

n8n + Claude Receipt Scanner

n8nClaude VisionSupabaseTelegram

Forward a photo of a receipt to a Telegram bot. Claude Vision 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

AI-powered Code Review Bot

GitHub ActionsClaudeTypeScript

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.jsTypeScriptPythonSupabaseAWSVerceln8nClaudeOpenAIPostgreSQL