# Roadmap

Where Atlantic Rift goes from here. Grouped by decision horizon — not wishlist ordering.

## Reading this document

The ROADMAP has three horizons and one graveyard.

**Horizon 1 (v12):** Post-launch polish. Driven by real user feedback from the first 2–3 weeks after go-live. What we ship is what players actually asked for, not what we predicted they'd ask for. Estimated effort per item is in developer-days with AI pair-programming cadence (roughly 4× a solo-developer pace).

**Horizon 2 (v13):** Depth. The Wealth-of-Nations macro layer, treaty negotiations mini-game, conflict tiers. Each of these alone is 3–5 days of work and changes how the game plays. We pick one per release cycle, not three.

**Horizon 3 (v14+):** Ambition. Third playable bloc (China), multiplayer scenarios, daily-seeded games. Genuinely new territory. We don't commit to these without a concrete demand signal.

**Graveyard:** Things that fit our design discipline to *exclude*. These are here to protect us from feature drift — revisit them only when the reasoning in the graveyard entry stops applying.

---

## Horizon 1 — v12 (post-launch, feedback-driven)

These five items are pre-loaded for v12 because they either (a) address known gaps, (b) are requested by every third-party reader of the code, or (c) are cheap wins that make the showcase feel more finished. Priority order will be reset by first-wave user feedback once atlanticrift.cc is live for 2–3 weeks.

### 1. Save/Load via localStorage — *0.5 day*

The missing Crawford feature. Current game has no way to pause. Implementation:
- Serialize `state` object on every `endTurn()` → `localStorage.setItem('atlanticrift-save', JSON.stringify(state))`
- Start screen checks for existing save, offers "Continue" button
- "Export Save" → Base64 string to clipboard, shareable via messaging apps
- "Import Save" → paste to resume
- No backend, no accounts, no DSGVO complication (technically-necessary local storage, Art. 6 Abs. 1 lit. f DSGVO)

Why not in v11: we held it for after real user feedback. It will be in feedback. It will ship first.

### 2. Full EN/DE bilingual UI — *2 days*

A STRINGS-scaffold existed in v9 and was removed in v10 to avoid carrying a half-built i18n layer. Now it goes in cleanly. Scope:
- All status labels, action names, button text, modal copy: translated
- **Event headlines and crisis text: remain English** (200+ strings, separate future project)
- Language toggle in header, persists to localStorage
- `<html lang>` updates dynamically
- A11y: screen readers announce language change

This doubles as a ConsultD showcase — bilingual audiences are Daniel's actual client base.

### 3. Headlines deduplication with cooldowns — *0.5 day*

Current issue: same event can fire 3× in an 8-turn game if its `test()` keeps passing. Fix: each event tracks `lastFiredTurn`, cannot re-fire within 4 quarters. Simple, high-impact polish.

### 4. Force Tokens on the map — *2 days*

The most-asked-for feature in the design conversations. Three "force tokens" per player, deployable on the map (carrier groups, forward bases, division-equivalents).

Mechanics:
- Each deployed token passively reduces crisis probability in that country by ~30%
- Tokens can be "committed" during a crisis for an alignment swing bonus
- Maintenance cost: -8 treasury per token per turn
- Redeployment allowed at start of each turn (cost: 1 AP)
- Visual: small stroked circle with crossed-swords icon on the map, in bloc color

This is the first system that genuinely uses the map as an interactive surface rather than a display.

### 5. Improved Matomo hooks — *0.25 day*

Current implementation tracks game-end events only. Add:
- Session duration per game
- Action-type distribution per session
- Country-selection heatmap
- Quarter-reached histogram (where do players quit?)
- Mistral-headline success rate (did the API respond in time?)

All anonymous, all via existing `trackGameEvent()` helper. No new PII captured.

### Decision gate before v12 ships

Run a 2-week user-feedback window with atlanticrift.cc live. Collect:
- What did players try and fail to do?
- Where did they stop playing mid-game?
- What did they ask "can I…" about?

The top three answers override our pre-loaded list. We ship the intersection.

---

## Horizon 2 — v13 (depth)

Each of these three is a single-release project. Don't attempt multiple simultaneously — each touches a different part of the game and would turn into a refactor.

### Treaty Negotiations mini-game — *4 days*

When both blocs target the same country in the same turn, a 3-round bidding modal triggers. Each round, each side commits a package:
- Treasury allocation
- Military support commitment
- Tech transfer level

After 3 rounds, the target's government weighs totals against its internal preferences (government type, existing alignment, regional pressure). Highest-aligned contribution wins the country; the loser still pays. Captures the EU-India vs US-India dynamic organically.

Design constraint: the modal cannot take more than 90 seconds to resolve. If it's longer, it breaks the 20-minute session target.

### Wealth-of-Nations macro layer — *5 days*

The current fiscal model is reactive (debt stresses alignment and unity). The macro layer makes it proactive:

- **Debt service.** Each quarter, interest costs scale with debt load. At -100 treasury, 3/quarter service. At -200, 12/quarter service. You can go into a fiscal spiral.
- **Bond auctions.** Issuing bonds to cover expenditure. Demand depends on your alignment strength and the tension level. In Rupture, your bonds are uncovered — additional failure pathway.
- **Currency dominance.** Unit adoption now actively drains USD / EUR reserve status. Past 50% Unit adoption, US treasury drains 2/quarter automatically.

This is the hardest thing on the roadmap — requires rebalancing every existing action. Ship alone.

### Conflict Tiers — *3 days*

Currently all crises and frictions use the same UI and scale. Add explicit tiers:

- **Tier 1 — Friction.** Trade disputes, tariff rows, minor diplomatic incidents. Current default. Soft impacts.
- **Tier 2 — Dispute.** Sanctions escalation, territorial tension, ambassador recalls. Forces a choice modal.
- **Tier 3 — Standoff.** Military posturing, proxy escalation, near-conflict. Forces a choice with irreversible consequences.
- **Tier 4 — Armed.** Hot conflict between secondary powers. Locks affected countries for 2 quarters.
- **Tier 5 — Armageddon.** The Iran-Israel-direct scenario, Taiwan Strait, Baltic breach. Dedicated modal with Apocalyptic framing. Ends the game if mishandled.

Each tier gets a distinct visual language. Tier 5 in particular is reserved — it cannot fire in the first 8 quarters. This creates end-game gravity.

---

## Horizon 3 — v14+ (ambition)

Genuinely new territory. Not committed — gated on atlanticrift.cc sustaining real usage for 3+ months.

### China as a third playable bloc

The architecture supports this; the content doesn't. Adding China means:
- Chinese-POV briefing, actions, and event language (entirely new content layer)
- Different action palette (BRI Infrastructure Investment instead of Strategic Investment; Yuan Settlement Deal instead of Trade Deal)
- Different win condition (Unit Adoption ≥ 60% rather than bloc score)
- Different Rupture (not Alliance Rupture but Party Split — Politburo factional collapse)

Probably 15+ days of work. Thematically huge. Would transform the game from bilateral to trilateral. Gate: if users ask for it.

### Cooperative play / shared state

Two browsers, same world. Either:
- URL-embedded state — send a "game code" to a friend, both browsers see the same turn, each controls one bloc
- localStorage sync via WebRTC — no server needed
- Websocket backend — adds server burden, gate on demand

The URL-embedded version is simplest. 3 days. Cooperative-only for now; no PvP rankings.

### Daily scenarios

Server-side Python script (cron job) generates a daily starting-state "twist" — one world event pre-baked into the initial conditions. E.g., "Today's scenario: the BRICS Unit launched in Vietnam ahead of schedule. Play it out." Creates a daily-play habit and gives ConsultD a weekly newsletter hook.

Ethical guardrail: the daily twist is fiction, not real-news-scrape. No scraping actual Reuters. We stay in the simulation frame.

### Historical replay mode

Play the same 34 countries from a different starting year: 1985 (Crawford's original frame), 2008 (financial crisis), 2025 (now). Different starting alignments, different events, different governments. Big content lift. 8+ days.

---

## Graveyard

Ideas considered and deliberately rejected, with reasoning.

**User accounts and login.**
> Reasoning: This is a 20-minute browser game. Login friction cuts conversion by >50% (well-documented across SaaS onboarding studies). The feature set accounts would enable (cross-device sync, leaderboards, newsletter capture) can be delivered via localStorage + export-save-string + a separate newsletter form. Revisit only if a deeply-requested feature truly requires server-side user state.

**Real-time multiplayer PvP.**
> Reasoning: The game is Crawford-conform. Crawford's lesson was that superpowers cannot outplay each other without triggering catastrophe — a two-player PvP format rewards reckless aggression by design. Also: synchronous-play backends are expensive to maintain for low concurrency. Cooperative play is different (both players share a bloc) and is on Horizon 3.

**Territorial conquest / Risiko-style map control.**
> Reasoning: The thematic core of the game is that great powers don't conquer — they align. Adding capture-the-flag mechanics would erase what makes the game intellectually honest. If you want Risk, play Risk.

**Live news API integration.**
> Reasoning: The game is explicitly a fiction set in a plausible 2026. Pulling actual Reuters headlines into the game would break the frame (real events don't fit the game's internal logic) and create legal exposure (reproducing copyrighted news). Mistral-generated headlines are fiction-in-style-of-Reuters; that's the right fit.

**Microtransactions, ads, paid DLC.**
> Reasoning: It's a ConsultD showcase and a hommage to a 1985 game that shipped complete. Don't pollute it.

**In-game tutorial.**
> Reasoning: Crawford shipped BoP with a manual and tooltips; we ship with a briefing modal and informative button labels. If users don't understand after 2 turns, the UI has failed — fix the UI, don't add a tutorial layer. A tutorial is the symptom of a design problem, not its solution.

**AI-commentary overlay ("Claude explains your move").**
> Reasoning: Users learn by doing, not by being narrated to. If the game's feedback loops don't teach without commentary, we tighten the feedback loops. The LLM has a role (flavor, atmospheric headlines) — it doesn't have a role as a personal tutor who breaks immersion every turn.

---

## Principles for making roadmap decisions

When evaluating a proposed feature:

1. **Does it survive the 20-minute-session test?** If it adds more than 30 seconds of mandatory interaction per quarter, it doesn't ship.
2. **Does it break the deterministic core?** Balance tests must remain runnable without external APIs. If a feature requires a live LLM to evaluate, it goes in the flavor layer or doesn't ship.
3. **Would Crawford recognize it?** This is the taste test. The game was shipped in 1985; its core insight is older. If a proposed mechanic would have made Crawford pause and say "but does that not change what the game is about?", we pause with him.
4. **Is it measurable?** If we can't tell whether the feature is working from Matomo data or sim runs, it's not in the spec tightly enough to ship.

---

## Versioning

The project uses informal semver. `v11.4` means: initial shipping version 11, fourth patch release. Major version changes reserved for architectural shifts (e.g., v12 ships with Save/Load; v13 with a Wealth-of-Nations macro layer that rebalances every number). Patches are bug fixes and small additions.

No breaking releases without a doc-staged migration note.

---

## Current status (April 2026)

- ✅ v11.4 — Rename Drift → Rift, shipped.
- 🟡 atlanticrift.cc — live on darth (Apache + PHP + Let's Encrypt), Matomo hooked.
- 🟡 Mistral proxy — deployed, awaiting first-quarter headline in a real session.
- 🔜 v12 — Starts after 2-week feedback window closes.

The game is done. The project continues.
