Dungeon Entrance Potions
A potion shop sim where your pricing and dilution choices feed into a per-floor combat engine that decides who comes back alive.

Info
About this project
I built this as a morally-tense shop sim on Angular 21, 12 component-scoped services, signal-native OnPush, and a combat engine that runs your customers through the dungeon after they leave. Your pricing and dilution decisions ripple into per-floor encounter rolls that determine who survives, who dies, 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 v6 with idempotent migrations and array backfill for legacy saves
- Per-floor encounter weights typed as Record<DungeonFloor, ...> so out-of-range keys fail at compile time
- 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
- 8,700+ unit tests covering economy, dungeon simulation, save schema, and OnPush wiring contracts

