Virtual Campus, my own product, public since July 2026
- of the 903 sign-ups walked into the 3D campus, first ten days, July 2026
- 97%
- from the 3D rebuild decision to launch, on a platform begun in March
- 16 days
- tests passing and 0 failing, September 8, 2026
- 2,288
The problem
After I graduated from IBA Karachi, the people I saw every day for four years turned into names in a quiet group chat. I wanted a place anyone could reach from a link, free and with no install, that felt like the real campus.
It had to run on ordinary laptops and phones, and I was building it alone.
What I built
virtual-campus
- Any browser desktop or phone, no install
- 3D campus React Three Fiber and Rapier
- Realtime gateway WebSockets, zone-sharded rooms
- Proximity voice self-hosted LiveKit
- Database and logins self-hosted Supabase
Served from my own Oracle server
- The real campus, traced from OpenStreetMap footprints, walkable as an avatar in any browser tab with no install.
- Realtime presence, proximity voice, messages and watch parties run in the same world, with voice and screenings on servers I run.
- One AI writes the code, a second AI audits it, and I decide what ships: 15 of 48 changes were sent back.
How it runs
The campus is served from my own Oracle server, Docker behind Caddy, and one script builds, ships and health-checks every deploy. Nothing deploys until the client build, the full test suite, a 3D render and movement probe and a mobile touch smoke test pass, and GitHub Actions runs the unit tests and browser smokes too. Since September 8, 2026 the database, logins and storage run on a self-hosted Supabase on the same server, with a nightly backup that checks its own contents.
Proof and limits
From the product's own records: the sign-up and session snapshot of July 28, 2026, the decision log, and the review of the database move on September 8, 2026.
What I do not claim
- No community or retention claim.
- 903 and 97% cover the first ten days public, as of July 28, 2026, and include current students as well as alumni.
- The 60 fps target on an ordinary laptop is a budget, not a result: the reference-hardware run is still open, and earlier recorded runs fell short of it.
The same for you
The same build fits any shared place people should reach from a link: a campus, an office, an event. Realtime presence, voice and a backend on your own server are the hard parts, and all three already run here.
Custom work is scoped and priced in writing within 24 hours of a call. Fixed-price packages for a full-stack web app start at $499.
Engineering notes
The real campus, traced from OpenStreetMap footprints, walkable as an avatar in any browser tab with no install.
The main campus is generated from OpenStreetMap footprints, 20 buildings, 32 paths and 5 pitches, and published as a versioned world config.
The world runs on React Three Fiber with Rapier physics and a custom character controller, with rigged and animated avatars, an avatar studio and a PixiJS 2D fallback.
On phones it has touch controls, it installs as an app, and it sends web push and email notifications.
Realtime presence, proximity voice, messages and watch parties run in the same world, with voice and screenings on servers I run.
A WebSocket gateway with zone-sharded rooms carries movement and presence. Spatial voice runs on a self-hosted LiveKit server, and screenings stream through a self-hosted MediaMTX server.
Direct messages, a searchable directory, cricket, football, watch parties, screenings and events were live on launch day, and campus cats you can pet and feed followed a week later.
One AI writes the code, a second AI audits it, and I decide what ships: 15 of 48 changes were sent back.
Claude is the lead engineer and writes a change record for every change. Codex reviews each one on its own and returns a ship or don't-ship verdict. I read the verdict and decide which findings are applied; nothing is applied automatically.
48 changes went through that review between July 21 and September 8, 2026. 15 were sent back.
The roles can swap: when Codex writes the change, Claude audits it.
What happens when it fails?
- A nightly backup checks its own contents and was proven to fail on a bad dump, and a restore drill rebuilt the live data in a scratch database.
- 16 of 16 live checks passed when the database moved to my own server, and logins saved before the move kept working.
- After the move, login took 0.44 s, against about 0.70 s on the cloud database.
- Row-level security is mandatory for user data, and production metrics stay closed behind a token.
Project facts
- Client
- My own product
- Industry
- Education (3D social world)
- Region
- Pakistan, open to anyone online
- Timeline
- Since March 2026, public since July 18, 2026
- Role
- Built and run end to end: 3D world, realtime backend and servers
Stack
- React
- Vite
- three.js
- React Three Fiber
- Rapier
- PixiJS
- Node.js
- WebSockets
- Supabase (self-hosted)
- LiveKit
- MediaMTX
- Docker
- Caddy
- Playwright
- GitHub Actions
- OpenStreetMap
Updated