24.4539° N · 54.3773° EAbu Dhabi--:--
Click the Book to Open My Work

Abu Dhabi · United Arab Emirates

Ahed Balouk

Technical Product & Operations Lead. I build the systems a business runs on, and the marketing that fills them. My first job title was Marketing and IT Specialist, and I have never really separated the two.

+971 54 548 0548 · ahed@xiilabs.com

About

Five years of property campaigns in Abu Dhabi taught me where marketing actually breaks: leads going cold overnight, listings that never reach the portals, and nobody able to say which spend produced which sale. So I started fixing those problems by building the systems instead of filing tickets about them.

Since March 2026 I have led technology and marketing operations at Luxury Facilities, part of M&M Group: the membership CRM the company runs on, a brokerage CRM used by two agencies, a seven-language property portal, the lead pipeline and the campaigns that feed it. Alongside that I built AD Atlas, a map of Abu Dhabi real estate for brokers, and Architect Prime, the private AI console I run the work from.

Most of it was built alongside AI, run as a small engineering team with rules: one model writes, a different model family reviews, tests have to fail before a fix counts, and nothing touches production without my approval.

Everything I Have Built (99)

Platforms & Products

AD Atlas

Own product · Sep 2026 to Oct 2026 · Live

Abu Dhabi real estate on one map, plus a paid workspace for brokers.

  • 19 developers and 163 published projects in one bilingual catalogue, with developer profiles and a documents library.
  • Explorers built from zero where developers have no interactive map: Ramhan Island with 1,038 plots, 60 floor drawings and a PDF per plot, plus Ohana, Taraf and Fairmont Marina Residences.
  • A 65,430 × 37,754 px master map composited and upscaled with zero geometric shift; a viewer with a 360 renderer written directly in WebGL.
  • Six full developer sales worlds (Aldar, Modon, Bloom, Burtville, Al Jubail and ORA) unified behind one renderer; the largest aligned to within about 1 px.
  • Django platform with 16 apps, 58 models and 582 tests; passkeys, one-device sessions and Ziina payments; 82 releases in two weeks.
  • Since 26 Sep it gained developer worlds gated at the proxy, villa walkthroughs for 1,033 of 1,038 Ramhan villas, an exterior orbit viewer, and a full Man City world with 3D masterplan, tours and walks.

Python · Django · OpenSeadragon · WebGL · Blender · Cloudflare

dwp.ae

M&M Group · 2026 · Live

A seven-language off-plan property portal for Abu Dhabi. dwp.ae

  • EN, AR, RU, ZH, HI, FR and DE with maps, 3D, market transactions, golden visa and mortgage tools, and AI search.
  • Load time 5.4s to 2.5s, accessibility 87 to 100.
  • Traced 1,752 unindexed pages to one cause: all seven locales shipped identical English metadata.
  • Structured data on every project, llms.txt and an AI crawler allowlist.

Next.js 16 · React 19 · Supabase · MapLibre · React Three Fiber · Docker

Content Studio CMS

Half Past XII · client · Sep 2026 to Oct 2026 · Delivered

A white-label CMS: orders, invoices and Arabic tax documents, branded per installation.

  • Orders, invoices and credit notes produce Arabic PDFs, with optional two-step sign-in, stock tracking and customer erasure, and a 150-order load test came back gap-free.
  • Load-tested at 150 concurrent orders with no gaps.
  • Began as a private CMS for a storefront client and was made brand-neutral on 8 Oct 2026: a Branding screen takes the name, logo, four colours and two fonts and derives every screen colour from them.
  • Text on the background must reach 7 to 1 contrast, and axe reports no violations across 111 states in six palettes.
  • It ships as a Docker image whose 60 of 60 tests pass inside the container, with a private repository holding one clean commit.

Node · Express 5 · React 19 · SQLite · Docker · pdfkit

TAYA Real Estate

Client · Aug 2026 to Oct 2026 · In production use

A seven-language property site and CRM for a second agency. tayare.com

  • Site adapted from dwp.ae with its own brand and a custom canvas animation.
  • CRM instance with office-network clock-in and module switches; mail moved to a self-hosted server with 12 mailboxes.
  • Listing agents can enter a missing contact number but never change or clear a saved one; the rule is enforced on the server, fails closed on an unreadable user row and also covers owner-link edits.

Next.js · PostgreSQL · Mailcow · Node · React · Docker · Jest

LF Rewards

Luxury Facilities · 2026 · Delivered

Rewards dashboards and booking-engine APIs for travel partners.

  • Role-based dashboards for partner companies and Luxury Facilities admins.
  • Booking-engine integration APIs backed by a real database.

Next.js · Prisma · NextAuth · Tailwind · Vitest

Manchester City Yas Sales World

Own product · Sep 2026 to Oct 2026 · Live

A private 3D sales world for a Yas Island community, with an admin panel and a client-branded shell.

  • One gated site holds the 3D masterplan, 15 home tours, the 12 station park tour and the amenity rooms, with the loader and tab icon restyled for the client and the platform's own pages closed on its host.
  • An admin panel was built to manage unit status, price, enquiries and view counts, with CSV import that runs as a dry run first and applies all or nothing, and status tints on the masterplan.
  • A floor and unit picker for the apartments is designed with position labels only, and 22 typical and 14 eighth floor units are registered on one grid from the brochure key plans.

Django · Python · JavaScript · OpenSeadragon · nginx · Cloudflare · Playwright

Developer World Sites

Own product · Sep 2026 to Oct 2026 · Live

Single-project views of AD Atlas gated at the proxy so access cannot be forged, with a clean takedown pattern.

  • A developer world is a branded view of one project: the proxy sets a per-host header from a server name map, so a client cannot forge it, and a forged header on the main site gets 401.
  • The world opens only the exact documents listed for its project (11 unwatermarked PDFs for the first, 30 downloads an hour per address), hides broker chrome and pins the view to the project.
  • An audit round caught that every download opened the login dialog, fixed by letting world document links through the PDF capture handler; the first world went live on 28 Sep.
  • Takedowns follow one pattern: the host answers 410 behind a reviewed change, DNS and certificate stay, and the old vhost is saved beside the stub.

nginx · Django · Cloudflare · JavaScript · Playwright

Abu Dhabi World

Own product · Aug 2026 to Sep 2026 · Retired

One interactive map for five developers' masterplans: 1,087 views and 30,771 units on a 32,715 x 18,877 px composite.

  • Built on a 32,715 x 18,877 px composite base map: 1,087 views, 625 layouts, 2,188 markers and 526 panorama views, with the Aldar and Modon zones registered onto one 32,768 square at about 1 px.
  • On 10 Aug five developers reached unit exploration parity: 13,340 Modon and Burtville units carried plot paths, giving 8,295 clickable plots, 3,032 apartments on floor plates and 7,863 hit regions.
  • Traps found by measurement: a Bloom plot mask belonged to an oblique render and not the nadir satellite, and tile order is per app, so Al Jubail rendered transposed (seam score 7.89 against 60.63).
  • Two browser suites of 19 and 50 checks gate it; the site was renamed and became AD Atlas.

JavaScript · OpenSeadragon · Python · Deep Zoom · Playwright

RezLive Hotel Booking Integration

Luxury Facilities · Sep 2026 · In development

A hotel supplier API in the CRM's reservations desk and the WhatsApp agent, with booking safeguards.

  • Adapter, staff search fan-out, desk cards and a certification script went into the CRM in a day, with a sibling build in the Arabic WhatsApp agent that books only after a bank transfer is confirmed.
  • Four audit rounds, the first with 9 findings, drove the safeguards: a durable intent row claimed before dispatch, HMAC-signed prebook rate keys, bound check state, and no booking at a loss without approval.
  • Test bookings were made and cancelled at zero charge to prove the flow, and a live run showed the supplier echoes the booking code in the id field, which the identity check had been refusing.
  • Batched search by hotel id (100 per call, 4 at a time) answers 100 Dubai ids in about 3 seconds against a static index of 1.18M hotels.

TypeScript · XML over HTTP · Prisma · PostgreSQL · Next.js · Node

CRM & Operations

LuxFacOS

Luxury Facilities · 2026 · In production use

The membership CRM the company runs on, from first lead to renewal.

  • Lead, application, three-step approval, payment, instalments (2 to 24), agreement, membership card, renewal reminders and commission with clawback.
  • Report builder, visual automation designer with 15 triggers, custom dashboards, activity timelines from 9 sources, signed webhooks, audit log on every change.
  • Role sweep: 22 roles against 352 endpoints, 7,974 checks, 0 failures. 54 recorded design decisions.
  • Payroll console exporting in UAE bank format; PRO government paperwork module with 98.6% line coverage.

TypeScript · Express 5 · Prisma 7 · PostgreSQL 16 · Redis · BullMQ · React 19 · Vite · Tailwind 4 · Docker · GitHub Actions

Dream Wise Properties CRM

M&M Group · Apr 2026 to Oct 2026 · In production use

A multi-tenant brokerage CRM, now running two agencies from one codebase.

  • Tenants isolated by request-scoped context, explicit predicates and PostgreSQL row-level security; passkeys and JWT.
  • WhatsApp inbox with campaigns, drip sequences and AI replies; deals board, viewings, approvals, quotes, invoices, commissions and KYC.
  • Madhmoun permit tracking that unpublishes listings automatically when a permit expires.
  • Replaced Qobrix: contacts deduplicated from 79k to 41.8k, 1,228 IDs rewritten in one transaction, 15,531 photos rehosted with zero failures.
  • 40 roles, 71 permissions; a 649-endpoint isolation harness that found 54 root causes.
  • Driver assignment shipped on 30 September: approved car trips are offered to drivers, who take a trip or hand it back with a private reason, and a manager can assign one from the roster.

Node · Express · PostgreSQL RLS · Redis · BullMQ · WebSockets · React · Vite · PWA

WhatsApp Business Platform

M&M Group · 2026 · In production use

Meta's Cloud API built into two CRMs: live at Dream Wise, ready to connect at Luxury Facilities.

  • Dream Wise: shared inbox and conversations, template sync, queue-backed broadcasts with CSV audiences, and bilingual Arabic and English button flows.
  • Automatic opt-out detection, the Do Not Call register enforced on every broadcast, and an hourly number-quality check that pauses broadcasts when Meta rates the number red.
  • Access tokens and app secrets encrypted with libsodium using a separate derived key per company; signed webhooks processed through a queue.
  • Lead alerts reach agents on an approved template, verified in production. Business-initiated templates never wait on the 24-hour window.
  • Luxury Facilities: 9 Arabic and English templates approved, webhook handshake and signed deliveries verified; the live number connects once Meta completes phone verification.
  • Also set up the Cloud API for a client's personal brand: app, account and a verified number, waiting on Meta's business review.

Meta Cloud API · Node · BullMQ · PostgreSQL · libsodium · Webhooks

Member Phone App

Luxury Facilities · 2026 · In production use

Where members carry their membership: venues, bookings, guest passes and an offline QR card.

  • OTP and card-number login, bookings, venues, guest passes, wallet and push notifications.
  • Membership card with a QR code that works offline.
  • Started as a standalone prototype and merged into the main platform in June 2026.

Expo 55 · React Native · Expo Router · TypeScript

Reservations Desk

Luxury Facilities · 2026 · In production use

Hotel quotes, vouchers, purchase orders and a WhatsApp inbox for the travel team.

  • Quotes and costing, free-night vouchers, special approvals, hotel purchase orders, payments and a follow-up calendar.
  • Tripstick, Locanda, Hotelbeds and RezLive with outage fallback; GIATA hotel mapping with 64 tests.
  • RezLive supplier certification stage 1 cleared; merged into the CRM with single sign-on through a 22-model additive migration.

Next.js 16 · Prisma · PostgreSQL

Digital Partner Agreement

Luxury Facilities · 2026 · Delivered

Partners sign on screen and get a branded PDF agreement by email.

  • Partners enter business details, services and discount ranges, then sign with a drawn signature.
  • Generates a branded PDF and emails copies to both sides; also produces a blank manual version for offline suppliers.

Next.js · React PDF · React Hook Form · Zod · Resend

Portal Feeds

M&M Group · 2026 · In production use

Listings sent to Property Finder and Bayut in the format the portals actually accept.

  • Property Finder API with draft and publish, reconciliation every 3 hours and lead intake every 15 minutes.
  • Bayut XML feed fixed until every listing was accepted.

Node · Cron · XML

Leads Engine

M&M Group · 2026 · In production use

Every enquiry lands in one queue and reaches an agent in minutes.

  • Round-robin rotation with exclusions, SLA timers, quiet hours and a manager queue.
  • Alerts in-app, by web push, WhatsApp template and email.
  • Meta lead ingestion, hourly insights and deal-won conversions sent back through the Conversions API.

Node · BullMQ · Web Push · Meta Graph API

AI & Agents

Architect Prime

Own product · Jun 2026 to Oct 2026 · In production use

A private AI operations console: chat, voice, memory, councils and missions, with nothing sent or spent without approval.

  • Built solo with AI coding agents: about 100,000 lines, zero npm dependencies, 73 merged pull requests in 96 days; 61 skills and 35 agent roles.
  • 7 model seats from 7 providers with data ceilings, a 10-lane router, local voice, and memory over my notes with a 2,001-node knowledge graph.
  • One approval gate for 21 kinds of action, 14 bound to a hash of the approved text; ads always created paused.
  • Hand-built passkeys and one-time codes, revocation in about 33 seconds, CI split across trust levels, 146 suites green.
  • Sign-in now answers with a 60 second shell bootstrap that is promoted only after the new app shell installs, so a slow install cannot leave a signed-in user on a half-loaded console.
  • A release-doctrine test keeps stale claims out of 8 agents, 9 skills and the catalogs: merging deploys nothing, and a release is a manual pull on my go.

Node, zero dependencies · Python · faster-whisper · Kokoro · WebAuthn · WebGL · Ollama · GitHub Actions · systemd

Arabic WhatsApp Booking Agent

Luxury Facilities · 2026 · Delivered

An AI assistant that books hotels in Arabic over WhatsApp and knows when to hand off.

  • Searches and books through RezLive with marked-up pricing; books only after a bank transfer is confirmed.
  • Redeems members' free nights and hands off to a human when needed.
  • Staff inbox and a scenario lab for testing conversations before they reach a member.

Claude Sonnet · Node 22 · Express 5 · BullMQ · Redis · React · Docker

Agent Bench

Own tool · 2026 · In production use

The broker that routes work between AI models, with limits and receipts.

  • Routes by task type and risk to Claude, Codex, Gemini, Cursor, Copilot and a local model.
  • Data ceilings, per-call limits, receipt checks and no silent fallback to another model.
  • One writer per checkout; isolated worktrees for parallel agents.

Node · Python · MCP

Meta Ads MCP Server

Own tool · 2026 · In production use

My own MCP server so AI agents can run Meta campaigns safely.

  • Campaigns, ad sets, ads and audiences through the Marketing API v25.
  • Every write is gated and new campaigns are created paused.

Python · FastMCP · httpx · pytest

Knowledge Vault and Graph

Own tool · 2026 · In production use

A private second brain the AI agents can search.

  • Local retrieval over the vault with Ollama embeddings.
  • A typed knowledge graph exposed to agents through my own MCP server.
  • A property scraper framework with 21 site adapters and 137 tests.

Obsidian · Python · Ollama · Playwright · MCP

Local Image Generation

Own tool · 2026 · Retired

Private image generation on a Mac, built as a service for my agents and since retired for hosted models.

  • FLUX on Apple Silicon through ComfyUI with PuLID identity locking.
  • Asset cleanup pipeline with Real-ESRGAN upscaling and LaMa text removal.

Python · ComfyUI · FLUX · PuLID

NeuralVault GraphRAG Brain

Own tool · Jun 2026 · Internal

A local GraphRAG brain over my notes: entity extraction, communities and a 3D graph I can question.

  • Reads an Obsidian vault of 950 notes, chunks it and extracts entities and relationships as strict JSON, with Claude online or a deterministic offline mode; the stored build used offline mode.
  • Builds a NetworkX graph, finds 19 communities with Louvain and writes a summary for each, then answers by local search over chunks or map-reduce over the summaries, streamed from FastAPI.
  • The front end is a full-screen WebGL graph with nodes coloured by community, a click-through inspector and an Ask your brain chat with a local and a global toggle.
  • Extraction and embeddings are cached by content hash, so a rebuild only pays for new or changed notes.

Python 3.12 · FastAPI · NetworkX · Louvain · Claude API · Voyage embeddings · Vite · TypeScript · 3d-force-graph

Self-Hosted AI Stack on a Mac

Own tool · Jun 2026 · Internal

A local open-source AI stack on Apple Silicon: Ollama, Open WebUI, ComfyUI, OpenHands and self-hosted Firecrawl.

  • Built and verified on an M1 Max with 32 GB: Ollama on Metal, Open WebUI and OpenHands in Docker against the host model server, ComfyUI on MPS, self-hosted Firecrawl and a Transformers environment.
  • Every service binds to loopback only, versions are pinned and logged with lockfiles, and everything except ComfyUI restarts on its own after a reboot.
  • vLLM was skipped on purpose because core vLLM has no Metal backend; the notes record the reason, the fallback and a broken Homebrew Python with its uv workaround.
  • The same Ollama now serves the local seats my other tools use: Hermes 3 8B for bounded summaries, a 14B Qwen for brochure extraction and nomic-embed-text for note search.

Ollama · Open WebUI · ComfyUI · OpenHands · Firecrawl · PyTorch MPS · Docker · uv

Claude Code Automation Layer

Own tool · Jul 2026 to Oct 2026 · In production use

My own agents, commands and hooks that turn Claude Code into a gated engineering workflow.

  • Six subagents encode my conventions: a landing page builder, a CRM developer, a deploy operator, a tracking auditor, a Google Ads CSV builder and a prompt architect.
  • Nine slash commands route work to the right seat: audit, scout, build, intel, research, GitHub, a cross-model opinion, a full pipeline and a seat doctor.
  • Hooks remind me to audit any commit that touches auth, tenant isolation, migrations, payments or deploys, and a launch guard requires an explicit fan-out decision for every Codex run.
  • Routing became the default only after the audit command turned out never to have been written: the seat contracts sat unused for five weeks, so a skipped seat must now be named with a reason.

Claude Code · Bash · Python · jq · Markdown agent definitions · MCP

Audit and Pipeline Runners

Own tool · Jul 2026 to Oct 2026 · In production use

Independent model seats review every risky diff, and a bounded pipeline loops build and audit until the verdict is GO.

  • The pipeline command runs a local build, objective checks and an independent review in a bounded loop of three repair rounds at most; it refuses main and a dirty tree and never pushes, merges or deploys.
  • The seat doctor proves each seat can answer by making it return a canary, not by reading config, after seats that were configured turned out to be silently dead.
  • Audit runners for the Gemini and Cursor seats and a broker grant enforce data ceilings in the reader, log every automatic approval and refuse a grant file that is a symlink or group-writable.
  • Bugs found by running it: a guard that read the flag instead of the label that decides, an alarm a Go CLI ignores (271 s past a 15 s limit) and an approval dialog whose timeout counted as a denial.

Bash · Node · Python · Codex CLI · MCP

Adobe Creative Relay

Own tool · Jul 2026 to Aug 2026 · Internal

Photoshop and After Effects driven by AI agents over MCP, with a relay that accepts creative tasks from my server.

  • Built on an open-source Adobe MCP bridge, I added HTTP servers for Photoshop (62 tools) and After Effects (ExtendScript execution) that launchd keeps alive.
  • A relay takes a creative task from my server assistant over a reverse SSH tunnel, checks a token and runs a local Claude limited to the Adobe tools plus file read and write, with no shell.
  • Photoshop 27 dropped CEP, so the panel became a properly installed UXP plugin; the real blocker was a missing network permission in its manifest.

Node · Python · FastMCP · UXP · CEP · ExtendScript · SSH tunnel · launchd

Session Memory System

Own tool · Jun 2026 to Oct 2026 · In production use

Persistent memory for my AI sessions: dated lessons, daily logs and handoffs that survive every restart.

  • Each memory is a small dated file written after verification and grouped under topic indexes (servers, seats, vault, ads and more), so a new session loads an index first and opens only what it needs.
  • Daily done logs plus now, recent and archive tiers carry state across sessions; a session starts by reading them and reports done, remaining and broken.
  • Many entries record a named failure, such as configured is not working or verify before reporting progress, and they changed how later work was checked.

Markdown · Claude Code memory · Shell hooks

Membership Image Prompt Book

Luxury Facilities · Sep 2026 · Delivered

93 prompts across nine membership tiers with locked visual registers, generated through a batch runner until complete.

  • Each tier has its own locked visual register and an image count scaled to its benefits, from 4 images for the first tier to 18 for the last.
  • A global negative list bans brand names, rendered text, alcohol, revealing dress and real artworks in every prompt.
  • Testing a model first showed a 1264 by 848 output against a 3508 px print need, and a twin-bed bug that prompt patches fixed.
  • A batch runner with a retry loop took the first pass of 77 to a full 93 of 93, with contact sheets per tier and a PDF prompt book.

Nano Banana Pro · Python

3D, 360 & Visualisation

Manchester City Yas 360 Interiors

Own product · Sep 2026 to Oct 2026 · Live

Ten home types toured in 360: 166 panoramas rendered in Blender from brochure plans and matched to the brochure.

  • Each type is a Blender model built from the traced plan raster, with one exact boolean per floor, procedural finishes, a 3D furniture kit and panoramas at 3072 x 1536 on the Metal GPU.
  • The look follows the brochure exactly: scheme 3 used club colours, scheme 4 replaced it with per-type palettes sampled from the brochure pages.
  • Gates caught what the eye missed: garden trees growing through walls into rooms on six of ten types, coplanar faces rendering black in Cycles, and floating furniture found from the depth maps.
  • Released on 30 Sep, then re-released on 2 Oct as v4 with 182 files byte-checked through the CDN edge and browser tests on Chromium (desktop and phone) and WebKit.

Blender Cycles (Metal) · Python · WebP · WebGL · Playwright · Cloudflare

Manchester City Yas 3D Masterplan

Own product · Sep 2026 to Oct 2026 · Live

A Blender 3D masterplan of 914 homes, traced from a flat availability sheet and published as a 32k pixel map.

  • One flat 11,207 x 8,542 px availability sheet was read with tiled Vision OCR at 8 angles plus colour segmentation, giving 911 coded units and 3 canal mansions that Blender rendered plot by plot.
  • A projection gate fails the build if any of the 914 outlines drifts from the sheet by more than 0.5 px; it turned red on a neighbour swap at 132 px and again at 73 px.
  • Version 12 rebuilt every home as its exact brochure type from traced plans, each checked against a brochure aerial page with a matched camera.
  • Photoreal passes ran tile by tile under a 2 px shift gate, invented pools and cars were removed, and the 32k picture went live on 2 Oct as 3,065 tile files (102 MB).

Blender Cycles · Python · Magnific · OpenCV · YOLO · LaMa · OpenSeadragon · Playwright

Ramhan Island Villa 360 Tours

Own product · Sep 2026 · Live

Walkthroughs for 15 villa types of an island community, rendered in Blender from brochure plan rasters.

  • Each villa type is one spec in plan pixels (outline, rooms, doors, windows, stairs, furniture, cameras); 44.7 px per metre fitted the printed room sizes within 12 cm.
  • Gates run in order: printed room sizes within 0.15 m, camera clearance from furniture (it caught 9 of 17 stations on the first pass), wrap seam and exposure checks on the WebP.
  • A machine-wide GPU slot lock keeps Blender inside memory (one final render holds about 8.4 GB of 32 GB); at about 1.8 minutes a panorama, all 15 types finished rendering on 27 Sep at 12:23.
  • Signature villas followed on 29 Sep with 87 stations and 174 panoramas for Grace, Charm (three floors), Spark, Vintage and The One, so 1,033 of 1,038 villas now open a walkthrough.

Blender Cycles (Metal) · Python · WebP · WebGL · Playwright

Manchester City Yas Phase 2 Homes and Masterplan

Own product · Oct 2026 · Live

Five new home types traced into 77 panoramas, and 615 Phase 2 homes added to the 3D masterplan in three waves.

  • The four developer PDFs hold only flat JPEG pages (plans at about 20 to 27 px per metre), so each of five layouts was traced into a Blender spec and gated before any render.
  • A site fit with 950 feature matches placed 615 homes on the Phase 1 sheet: 476 townhouses in 71 row buildings, 48 duplexes and 91 villas.
  • An earlier fit with 36 matches locked onto the academy crest and came out 21 percent too small; checking the inlier spread and the overlay caught it before anything shipped.
  • Wave A (five tours) and wave B (footstep walks, new exterior light) went live on 8 Oct, and the masterplan with 615 tappable homes on 9 Oct, each after independent audit rounds.

Blender Cycles · Python · OpenCV SIFT · Magnific · WebGL · Playwright

Footstep Walk Viewer

Own product · Oct 2026 · Live

A walking mode for 360 tours: footsteps, depth shells and smooth turns over 166 panoramas, shipped in eight releases.

  • The brief was footsteps that match a leading developer's world or better, labelled with where they lead, with smooth zoom and full VR; release 1 went live on 4 Oct with 166 depth maps.
  • Each walk draws a welded depth shell of the model with both panoramas projected on it, one smooth view turn per walk and eased eye height, so the camera moves through real geometry.
  • Release 3 opened 95 of 166 stations with no footstep in view; release 4 added an opening view test that now passes 166 of 166 on desktop and phone before any viewer release.
  • Release 7 re-planned every way through its openings (17 live walks had the eye inside a solid, 0 after) and marked 20 links to dissolve instead of flying through doors and sheers.

WebGL · JavaScript · Blender · Python · Playwright

Manchester City Yas Outdoor 360 Tour

Own product · Oct 2026 · Live

Twelve outdoor 360 stations of a Yas park, rendered in Blender at 8K with a real sun, planting and people.

  • The twelve stations (park arch, dry deck, food hub, amphitheatre, pavilion, BBQ zone, garden, pitch, canal, landmark and two drone views) were modelled from the developer's leaflet and brochure pages.
  • Every frame passes seam, near-black and sun position gates; all twelve were re-rendered with a corrected 0.53 degree sun after reviews sent water, horizon, kiosks and lawn back until they read as real.
  • People are 29 cutouts made on grey and cut with rembg, and the 46 footstep markers were moved off people and plants onto clear ground.
  • Phones load 3072 px panoramas and desktops 6144 px with a two-neighbour preload cap; the tour went live on 10 Oct and a brochure re-match of ten stations is built and waiting to ship.

Blender Cycles · Python · OpenEXR · rembg · WebGL · Playwright

Manchester City Yas Amenity Rooms

Own product · Oct 2026 · In development

Four amenity interiors matched to the brochure and rendered as 8K 360s; two are live and two are in production.

  • The Tactical Room and the Canal Sports Lounge went live on 10 Oct; the Trophy Gallery and Fine Dining rooms are still in review against the brochure before their 8K finals ship.
  • Each room is compared with its brochure view by edge agreement and a mean difference score, then sent back for floor glow, dark areas or model shape; Fine Dining held black below the horizon at 1.5 to 2.8 percent.
  • Trophy and sofa models came from a 3D generator after the first engine was priced at 1,160 credits a model against 3,740 available; four models used about 3,415 credits.
  • Panoramas are 8192 x 4096 with depth maps for the walk viewer, a procedural ceiling oval and board textures, and people placed as cutouts.

Blender Cycles · Python · Magnific 3D · WebP · WebGL

Ramhan Island Map Tiles and Exporter

Own tool · Sep 2026 · Delivered

The island map is a tile pyramid with 184 feathered building tiles, plus a script that exports it at 18,432 x 12,288 px.

  • The map is drawn over a 1536 x 1024 unit space: levels 0 to 3 of 512 px tiles (level 3 is 12,288 x 8,192 px) plus 184 detail tiles at 24x that overlap and are feathered with two linear masks.
  • Reading the site's own CSS showed the masks must intersect, not add; the default would have drawn a union and left visible rectangles.
  • An exporter rebuilds the whole map in 47 seconds at about 10 GB peak memory, writing a 12,288 x 8,192 px PNG in original pixels and an 18,432 x 12,288 px version with building detail.
  • A 36,864 x 24,576 px version needs about four times the memory, so it must be written in strips first.

Python · Deep Zoom tiles · CSS masks

Exterior Orbit Viewer

Own product · Sep 2026 · Live

A scrubbable exterior orbit on villa cards, re-encoded from 4096 px films to 17 MB on desktop and 5.7 MB on phones.

  • A drone circling film per villa type plays behind a slider on the unit card, opened in the existing lightbox with the phone rendition when the device is handheld or saves data.
  • The source films are 4096 x 4096 H.264 at 17 Mbps, too heavy for iPhone decoders; the renditions are 2048 square at 12 Mbps and 1080 at 4 Mbps, with a keyframe every 15 frames.
  • Uncapped quality made 42 to 81 MB files because foliage keeps grain, so the bitrate is capped; an 8 run matrix (4 passes, 4 negative mutants), a 582 test suite and a first round audit GO gated the release.
  • A related fill placed 328 panoramas and 2 models to cover the Yas Riva villas that showed no 360 (39 of 151 had none).

ffmpeg · H.264 · JavaScript · Django · Playwright

Prime Abu Dhabi World

Own product · Jul 2026 · Internal

A local-first 3D Abu Dhabi real estate world on Cesium with 667 projects and Blender concept massing models.

  • React, Cesium and a Node SQLite API over 667 projects from 26 areas; Google photorealistic 3D tiles are streamed and never scraped, and missing data is labelled instead of invented.
  • A per-field provenance guard stops lower trust data from overwriting higher trust data; a five lens adversarial review found 25 confirmed issues, all fixed and regression-tested.
  • A headless Blender pipeline builds concept massing for four flagship projects as Draco GLBs, labelled approximate concept massing because no survey geometry exists.
  • The 21 Jul premium redesign added a warm design system and five flagship fly-tos on top of 67 web-verified projects, with 105 vitest tests passing.

React · TypeScript · CesiumJS · Express · node:sqlite · Blender · Tailwind v4 · Vitest

Architect Prime 3D Character

Own product · Jul 2026 · Internal

A rigged chibi swordsman with 35 bones and 7 animations, rebuilt in Blender after the generator's own rig failed.

  • The shipped GLB has 25 skeleton bones plus 10 coat and sash chains, four 2048 px PBR textures and animations for idle, alert, slash, meditate, greet, success and sleep, verified by a black-box re-import.
  • The generator's own rigger cut the mesh to about 4k triangles and welded the swords to the body, so rigging moved into Blender and the generator became a motion source only.
  • Gates refuse bad builds: a looping action must start in its own pose, joint influences are capped at 4 per vertex for glTF, and meshes are align-tested before UVs or labels transfer.
  • The kit also holds three katana GLBs and single-animation GLBs; sword draw and blink were left out after marching cubes fused the three blades into one solid.

Blender 5.2 · Python · glTF · Three.js

Zero Presence Orb

Own product · Jul 2026 · In production use

A fully procedural WebGL orb that shows an AI assistant's state: a raymarched plasma core in glass, no mesh files.

  • Many looks were rejected first (generated shells read as a gummy pokeball, disco ball plating, unequal petals); the final is a dark transmission glass sphere holding a raymarched plasma core and three gold rings.
  • Motion follows research: idle at 10 percent of max speed, a 9 second breath, decoupled clocks, staggered subsystem response, and a refusal that is the only discontinuity (a 130 ms freeze).
  • Real chat events drive it through a message bridge that carries states, sizes and counts only, never content or names; quality tiers degrade adaptively and a headless snapshot suite checks it.
  • Shipped on 21 Jul as the full AI scene; the gotchas are written down, including bloom turning small saturated points into squares and background tab throttling distorting frame rates.

Three.js · GLSL raymarching · WebGL · Bloom post-processing · Headless Chrome snapshots

ANJI Box Scene

Half Past XII (client) · Oct 2026 · Delivered

The hero box of an Art Nouveau storefront, built in Blender from the client's painting and refined over 17 rounds.

  • The box is a Blender scene built from the painting with no generated video: the cover is the lid plus the upper front panel, one rigid L hinged at the back, and a turn of 150 to 178 degrees stands it up as a screen.
  • Every round is gated frame by frame: a red and blue inside test on all 180 frames (lining showed on 111 at 150 degrees before the inner faces became bare board), a one ink colour gate and handover checks at the tap.
  • Round 14 recoloured every face to the client's green from the reflectance of her final sheet, cut the latch and lid lockup from her files, and made the items rising out cut-outs of the site's own kit photo.
  • Later rounds added a 3D handle and latch and a 13 percent smaller box, with a GPU render path at 2.5 s a frame (22 s on the processor) and the previous pages kept for rollback.

Blender · Python · OpenCV · ffmpeg · HTML

Saadiyat and Yas Ad Scene Set

M&M Group · Oct 2026 · In development

Five Blender scenes of Saadiyat and Yas homes, rendered as square ad variants in English and Arabic.

  • Five scenes with layouts generated by a build script, a pool fix and a regenerated townhouse were iterated through first renders while collisions in three scenes were fixed.
  • Square variants 01 to 05 were generated and checked in English and Arabic; scene 02 was regenerated for lower homes and stronger water and now passes its checks.

Blender · Python

Home Types 3D Viewer

Own product · Oct 2026 · In development

A Three.js viewer to orbit each Phase 2 home type in 3D, baked from the Blender models into light GLB files.

  • Each home type exports from its Blender model as a GLB of about 1.4 to 1.5 MB with 2048 px baked ambient occlusion and diffuse atlases for the house and the ground.
  • The export script groups shell, stair, outdoor and planting collections and assigns glass, metal and stone materials by name rules before baking.
  • Three.js was chosen for home type 3D after comparing a competitor's viewer stack; the prototype offers aerial, front, side, back and close views with drag, scroll and pinch.

Three.js · Blender · glTF · Python

Zero 3D Character Rig

Own product · Jul 2026 · Delivered

A realistic figurine for my AI console's presence, rigged and animated in Blender after the generator's rig failed.

  • The shipped model is 15.3 MB with 35 bones (25 skeleton plus 10 coat and sash chains for secondary motion), 7 animations and four 2048 px PBR texture sets, checked by a black-box re-import.
  • The generator's auto-rigger decimated the mesh to about 4,000 triangles and welded the swords to the body, so it became a motion source only and the rig was rebuilt in Blender 5.2.
  • A re-runnable script pipeline and a diagnosis folder of turnarounds, pose sheets and part atlases document each fix.

Blender 5.2 · glTF · Meshy · Python · PBR texturing

Websites & Experiences

ANJI Storefront

Half Past XII · client · Sep 2026 to Oct 2026 · In development

An Art Nouveau storefront with a 3D box opening and a scroll-driven video story.

  • Gates go beyond Lighthouse: real PC window sizes in English and Arabic, a paper test that keeps copy off ornament, a colour gate on the delivered files and forced dark-mode runs on all 16 pages.
  • English and Arabic, with phone Lighthouse raised from 4 to 92 and every release verified file by file against the client's test host.
  • Seventeen rounds of client feedback took the site from painted plates to a landing box rebuilt in Blender from her own box artwork.
  • Six Ateliers share one frame and are ordered by colour with Lip Balm first, and every picture is checked against her notes whenever a text fact changes, not only the copy.

three.js · Video · HTML · CSS · JavaScript · Blender · ffmpeg · Playwright

Beit Sitti

Half Past XII · client · 2026 · Live

An Old Damascus restaurant courtyard, rebuilt in 3D from a phone video. halfpastxii.tech

  • Courtyard reconstructed from an Instagram reel with Gaussian splats; 47 lamps light in sequence.
  • Lighthouse 100 across the board; 14 real-browser test scenarios and 19 mutations.

React · Vite · three.js · Spark · GSAP · Playwright

Launch Landing Pages

M&M Group · Aug 2026 to Oct 2026 · In production use

18 bilingual off-plan launch pages, each tracked and gated before going live.

  • A written standard for routing, takedowns and a pre-launch gate that every page must pass.
  • A conversion counts only after the form endpoint answers OK, and tests assert the exact hashed phone payload, answer every tag host locally so no fake visits count, and break six rules to prove each guard fails.
  • A lighter first-load pattern cut a cinematic page's phone first load from 4.5 MB to about 1 MB and its form from 4 to 5 s to about 1 s on throttled Slow 4G with a 4x slower processor.

HTML · GSAP · nginx · Cloudflare · GA4 · Google Ads · Meta Pixel · Clarity · Lenis

The Cauldron Café

M&M Group · 2026 · Live

A café site cut by 97% and a menu that search engines can read. thecauldroncafe.com

  • Rebuilt from 2,765 KB to 161 KB; a 702 KB 3D library replaced with 50 lines of canvas.
  • Full menu, FAQ, reviews and hours as structured data; a menu subsite instead of a 7.5 MB PDF.
  • Short ads with kinetic Arabic captions and a platform-compliant offer reel.

HTML · Schema.org · HyperFrames · GSAP

Tips & Tricks Travel

M&M Group · 2026 · Live

A bilingual rebuild of the travel desk site.

  • Flights, hotels, packages, visas, transport and enquiries in Arabic and English.
  • Containerised and deployed on the group's server.

Next.js 15 · next-intl · Tailwind 4 · Docker

With Ayoub

Half Past XII · client · Sep 2026 · Live

A bilingual personal brand site for a real-estate sales director. withayoub.ae

  • Built from the client's own Instagram captions with a local cleanup pipeline: LaMa text removal, 4x upscaling and Real-ESRGAN video at 1.2 s a frame instead of 20 s with the photo model.
  • Structured data and AI search files for discovery.
  • Six palette options were rendered on the live page and compared on screen, and Gulf Blue went live on 30 Sep 2026 with the share image and icons rebuilt in the new ocean tone.
  • Every asset filename carries a content hash because the server caches for seven days, and the deploy script adds files without overwriting, swaps the five pages last and checks every hash.
  • Rollback restores pages only, so browsers holding an old page still find the files it needs, and JSON-LD, hreflang and llms.txt ship with each build.

Python · GSAP · ComfyUI · LaMa · Real-ESRGAN · nginx

Ohana Scroll Film

XII Labs (client) · Oct 2026 · Live

A scroll film for a UAE developer with four real-time WebGL moments: a diamond, clouds, silk and water.

  • Started from a crawl of 30 public pages and about 1,070 media files, then shipped as 13 releases between 8 and 9 Oct 2026.
  • A round brilliant diamond is ray traced through 89 facet planes with fire and a baked studio cube map, and the camera then falls through its table to open the film.
  • Clouds are drawn from a baked noise texture and the relief from a Depth Anything V2 depth map, while a silk shader unveils a tower and a water shader carries the camera up into a villa.
  • Release 11 proved 91 distinct pictures with none repeated, and every release passed about 100 checks, 44 mutation probes, a WebKit pass and an independent review.

WebGL · GLSL · Lenis · Depth Anything V2 · Python · Node

Farni Cafe Parallax Concept

XII Labs (concept) · Sep 2026 · Live

A scroll-driven concept redesign of an Abu Dhabi cafe site, built from its old photos and Instagram palette.

  • Built on 27 Sep 2026 as static HTML, CSS and JavaScript with GSAP, ScrollTrigger and Lenis vendored in, and served from a studio subdomain with a noindex header.
  • Photos came from the old site and the palette was sampled from the cafe's Instagram feed, whose grid tiles were mostly text and unusable as photos.
  • Fixed an RTL bug where a flex row of Latin letters reversed the brand name, and a pinned section that let the next section overlap it.
  • Hours and prices are carried over from the old site and stay marked unconfirmed until the client confirms them.

HTML · CSS · JavaScript · GSAP · ScrollTrigger · Lenis

XII Labs Studio Site

Own studio · Sep 2026 · Live

The studio's bilingual site: 55 pages, 36 showcase tiles and a WebGL particle engine at 60 fps. xiilabs.com

  • Built and deployed across 26 and 27 Sep 2026 as a Vite site with service, industry, FAQ and About pages in English and Arabic.
  • A WebGL particle engine drives the chapters (tunnel, burst, warp, shockwave, black hole) at 60 fps in both languages on desktop and phone, and reduced motion is honoured.
  • Consent-aware analytics use a cookieless ping, Search Console is verified with a 55-page sitemap, and 50 URLs were submitted through IndexNow.
  • A script-driven PageSpeed check and a consent mutation suite back it, and an independent review found two bugs that were both fixed.

Vite · WebGL · JavaScript · GA4 · Search Console · IndexNow

Marketing & Growth

Growth Plan 2026 to 2027

Luxury Facilities · 2026 · Delivered

An 87-page growth plan, execution briefs and management review deck.

  • Built from HTML with layout-checking scripts so every page prints cleanly.

HTML · Python

Competitor Ad Watch

Own tool · Jun 2026 to Aug 2026 · Internal

A daily scraper of competitors' Meta Ad Library creatives with perceptual-hash dedupe, feeding a 434-ad teardown.

  • Headless Playwright reads the Meta Ad Library for five tracked advertisers in the UAE, skips video, and a launchd job runs it every day at 09:00.
  • New images are kept only when their perceptual hash differs (dhash distance above 6), saved under language-tagged names, with a daily report and a desktop notification.
  • A 434-ad teardown of four off-plan accounts (June to August 2026) became the design doctrine of my ad-creative skill: luminance register, locked ground colour, three-tier Arabic type and a pre-delivery check.

Node · Playwright · Python · Perceptual hashing · launchd

Per-Project Campaign Packs

Dream Wise Properties · Jul 2026 to Oct 2026 · In production use

Sixteen launch campaigns produced in one tree, from ad copy and creatives to Google Ads files and brochures.

  • Each launch has its own folder under the marketing tree: ad backgrounds, ad copy, story and square creatives, Google Ads exports, event material, logos, videos and the brochure source.
  • Standing rules: one language per creative, an Arabic twin written in Arabic for every English ad, and no text shadows, glows or colour overlays on the image.
  • Hooks must come from the project's real edge, such as location, down payment or a branded community, and every claim is sourced to the developer's own documents before it is set in type.

Photoshop · Google Ads Editor · Meta Ads · Python

SEO, AEO and GEO Program

M&M Group · Jul 2026 to Aug 2026 · In production use

Indexing, structured data and AI-search fixes proven on two seven-language property sites.

  • A full audit on 16 Aug 2026 checked all 4,375 sitemap URLs on two sites: every one returned 200 with complete hreflang and an allow-list for AI crawlers.
  • Structured data had been publishing every off-plan price into fields the vocabulary rejects, so prices now sit on an Accommodation with a pre-order Offer and annual rent carries a unit price specification.
  • FAQ questions became real headings with the first two open, the highest-leverage answer-engine change, and a server-rendered crawl index lifted project links from 24 to 199 per language.
  • The fixes were ported to the second site, where a deploy gate now asserts sitemap dates and crawl links and caught a silent revert that every page still passed with a 200.

Next.js · JSON-LD · hreflang · llms.txt · Google Search Console

Brand, Print & Design

Client Sales Brochures

Dream Wise Properties · Sep 2026 to Oct 2026 · Delivered

Eight projects in 15 print-ready PDFs and 175 pages, with every AED figure computed and every price traced.

  • Each project gets a long version, with a payment page and a plan page per layout, and a short version with a project page then payment and layouts per bedroom type.
  • Every AED figure is computed from the source price list, and long versions keep floor plans at true relative scale, checked to within 1 percent against printed room dimensions.
  • Prices are traced to their source type first (developer list, average, launch figure or resale ask), and draft prices for two projects turned out to be resale asks and were rebuilt as resale pages.
  • Production traps solved: variable fonts print as Type 3 so static weights are cut with fontTools, and plan lettering was erased in Photoshop, upscaled with Topaz and retyped as live text.

Python · HTML and CSS · headless Chrome · fontTools · Topaz Gigapixel · Photoshop

Launch Ad Sets in Three Brands

Dream Wise Properties and Urban City (client) · Oct 2026 · Delivered

Five designs per brand for one launch, as story and square in English and Arabic, each gated before delivery.

  • Three sets for one launch: a Dream Wise set with orange accents on its brand grey, an Urban City set in white and gold type, and a version in the project's own branding, each design with its own layout and light.
  • Hooks came from the project's real facts set against its main competitor, such as on the island versus near it and 5 percent down versus 20.
  • The Dream Wise and project-branded sets use the developer's own renders, with AI limited to extending sky or ground.
  • A mutation-tested gate script checks contrast, legal-line overlap, safe zones and busy ground under every line, and the real club crest is laid back where generation garbled its lettering.

Python · GPT Image 2 · Photoshop

Brand and Content System

Luxury Facilities · 2026 · Delivered

Palette, stationery, membership cards, guides and films in Arabic and English.

  • Brand palette rebuilt to WCAG AA contrast; letterheads generated from code; Signature and Executive membership card designs.
  • Membership guides, sales scripts and forms in Arabic and English.
  • A brand film edited in After Effects, a membership offer reel, and a wordless AI reel built from 17 identity-locked frames.

Photoshop · Illustrator · After Effects · Python · AI image and video

Sales Brochure Generator

M&M Group · 2026 · Delivered

Data in, print-ready brochures out, every AED figure computed.

  • Floor plans at true relative scale, checked within 1% against printed dimensions.
  • Static fonts and headless Chrome printing for clean PDFs.

Python · fontTools · Chrome print

Prime Studio

Own tool · 2026 · Delivered

A local browser design editor with an AI assistant.

  • Canvas editing with export to PNG, JPG, SVG and PDF, stored locally in the browser.
  • A deterministic assistant that runs 12 canvas commands.

React · Konva · Zustand · IndexedDB · Vitest

Curtain Rises Typeface

Client · 2026 · Delivered

A custom display typeface drawn from campaign art.

  • Built with fontTools from the campaign's lettering.

fontTools · Illustrator

Half Past XII Identity

Own studio · Sep 2026 · In production use

The logo system for my independent studio.

  • A clean vector trace with colour variants and profile marks was refined into a silver halftone mark chosen from eight options, with a lockup and a square profile mark built in Illustrator.
  • The mark was extended to XII Labs with a LABS tagline, and its business cards moved from a 45 degree halftone to a hex grid with a fade curve sized by area.

Illustrator · Python · HTML to PDF · Google Docs

Deep Field V2 Console Design

Own product · Jul 2026 · In production use

A six layer UI system for a private AI console where each visual style lives in exactly one place.

  • Rebuilt on 24 Jul and deployed the same day: warm graphite OKLCH colours with a P3 crimson accent, driven by a token layer for decisions and a material layer for finish.
  • The fusion works through scarcity: hard offset shadows exist only at the approval gate, glass only on functional chrome, relief only on tactile controls and brackets only on hot panels.
  • A strict content security policy forbids inline styles, so the lens filter lives as SVG markup and styling hooks use has selectors on the approval item.
  • A service worker cache name is the only invalidation lever for returning browsers, so its bump is pinned by a test and made on purpose.

CSS · OKLCH · SVG filters · Service worker

Theme Park Diorama Image

TAYA Real Estate (client) · Sep 2026 · Delivered

A 3240 x 1440 miniature diorama of a Yas Island theme park, generated, enriched and upscaled for a campaign.

  • Started on 9 Sep from a generated image, then regenerated at 21:9 with extra characters and corrected zones, upscaled 4x with Magnific Precision and cropped locally to 3240 x 1440.
  • A further pass for more park zones and correct label spelling remains open.

Magnific · Gemini image · Python

Property Ad Creative Skill

Own tool · Aug 2026 · In production use

A design doctrine from a 434-ad competitor teardown, packaged as a skill that builds UAE property ads in Photoshop.

  • Distilled from 434 ads by four competitor accounts, pulled from the Meta Ad Library and de-duplicated by perceptual hash, with a scheduled sync keeping the library current.
  • The doctrine positions a brand on the luminance axis, locks one ground colour per set, allows one register per creative and uses a three-tier Arabic type system with Western numerals inside Arabic copy.
  • Production runs through the Photoshop MCP into editable PSD and PNG files, with a pre-delivery self-check and a thumbnail squint test, and Arabic shaping is verified by eye.

Photoshop · MCP · Python · Meta Ad Library

EMBER Design System

M&M Group · Jul 2026 · In production use

A design system with five surface tiers and dual themes, rolled across a CRM and a seven-language site in seven batches.

  • EMBER defines tokens, typography and motion plus five surface tiers (crisp, glass, relief, glow and ceremony) built on glassmorphism, neumorphism, claymorphism and holographic effects.
  • The CRM ships light and dark themes with a dark-mode ratchet that blocks regressions across 127 classes, and the public site is light first, with both themes across 21 routes.
  • Seven migration batches replaced a 125-file bootstrap layer with crisp primitives and swapped Font Awesome for lucide icons, ending with zero debt on both.
  • The dashboard hero uses a charcoal to ember night card with a plexus constellation and starfield, and the suites stayed green at 588 frontend and 2,336 backend tests.

React · TypeScript · CSS tokens · lucide

Luxury Facilities Monogram Vector

Luxury Facilities · Jul 2026 · In production use

The company's LE monogram rebuilt from scratch as clean vector: 65 nodes, zero kinks, satin gold gradients.

  • Rebuilt geometrically instead of auto-traced: the L has four straight edges with zero undulation, and the leaf edge is a curvature-continuous B-spline converted to Bezier.
  • The file is one SVG with 30 nodes in the L and 35 in the leaf, with champagne to bronze gradients on the L and a lighter pair on the leaf, ready to edit in Illustrator.
  • Later colourways added a white version and light and dark app icons in Swan Wing and Sapphire gradients, which the CRM now uses.

Illustrator · SVG · Python

Animated Email Signatures

Own tool · Sep 2026 · In production use

Two ink-and-ember animated signatures, sliced so contact rows stay clickable, hosted and installed in Apple Mail.

  • Two 8 second, 200-frame GIF cards: one burns the name into embers on the exact brand grey, the other writes an autograph as wet ink on brushed silver beside a navy enamel monogram.
  • The card is cut into seven GIF slices from one timeline and palette with a 0 px seam, so only the contact rows link while the icons still light up.
  • Images are hosted on a private subdomain with image paths only and noindex, and the Dream Wise card is installed in Apple Mail with embedded images by rewriting the signature file.
  • The first host script rewrote the TLS block and served the wrong certificate for about two minutes, so the script now only creates the vhost when it is missing.

Illustrator · Python · GIF · nginx · Apple Mail

Hiring Post Series

Luxury Facilities · Sep 2026 · Delivered

LinkedIn hiring posts in English and Arabic from an editable kit: organic and paid sizes, one concept.

  • The designer post uses a swatch fan of the five brand colours under the line We have the palette. We need the eye., with the Arabic line written in Arabic rather than translated.
  • An editable HTML kit with fonts and logo re-renders both languages from one command line, so copy edits never mean rebuilding the design.
  • Paid versions are square because paid 4:5 serves on mobile only, and the salary sits inside the first 150 characters of the caption that ads show.

HTML · CSS · Node · Python

Luxury Facilities Social Covers

Luxury Facilities · 2026 · In production use

Cover banners, Arabic offer stories and layered offer ads for the membership company's social channels.

  • The social folder holds 12 travel ribbon cover banners, most at 2172 by 724, two wide branded Dubai skyline covers and a layered hotel offer ad kept as a 190 MB PSD.
  • Arabic offer stories run at 1080 by 1920 with hotel and travel discount messaging, including an upscaled master for the highest-resolution export.
  • A stamped sky monogram effect and a branded cover photo carry the monogram across channels.

Photoshop · AI image generation

Emirates Series

Luxury Facilities · Aug 2026 · Delivered

A 21-image social series: portraits of the seven emirates and Al Ain, a corporate visual and 12 lifestyle scenes.

  • Seven emirate portraits plus Al Ain at 1664 by 2496, a corporate solutions visual and twelve lifestyle scenes up to 2848 px on the long side, all made on 20 Aug 2026.
  • Scenes cover beach dining, a candlelit dinner, a desert fort at night, an infinity pool, a jet lounge, rooftop tennis, seaside arches, sunset yoga and valet service.
  • The eight place portraits also exist as branded versions in the website visuals folder, dated 23 Aug 2026.

Film & Motion

ANJI Box Opening Films

Half Past XII (client) · Oct 2026 · In development

A painted box that turns and opens, rebuilt in Blender from the client's own artwork and checked frame by frame.

  • After a first generated version, the box was rebuilt as a Blender scene from the painting itself, with the cover and upper front panel as one rigid lid hinged at the back.
  • The box turns so its front faces her and the cover stands up as a screen, and a red and blue inside test on all 180 frames finds the interior on none.
  • Colour is gated in the film itself: one ink across every face of the box, measured on the delivered files after hue shifts between turned planes and codec browning of thin green lines were caught.
  • Handle, latch and strap are 3D fittings, a ghost check proves the old painted box is gone from frame 0, and each shot is rendered on one device because mixing graphics card and processor frames added 118 px of noise.

Blender · Python · ffmpeg · GPU rendering

Cauldron Café Ad Films

M&M Group · Jul 2026 to Aug 2026 · Delivered

Kinetic Arabic ads for a café: captions over kept audio, a 15 second offer reel and type behind a rotoscoped subject.

  • A 24 second 9:16 ad uses Khaleeji Arabic captions in teal and gold, built as a transparent HyperFrames overlay in six beats and composited so the original audio stays untouched.
  • A 15 second Arabic offer reel was built from the HD master, not the 720p brief copy, and a kinetic tour ad layers footage, a rotoscoped subject and type, tested where a carousel horse or star lamp passes in front.
  • A critic review of the first tour cut found five faults (empty plate, call to action, dead air, repeats and a frozen shot), all fixed in the next version.
  • Cairo's Arabic-Indic zero rendered as a bar in the price caption, so Tajawal was tested for the numerals.

HyperFrames · GSAP · After Effects · FFmpeg · Cairo · Tajawal

Caption Overlay Pipeline

Own tool · Jul 2026 · In production use

A repeatable way to burn animated Arabic or English captions onto finished footage without touching its audio.

  • Captions are authored as a transparent HyperFrames composition sized to the footage and driven by one paused GSAP timeline, with fonts bundled locally so renders are offline and deterministic.
  • Arabic uses Cairo and Tajawal split by unicode range so mixed lines render, and right-to-left is scoped to caption elements because dir=rtl on the page root renders a blank video.
  • The overlay renders as ProRes 4444 with alpha and is composited with ffmpeg at CRF 17 while the original audio stream is copied byte for byte.
  • QA reads extracted final frames instead of trusting bounding-box heuristics, which flagged gradient text as occluded.

HyperFrames · GSAP · ffmpeg · ProRes 4444 · Cairo · Tajawal

Same Room Commercial

Luxury Facilities · Aug 2026 · Delivered

A 30 second wordless offers commercial built on identity-locked AI frames, with real app screens composited in.

  • Ten vertical start frames were generated as one batch so the same woman, the same phone and the same photography carry across every shot, with a retry line that regenerates a single frame.
  • Nine motion beats are timed from 2.0 to 4.5 seconds, from a hesitation over the glass to a rewind through an empty room, with start and end frame pairs where a move needs them.
  • Phone glass is generated blank and real app screens are composited on with tracked mattes in After Effects, and the reorder cut runs at 2160 by 3840 for 33.8 seconds in four layers.

After Effects · Python · AI image and video generation

Yas Plaza Reel

Luxury Facilities · Aug 2026 · Delivered

A 30 second family-trip reel with the phone screen replaced by tracked mattes and every frame checked.

  • Built between 18 and 23 Aug 2026 from 24 generated frame files and 14 real reference files, and edited into a 30 second 9:16 reel at 24 fps.
  • The phone screen was replaced with tracked quads and skin mattes: a forced band of skin about 31 px inside the screen edge, and a matte clipped to the quad dilated by about 9 px.
  • Two bugs were fixed on 22 Aug, a light streak at frames 385 to 391 and a wrong BT.709 matrix on the 719-frame render, and a jump at frames 327 to 328 turned out to be a seam.
  • Phone jitter stays under 1.3 px of maximum acceleration, and the newest of two composites was identified by per-frame PSNR over frames 194 to 712.

Python · ffmpeg · Topaz Gigapixel · AI image generation

Travel Montage

Luxury Facilities · Aug 2026 · Delivered

A 47 second beat-synced montage of 16 destinations, lyric-locked in After Effects and delivered with its project.

  • Built in After Effects with 29 layers and five beat-synced moments, rendered lossless, then timed to the lyrics from transcribed timestamps.
  • Delivered on 14 Aug 2026 as an mp4, the editable project and a JSON timing file, with the transitions rebuilt the same afternoon.
  • The project folder also holds the destination posters, titles and source images used across the 19 scenes.

After Effects

Bab Al Nojoum Beat-Matched Edit

Luxury Facilities · Jun 2026 to Jul 2026 · Delivered

A pipeline that reads a reference edit's rhythm and rebuilds it from clean clips: 28.9 seconds, 12 beat-snapped shots.

  • The pipeline analyses a reference edit's audio rhythm, cuts and transitions, writes an edit plan, then renders with ffmpeg or builds an After Effects project from the same plan.
  • The final cut is 28.9 seconds with 12 shots snapped to detected beats, a water grade and no repeats, after people detection and a manual audit rejected clips with guests on screen.
  • A price overlay and a membership bar were added, and an earlier 71.4 second version was cut down to the final length.

Python · OpenCV · SciPy · ffmpeg · After Effects

Four for One Commercial

Luxury Facilities · Aug 2026 · Delivered

A 30 second wordless split-screen story that prices the same trip two ways, built from 17 approved frames.

  • The story prices one Maldives trip two ways: four friends travel together on the membership for AED 28,000 while one traveller pays AED 17,500 alone, and split screens carry the contrast.
  • A manifest maps 17 approved start frames to 14 beats with timecodes, and the app screens are real renders composited in post, never model-drawn, because the frames carry blank phone glass.
  • Generated frames arrive at 768 by 1376 and are upscaled to 1080 by 1920 with Topaz, and an identity reference frame must lead every prompt or the model swaps the actor.

AI image generation · Topaz Gigapixel · Photoshop

Yas Sphere Reveal

Half Past XII (client) · Jul 2026 · Delivered

A 9:16 reveal composited onto the Yas Island sphere, and the diagnosis of a judder that came from the export.

  • The presenter was keyed from greenscreen with rembg and delivered in four formats including HEVC with alpha and ProRes 4444, then composited onto the sphere clip in CapCut and an After Effects comp.
  • The clip's judder was traced to a CapCut export that padded 24 fps to 60 fps in a 3,2,3,2 hold pattern, a period-10 freeze at 6 Hz, and not to AI interpolation.
  • The fix was to re-export at the native 24 fps, because an optical-flow retime improved the smoothness metric from 830x to 3.1x yet looked worse, so the metric was dropped.
  • The plate is truly 720p, so delivery stays at 1080 by 1920 instead of faking 4K.

After Effects · CapCut · rembg · FFmpeg · LaMa

AD Atlas Brand Film and Loader

Own product · Sep 2026 to Oct 2026 · Live

A 16 second brand film from paper to ink to sonar to lockup, plus a 119 KB loading film and a 3D mark.

  • The brand film moves from contour ink on paper through a coastline and sonar rings to the lockup, cut in 16:9 and 9:16 with a looping hero clip and a 3D mark that validates as glTF.
  • Five source assets were upscaled to 4K before the cut.
  • The loading film encodes at 200 KB as WebM and 219 KB as MP4 with a 13 KB poster, then was trimmed to 119 KB and deferred by 1.6 s, honouring reduced motion and the autoplay content-security policy.
  • A new loader and tab icon release went live on 8 Oct 2026 after an audit GO and 648 server tests, with 15 known failures unchanged.

AI video · FFmpeg · WebM · glTF

Data & Research

Lead Pipeline

M&M Group · 2026 · In production use

Website and Meta forms into one sheet, with a WhatsApp alert for every lead.

  • 14 website forms and 14 Meta lead forms polled into Google Sheets.
  • Rebuilt for exactly-once delivery with a ledger, 38 behaviour tests and 32 targeted mutations.

Node · Google Sheets API · Meta Graph API · systemd

Real Estate Project Master

Own tool · Aug 2026 to Sep 2026 · Internal

A 2,768-project off-plan master for Abu Dhabi, Dubai and Ras Al Khaimah, with brochures and plans on disk.

  • One row per project from a property portal's structured page data (Dubai 2,425, Abu Dhabi 234, Ras Al Khaimah 109), with a brochure for each project that has one, about 36,000 floor plans and the master plans.
  • Merged with every project already held across the vault, the laptop and three servers into about 5,200 projects, 4,070 of them absent from the portal; one script rebuilds the master and its workbook.
  • A local 14B model reads brochure text under a quote-must-match rule and OCR covers the 11% that are image-only; about 16% of brochures state unit counts, 22% floors and 1% service charge.
  • A magic-byte check of 387 published brochure files found 76 were saved HTML error pages; sites that block scripts were left alone and one broker portal was read only, with my own login.

Python · openpyxl · Ollama · Qwen 2.5 14B · Tesseract OCR · JSONL

Abu Dhabi Market Data Feed

Own tool · 2026 · Internal

A daily puller for Abu Dhabi market indicators that fails safe, keeping the last good snapshot when blocked.

  • Pulls the headline market cards and recent sales from the emirate's public market dashboard once a day through launchd and writes a snapshot that the website and the CRM's market report read offline.
  • It fails safe: a bot challenge makes it give up until the next day, it never solves or evades one, and a partial transaction pull is flagged partial while the previous snapshot is kept.
  • An optional push to AD Atlas is signed with HMAC-SHA256 over the timestamp and body, and the receiver refuses stale or replayed requests and answers 409 when it already holds a newer snapshot.

Python · curl · launchd · HMAC-SHA256 · JSON

Infrastructure & Security

Three Production Servers

Operations · Sep 2026 to Oct 2026 · In production use

I run every server behind this desk myself: CRMs, websites, AD Atlas, Architect Prime and two mail servers.

  • Docker and Compose, nginx with TLS, Cloudflare in front, systemd and pm2 services, PostgreSQL 16, Redis 7, Coolify, monitoring and private networking.
  • Two self-hosted mail servers with DKIM, SPF and DMARC: one for AD Atlas, and one for TAYA after moving its 12 mailboxes and 4,100 messages off a third party's reseller account.
  • A nightly backup ring where each server backs up to the next; restore verified at 77 tables, 0 mismatches.
  • Self-hosted CI runners, kernel and Docker upgrades with a single short restart per host, and 212 GB recovered on a full disk.
  • Exposure checks across every web root, with backup files blocked on all hosts.
  • Releases ship per finished phase: a checksummed upload, a swap with a backup in place and a short live check, with a gate sized to the change instead of one large release.
  • Static assets get hashed filenames that are never overwritten or deleted, pages swap last and a rollback restores pages only, after long-cached fixed names served mixed releases.

Linux · Docker · nginx · Cloudflare · Mailcow · systemd · pm2 · Netdata · Tailscale · tmux

Self-Hosted Tooling Blueprint

Own tool · Jun 2026 · Internal

22 Docker stacks behind one SSO and ingress layer for an in-tenant toolset: pinned, telemetry off, loopback only.

  • Covers Authentik for SSO federated up to Microsoft Entra ID, Pangolin as the public ingress with a WireGuard tunnel, and stacks such as n8n, Dify, Langflow, Plausible, Ghost, Cal.com and Stirling PDF.
  • Every image is version-pinned and checked against upstream, every telemetry and phone-home switch is off, and every service binds to loopback behind the ingress.
  • All 15 self-contained compose files pass docker compose config; the 7 stacks cloned at a pinned commit validate once their fetch script pulls upstream.
  • A 70 KB service reference gives each stack its address, health check, network layout and gotchas, in deploy order.

Docker Compose · Authentik · Pangolin · Traefik · WireGuard · PostgreSQL · Redis

Mac Operations Watchdogs

Own tool · 2026 · Internal

Scheduled checks that catch silent failures on my Mac: crash-looping jobs, dead MCP servers and loose secrets.

  • A launchd health check flags any failing custom job, built after three jobs crash-looped unnoticed for weeks, one of them writing 69,499 error lines.
  • An MCP health check compares the configured servers with the expected set, after finding that 5 of 19 failed silently every session.
  • A permissions hardener finds secret-bearing files looser than 600 and fixes them on request, and a sweeper files stray screenshots from the home folder into a dated archive.
  • A YubiKey script provisions PIV keys for Mac login and keychain, and a configuration profile carries the enforce smart-card setting.

Bash · launchd · Python · ykman · macOS configuration profile

Backup and Recovery System

Operations · Aug 2026 to Sep 2026 · In production use

A nightly backup ring across three servers with stage-then-swap safety, restore proof and off-site pulls.

  • Built after finding the hosting provider returns an empty backup list: each server pushes a rolling daily and weekly copy to the next, so every host holds a peer's copy.
  • A run stages first and replaces the previous good copy only when there were zero failures; a flag that deletes the backup it has just made, while exiting cleanly, was found and removed.
  • A restore rehearsal read back 77 tables with 0 row mismatches, and a permissions pass made every copy owner-only on all three hosts after database dumps turned out to be world-readable.
  • Mac-side jobs pull database dumps off the servers and alert on a missing or suspiciously small dump; a verifier was written after a nightly dump was found to have produced empty files for about three months.

Bash · rsync · cron · pg_dump · Mailcow backup scripts · launchd · SSH keys

Read-Only Exposure Review of a Public Data Platform

Own tool · Sep 2026 · Internal

A read-only review of what a government property platform exposes publicly and how its dashboards get their data.

  • Mapped a single-page app in front of 24 microservices and 484 endpoints, every one of which refused unauthenticated calls, and traced how its public market dashboards obtain their data.
  • Checked with my own signed-in account what the authenticated tier adds: records scoped to me or my power of attorney, with no market data and no bulk feed.
  • No credential was used to extract data and none was stored; the conclusion was that the clean route is a data licence request, which I drafted.

Browser network analysis · OAuth 2.0 flows

Coolify Control Plane

Operations · Jul 2026 · In production use

One self-hosted PaaS dashboard managing two servers without fighting nginx for ports.

  • Installed one Coolify control plane on the second server with the first attached as a remote host, plus a Docker Desktop instance on the Mac, instead of three separate installs.
  • The load-bearing rule: the proxy type must stay NONE, because every new server defaults to Traefik, which fights nginx for ports 80 and 443; the setting is checked and fixed in the database.
  • Ports are pinned to loopback by a compose override that survives upgrades, realtime is proxied for live logs and the terminal, and root SSH is key-only with a source restriction on the remote host.

Coolify · Docker · nginx · Traefik · PostgreSQL · SSH

Camera Wall Dashboard

Operations · 2026 · Internal

A small internal dashboard that shows a wall of camera feeds on one page.

  • A standalone Python server using only the standard library and ffmpeg serves one MJPEG tile per camera, so it plays in any browser with no plugins.
  • One page and one JSON file of camera definitions make up the whole tool; it is internal and its configuration is not published.

Python · ffmpeg · HTML · MJPEG

Games & Internal Tools

Flower Race

Luxury Facilities · 2026 · Delivered

An Arabic sales incentive board game for the team, played live in the office.

  • Right-to-left Arabic interface, PIN login with scrypt hashes and a server-side admin.
  • Deployed on the company server behind nginx.

Node · pm2 · nginx

Live Event Prize Wheel

Luxury Facilities · 2026 · Delivered

The big screen shows the wheel, any phone on the network spins it, every device stays in sync.

  • Synced across devices with server-sent events and built to restart itself, because a stage is the one place you cannot debug.

Node · Server-sent events

Candidate Swipe Review

M&M Group · 2026 · Delivered

A swipe-style app for screening job applicants fast, one card per CV.

  • Every applicant CV parsed into a card, with OCR for the one in four that arrive as image-only PDFs.
  • Decisions stored per reviewer and notes shared across the team, so several managers can screen the same pool.
  • Applicants grouped by role, keeping real-estate sales hiring separate from other positions.
  • Runs as a small service on the group's server.

Node · SQLite · pdftotext · Tesseract OCR · systemd

Skills

Product & Leadership

Product Ownership, Operations Lead, Team Leadership, CRM Design, Membership Ops, Real Estate, Travel Booking, Growth Planning

Engineering

TypeScript, JavaScript, Python, SQL, Node.js, Express, React, Next.js, Django, React Native, PostgreSQL, Row-Level Security, Prisma, Redis + BullMQ, REST & RBAC, Webhooks, API Integration, Playwright, Test Engineering

AI & Agents

Claude Code, Codex, Model Routing, MCP Servers, Agent Design, GraphRAG, Ollama, Speech AI, Prompt Defence, Evals, Cross-Model Review, Gemini, Cursor, AI Image Direction

Data

ETL Pipelines, Web Scraping, OCR, DuckDB + Parquet, Knowledge Graphs, Data Quality, Sheets Automation, Market Data

Infrastructure & Security

Linux, Docker, nginx + TLS, Cloudflare, systemd + pm2, Coolify, CI Runners, Mailcow, Backups + DR, Tailscale + SSH, Passkeys, Tenant Isolation, Secrets + Rotation, Exposure Review, YubiKey, Release Engineering

3D & Visualisation

Blender, Blender Python, Three.js, WebGL + GLSL, 360 Panoramas, Plan to 3D, Depth Walks, glTF Rigging, OpenSeadragon, Image Registration, CesiumJS, Gaussian Splats, Upscaling, Inpainting, Colour Grading

Design & Motion

Photoshop, Illustrator, After Effects, Premiere, Figma + Canva, Type Design, Brand Systems, Print + PDF, HyperFrames, GSAP, ffmpeg, Compositing, Accessibility

Marketing & Growth

Google Ads, Meta Ads, GA4 + Search Console, Looker + Clarity, Conversion Tracking, SEO + AEO + GEO, Page Speed, Copywriting EN + AR, Arabic RTL, Competitor Research, Launch Pages, Ad Creative

Languages & Education

Arabic Native, English Professional, Biomedical Eng.

Contact

+971 54 548 0548 · ahed@xiilabs.com · Abu Dhabi, UAE