Three things running right now.
Production systems and the brands around them — not case studies waiting on a rewrite.
RafayGen AI
A multi-provider LLM routing and chat platform. Provider abstraction, token streaming, failover when one upstream stops answering.
↗SPHF
Sindh People's Housing for Flood Affectees, a Government of Sindh initiative. Communications, design and media production for the programme.
↗Multi‑Dimensions
Creative agency brand system and website — tokens, type scale, component library, and the front end that consumes them.
↗Four things, done properly.
The engineering and the design are not separate hires here.
Infrastructure & deploy
Build pipelines, containers, and hosting that survive a Friday. Scaffolding, compiling and deployment for Python, Node, Rust and Go services.
LLM systems
Routing a request to the right provider, streaming the answer back, degrading gracefully when an upstream fails, and keeping the cost visible.
Interface
Design systems and the front end that consumes them — Next.js, TypeScript, Tailwind — with the tokens defined once and used everywhere.
Brand & media
Identity, layout and motion. Decks, campaign assets and video production, for products and for public-sector programmes.
Where things stand.
- Based
- Karachi, Pakistan
- Building
- RafayGen — routing, streaming, deploys
- Open to
- Infrastructure and AI platform work
How this page works.
Worth saying out loud, because most people assume it is WebGL.
The hero is not a 3D scene. It is one pre-rendered video, and scroll position is mapped straight onto video.currentTime. Scroll forward and it plays; scroll back and it runs in reverse, frame for frame.
That is the whole interaction. No engine, no physics, no shader budget — which is why it holds a steady frame rate on a phone while a real-time particle system of the same density would not.
The clip is generated, but not in one shot. It is three takes chained — a portrait breaking into particles, those particles drawing out into fibres, the fibres coiling into a rosette. Each take was seeded from the frame the one before it ended on, so the subject survives all three, and the joins are quarter‑second crossfades rather than cuts.
Two things decide whether it works at all. The video is encoded with a keyframe every three frames, so a seek lands instantly instead of decoding half a second first. And the host must serve HTTP range requests — without them the browser reports an empty seekable range and every seek silently does nothing.