# VOID::NAV VOID::NAV is now a pnpm workspace monorepo for the game website, living design docs, browser game shell, and SpacetimeDB backend module. ## Layout ```text apps/docs Existing docs, interactive demos, and vertical slice apps/site Public landing page / game website apps/game Playable game shell connected to SpacetimeDB bindings packages/ui Small shared UI primitives and CSS tokens services/spacetimedb TypeScript SpacetimeDB module archive/legacy-static Legacy static prototype files kept for reference ``` ## Prerequisites - Node.js 24+ - pnpm 9+ - SpacetimeDB CLI for backend build, generation, and local DB runs The SpacetimeDB CLI is not vendored. Frontend builds use the committed placeholder bindings in `apps/game/src/module_bindings`; run `pnpm generate:bindings` after installing the CLI to replace them with generated bindings. ## Development ```bash pnpm install pnpm dev:docs pnpm dev:site pnpm dev:game ``` Default ports: - docs: `http://localhost:5173/docs` - site: `http://localhost:5174` - game: `http://localhost:5175` The public site links to docs and game via: ```text VITE_DOCS_URL=http://localhost:5173/docs VITE_GAME_URL=http://localhost:5175 ``` The game shell reads: ```text VITE_SPACETIME_URI=http://localhost:3000 VITE_SPACETIME_DATABASE=void-nav-dev ``` ## Builds ```bash pnpm --filter @void-nav/docs build pnpm --filter @void-nav/site build pnpm --filter @void-nav/game build pnpm build pnpm check ``` ## SpacetimeDB Root `spacetime.json` points at `services/spacetimedb` and generates TypeScript bindings into `apps/game/src/module_bindings`. With the CLI installed: ```bash spacetime build --module-path services/spacetimedb pnpm generate:bindings pnpm dev:db ``` `pnpm dev:db` targets the SpacetimeDB CLI server nickname `local` so development publishes to `http://127.0.0.1:3000` instead of any configured cloud default. Initial reducers: - `connectPlayer(displayName: string)` - `renamePlayer(displayName: string)` - `seedWorld()` - `ping()` The game shell calls `connectPlayer` after connection, subscribes to starter shell rows, and displays connection, player, ship, system, station, and reducer status. When SpacetimeDB is unavailable or bindings are still placeholders, it shows a clear disconnected/error state.