- Refactor apps/game/src/main.rs into modules: state.rs, camera.rs, ui/, gameplay/ - Add gameplay/galaxy_creation.rs scaffold (stubs only, no new logic) - Update root AGENTS.md: separate TS workspace vs Rust game commands - Update apps/AGENTS.md: docs/game/site use two toolchains, not one - Add apps/game/AGENTS.md: build commands, module layout, naming conventions, Plugin pattern
2.6 KiB
2.6 KiB
VOID::NAV — Monorepo Root
Single-player open-world space exploration RPG. Windward Horizon in space with FTL-style combat.
Directory Map
| Path | Purpose |
|---|---|
apps/docs |
Living design docs, interactive demos, and vertical-slice prototype (Vite + React) |
apps/game |
Playable game client — Rust + Bevy (independent of the JS/TS workspace) |
apps/site |
Public landing page (Vite + React) |
packages/ui |
Shared UI primitives and design tokens for the TS apps |
services/spacetimedb |
SpacetimeDB TypeScript backend module (authoritative game state) |
scripts/ |
Dev tooling (dev.sh startup script) |
archive/ |
Legacy pre-monorepo files kept for reference |
Key Files
package.json— pnpm workspace scripts (dev,build,check,generate:bindings)pnpm-workspace.yaml— workspace glob patterns (covers TS apps only)spacetime.json— SpacetimeDB module path and binding generation configtsconfig.base.json— Shared TypeScript config (ES2020, React JSX) — does not apply toapps/gameapps/game/Cargo.toml— Rust manifest for the game binary
Commands
JS/TS workspace (docs, site, packages/ui, services)
pnpm dev # Full stack: SpacetimeDB + docs/site
pnpm dev:docs # Docs only (port 5173)
pnpm dev:site # Site only (port 5174)
pnpm build # Build all TS packages
pnpm check # Typecheck all TS packages
pnpm generate:bindings # Regenerate SpacetimeDB TypeScript bindings
Rust game (apps/game)
cd apps/game
cargo run # Build + run the game binary
cargo check # Fast typecheck
cargo build # Build without running
cargo clippy # Lint
Architecture Notes
- Two independent toolchains coexist: the pnpm/TS workspace (docs, site, UI lib, SpacetimeDB backend) and the Cargo/Rust game client. They share no code.
- SpacetimeDB remains the authoritative persistence layer. The game client will connect to it via the SpacetimeDB Rust SDK when wired up (TS bindings generated by
pnpm generate:bindingsare consumed by the docs prototype, not the game). - Naming follows RFC 344: see
apps/game/AGENTS.mdfor Rust/Bevy conventions.
Conventions (TS apps)
- SpacetimeDB is the persistence layer from day 1 — no localStorage for game state in the docs prototype
- TS apps use Tailwind CSS v4 with custom design tokens from
packages/ui - 3D rendering in
apps/docsuses React Three Fiber + Drei + Three.js - Module bindings are auto-generated — never edit generated bindings by hand