A national tourism metaverse — real-time 3D on the web, multi-chain underneath
A national tourism metaverse for the Saudi Ministry of Tourism — a browser-based, multi-user 3D world with an on-chain identity and collectibles layer. I led it full-stack across the real-time 3D client, a multi-chain smart-contract layer, a Node.js/Ts.ED backend and the production DevOps — under one constraint that shaped every decision: the users are tourists, not crypto natives.
What I owned
- Led the browser 3D client (React/Next.js + Three.js / React Three Fiber) — holding 60fps on a photoreal world by collapsing thousands of draw calls into a handful with instancing (InstancedMesh / drei Instances), plus LOD and culling.
- Built the 3D asset pipeline: FBX → glTF, Draco geometry compression (~90% smaller downloads) and KTX2 / Basis GPU-texture compression (4–8× less VRAM) — because Draco shrinks the download and KTX2 shrinks the GPU memory, and a tourist on a phone needs both.
- Made web3 invisible for non-crypto users: email/social login → a non-custodial embedded wallet (no seed phrase) → an ERC-4337 smart account with a paymaster sponsoring gas, so a first-timer mints their passport and collects landmark POAPs without ever seeing a seed phrase or a gas token.
- Designed the on-chain identity: a soulbound (ERC-5192, non-transferable) tourism passport that doubles as an ERC-6551 token-bound account holding the visitor's POAP attendance stamps and credentials, kept dynamic (ERC-4906) as they explore.
- Architected the multi-chain deployment: the same contracts at a deterministic CREATE2 address on every EVM chain, moving state cross-chain only where genuinely needed through rate-limited, independently-verified messaging — with an explicit, honest risk posture, since bridges are the most-exploited part of the stack.
- Built the real-time multiplayer layer: an authoritative presence server (Colyseus) with client-side prediction, entity interpolation and interest management (only syncing what's near you), scaled with a Redis pub/sub adapter behind sticky sessions.
- Owned the Node.js/Ts.ED backend and the production DevOps — Dockerized services behind Nginx (TLS, HTTP/2, WebSocket upgrade, brotli for glTF), assets served from a CDN with content-hashed, immutable caching.
- Shipped it as a government product: Arabic RTL and i18n throughout, and non-3D fallbacks so it meets WCAG accessibility — a WebGL canvas is opaque to assistive tech, so it can never be the only path to information.
- Client Saudi Ministry of Tourism
- Experience Real-time 3D · multi-user
- Onboarding Gasless · no seed phrase
- Identity Soulbound multi-chain passport
▶ WALKTHROUGH
Loom walkthrough of the architecture: the real-time 3D stack (instancing + Draco/KTX2), the gasless onboarding flow, and the soulbound multi-chain passport. Record it and drop the embed URL into caseStudies.ts.