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": "no-wwii-1940",
|
|
"title": "The Great Power Balance",
|
|
"startDate": "1940-01-01",
|
|
"summary": "A 1939 Anglo-German pact averted total war. Will the tense peace hold, or fracture into something worse?",
|
|
"worldBackground": "In 1939, a stunning Anglo-German non-aggression pact averted the war that history remembers. Europe in 1940 is not burning — it is holding its breath. Germany is industrializing into a continental colossus but has been checked at the diplomatic border; Britain, spared a war on two fronts, is consolidating its empire and its navy; France, the old continent's center of gravity, watches nervously. The Soviet Union has turned inward and is quietly building the largest army in human history. Across the Pacific, Japan and the United States circle each other over Asia and the seas.\n\nThis is a world of fragile, knife-edge balances. Every alliance can be a future front. Every trade deal a hidden tripwire. You are a great power in this alternate 1940, and you have been handed a peace — for now. Manage it, or break it.",
|
|
"simulationRules": [
|
|
"A counterfactual, but keep it historically grounded and internally consistent.",
|
|
"Serious tone; write like a historian describing a world that almost was.",
|
|
"Prefer gradual change: 1-4 events per turn; the peace is fragile but not yet broken.",
|
|
"Respect the (altered) 1940 borders; a break in the peace is a major, hard-won event.",
|
|
"No single nation may dominate the world; the balance of power is the defining feature.",
|
|
"Treat the absence of a world war as the baseline, not the exception.",
|
|
"Keep all stat values between 0 and 100."
|
|
],
|
|
"nations": [
|
|
{
|
|
"id": "uk",
|
|
"name": "United Kingdom",
|
|
"type": "major",
|
|
"stats": { "military": 75, "economy": 80, "stability": 85, "population": 60 },
|
|
"territory": ["GBR", "IRL", "IND", "AUS", "CAN"],
|
|
"relations": { "de": "neutral", "fr": "ally", "us": "neutral", "su": "neutral", "jp": "rival" }
|
|
},
|
|
{
|
|
"id": "de",
|
|
"name": "German Reich",
|
|
"type": "major",
|
|
"stats": { "military": 80, "economy": 80, "stability": 80, "population": 85 },
|
|
"territory": ["DEU", "AUT"],
|
|
"relations": { "uk": "neutral", "fr": "neutral", "us": "neutral", "su": "hostile", "jp": "neutral" }
|
|
},
|
|
{
|
|
"id": "fr",
|
|
"name": "France",
|
|
"type": "major",
|
|
"stats": { "military": 70, "economy": 75, "stability": 80, "population": 70 },
|
|
"territory": ["FRA", "BEL", "LUX"],
|
|
"relations": { "uk": "ally", "de": "neutral", "us": "neutral", "su": "hostile", "jp": "neutral" }
|
|
},
|
|
{
|
|
"id": "us",
|
|
"name": "United States",
|
|
"type": "major",
|
|
"stats": { "military": 65, "economy": 90, "stability": 85, "population": 80 },
|
|
"territory": ["USA", "MEX", "BRA"],
|
|
"relations": { "uk": "neutral", "de": "neutral", "fr": "neutral", "su": "neutral", "jp": "rival" }
|
|
},
|
|
{
|
|
"id": "su",
|
|
"name": "Soviet Union",
|
|
"type": "major",
|
|
"stats": { "military": 75, "economy": 60, "stability": 90, "population": 95 },
|
|
"territory": ["RUS", "UKR", "GEO"],
|
|
"relations": { "uk": "neutral", "de": "hostile", "fr": "hostile", "us": "neutral", "jp": "hostile" }
|
|
},
|
|
{
|
|
"id": "jp",
|
|
"name": "Empire of Japan",
|
|
"type": "major",
|
|
"stats": { "military": 80, "economy": 60, "stability": 75, "population": 85 },
|
|
"territory": ["JPN", "KOR"],
|
|
"relations": { "us": "rival", "uk": "rival", "de": "neutral", "su": "hostile", "fr": "neutral" }
|
|
}
|
|
]
|
|
}
|