Files
Space-Game/README.md
francy51 7c93b8a1ae Add game UI panels, keyboard shortcuts, docs narrative overhaul, and unified dev script
- Add MiniStarMap, NpcMarketPanel, ShipStatusPanel, useKeyboardShortcuts
- Add progress bars for approach/mining operations and cargo fill indicator
- Rewrite docs from spreadsheet-first to exploration-first open-world RPG
- Replace dev:db + dev:standalone with unified dev script (scripts/dev.sh)
- Add Vite chunk splitting for three.js and spacetimedb
- Fix displayName dependency in useSpacetimeConnection
- Remove stale usePlayerSession.ts
- Add AGENTS.md files across all packages
2026-06-02 17:32:15 -04:00

3.7 KiB

VOID::NAV

An open-world space exploration RPG — trade, quest, fight, or simply drift and enjoy the ambiance. Inspired by the charm and freedom of Windward Horizon, set in a procedurally generated galaxy with FTL-style tactical combat.

You are a young, unaffiliated captain with an entire galaxy open for exploration. Every campaign features a unique, procedurally generated sector map. Trade goods between stations, take on quests for various factions, mine asteroid belts, or simply cruise and enjoy the void. Prefer a quieter life? You can simply sail the stars.

Combat is FTL-style tactical resource management — no dogfighting or direct piloting. Click a hostile, your ship auto-engages, and you manage reactor power between Weapons / Shields / Engines / Auxiliary. The skill is in what you power and when, not how fast you click.

VOID::NAV is a pnpm workspace monorepo for the game website, living design docs, browser game shell, and SpacetimeDB backend module.

Core Pillars

Pillar Description
Open-World Exploration Procedurally generated galaxy with unique sectors, anomalies, and hidden treasures every campaign
Trade & Commerce Regional price differences, supply/demand, and trade routes between stations and factions
FTL-Style Combat Tactical power management (not action). Auto-engage with reactor allocation decisions
Ship Customization Build the ship that suits your style — tough juggernaut, nimble scout, or cargo hauler
Dynamic World Impact Faction leaders, world events, and player actions shape the galaxy without firing a shot
Solo or Co-op Brave the void alone or crew with friends. Built with co-op in mind.

Layout

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 (spacetime) v2.3.0+

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.

Quick Start

pnpm install
pnpm dev

This single command starts a fresh SpacetimeDB instance (ephemeral, in-memory), publishes the module, generates bindings, and launches the game dev server.

Open http://localhost:5175 to play.

Press Ctrl+C to stop everything.

Development

pnpm dev            # Full stack: SpacetimeDB + game (port 5175)
pnpm dev:docs       # Docs only (port 5173)
pnpm dev:site       # Site only (port 5174)
pnpm dev:game       # Game frontend only (requires running SpacetimeDB)

Default ports:

  • docs: http://localhost:5173/docs
  • site: http://localhost:5174
  • game: http://localhost:5175
  • SpacetimeDB: http://127.0.0.1:3000

Builds

pnpm build          # Build all apps
pnpm check          # Typecheck all packages
pnpm generate:bindings  # Regenerate SpacetimeDB TypeScript bindings

SpacetimeDB

Root spacetime.json points at services/spacetimedb and generates TypeScript bindings into apps/game/src/module_bindings.

The pnpm dev script uses an isolated ephemeral data directory (.spacetime-dev/) so it starts clean every time. No stale database or auth issues.

Reducers: connectPlayer, renamePlayer, seedWorld, ping, undock, selectTarget, startApproach, completeApproach, dock, startMining, completeMiningCycle, sellOreToNpcMarket