The local-first terminal workspace for technical interview prep.
Search 3,310 questions, browse 17,931 mappings across 662 companies, and track progressβall in the CLI.
pip install dooma
doomaUsing Dooma on Windows? See the Windows terminal troubleshooting guide for help with missing icons, text encoding, and narrow layouts.
Modern preparation tools demand sign-ups, track analytics, rely on internet connectivity, and force you to navigate distracting web interfaces. Dooma flips this model.
- Instant Discovery: Sub-millisecond RapidFuzz search across 3,310 questions.
- Company-Focused: Access curated, up-to-date question pools for 662 companies (including Google, Amazon, Meta).
- Zero Distractions: Launch timed mock interview sessions directly in your CLI. No browser tabs required.
- Absolute Privacy: Your activity, notes, and solve rates are written directly to your local
~/.dooma/state.db. Nothing is ever uploaded.
Launch the interactive workspace simply by running dooma.
| Command | Purpose |
|---|---|
dooma practice |
Interactively browse the question database |
dooma browse companies |
Explore question pools mapped to specific companies |
dooma search <query> |
Fuzzy search questions by keyword or topic |
dooma sheet blind-75 |
Work through curated industry-standard roadmaps |
dooma mock |
Start a timed, randomized mock interview session |
dooma dashboard |
Review your solve rates, local progress, and streaks |
dooma bookmarks |
Access your saved and starred questions |
Tip
Command Chaining: Try dooma mock --count 3 --difficulty hard to jump straight into a tough session.
While inside any question flow, use these hotkeys to update your local state instantly:
| Key | Action |
|---|---|
o |
Open the problem URL in your browser |
m |
Cycle status (unsolved β attempted β solved β skipped) |
Space |
Toggle bookmark |
n |
Write or edit a private local note |
q |
Return to the previous menu |
Dooma is designed to be extremely lightweight, utilizing a precompiled dataset to achieve sub-second startup times.
View System Workflow
graph TD
CLI["CLI Input"] -->|"Typer"| Fuzz["RapidFuzz Search & Filter"]
Fuzz -->|"Reads O(1)"| Index[("Local Dataset: index.json")]
Fuzz -->|"Cross-references"| State[("Local SQLite: state.db")]
Index --> UI["Rich Terminal UI"]
State --> UI
UI -->|"'o' shortcut"| Browser["Web Browser"]
View Codebase Structure
dooma/
βββ dooma/ # Core application logic
β βββ cli/ # Typer command definitions
β βββ dataset/ # Local-first JSON data models
β βββ db.py # SQLite state management
β βββ display.py # Rich UI rendering
β βββ loader.py # Dataset index loading
βββ scripts/ # Internal utilities (YAML -> JSON compilation)
βββ tests/ # Pytest suite
Our goal is to build the definitive local-first hub for technical interview preparation. We aim to bridge the gap between problem discovery (knowing what to solve) and deliberate practice (tracking how you solve it)βall from the terminal where engineers already feel most at home.
We are actively building the future of local-first interview prep.
| Phase | Focus | Impact |
|---|---|---|
| Now | Pattern Taxonomy | Mapping 3,310 questions to 25 distinct patterns to enable pattern-based learning. |
| Now | Dataset Validation | Hardening the YAML validation pipeline to ensure high data integrity for new contributions. |
| Next | Curated Sheets | Integrating the complete NeetCode 150 and Striver SDE roadmaps. |
| Future | Spaced Repetition | Introducing an algorithm to resurface challenging questions based on local metrics. |
We want to make contributing to Dooma as seamless as using it. First-time contributors are explicitly welcome!
- π Python Developers: Optimize RapidFuzz search ranking, add regression tests, and expand CLI features.
- π¨ UI Designers: Refine the Rich terminal rendering for edge cases in narrow or non-standard terminals.
- π Data Enthusiasts: Help map the remaining Blind 75, NeetCode 150, and Striver SDE questions. Check issues labeled
area:data.
Looking for an easy place to start?
- Check the good first issue label.
- The highest impact task right now is adding pattern tags to existing questions in the YAML dataset.
- Clone and install dependencies:
git clone https://github.com/im-anishraj/dooma.git cd dooma pip install -e ".[dev]"
- Run tests and verify standards:
ruff check . mypy dooma python -m pytest - Rebuild index (if modifying dataset YAMLs):
python scripts/build_index.py
Please read our CONTRIBUTING.md guide before opening a pull request.
- GitHub Discussions - Ask questions, share ideas, and follow announcements.
- Discord - (Coming soon)
Does Dooma submit code for me or require a LeetCode Premium account?
No. Dooma provides metadata, problem categorization, and direct links. You do not need a premium account to use Dooma, but you will need an account on the respective platform (like LeetCode) to submit your actual code.
Where is my data stored? Can I sync it?
All state (bookmarks, notes, progress) is stored locally in ~/.dooma/state.db. You can sync this SQLite file across machines using Dropbox, iCloud, or Syncthing.
How do I completely reset my progress?
You can reset your onboarding config via dooma config --reset or safely delete the ~/.dooma directory to start completely fresh.
Released under the MIT License.
By participating in this project, you agree to abide by our Code of Conduct.





