Blog
Notes from Muhammad Ahmad, a full-stack and AI product engineer in Lahore: building with React, Next.js, Django, Node and LLMs.
Extracting roof measurements from PDFs with LLMs, and why the model is the smallest partHow we turned EagleView, RoofScope and Hover PDFs into quote-ready numbers for Brava Roof Tile, and why parsing, validation and fallbacks mattered more than the prompt.
An activity log for Django that knows who really clicked, even under impersonationHow we built one audit and activity log for every module of the Brava Roof Tile Pro Portal: the real actor under impersonation, logging from Celery, readable sentences and honest gaps.
Building desktop software for a network that never touches the internetKote is an armoury and asset custody app in use by a unit of the Pakistan Army. No server, no cloud, no updater. Here is how Electron, SQLite and some paranoia make that work.
An offline outbox for photo evidence in React Native, and the bugs it taught meRoof inspectors work where there is no signal. This is the capture-first, sync-later design behind ClaimLayer's field app, the status codes that decide a retry, and three contract bugs worth avoiding.
Grounding AI-written marketing posts in real weather data, without letting the model make things upA daily pipeline that turns National Weather Service forecasts into social posts for contractors. The hard parts were expiry, idempotent runs, a stuck stream, and one rule in the prompt.
How to evaluate text-to-speech voices before you ship themSignal Tank is a small lab for comparing TTS voices on your own scripts. It measures time to first byte and time to complete, keeps the API key on the server, and records clean reference audio for voice cloning.
No-login magic links for field crews: hashed, scoped, revocable, and usable offlineCrews receiving deliveries on a jobsite will not create accounts. Here is how Yardline gives them a single link that only opens one delivery, can be revoked, and keeps working without signal.
SEO for a React SPA without Next.js, and without giving up the 3D homepageMy portfolio opens on a Three.js scene, which a crawler sees as an empty div. Here is how build-time prerendering, a server-rendered blog on Vercel functions and JSON-LD got it to a Lighthouse SEO score of 100.