A modular, real-time virtual world where users can move as avatars, chat with others in real time, and experience spatial interactions --- all rendered in a browser using a scalable monorepo architecture.
-
π§ Multiplayer avatar movement and real-time sync
-
π¬ Spatial talk with peer-to-peer and server-based voice/video
-
βοΈ Modular monorepo setup using Turborepo and PNPM Workspaces
-
π§© Highly reusable component system powered by @repo/ui
-
π Scalable backend structure (
http
,ws
) with LiveKit, Prisma -
βοΈ Hosting-ready for AWS S3 (frontend) & EC2 (backend)
-
React 19 + Vite 6
-
Tailwind CSS, Framer Motion
-
React Router v7
-
PeerJS
-
Reusable UI via
@repo/ui
-
Hosted on AWS S3
-
Node.js + Express
-
REST APIs (Auth, Rooms, Users)
-
Prisma ORM + PostgreSQL
-
JWT Auth, Zod Validation
-
LiveKit Server SDK
-
WebSocket server (
ws
) -
UUID for user IDs
-
LiveKit Client SDK
-
TypeScript across all packages
-
Turborepo + PNPM Workspaces
-
Esbuild for backend bundling
-
Prettier & ESLint
-
Vite Plugin Compression
Create a .env
file in each app (apps/frontend
, apps/http
, apps/ws
):
PORT=3001 DATABASE_URL=postgresql://user:pass@localhost:5432/metaverse JWT_SECRET=your-secret-key LIVEKIT_API_KEY=your-api-key LIVEKIT_SECRET=your-secret
PORT=4000 LIVEKIT_API_KEY=your-api-key LIVEKIT_SECRET=your-secret
VITE_API_URL=http://localhost:3001 VITE_WS_URL=ws://localhost:4000
Command | Description |
---|---|
pnpm dev |
Run all apps in development |
pnpm build |
Build all apps and packages |
pnpm lint |
Lint the entire repo |
pnpm format |
Format with Prettier |
pnpm start |
Start frontend preview (filtered) |
pnpm aws |
Build and deploy frontend to AWS S3 |
-
Frontend: Built with Vite and deployable via
aws s3 sync
to S3. -
Backend: Deploy HTTP and WS servers to AWS EC2 or Vercel Functions.
-
LiveKit: Requires self-hosted or cloud LiveKit server.
-
In-world object interaction
-
Avatar customization
-
Room creation and admin controls
-
Spatial voice + world state persistence
-
In-game currency / NFTs (Web3 mode)
MIT License Β© 2025 Kartik