sohair@prod: ~/portfolio
sohair@prod : ~ session opened
$ whoamiSohair A. — Full-stack & AI systems engineer
$ cat ./sinceshipping production software since 2014
$ cat ./positioningI build AI that survives production.
$

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

$ cat ./about.md

/**

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

*/

$ ls ./work --production

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

extracting textcitationdeal typevendordeal datasummaryoverlap checkamendment checkredactionhuman QA gateimport

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
Ruby on Rails 7.2HotwireSidekiqPortkeyOpenAIGoogle Drive APIMySQL

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

sync corpusembedvector searchcompose contextgeneratedeliver in Slack

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
PythonFastAPILangChainOpenAIAnthropicPineconePostgresDocker

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

capture audiotranscribescenario contextmodel turnsynthesise voicestream back

in production

  • Full duplex voice loop, tuned stage by stage
  • Scenario state persists across a multi-turn call
  • Provider-swappable transcription and synthesis layers
PythonFastAPILangChainOpenAIElevenLabsSpeech-to-text

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

briefstream plangenerate creativepublish campaignread metrics

in production

  • Ad-platform volatility isolated behind one typed service
  • Token-streamed responses — no blank waiting state
  • Multiple payment providers supported side by side
Next.js 14TypeScriptVercel AI SDKOpenAIReplicateFastAPIStripePaddle

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

uploadparse PDFmeter creditssummarisededuct balance

in production

  • Usage-based billing tied to real model cost
  • One balance across subscriptions and one-time packs
  • Background processing with live progress
Ruby on Rails 7HotwireSidekiqOpenAIStripePDF processingPostgres

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

video frameface detectionanomaly scoringflag session

in production

  • ML workload isolated from the application deployment
  • Independently scalable inference
  • Narrow, testable service boundary
PythonFastAPIOpenCVYOLOv8DockerRails integration
$ cat ./stack.json
{
"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"]}
$ ./contact --all

$ sohair2026 · Lahore, PK · UTC+5