https://github.com/manojmallick/dora-roguelike
Card roguelike where you defend your FinTech against EU regulatory audits. Regulator voiced by ElevenLabs TTS. Built with Zed.
https://github.com/manojmallick/dora-roguelike
browser-game card-game compliance dora elevenhacks elevenlabs gamedev nis2 roguelike typescript zed
Last synced: about 1 month ago
JSON representation
Card roguelike where you defend your FinTech against EU regulatory audits. Regulator voiced by ElevenLabs TTS. Built with Zed.
- Host: GitHub
- URL: https://github.com/manojmallick/dora-roguelike
- Owner: manojmallick
- Created: 2026-04-26T22:23:28.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2026-04-26T22:59:28.000Z (about 1 month ago)
- Last Synced: 2026-04-27T00:23:53.285Z (about 1 month ago)
- Topics: browser-game, card-game, compliance, dora, elevenhacks, elevenlabs, gamedev, nis2, roguelike, typescript, zed
- Language: TypeScript
- Homepage: https://dora-roguelike.vercel.app
- Size: 56.6 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
Awesome Lists containing this project
README
# DORA: The Compliance Roguelike

Survive the audit. Save the FinTech.
A browser-based card roguelike where you play as a FinTech CTO defending against EU regulatory audit findings. The Regulator is designed around pre-generated ElevenLabs TTS, adaptive music, and audit findings that escalate into a Grand Regulator boss phase.
## Live Demo
https://dora-roguelike.vercel.app
## Built With
- Vanilla TypeScript
- Vite
- Canvas API
- ElevenLabs-ready audio manifest
- Zed-assisted feature delivery workflow
## Local Development
```bash
npm install
npm run dev
```
Open the Vite URL and tap once to unlock audio. Use `VITE_DEBUG_SKIP_AUDIO=true` only when you intentionally want to bypass missing local audio files.
## Validation
```bash
npm test
npm run build
```
## QA Shortcuts
- `N`: next round
- `B`: force boss round
- `V`: force victory
- `F`: force defeat
- `Q/W/E/R/T`: damage compliance indicators
- `A`: restore the lowest indicator
For production video capture, append `?recording=1` to the live demo URL to enable the same shortcuts without changing the normal judge-facing URL.
For Dutch regulator mode, append `?locale=nl` to the live demo URL.
For the optional GDPR Data Protection Authority boss, append `?boss=gdpr`.
For Systemic Institution hard mode, append `?difficulty=hard`.
For two-player audit mode, open two windows:
- Player 1 card hand: `?mode=coop&role=cards`
- Player 2 board and regulator intent: `?mode=coop&role=board`
## ElevenLabs Integration
The game uses stable audio ids for:
- Standard Regulator dialogue
- Grand Regulator boss dialogue
- Menu, calm, tense, boss, victory, and defeat music
- Card play, block, damage, critical damage, and boss entrance SFX
During development, `VITE_DEBUG_SKIP_AUDIO=true` lets the game exercise all audio calls without requiring generated files. Production audio is enabled by default when the variable is unset.
To generate audio locally, add `ELEVENLABS_API_KEY` to `.env`, then run:
```bash
npm run generate:audio -- --kind=tts
npm run generate:audio -- --kind=tts-nl
npm run generate:audio -- --kind=tts-gdpr
npm run generate:audio -- --kind=tts-hard
npm run generate:audio -- --kind=sfx
npm run generate:audio -- --kind=music
```
Generated MP3 files are written to `public/audio/` and preloaded before the tap-to-start screen.