feat: add apotheosis third prestige layer and remove IDEAS.md

Apotheosis is the ultimate reset — wipes absolutely everything
including prestige and transcendence — in exchange for a pure
bragging-rights badge. No mechanical benefit whatsoever.

Unlock condition: all 15 Transcendence echo upgrades purchased.
Can be achieved multiple times; each cycle requires repurchasing
all Transcendence upgrades again.

What survives: Codex lore entries and lifetime profile statistics.
What is wiped: resources, prestige, runestones, transcendence data
(echoes, echo upgrades, multipliers), equipment, upgrades, bosses,
quests, zones, adventurers, achievements.

New files: Apotheosis.ts type, apotheosis service, apotheosis route,
ApotheosisPanel.tsx component.

Modified: GameState (apotheosis field), Api.ts, types/index.ts,
prestige service (carry apotheosis), transcendence service (carry
apotheosis), game.ts anti-cheat (cap apotheosis count), API client,
GameContext (apotheosis() function), GameLayout (new tab), ResourceBar
(gold apotheosis badge shown above transcendence and prestige badges),
styles.css, AboutPanel how-to-play.

Also removes IDEAS.md — all planned features are now implemented!
This commit is contained in:
2026-03-07 02:37:08 -08:00
committed by Naomi Carrigan
parent e8881a81d5
commit a6f9844120
18 changed files with 365 additions and 51 deletions
+3
View File
@@ -1,3 +1,4 @@
export type { ApotheosisData } from "./interfaces/Apotheosis.js";
export type { CodexEntry, CodexState } from "./interfaces/Codex.js";
export type {
Achievement,
@@ -9,6 +10,8 @@ export type { Adventurer, AdventurerClass } from "./interfaces/Adventurer.js";
export type {
AboutResponse,
ApiError,
ApotheosisRequest,
ApotheosisResponse,
AuthResponse,
BossChallengeRequest,
BossChallengeResponse,
+8
View File
@@ -150,6 +150,14 @@ export interface BuyEchoUpgradeResponse {
echoMetaMultiplier: number;
}
export interface ApotheosisRequest {
characterName: string;
}
export interface ApotheosisResponse {
newApotheosisCount: number;
}
export interface ApiError {
error: string;
}
@@ -0,0 +1,4 @@
export interface ApotheosisData {
/** Number of times the player has achieved Apotheosis */
count: number;
}
@@ -1,6 +1,7 @@
import type { Achievement } from "./Achievement.js";
import type { Adventurer } from "./Adventurer.js";
import type { Boss } from "./Boss.js";
import type { ApotheosisData } from "./Apotheosis.js";
import type { CodexState } from "./Codex.js";
import type { DailyChallengeState } from "./DailyChallenge.js";
import type { TranscendenceData } from "./Transcendence.js";
@@ -33,4 +34,6 @@ export interface GameState {
codex?: CodexState;
/** Transcendence (second prestige layer) state — optional for backwards compatibility */
transcendence?: TranscendenceData;
/** Apotheosis (third prestige layer) state — optional for backwards compatibility */
apotheosis?: ApotheosisData;
}