Practice
Twelve disciplines, and every project that evidences each one. Ordered by how central the skill was to that build, so the strongest example comes first, and each line says what the contribution was.
Set the look of a film or a launch and hold it, then review what the generative pass sends back before it ships.
Find out what a model can carry on a given brief, and write the prompting that makes the answer repeatable.
Spatial and three-dimensional work, and the visualisation built on top of it.
Design and build the working version: the interface, the server behind it, and the data feeding both.
Decide what is worth building, and take the result out to partners and buyers.
Pluggable perception - vision, transcription, classification - each on a cloud-to-local-to-heuristic ladder; hybrid retrieval feeds vault RAG with citations.
QLoRA domain fine-tune plus a tool-calling loop (searchListings, searchBarnesListings, searchOpportunities, getOpportunityDetail, draftWhatsAppMessage, among others) grounded by a system prompt that instructs the model never to answer from training data or invent a listing.
Self-hosted Qwen3 fine-tune driving the multi-tool agent loop, kept reliable with per-tool result pinning and a loop break.
Built the learned pipeline properly before judging it, including auto-labelling the training scans, two rounds of fine-tuning and a scoring overhaul, so its loss could not be written off as a half-hearted implementation.
Video-diffusion novel-view models evaluated against COLMAP-grounded baselines.
A pluggable AI provider gateway (mock, OpenAI, Anthropic, Ollama, three_d_scene) defaulting to mock so the platform runs without GPU inference, behind coverage/complexity scoring, rename suggestions and creative-brief generation.
Producing shots with image-to-video generation off generated key frames, matching a fast model to simple shots and a stronger one to complex.
Open-vocabulary detection across the scanner's several camera streams, so new asset types could be asked for in plain language instead of requiring a labelled training set per class, with a second pass triaging candidates before an operator sees them.
Film direction, art direction, and the client revision round, for Living Homes.
A visibility simulation that estimates how a brand surfaces in conversational answers, plus an audit-grounded action plan, built on swappable, mostly-local model providers.
One harness spanning studio scans to city-scale capture; the PSNR/SSIM/LPIPS comparison closed before the full matrix.
Framed the question so it could come back negative, and it did: three of four method families failed, each closed by a number rather than by a hunch, and each logged as do-not-retry with the reason.
Scored six approaches against each other on the same eighteen scans rather than assuming the newest was best. The comparison is the deliverable: without it the sophisticated pipeline would have shipped on the strength of being sophisticated.
Rebuilt the register from scratch rather than patching the existing one, so the new result could be compared against the old. The two diverged, and that divergence was recorded as a finding instead of being reconciled away.
Implementation research (Barnes Immersive Experience vol.2) on what a real-time, film-quality property visualisation actually requires: engine choice, prerendered versus live geometry, and where a live conversational-analysis layer could feed the agent hints mid-session.
Distilled how answer engines decide what to cite, and how differently that is from how Google ranks, into the handful of signals worth acting on.
Training-run analysis and dataset assembly that targeted brokerage-grade jurisprudence.
Emission-baked, per-body-lit splats - 3DGS pushed past its capture-based use case.
Prompt + tool-schema design for the agent loop, system prompts, function-calling contracts, and an eval harness over real broker queries.
Honesty as a layered contract: the system prompt sets it, deterministic code enforces it.
Prompt design for the ingest classifier and the vault-RAG ask path, with a provider ladder and hard timeouts so a slow or unreachable model degrades the answer instead of blocking the capture.
Design-system baseline plus a page-by-page audit that became a full audit-to-implementation sweep of tokens, icons, modals, and states.
Midnight + gold editorial identity with a gold orbital glyph that anchors the landing.
Designed an overlay that sits on top of any site without inheriting its styles or fighting its z-index, and that reports box, typography and contrast in the terms a reviewer already thinks in.
A six-room landing mockup that follows one mechanism the whole way down instead of listing features, built on a grid and type ladder derived from the book.
Personal project. Art direction, typography, design system, and the front end.
Brand direction, mood-board curation, and material-language translation for BARNES Dubai.
Built the platform as two synced surfaces, a client-facing wall display and an agent-facing tablet console, over one store and one transport hook, with asset ingest and a multi-format viewer, so pressing launch on the tablet changes the wall without either screen owning the room.
Interface worked out by iteration, map-led through mid-2026: MapLibre canvas, natural-language search, and the analytics panels tested against live scan data.
Reworked the valuation front end with a new design system: the React and MapLibre pin-picker, the DLD-comparables panel, and the accuracy-snapshot dashboard. Carried the same system into the broker-prospecting surface as production polish.
Reads React Server Components, which is the part comparable tools get wrong: they walk the client fiber, and on a Next App Router page that finds SegmentViewNode and nothing else, because a server component never gets a fiber. This reads fiber._debugInfo as well, so the review names a real component and source line.
A three-step wizard (address, property details, contact) and a results screen in Next.js 16's App Router: a range bar drawn to scale from the band, an itemised price-adjustment breakdown, an evidence table, a trend-extrapolation panel, comparable sales, a twelve-month trend chart, and location signals from public open data (RTA metro stations, KHDA school inspections, OSM Overpass). The five result surfaces were extracted into shared components so the wizard and the saved report cannot drift apart.
Next.js + React app with dense data UI, Recharts analytics panels inside the auth shell, and an EN/FR/AR translation workbench.
Next.js 14 + Tailwind + shadcn/ui web app, including the 27-tool Creator Tools catalog spanning 3D & Spatial, Video & Motion, AI Content, Data & Intelligence and Production.
Next.js reading surfaces over per-user auth, with accessibility overrides driven from user settings.
Built the capture path so that saving a reference is one right-click in the browser, and the source URL, dimensions and colour palette are recorded at that moment rather than asked for later.
Solved the ordering problem that kept per-Gaussian normals out of the web viewer, so the demo on this page is the technique and not a mock-up of it.
A web audit surface that reads a live page the way a crawler does, returns separate SEO and AEO scores, and keeps a history the marketing team works from.
Three.js flythrough: warp-to-planet navigation, a "Land here" descent to named surface sites, a true-scale toggle, orbital motion, and a date scrubber, all real-time in the browser.
Personal project. Art direction, typography, design system, and the front end.
The white-label demo a brokerage can put its own name on, honest fallbacks included.
Self-auditing plates: a component sheet that reads the built page through a hidden same-origin iframe, so a spec and its build cannot silently disagree.
Five API routes on Vercel. Estimate runs the pricing engine; lookup resolves a deed or Makani number; lead writes to Vercel Blob and notifies through Resend; email-report sends the result; report persists one to Turso and serves it back at its own URL. The report route recomputes server side and never accepts a client-supplied price, so nobody can publish a fabricated figure on a branded page. Every integration no-ops cleanly rather than erroring when its env var is unset, including the database: with no Turso URL the save button does not render at all, rather than rendering and failing.
The Next.js app carries 73 API routes, and five Vercel crons covering three of the eleven named reminder jobs on a schedule, the rest reachable on demand. URL ingest with platform-specific extractors (yt-dlp, Mozilla Readability, Reddit JSON API), an async job queue with status polling, and a catch-forward queue that replays captures taken while the home box was unreachable.
Shared-password auth gate, git-log-ingested project/milestone/test telemetry, a read-only shadow-CRM surface (CRM Copilot) over a Salesforce/HubSpot-shaped audit log, and integration with the Barnes Dubai LLM inference stack.
FastAPI inference service with broker_id-keyed conversation memory; Ollama deployment; WhatsApp surface in front of the playground.
FastAPI + SQLAlchemy 2.0 API (12 Alembic migrations, org-scoped multi-tenant queries, row-locked state transitions) and Celery workers across intake, video and assignment queues, on Postgres + pgvector, Redis and MinIO.
Serverless tool loop on Vercel; Neon Postgres for leads and hourly alerts; county GIS, appraiser, and RESO integrations; a Bedrock backend written but not yet provisioned.
Turso libSQL on Prisma, jose-signed JWTs, astronomy-engine transit cron, Vercel-fronted deployment.
Made the vault on disk the source of truth and the database a derived index, content-addressed, so deleting the database and reindexing is routine rather than a disaster-recovery path.
Self-hosted WebSocket relay for broker-led co-browse, assembled through trial and error.
Wrote the MCP bridge that hands the review to Claude Code or Cursor, and lightbox's on-demand proxy, which adopts a dev server that is already listening rather than starting a second one.
15,369 instruction pairs from five jurisdictions' open data, with live Data Centre connectors and the Barnes listings database feeding tool calls.
Helped restructure the data and supported ingestion and configuration as the entity count scaled to 40K+ across 9 sources, and worked on the bulk ingestion and normalisation pipeline as coverage grew.
A hand-curated benchmark table, 15 communities, where each row records the published index it was read from and the month. Automated ingest from the Dubai Land Department is closed off (its transaction search is captcha-gated per query and the bulk portal is unreachable), so curation with recorded provenance is the model rather than a stopgap. One row is flagged in place because its villa index does not state whether its per-sqft denominator is built-up area or plot, and the two differ enough to matter.
GA4/GTM install detection plus a reference list of AI-referral domains to track as segments.
Consolidated repeated sightings into one entity per real object: the same extinguisher appears in many frames, so each detection is a vote on a position rather than a separate asset. How strict that consolidation is turned out to be the accuracy dial.
Renders 150-300 known-pose Blender views per body and trains the splat straight from them - no structure-from-motion.
The eval harness itself: per-engine launch scripts, logged failure modes, reproducible runs.
Append-only JSONL retrieval index next to the vault. Activity log per ingest with per-step timing. Full source preserved in collapsed <details> blocks so the index has the raw words, not just the summary.
Decoded the proprietary capture format from its published spec, since nothing off the shelf would read it into the engine.
Kept every generation runnable behind one orchestrator, so the comparison could be re-run on new scans and the method that ships stays whichever one actually scores best.
Relit millions of Gaussians individually from the scan's own geometry, rather than lighting a proxy mesh and hoping the splats followed.
Positioned each asset against the building's own captured geometry rather than estimating its distance from a single image, which is the difference between roughly where a thing is and where it actually is. For a safety register, roughly is not useful.
DEM-displaced and emission-baked splats, trained per body on one GPU.
Novel-view synthesis and monocular depth paths for unbuilt properties stitched into the same pipeline.
Technical-feasibility read on the capture-to-display chain: which phases existing vendors genuinely cover, and where the integration between them is manual and fragile because the tooling was mostly built for VR headsets and desktop, and a large LED room is neither.
Moved the walkable scan onto gaussian-splats-3d, shared with the standalone Splat Viewer through barnes-scan-viewer, and set the qualification gate behind the Verified by Vantage badge.
Diagnosed the loss rather than accepting it: the model learns from synthetic buildings and is asked to draw real scanned ones, and it consistently under-covers the true area, which costs it more than accurate room detection wins back.
Directing generative-video films end to end: brief, storyboard, shot list, AI shot direction, curation, and edit, across client-feedback rounds. Creative director for everything published on the Living Homes social presence (@livinghomes.ai).
Closed the open decisions in an existing brand identity, one page at a time, then art-directed a landing page against the closed book so the two cannot drift.
Personal project. Art direction, typography, design system, and the front end.
Brand direction, mood-board curation, and material-language translation for BARNES Dubai.
Film direction, art direction, and the client revision round, for Living Homes.
The tool exists to serve a working visual practice, so it is organised around how references get used when designing rather than around how files get stored.
Marketing strategy, brand narrative, and visual-identity direction for BARNES Dubai.
Sense-checked the technical claims in the client-facing decks before they reached a developer audience, so nothing was promised in a meeting that the tooling could not actually do.
Rewrote the identity's adjective rules as measurements anyone can re-run, and printed the two frames and the one cover that fail them. Wrote the broker-facing sales-journey script for the Revi x Living Homes demo unit at Souk Al Bahar: eight chapters compressing one full day, three timing variants branched by who is touring, and a recovery-line playbook for when the voice assistant misfires mid-demo, so a broker never has to apologise on the product's behalf.
Creative content QA and ideation for the marketing toolkit, reviewing AI-drafted copy and AEO answers before they ship.
Content ideation, review, and on-brand QA to a Maison Margiela-grade luxury standard.
Brand direction, mood-board curation, and material-language translation for BARNES Dubai.
Film direction, art direction, and the client revision round, for Living Homes.
Marketing strategy, brand narrative, and visual-identity direction for BARNES Dubai.
A research playbook separating SEO (Google), AEO (answer-engine citation), and GEO (generative-engine) visibility, turned into an audit + scoring toolkit a marketing team can run on any URL.
Marketing direction for luxury branded-residences launches: positioning, content strategy, and campaign ideation with the marketing team.
Positioning and copy for two go-to-market approaches, the smart home retrofit and the off-plan building spec, drawn as a pair rather than explained as two products.
AEO/SEO/GEO tool surface: keyword + prompt research, generative-engine visibility scoring, AI-answer-engine tracking across ChatGPT / Claude / Perplexity / Gemini.
Helped put the argument in sales terms rather than specification terms.
Marketing strategy, brand narrative, and visual-identity direction for BARNES Dubai.
Designed the cockpit IA, OVERVIEW (Dashboard / Projects / Updates), KNOWLEDGE (Data Atlas / 3D Scans / Documents), TOOLS (Barnes Dubai LLM, AEO/SEO, Translate, CRM Copilot, Uptime).
Designed the seven-stage project pipeline and nine-stage task lifecycle, the RBAC model, and the surface itself: a dashboard, a projects module with per-project tabs for assets, rename plans, prompt packs, tasks and review, a kanban task board, and a 12-tab admin panel.
Synthesised three-tradition reading practice with falsifiable prediction tracking; open sign-up, with the full reading by application.
Started from what a bookmark bar actually holds rather than from what an image library usually models, which is why archives, pages and tools are first-class kinds instead of pictures with the wrong metadata attached.
Vault sovereignty as a hard constraint: markdown files, no database. Telegram as the universal capture surface.
One operator surface where three separate broker apps used to be.
Tested the broker-facing UI and UX in repeated sessions with individual brokers, and set up a feedback loop every broker in the company can use, so changes shipped against what brokers actually ran into.
Repositioned from another data feed to the orchestration layer, then from a Miami-Dade demo to a nationwide one - the interface is the product.
Chose the output format as the product. The artifact is one markdown block sized for whoever acts next, so the same review works for a human designer and for a coding agent with no second version of it.
The positioning is the valuation that shows its working. Bayut and Property Finder are black boxes; the differentiator is that every displayed number produces an evidence row inside the engine rather than in the page, which is what stops a figure reaching the screen without provenance. Where a number cannot be sourced the surface says so out loud rather than quietly deriving it from the figure it was meant to explain. Net yield is the sharpest case: it is the number the portals do not publish, and it needs a service charge, which is published in no feed at all. So the charges are curated by hand as a band per community, and the yield is published as a range, because the sources make a single figure indefensible: Downtown Dubai runs from AED 21 per square foot in one tower to 67.88 in another. Three of the fifteen communities have no cited source and therefore no net yield, which the evidence table states plainly.
20 projects on the work index, plus 4 direction decks under creative.