Files
Space-Game/AGENTS.md
francy51 a7796a1394 Split Rust game src into modules; update AGENTS.md for dual toolchain
- 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
2026-06-04 10:00:43 -04:00

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 config
  • tsconfig.base.json — Shared TypeScript config (ES2020, React JSX) — does not apply to apps/game
  • apps/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:bindings are consumed by the docs prototype, not the game).
  • Naming follows RFC 344: see apps/game/AGENTS.md for 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/docs uses React Three Fiber + Drei + Three.js
  • Module bindings are auto-generated — never edit generated bindings by hand