
Hermanity Idle
A Melvor-Idle-descendant browser RPG where you play as the world's first AI butler grinding skills tied to Hermes/Hermanity lore. Playable public alpha (Phase 3) live at idle.hermanity.dev — bank/inventory/equipment, tutorial quest, and boss fight included.
Overview
Hermanity Idle is a Melvor-descendant idle RPG where the player character is an AI butler in the Hermes/Hermanity universe. The hook: every skill you grind is a real piece of the agent’s actual workflow — Writing becomes drafted chapters, Plumbing becomes wired debug sessions, Firemaking becomes cron jobs that don’t catch fire. XP ticks offline; the save format is human-readable JSON with a SHA-256 checksum.
The playable client is live at idle.hermanity.dev (client version v0.4, Phase 3 public alpha).
What ships today (Phase 3 public alpha)
Built on Phase 1a (core loop) + Phase 2 (storage/offline):
- Phase 1a core — Vite + TypeScript + React client, pure-domain
simulate(state, dt), OSRS XP table, starter skills/monsters, Parliament seat portraits, localStorage save with checksum - Phase 2 storage — bank (4 tabs × 16 slots), 28-slot inventory, 13 equipment slots, pure transfer engine, deterministic interval-based offline sim, offline summary modal (a11y dialog + focus trap)
- Phase 3 public alpha — save v4 + pure quest engine, seven-beat tutorial (
roaches_in_tmp), zone gating, Mr. Sparks’s Parakeet boss (phased HP, deterministic crit cycle, no offline boss progress), Harrow branching Parliament dialogue, repository-owned Playwright e2e (desktop + mobile, axe WCAG 2.2 AA), freeze pack (STATUS.md/NEXT_STEPS.md/ a11y + perf docs)
Design constraints that matter
- Pure-domain heartbeat — the simulator is the canonical testable seam. No React in the model. Test idempotency at
dt=0, commutativity over disjoint intervals, and offline-online parity. - OSRS XP curve — bake the canonical 120-entry table; the closed-form formula drifts by ~12 XP across the range.
- Save integrity — versioned JSON + SHA-256. Forward-only migrations (v1/v2/v3 → v4); refuse unknown future versions without clobbering the stored payload.
- Exactly-once offline —
lastSimulatedAtadvances and the save persists immediately after catch-up so reloads cannot double-apply; saves serialize through a queue. - Boss fights stay online-only — catch-up snaps boss state to idle with an honest offline explanation (no silent damage/loot/credit).
Architecture
client/— Vite + TypeScript + React. Production build served under the GitLab Pages/play/layoutclient/src/domain/offline/simulate.ts— pure-function simulatorclient/src/domain/economy/— transfer + equipment + containersclient/src/domain/quests/— quest engine + zone eligibilityclient/src/domain/save/— versioned IO + migrationsclient/e2e/— Playwright journeys against the production buildsite/— Hugo lore surface (where present)
Status
Active — Phase 3 public alpha. Playable at idle.hermanity.dev (HTTPS 200). Client package 0.4.0. Phase 2 bank/inventory/offline + Phase 3 tutorial/boss/e2e landed on main 2026-07-22 → 2026-07-24. Next: whatever NEXT_STEPS.md freezes after the alpha gate.
Related
- Play: idle.hermanity.dev
- Repo:
herman/hermanity-idle