Compute Engine · ARM VM
Ubuntu on a 2 vCPU / 8 GB Ampere instance. Cron, file locks and shell scripts run the fleet.
I build the layer between the apps a team already uses — phones, inboxes, chat, job software, site cameras — on Google Cloud, Supabase and Vercel, so every call, file and request lands with the person who owns it.
Progress photo posted with battery status
PostedVendor quote read — work order drafted
CreatedSupplier attachment filed with its sender and thread
FiledTask created by hand — announced in Slack
PostedMissed vendor call — sent to the job's owner
RoutedThe 4G battery cameras on each site run account-bound firmware: no desktop client or open-source relay can reach them. So the vendor's real Android app runs on a virtual phone inside a Google Cloud VM, and a script drives it the way a person would.
Ubuntu on a 2 vCPU / 8 GB Ampere instance. Cron, file locks and shell scripts run the fleet.
Android 13 as a Docker container. ADB taps, reads the screen tree and pulls each JPEG off the phone.
scrcpy → websockify → Cloudflare Tunnel. Time-boxed sessions that close before the next scheduled shot.
Battery, data left and the solar forecast decide each camera’s schedule, and Slack says why it changed.
Per-person Gmail consent on internal and external clients, with every token refresh stamped.
Drive and Sheets access through Shared Drive membership — no domain-wide delegation.
A small team runs large construction projects from phones and inboxes. Each of these puts a call, a file or a request in front of the person who owns it.
Reads every conversation across six sources into one evidence-backed record, then routes each open item — a hold, an unanswered vendor, a pricing question — to the person with authority over it.
Each staff member connects their own accounts once; a morning view shows only the items waiting on them, summarized by Claude.
Pick a trade, fill an intake, get a finished Work Order. Drop a vendor's quote in Slack and it pre-fills the form and reconciles the line items.
The site cameras only talk to their phone app, so a virtual Android phone on a cloud VM runs that app and takes hourly progress photos, posted to Slack with battery, stream and data-plan status.
Every file that arrives by email gets a permanent home in the shared drive, with where it came from attached.
A task created directly in ClickUp is announced in Slack within about fifteen minutes instead of the next morning.
Scrapes municipal portals for open housing and land-development RFPs and keeps a live board of what is still biddable.
Broker replies and listing PDFs land in a shared deal tracker automatically, ready for underwriting.
GoHighLevel fires a webhook on contact creation, n8n receives it, Claude writes a personalized email, and the result posts back to the contact record — no manual step.
Scrapes Google Maps, scores each business by its online presence, and drafts outreach with AI — daily, on a cloud VM.
An owner drops in their URL and gets an AI-written audit by email within minutes. Webhook → PageSpeed + scraper → Claude → Gmail → Sheets → Telegram.
Retail, piggery, water refilling and café builds on one configurable core. One paying customer, one tester.
Transcribes booking calls with Deepgram and pulls the reservation into structured data with Claude.
Pings client sites every 15 minutes and alerts only on a real status change, logging response times.
Construction & real-estate developer · remote
Building the operations system for a small team running large construction projects from phones and inboxes.
Founders and small businesses
Point-of-sale systems, multilingual storefronts, web3 front-ends and AI automations.
Read first, write later — and never pretend a source is complete when it isn't.
Before writing code I trace where requests arrive, who answers them, and where they get lost — calls, inboxes, chat, the job software.
Each integration starts by reading and recording. Writes come later, behind explicit rules about who is allowed to change what.
Every run leaves evidence. If a source is incomplete, the system says so instead of pretending.