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.
⚡ Quickstart
pip install dooma
dooma
🔒 The Local-First Advantage
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.
🛠️ Workflows
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 hardto jump straight into a tough session.
Interactive Hotkeys
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 |
🏗️ Architecture
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
🚀 Project Vision
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.
🗺️ Roadmap
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. |
🤝 Contributing
We want to make contributing to Dooma as seamless as using it. First-time contributors are explicitly welcome!
Where We Need Help
- 🐍 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.
Good First Issues
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.
Development Workflow
- 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.
💬 Community
- GitHub Discussions - Ask questions, share ideas, and follow announcements.
- Discord - (Coming soon)
❓ FAQ
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.
📄 License & Conduct
Released under the MIT License.
By participating in this project, you agree to abide by our Code of Conduct.
Release files for dooma 1.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dooma-1.0.3.tar.gz | 1.2 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dooma-1.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.7 MB
Release files / dooma-1.0.3.tar.gz
| Download URL | dooma-1.0.3.tar.gz |
|---|---|
| Size | 1.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a9e29abab2328bb386b5fd9f7f2c672a7c7f58d86b4a6e6631ae7022602548cf
|
|
BLAKE2b-256 checksum How to use checksums |
d18c51db3f04759e215c55ee64edf35ae805d69fbcb7c598c78bb4635f3b97a1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.8.0 pkginfo/1.12.1.2 readme-renderer/45.0 requests/2.32.5 requests-toolbelt/1.0.0 urllib3/2.6.3 tqdm/4.67.1 importlib-metadata/8.7.1 keyring/25.7.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.14.2
|
Release files / dooma-1.0.3-py3-none-any.whl
| Download URL | dooma-1.0.3-py3-none-any.whl |
|---|---|
| Size | 2.5 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
18ead85d8f39e19f3f4cee88c0a57aa9248cbcb76a5e5f1367f6b31475913a62
|
|
BLAKE2b-256 checksum How to use checksums |
c12e4271048ca67ab29beb4037d7e7467eb12fbe780e055fad1cb83cebf33316
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.8.0 pkginfo/1.12.1.2 readme-renderer/45.0 requests/2.32.5 requests-toolbelt/1.0.0 urllib3/2.6.3 tqdm/4.67.1 importlib-metadata/8.7.1 keyring/25.7.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.14.2
|