Inspiration

In 2015, after my master’s at the University of Portsmouth, a friend and I set out to build a Nigerian version of UNiDAYS. Infrastructure gaps slowed us, but our social media took off and inspired a more productive local app. I designed RateMe, which paid users for high‑quality engagement; a failed outsourced build pushed me to learn to code and reimagine the idea as Ụwa—a privacy‑first Aleo metaverse that blends blockchain, social gamification, and meaningful in‑world interaction.

What it does

Ụwa is a browser‑based, voxel economy game where players gather, craft, run shops, and trade. It’s optimized for low‑end devices and uses Aleo zero‑knowledge proofs to keep ownership, reputation, and transactions private.

How we built it

I prototyped by vibe‑coding with Replit Agent, then hardened with Augment Code and manual refactors. The stack is React + Three.js (R3F) with TypeScript, Vite, and Zustand; a voxel engine uses greedy meshing, InstancedMesh, and Web Workers, with raycast build/erase and AABB collisions. It’s offline‑first via a Service Worker and IndexedDB saves, and optimized for low‑end phones with LOD, KTX2 texture compression, pooling, and a fixed‑timestep loop (~30 FPS on 2019 Androids). Aleo ZK provides privacy (client‑side proofs; commitments only on‑chain), with CI/CD via GitHub Actions, Playwright smoke tests, Lighthouse budgets, and static hosting.

Challenges we ran into

  • Memory & rendering: We hit JS heap/VRAM limits on low‑end phones, so we added a fog‑of‑war / ring‑of‑interest culling—only ~20–30 blocks around the player render—plus chunk streaming and mesh pooling. This cut active geometry and stabilized FPS on constrained devices.
  • Controls: We tested FPS and fly modes but mobile usability suffered. We settled on tank‑style controls (forward/back + turn) with a soft follow‑camera and joystick dead‑zone for precise movement.
  • Economy balancing: Prices felt arbitrary at first. We pegged value to player time: one “credit” ≈ a fixed gather/craft time budget. We ran agent‑based simulations and Monte Carlo playtests to converge on exchange rates, then added a damped market‑maker to curb inflation and exploits.
  • Aleo integration: Early proof latency and circuit size caused jank. We split circuits into smaller modules, moved proving to WASM in Web Workers, used commit‑reveal + deferred verification, and added an offline mock‑proof fallback until the network reconnects. ## Accomplishments that we're proud of
  • Playable, offline‑first demo as a PWA with Service Worker caching and IndexedDB save/restore.
  • Stable ~30 FPS on 2019 Androids via greedy meshing, instancing, fog‑of‑war ring‑of‑interest, chunk streaming, and pooling.
  • Memory stability on low‑RAM phones by capping active geometry and deferring asset loads.
  • Intuitive mobile controls: tank‑style navigation with follow‑camera and joystick dead‑zone (touch + keyboard).
  • Privacy core working: client‑side Aleo proof generation in WASM workers, commit‑reveal + deferred verification, and offline mock‑proof fallback.
  • Balanced economy: time‑pegged pricing, agent‑based simulations, and a damped market‑maker to curb inflation/exploits.
  • Engineering rigor: TypeScript, GitHub Actions CI, Playwright smoke tests, Lighthouse perf budgets, reproducible Vite+pnpm builds.
  • Africa‑ready: compressed assets (KTX2), small bundles, intermittent‑connectivity tolerance, and entry‑level device targets. ## What we learned
  • Design for constraints first. Treating a 2019 Android as the baseline changes everything—bundle size, memory budgets, and input all drive architecture and UX.
  • Render less, sooner. In voxels, geometry—not textures—blew up memory. A fog‑of‑war “ring‑of‑interest,” chunk streaming, instancing, and greedy meshing beat naive occlusion every time.
  • Move work off the main thread. Meshing, compression, and saves in Web Workers reduced jank; object pools and a fixed timestep kept GC spikes in check.
  • Touch wins different controls. Tank‑style movement with a follow‑camera was far more reliable on mobile than FPS/fly modes; small joystick dead‑zones matter.
  • Offline is a feature, not a mode. Service Worker + IndexedDB works, but you need compression, versioned saves, and resilient sync for storage evictions and flaky networks.
  • Balance the economy with time. Pegging prices to player‑time, plus agent‑based simulations, gave saner exchange rates and exposed exploit loops early.
  • ZK UX needs patience. Smaller Aleo circuits, WASM proving in Workers, and commit‑reveal receipts made proofs feel “instant,” even when verification is deferred.
  • AI pair‑programming is a jumpstart, not a substitute. Vibe‑coding sped ideation, but strict typing, tests, and CI were essential to harden the codebase for low‑end devices.
  • Localization by constraints. Minimal text, clear iconography, and tolerant flows (intermittent connectivity, small screens) improved usability for our Africa‑first audience. ## What's next for Uwa
  • Aleo mainnet integration: Finalize audited circuits for trade escrow, marketplace settlement, and reputation attestations; client‑side proving in WASM with proof batching and gas abstraction.
  • Earning loops: Job board (gather/craft/delivery contracts), shopkeeping with time‑pegged prices, guild bounties, and seasonal events; cash‑out via Aleo partners at withdrawal only.
  • Creator economy: Player‑made blueprints/skins with private ownership proofs and revenue share on secondary sales.
  • Live‑in systems: Persistent plots (housing/farming), daily upkeep loops, and social hubs to support long‑term play and community.
  • Economy hardening: Market‑maker v2, anti‑bot rate limits, and calibrated sinks/sources to keep inflation in check.
  • Mobile polish: Thumb‑friendly tank controls, haptics, ultra‑low‑memory mode, and background save/restore for spotty networks.
  • Onboarding & safety: Guest mode, custodial wallets, cash‑out KYC only, exploit‑resistant contracts, and moderation tools.
  • Localization: Lightweight Hausa/Igbo/Yoruba packs and an offline tutorial for first‑time players.
  • Privacy‑preserving analytics: On‑device aggregation with periodic, consented sync to guide balancing without raw data exposure.
  • Pilots & partnerships: Education/NGO pilots for digital skills and micro‑entrepreneurship; grant + co‑dev opportunities to scale content.

Built With

  • aleo-sdk
  • augment
  • background-sync
  • cache-storage-api
  • client?side
  • code
  • github-actions
  • greedy-meshing
  • indexeddb-(save/restore)
  • instancedmesh
  • javascript
  • ktx2/basisu-texture-compression
  • object-pooling
  • pnpm
  • proving
  • react
  • react?three?fiber
  • replit-agent-(prototype)
  • service-worker
  • three.js
  • typescript
  • vite
  • wasm)
  • web-workers
  • webassembly
  • webgl
  • zk
  • zustand
Share this project:

Updates