
Full-stack engineer since 2014. I design the schema, build the backend, wire up payments, auth and background work, and ship it — then I keep it running. Lately that means LLM systems built for production: retries, provider failover, human-review gates and audit trails, not demos.
press ⌘K for commands

/**
*The work I do best is end-to-end. I am as comfortable modelling a multi-tenant schema and a Sidekiq pipeline as I am building the React or Hotwire UI on top of it, and I have maintained most of what I have built for years afterward — which is what changes how you write it.
*On the AI side I build document pipelines, retrieval systems, voice agents and streaming chat — designed from the first commit around what happens when the model is wrong, the provider times out, or a job dies at stage nine of fifteen.
*I use AI coding agents daily to move fast, and I review, test and own every line that ships. Agents accelerate the work; they do not get the last word.
*/
6 systems · clients described by sector, architecture shown in full
Legal / contract intelligence
Pulls contract PDFs from Drive and bulk uploads, unpacks nested archives and attachments, then walks each document through a chain of explicit LLM stages — citation extraction, deal typing, vendor identification, overlap and amendment detection, redaction checks.
pipeline
in production
- ›Resumable pipeline with one idempotent job per stage
- ›Bounded retries + 180s timeout + provider failover on every model call
- ›Human review gate blocks the item, never the queue
- ›Live and unattended for over a year
Executive coaching
A Slack-native assistant that answers from a curated coaching corpus rather than from whatever the base model remembers — vector search over embedded source material, with scheduled nudges pushed to users on a cadence.
pipeline
in production
- ›Answers grounded in the client's own corpus, not model recall
- ›Multiple model providers behind one interface
- ›Non-technical team edits content in the tool they already use
- ›Scheduled delivery runs unattended
Sales enablement
Reps practise live sales calls against an AI counterpart: speech in, transcription, a scenario-conditioned model turn, synthesised speech back — a full conversational loop that has to feel like a phone call, not a chatbot.
pipeline
in production
- ›Full duplex voice loop, tuned stage by stage
- ›Scenario state persists across a multi-turn call
- ›Provider-swappable transcription and synthesis layers
Marketing technology
Streaming AI chat that plans campaigns, generates creative, and reads live performance data back out of an ad platform — with two billing providers behind it and a typed service boundary in front of the ad API.
pipeline
in production
- ›Ad-platform volatility isolated behind one typed service
- ›Token-streamed responses — no blank waiting state
- ›Multiple payment providers supported side by side
Academic research
Uploads research papers, summarises them, and bills by word count — one-time credit packs and subscriptions running against the same metered balance.
pipeline
in production
- ›Usage-based billing tied to real model cost
- ›One balance across subscriptions and one-time packs
- ›Background processing with live progress
Assessment / edtech
A computer-vision microservice that watches exam video for face presence and anomalies, called synchronously by the Rails assessment platform that owns the exam session.
pipeline
in production
- ›ML workload isolated from the application deployment
- ›Independently scalable inference
- ›Narrow, testable service boundary
{
"backend": ["Ruby on Rails", "Node", "Python", "FastAPI", "Hotwire", "Sidekiq"],"frontend": ["React", "Next.js", "TypeScript", "Tailwind", "Stimulus"],"ai": ["OpenAI", "Anthropic", "LangChain", "Portkey", "Pinecone", "Vercel AI SDK"],"data": ["PostgreSQL", "MySQL", "Redis", "Supabase"],"infra": ["Docker", "AWS", "Heroku", "Kamal", "CI/CD"],"payments": ["Stripe", "Connect", "Braintree", "Paddle"]}# Open to senior full-stack and AI engineering work. Fastest reply by email.
$ sohair — 2026 · Lahore, PK · UTC+5