Muhammad Ibraheem.
Full-stack & AI engineer — Lahore, PK

AI systems that hold up after the demo.

I build and ship production software solo — retrieval pipelines, FastAPI backends, and the unglamorous correctness work that stops a system from quietly returning the wrong answer. Two SaaS products built end to end, from schema to billing.

Muhammad Ibraheem
Open to work
FocusBackend systems and applied AI — pipelines that run unattended.
Core stackPython · FastAPI · PostgreSQL · LangGraph · Next.js
ShippedTwo live SaaS products on paid plans — built solo, front to back.
StudyingFinal-year Computer Science, UET Lahore.
Selected work

Two things I built, and what was actually hard about them.

01 / LIVE — WIZENEWS.COM

WizeNews

Visit site ↗

What it does

A subscription AI news product. Every night a pipeline pulls from six live sources — arXiv, GitHub, HuggingFace, RSS, Google News, Tavily — deduplicates, ranks by importance, and publishes 120 stories across nine fields by morning.

Each story is written twice: a technical version for engineers and a plain-English version for everyone else. Technical terms get explained inline from a RAG knowledge base, and every claim passes a verification stage before anyone reads it.

What was hard

Multi-stage LLM pipelines fail partially. A normal backend either returns 200 or throws. This one would publish a confident, well-formatted story built on a stage that had quietly come back with nothing useful — no error, no crash, just a wrong article on the site by morning.

So most of the work went into making failure visible: tracing every stage, deciding per stage what falls back and what hard-fails, and moving the ungrounded-claim removal off the model entirely once I found it was rewriting unsupported sentences instead of deleting them.

PythonFastAPILangGraphQdrantRAGRedisPostgreSQLNext.jsTypeScriptPaddle billingDockerVercel
02 / LIVE — WIZEDRAFT.COM

WizeDraft

Visit site ↗

What it does

Report drafting for independent insurance adjusters. During catastrophe season an adjuster inspects eight properties a day, then spends two to three hours writing up each one. WizeDraft turns that into about fifteen minutes of review.

They upload an Xactimate estimate, the policy PDF, and their photos and voice notes. Five stages run in the background — parse, analyse photos, read coverage, cross-reference, draft — and it returns a complete report in the adjuster's own voice, with their license number in the header.

What was hard

Coverage decisions have to cite the policy word for word. A model that paraphrases insurance language instead of quoting it produces a document that reads fine and is legally worthless, and nothing in the output tells you which one you got.

So the citations never come from generation. They're extracted and matched against the source document, and the estimate line items are cross-checked against what the photos actually show before anything reaches the draft. Every stage validates before it passes anything on.

PythonFastAPILangGraphGemini 2.5 Flash (vision)QdrantRAGPDF generationPostgreSQLNext.jsTypeScriptDockerVercel
How I work

Five questions before I call anything done.

Most of what breaks in production isn't wrong code. It's correct code that nobody asked the awkward questions about.

1

What if the input is empty or missing?

2

What if two of these run at the same time?

3

What if it fails halfway through?

4

What if it's a thousand times bigger?

5

Can someone who isn't me read this?

Question two catches the most. An order endpoint of mine passed every test, then oversold fifty units the first time I fired fifty concurrent requests at it — fifty successful responses for stock that didn't exist.

Stack

What I reach for.

Backend

  • Python
  • FastAPI
  • SQLAlchemy
  • PostgreSQL / SQL
  • Redis

AI engineering

  • LangGraph
  • LangChain
  • RAG pipelines
  • LangSmith
  • Claude Code

Frontend

  • Next.js
  • TypeScript
  • React

Ship & run

  • Docker
  • CI/CD
  • Git
  • Vercel
Contact

Available for backend and AI engineering work.

Remote, full-time or contract. If you have a system that's misbehaving under load or a pipeline that keeps returning almost-right answers, that's the kind of thing I like.