# Neon Sprawl

**Neon Sprawl** is the working title for a crafting-focused sci-fi / cyberpunk MMORPG with **gigs** (combat roles) and open non-combat **skills** (solo-dev scope). Product intent and phase gates: [`neon_sprawl_vision.plan.md`](neon_sprawl_vision.plan.md). **Design axioms:** it must be **fun**, and it must stay **distinctly cyberpunk** in theme (see [Design axioms](neon_sprawl_vision.plan.md#design-axioms-governing) in the vision plan).

## Tech stack (locked)

| Area | Choice |
|------|--------|
| Client | **Godot 4.x** (GDScript) |
| Game server | **C# / .NET 10** (ASP.NET Core), **PostgreSQL**, **Protobuf** (JSON OK for earliest spike) |
| Content | **JSON/YAML** + **JSON Schema** in CI |

Full rationale and constraints: [`docs/architecture/tech_stack.md`](docs/architecture/tech_stack.md).

## Decomposition

Epic-level breakdown: [`docs/decomposition/README.md`](docs/decomposition/README.md).

## Git workflow

- **Documentation** (Markdown under `docs/`, README files, `neon_sprawl_vision.plan.md`): work and commit **directly on `main`**.
- **Code and implementation** (server/client source, Godot project, `content/` data, Docker/build/CI config): use a **branch**, then merge to `main` when ready. Mixed doc + code changes follow the branch rule.

## Repository layout (prototype scaffold)

| Path | Purpose |
|------|---------|
| [`NeonSprawl.sln`](NeonSprawl.sln) | .NET solution |
| [`server/NeonSprawl.Server/`](server/NeonSprawl.Server/) | ASP.NET Core game server |
| [`client/`](client/) | Godot 4.x project (import `project.godot`) |
| [`content/`](content/) | JSON data + JSON Schema (`skills/`, `schemas/`) |
| [`docker-compose.yml`](docker-compose.yml) | Local **PostgreSQL** (`docker compose up -d`) |

### Run the server

```bash
cd server/NeonSprawl.Server && dotnet run
```

Then open `http://localhost:5253/health` (port from `launchSettings.json`).

### Run Postgres locally

```bash
docker compose up -d
```

Connection (dev): host `localhost`, port `5432`, database `neon_sprawl`, user `neon_sprawl`, password `neon_sprawl_dev`.

### Run the client

Open the [`client/`](client/) folder in **Godot 4.6** and run the main scene (see [`client/README.md`](client/README.md)).
