17systems built and running today
6AI engines — reading, images, voice, video analysis, mail drafting, and a customer-facing assistant
2subscription products with their own users, billing and tenancy
1multi-tenant platform the business modules run on

AI systems

6 systems

Customer-facing assistant

Gemini on VertexPHP 8MySQLWhatsApp Business

Answers a company's customers around the clock and takes an enquiry properly, without a person watching the inbox.

  • Answers only from the company's own material — it cannot wander off into invented claims
  • Takes an enquiry only after the visitor explicitly agrees, and never asks twice for a detail already given
  • Same channel on the website and on WhatsApp
  • I attacked it deliberately: every fault found was fixed, then replayed to prove the fix held
The problem it solves

Enquiries arriving at night or at the weekend used to sit unanswered until someone opened the inbox. The risk with automating that is worse than silence — an assistant that invents a price or files the wrong details damages trust. This one answers from the company's own words and confirms before it acts.

Reading engine (OCR)

PythonGemini Pro/Flashobject storageReact reader

Turns photographed or scanned pages into text that can be read, searched and quoted. No per-language rules and no training per document.

  • Pages are cropped so no line is ever cut in half
  • Two readers work on the same page independently and their answers are compared
  • Where they disagree, the line is queued for a person instead of being quietly published wrong
  • A reader interface that keeps every line tied to its place in the original
The problem it solves

Printed archives that nobody can search, because typing them out by hand is not a realistic job. Ordinary OCR fails on anything old, ornate or non-standard, and worse, it fails silently. Here every uncertain line is flagged rather than guessed.

Image engine

Gemini 3 Pro ImageVeo 3.1object storageReact

Produces publish-ready images and video that match a defined look, instead of generic AI pictures.

  • Each channel has its own written look, and the system writes prompts to that look
  • A person approves the prompt before anything is generated
  • Which models actually work is established by testing them, not by reading the documentation
  • Finished files land in storage with a viewer built in
The problem it solves

AI images usually look like AI images — inconsistent, off-brand, and expensive to keep regenerating. Writing good prompts by hand does not scale past a few. And several models that vendors publish do not answer a real request at all, which you only discover in production.

Mail engine

IMAP / SMTPPHPmodel-drafted repliesMySQL

Connects a real mailbox to the platform: reads the threads, flags the ones waiting on a reply, and drafts the response for a person to approve and send.

  • Reads the mailbox directly over IMAP, so nothing is trapped inside a separate support tool
  • Flags which conversations are actually waiting on you, instead of showing an undifferentiated inbox
  • Drafts a reply from that thread's own history, for a human to approve before anything is sent
  • A sent reply attaches to its existing conversation and never opens a new one
The problem it solves

A support inbox is where small businesses lose customers: a thread gets buried, nobody notices it was never answered, and the customer quietly goes elsewhere. Reading the mailbox and surfacing what is waiting turns that from memory into a list — and the drafting removes the typing while a person still decides what is sent.

Video and thumbnail analysis

PythonFlaskOpenCVvideo understandingpre-trained lip-sync model

Reads a video and its thumbnail as images rather than as metadata, and reports what is actually in the frame.

  • Frames extracted and analysed for content, faces, and the empty space where text can sit
  • Thumbnail composition driven by what the image contains, not by a fixed template
  • Lip-sync served behind an asynchronous job API — submit, poll for status, download the result
  • Chapters and timestamps derived from the video itself
The problem it solves

Creator tools judge a video by its title and tags, which is why their advice is generic. Everything here comes from the actual pixels — and because that work is slow, it runs as a queued job instead of blocking a web request.

Voice engine

Gemini TTSChirp3-HDElevenLabsPHP worker

Turns a written script into finished narration with the exact timing the video editor needs.

  • Pauses are placed exactly where the script asks, inserted by the system rather than hoped for from the model
  • Each channel keeps its own voice and settings
  • A proofreading pass before anything is spoken
  • Produces the timing sheet the edit is built from, in the format the editor already expects
The problem it solves

Text-to-speech rushes, ignores pauses, and gives you no reliable timing — so someone re-times the whole video by ear. Getting the pauses and the timing sheet out of the same pass removes that entire manual step.

Business systems

5 systems

Multi-tenant admin platform

PHP 8.2 APIMySQLReact / Vite / TypeScript

One system a business runs its operations inside: mail with drafting help, support tickets, document reading, media production, cloud usage, and the modules below.

  • Each business is given only the modules it needs; the rest do not exist for it
  • Separate doors for the platform owner, the brand, the customer and a public demo
  • A change cannot ship unless its documentation ships with it
  • Automated checks run on every release, and a failure undoes the release by itself
The problem it solves

Small businesses end up running on a spreadsheet, a mailbox and a WhatsApp group, and every new need becomes another subscription that does not talk to the others. One system with modules granted per business replaces that, without rebuilding it for each customer.

Payout auditor

PHPMySQLbackground worker

Checks that what a business actually paid matches what it agreed to pay.

  • Every payment line is checked against the agreed rate
  • Exceptions are shown first — you look at the disagreements, not the whole list
  • The rates and the rules are data, so it fits any trade without new code
The problem it solves

Businesses that pay per job or per piece calculate those payments by hand, every cycle. Overpayments are quietly absorbed and nobody ever finds them, because checking every line manually costs more than the error.

Prospect finder

Pythonmapping and directory sourcesplatform module

Builds a list of real businesses in any category or country, each with a contact you can actually reach.

  • Sweeps mapping services and trade directories systematically rather than sampling
  • Collapses the same business found in different places into one record
  • Finds a reachable contact — email, or a messaging channel
  • Hands the finished list to the sales screen inside the platform
The problem it solves

Bought contact lists are stale and mostly wrong. The alternative is somebody spending weeks copying names out of directories. This does the sweep and the deduplication, so the human time goes into the conversation instead of the list.

Payment routing layer

PHPsix payment gatewayssigned webhooksMySQL

One checkout that can send a payment through any of six providers, so a business is never tied to a single one.

  • Six gateways behind one interface — Stripe, PayPal, Paddle, Razorpay, PayU and Cashfree
  • A separate signed webhook handler per provider, so one provider changing its format cannot break the others
  • Which provider handles which payment is configuration, not code — it can change without a release
  • A test path for every gateway, exercised before real money moves through it
  • It is the live checkout behind my own subscription products, not a demonstration
The problem it solves

A business on a single payment provider is stuck when that provider raises its fees, refuses a country, or fails during a sale — and switching later means rewriting checkout and every webhook. Here the provider is a setting.

Statement-to-ledger connector

GoPythonaccounting-system XML interfaceOS key store

Takes a bank statement and posts it into the accounting system as classified entries, without anyone retyping it.

  • Reads the statement, classifies each line, checks the running balance as it goes
  • Posts directly into the accounting software over its own interface
  • Runs on the customer's machine; keys stay in the operating system's key store
  • A repeat run cannot post the same entry twice
The problem it solves

Every month somebody retypes hundreds of statement lines into accounting software. It is slow, and a typo becomes a wrong set of books that someone later has to find. Proven on a real company file: 1,319 rows posted with no errors and the closing balance matching the statement.

Platform work

2 systems

Social analytics product

PHPMySQLplatform APIsGemini Visionobject storage

A subscription product that tells an account owner what is actually working, by looking at the content itself and not only the counts.

  • Reads the published posts, not just the numbers attached to them
  • Keeps working when an outside data source goes down, by falling back to another
  • Sign-in, entitlements, billing and customer separation built once and shared by every product on the platform
  • Python services behind the dashboard do the analysis work; the web application calls them over HTTP
The problem it solves

Platform statistics tell you what happened but never why, so owners either guess or pay an agency monthly for a report. Outside data sources are also unreliable — most of the time something is failing — so anything built on one source alone stops working without warning.

Creator analytics product

PHPpublic video platform APIGemini video understanding

A second product for video creators, sharing the same sign-in and billing: it watches the video rather than reading its title and tags.

  • The model actually processes the video, which is what competing tools cannot do
  • Access credentials are pooled and rotated on the server, never exposed to the browser
  • Dead or exhausted credentials are detected and skipped at the moment of the call
  • Fails fast with a hard time limit instead of hanging a page
The problem it solves

Creator tools judge a video by its metadata, which is why their advice is generic. And any tool built on a public API dies the moment its quota or credentials run out — here that failure is absorbed before a user ever sees it.

Infrastructure

4 systems

Cloud project pool

GCPIAMquotasPython

Keeps AI work running when a cloud project hits a limit, gets suspended or loses funding.

  • One file lists every project; every service reads that file instead of hard-coding its own
  • Work rotates across projects with cool-down periods
  • Failures are named rather than lumped together — billing off, account suspended, quota exhausted
  • A prober tests every project on demand and reports which are genuinely serving
The problem it solves

When one cloud project stops serving, everything built on it stops with it, and the error says nothing useful. Scattering project names through a dozen scripts means a dead project hides for days. One declared list, and a way to test it, turns that into a two-minute check.

GPU render machine

GCE g2-standard-32NVENCFFmpegidentity-aware access

Renders finished video quickly, inside a security policy that forbids the machine having a public address.

  • No public address and no open internet path — reached through identity-based access only
  • Hardware video encoding matched to the exact driver build that supports it
  • Batch rendering that cannot silently drop back to one-at-a-time
The problem it solves

Video rendering on a workstation takes a night per video. Moving it to a GPU machine usually means opening that machine to the internet, which the security policy did not allow — so it had to work with no inbound path at all.

Grounded publishing pipeline

Gemini 3.1 Pro with search groundingPythonCDN

Takes a brief to a published article, with a check at each step so nothing unverified goes out under someone's name.

  • Every figure and price is checked against a dated source before the text can proceed
  • Images are generated to the article's own design and approved before use
  • One command publishes: pages, images, sitemap, cache clearing and search notification
The problem it solves

AI writing confidently states prices that changed a year ago and recommends products that no longer exist. Publishing that under your own name is the real risk, so the pipeline refuses to pass a figure it cannot source.

Server operations

cPanel/WHMApachePHP-FPMMySQLCDNfirewall

Ran the servers all of this lives on, including a complete move from one server to another.

  • The restore was tested before the switch, not after
  • Databases mapped first — the standard transfer would have moved the files and left the data behind
  • Caching, DNS and firewall managed through their APIs rather than by hand
The problem it solves

Most migrations are discovered to be broken after the old server is gone. Testing the restore first turns a cut-over from an event into a formality.

Operating principles

  1. Measure before claiming

    A test set, a replay harness or an automated check exists before anything is called finished — and every number I state says exactly what it measures.

  2. Gate the model, never trust it

    Language models state wrong things confidently. Every pipeline I build has a check in front of the part that would publish, pay or post.

  3. Fail visibly, not silently

    A system that quietly produces a wrong answer is worse than one that stops. Uncertain results are queued for a person; failures are named, not swallowed.

  4. Ship small, documented

    Changes go out in small pieces with their documentation attached, and an automated check can undo a release without me.

  5. Own the whole path

    Product, backend, frontend, infrastructure, AI and content. The work has been solo so far; the practices above are the ones that survive a team.

Stack

LLM
Gemini 3.x (textimageTTSVeo) on Vertex AIOpenAI & Anthropic APIstool and function callingstructured outputsRAGevaluationred-teaminggroundingMCP
Languages
PythonPHP 8TypeScript / React / ViteGoBashSQL
Python services
FlaskFastAPIOpenCVasynchronous job APIs with status pollingheadless Chrome (Puppeteer) for PDF and screenshot rendering
Data & infra
MySQL / MariaDBSQLiteREST and webhooksGCP (Compute, IAM, quotas)Cloudflare API and R2Linux / cPanel / Apache / PHP-FPMFFmpeg / NVENCtag-based releases
Integrations
StripePayPalPaddleRazorpayPayUCashfreeWhatsApp BusinessInstagram GraphYouTube Data APILinkedInaccounting-system XMLIMAP / SMTP

Working together

Employment through an EOR

Full-time, employed compliantly in India through Deel, Remote.com, Oyster or your existing provider. You get an employee; I handle nothing but the work.

Contract

Invoiced through my US entity, Media Experts LLC, or my Indian entity — whichever your finance team prefers.

Hours

India (IST). Full overlap with UK working hours and US-East mornings; later PST overlap by arrangement. Available to start immediately.