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