AI Developer · Growth Engines for Small Businesses
Get Found. Capture Leads. Grow.
I build Growth Engines that combine SEO, content, AI, CRM and automation to turn online attention into qualified enquiries — and make sure no lead gets forgotten.
1Tell me the problemA message is enough — no brief neededStart
2I map how it works todayWhere the work goes, and where it leaksDiscover
3You see the plan firstScope and timeline agreed before any buildAgreed
4Build and connectSite, CRM and automation as one systemBuild
5It runs, and keeps runningHandover, monitoring and changes as you growOngoing
The Growth Engine
Four stages, and each one feeds the next.
Getting found is worth nothing if the enquiry is never captured, and a captured lead is worth nothing if nobody follows it up. So it is built as one engine rather than four separate services.
01
Get Found
I build the digital foundation that helps your business get discovered and generate qualified enquiries.
02
Create & Distribute
I consistently put relevant content in front of the right audience.
03
Capture & Automate Leads
I turn enquiries from your website and other channels into an organised, trackable sales process.
04
Follow Up & Measure
I make sure opportunities don't get forgotten, and management can see what's happening.
A multi-user CRM: lead pipeline, configurable routing, role-based permissions and custom fields.
Leads, contacts and companies pipeline
Region-based lead routing with alternating assignment and fallback
Role-based permissions with custom field definitions
Client-lock rule with automatic expiry and release
Dashboard and reporting, web push notifications
Stack(10)
Next.js 16 (App Router)
React 19
TypeScript
Tailwind CSS v4
shadcn / Base UI
Server Actions
Supabase Postgres
Supabase Auth + RLS
PWA + Web Push
Vercel
The pipeline screens are rebuilt previews with illustrative records — the live system holds real client data. The configuration screens are real captures; they hold no records at all.
KBS Service Center
A service-complaint tracker for an AV company's repair desk: one shared log per case, closing ticks held by role, and a private thread the technicians never see.
Case numbers issued by a single atomic statement, so two people submitting at once cannot collide
Comments and system events in one timeline, each entry carrying the gap since the last and turning red past the threshold
A case stays Open until the person who raised it and one holder of each required role has ticked it closed
A private thread for Master Admin, Admin and Operations Manager, held in a table the public log never reads
Roles, rights, closing rules and the case-number format all editable in the app, not in code
Installable on phones, with photos downscaled in the browser and attachments served only to signed-in people on the case
Stack(13)
Next.js 16 (App Router)
React 19
TypeScript
Tailwind CSS v4
Server Actions
Zod
PGlite (Postgres in WebAssembly)
Supabase Postgres
Supabase Storage
bcrypt sessions
pdf-lib
PWA service worker
Vercel
Every screen is a real capture of the running app on its demo dataset — the clients, serial numbers and comments in them are invented, because the live instance holds real customer complaints.
SayRead
An offline voice transcription app productised for wall-mounted touch panels: hardware-paired licensing, tap-gated settings and an installer that needs no internet.
Display lock pinning an install to one panel by reading the monitor's EDID over WMI
Argon2-hashed admin password to pair, re-pair and unpair a display
Detection failure treated as unknown, never as mismatch, so the app cannot brick itself
Offline WebView2 bundle and a disabled updater feed for air-gapped customer installs
Rebrand across the icon set and nine locale files, shipped as macOS and Windows installers
Stack(8)
Tauri
Rust
React
TypeScript
whisper.cpp
Argon2
WMI via PowerShell
WebView2 offline bundle
Built on Vibe, the MIT-licensed open-source transcription app by thewh1teagle. The engine, models and UI shell are upstream work. What is mine is the productisation: the kiosk hardware lock, the offline installer and the branded builds shipped to a customer.
Freeze Dance
A camera party game for kids: music plays, the camera knows each child by face, and whoever is still wiggling when it stops is gently called out by name.
Face recognition that runs on an enlarged crop of each tracked body's head, so children far from the camera are still named
Names held on a body while the child faces away, and carried over when tracking briefly drops
Wiggle detection from the camera pixels inside each child's outline, ignoring overlap with neighbours and whole-picture exposure changes
Spoken call-outs by name, music synthesised live so it stops on the instant, and a name-in-lights champion screen
Fully offline: pose and face models ship with the app, and faces never leave the machine
Machine-locked licensing with Ed25519-signed keys, shipped as a Windows installer and a universal macOS app
Stack(8)
Electron
JavaScript
MediaPipe Pose Landmarker
face-api.js (TensorFlow.js)
Web Audio API
Web Speech API
Ed25519 (Node crypto)
electron-builder
The video is a promo animation that recreates the app's own interface — no real children appear in it. The screens are real captures from the app on an empty demo profile; the champion's name is a demo name.
30-second promo: the hook, the features, a freeze round and the champion screen.
Pixami
A safety check-in app for people who live alone: they tap once a day to say they're okay, and if they miss their window, the people they trust are emailed to check on them.
One-tap check-in with a ring counting down to the deadline, turning amber near it and red once overdue
Reminder email at three-quarters of the window, alert to up to three contacts at the deadline, and an all-clear when the person checks in again
Each reminder and alert claimed by a single conditional write, so overlapping scheduler runs cannot send it twice
No passwords: a hashed session token in a cookie, and one-time emailed links to sign in on another phone
A daily reminder from the Quran or Sahih al-Bukhari and Muslim: 365 entries, each reference checked against its source
Installable on phones, and runs on free tiers: an external scheduler calls a secret-keyed endpoint instead of a server that never sleeps
Stack(8)
Next.js 16 (App Router)
React 19
TypeScript
Tailwind CSS v4
libSQL / Turso
Nodemailer SMTP
PWA manifest
Vercel
Built to test the idea before launch, so it has no users yet. The screens are real captures from the running app on a demo account; the names and emails in them are invented. The promo video is built from those same screens, with an animated opening scene and an AI voice-over.
41-second promo for TikTok and Reels: the hook, a 48-hour check-in story told with the app's own screens and emails, and the call to action.
Osman and Khadijah Foundation
The website for a family-founded humanitarian foundation in Karachi: six initiatives labelled with their real status, and public records that stay empty until there is something verified to put in them.
Six initiatives, each one typed record: its page, index card, footer link and sitemap entry all follow from it
A status on every initiative, from Planned to Operational, with a timeline of what is done and what is still to come
Impact figures shown as Pending verification until checked against records, never as zero or an estimate
Registration, tax status, bank details and reports held as empty fields, each marked on the page until it is issued
Contact, volunteer, partnership and donation pledge forms, validated in the browser and again on the server, with a honeypot and a per-IP rate limit
Forms that stay closed until there is somewhere to store what people send, so no message is accepted and then lost
Pledges behind a payment provider interface, so a licensed gateway can be added without touching the form
Per-page canonicals, a generated sitemap, and NGO, breadcrumb and FAQ structured data
Stack(10)
Next.js 16 (App Router)
React 19
TypeScript
Tailwind CSS v4
cva + Radix Slot
Framer Motion
React Hook Form
Zod
JSON-LD structured data
Vercel
The photographs are illustrative stock images and do not show the foundation's beneficiaries or services. The foundation is still being established and its first initiative, an ambulance service for Karachi, is not yet operating, so the impact figures are deliberately empty. The forms and donation pledges are built but switched off until storage is connected, and no money is taken on the site.