Pax Historia-style sim where the LLM is the world engine.
- React 19 + Vite 6 + Tailwind v4 + shadcn/ui frontend
- Express single-port backend (/api + /sse + built client + SPA fallback)
- SQLite (better-sqlite3) persistence, one row per game
- MapLibre choropleth map (OpenFreeMap dark + ISO_A3 regions)
- Defensive turn loop: strip fences, balanced-{} extract, parse, clamp 0-100,
retry-once nudge, generic 'unclear' fallback; never crashes on bad output
- 5 seed presets (wwii-1939, coldwar-1955, modern-2025, no-wwii-1940, aegis-2400)
- LLM client over native fetch w/ injectable transport (mesh-bot pattern);
LLM_STUB=1 deterministic transport for tests/e2e
- Unit (vitest, 19) + deterministic Playwright e2e
- Multi-stage node:22-slim Docker + Traefik (history.dev.kkhost.pl:4321)
Co-Authored-By: OpenCode <opencode@users.noreply.github.com>
67 lines
3.5 KiB
JSON
67 lines
3.5 KiB
JSON
{
|
|
"id": "coldwar-1955",
|
|
"title": "The Cold War",
|
|
"startDate": "1955-01-01",
|
|
"summary": "Two superpowers, one world. Proxy wars, space races, and the ever-present shadow of the bomb.",
|
|
"worldBackground": "It is 1955. The Second World War is over, and the world is split into two armed camps. The United States and its Western allies command industrial might and a growing nuclear arsenal; the Soviet Union and its bloc answer with vast manpower, a sprawling industrial base, and a rival nuclear program. Neither side can win a direct war without risking mutual annihilation, so the contest is fought everywhere else — in Berlin, in Korea, in the new space race, and in the non-aligned world.\n\nThe superpowers court the nations of the Global South, fund coups and revolutions, and trade in influence as much as in dollars and rubles. The nuclear arms race defines every decision: every treaty, every test, every missile site. You are the leader of one of these powers — or a key player on one side of the divide — and you must outlast your rival without starting the war that ends everything.",
|
|
"simulationRules": [
|
|
"Serious, historically-grounded tone appropriate to the early Cold War era.",
|
|
"Prefer gradual change: 1-4 events per turn; the balance of the superpowers shifts slowly.",
|
|
"Nuclear escalation is catastrophic and rare; avoid it unless the player explicitly risks it.",
|
|
"Respect existing borders (the Iron Curtain) unless a major political or military shift occurs.",
|
|
"No single nation may dominate the world; the two blocs remain in uneasy equilibrium.",
|
|
"Proxy conflicts and espionage are the primary arenas of competition.",
|
|
"Keep all stat values between 0 and 100."
|
|
],
|
|
"nations": [
|
|
{
|
|
"id": "us",
|
|
"name": "United States",
|
|
"type": "major",
|
|
"stats": { "military": 95, "economy": 95, "stability": 75, "population": 85 },
|
|
"territory": ["USA", "CAN", "MEX"],
|
|
"relations": { "su": "hostile", "uk": "ally", "cn": "hostile", "wdg": "ally", "fr": "ally" }
|
|
},
|
|
{
|
|
"id": "su",
|
|
"name": "Soviet Union",
|
|
"type": "major",
|
|
"stats": { "military": 90, "economy": 70, "stability": 80, "population": 100 },
|
|
"territory": ["RUS", "UKR", "BLR", "GEO", "KAZ"],
|
|
"relations": { "us": "hostile", "uk": "neutral", "cn": "ally", "wdg": "hostile", "fr": "neutral" }
|
|
},
|
|
{
|
|
"id": "uk",
|
|
"name": "United Kingdom",
|
|
"type": "major",
|
|
"stats": { "military": 70, "economy": 70, "stability": 75, "population": 55 },
|
|
"territory": ["GBR", "IRL"],
|
|
"relations": { "us": "ally", "su": "neutral", "cn": "neutral", "wdg": "ally", "fr": "ally" }
|
|
},
|
|
{
|
|
"id": "cn",
|
|
"name": "People's Republic of China",
|
|
"type": "major",
|
|
"stats": { "military": 80, "economy": 40, "stability": 85, "population": 100 },
|
|
"territory": ["CHN", "MNG"],
|
|
"relations": { "us": "hostile", "su": "ally", "uk": "neutral", "wdg": "hostile", "fr": "neutral" }
|
|
},
|
|
{
|
|
"id": "fr",
|
|
"name": "France",
|
|
"type": "major",
|
|
"stats": { "military": 60, "economy": 65, "stability": 70, "population": 60 },
|
|
"territory": ["FRA", "DZA"],
|
|
"relations": { "us": "ally", "su": "neutral", "uk": "ally", "cn": "neutral", "wdg": "ally" }
|
|
},
|
|
{
|
|
"id": "wdg",
|
|
"name": "West Germany",
|
|
"type": "major",
|
|
"stats": { "military": 40, "economy": 60, "stability": 65, "population": 60 },
|
|
"territory": ["DEU"],
|
|
"relations": { "us": "ally", "su": "hostile", "uk": "ally", "cn": "hostile", "fr": "ally" }
|
|
}
|
|
]
|
|
}
|