Dungeon Entrance Potions
Every bottle leaves the counter with an adventurer. Your price, quality, and shortcuts decide whether that customer makes it home.

Info
About this project
I built this as a morally-tense shop sim on Angular 21, with 12 component-scoped services and a combat engine that runs customers through the dungeon after they leave. At the dungeon-mouth counter, every quote, loadout, and watered batch makes its survival, budget, and moral cost legible before you commit; those choices ripple into who survives and what your reputation looks like at the end of 30 days.
- Component-scoped DI: 12 services injected into the parent's providers[] for isolated state and clean teardown
- Signal-native OnPush via stateTick + bumpState, so orchestrator emissions drive re-renders without ChangeDetectorRef
- Save schema versioning v1 through v7 with idempotent migrations and array backfill for legacy saves
- Deterministic seeded combat with per-floor encounter tables typed as Record<DungeonFloor>, tuned against a seeded Monte-Carlo balance harness so a potion's quality measurably decides who survives
- Pre-sale loadout forecasts keep survival odds, combo synergies, affordability, and the Mercy/Fair/Gouge tradeoff visible before every commitment
- The hidden Stillroom turns dilution into a deliberate stock-rescue ritual, previewing quarter-strength effects, total resale value, guilt, and survival danger before confirmation
- Customer-linked Stock Rescue turns downtime into a brisk skill challenge that awards needed inventory, with every third consecutive win paying double
- A hanging CLOSED sign lets the player end any live day deliberately, previewing waiting customers, exposed dungeon runners, reputation, guilt, and overhead before the shop goes dark
- WCAG 2.5.5 touch targets, focus-trap directive on every modal, prefers-reduced-motion guards across child components
- Cross-tab save conflict detection with assertive-live banner and reload action
- 1,400+ focused unit tests covering economy, dungeon simulation, pricing, recommendations, save schema, and OnPush wiring contracts

