Offline-first terminal DSA interview prep CLI with 3,310 questions, 17,931 company mappings, fast search, mock interviews, sheets, and local progress.
Project description
Dooma
Offline-first terminal DSA interview prep with company-wise practice, fast search, mock interviews, sheets, and local progress.
Dooma brings company-wise LeetCode-style preparation into your terminal: 3,310 searchable questions, 17,931 interview mappings, curated sheets, mock sessions, bookmarks, notes, and local progress tracking without accounts or network access after install.
Why Dooma
Interview prep breaks down when the data is scattered, noisy, or trapped behind a browser tab you never meant to open for an hour. Dooma keeps the loop tight:
- Find what a company asks.
- Pick a pattern or roadmap.
- Open the exact problem.
- Mark progress, keep notes, and come back tomorrow.
No dashboards to sign into. No hidden telemetry. No spreadsheet archaeology.
Dataset At A Glance
| Metric | Count |
|---|---|
| Unique questions | 3,310 |
| Company-question mappings | 17,931 |
| Companies | 662 |
| DSA patterns | 25 |
| Curated sheets | 3 |
The active app dataset lives in dooma/data/ as YAML files. Releases also ship a generated dooma/data/index.json runtime index so startup does not parse thousands of YAML files on every launch. The package includes a legacy JSON snapshot under dooma/dataset/.
Features
| Feature | What it gives you |
|---|---|
| Company browser | Paginated company lists sorted by available question volume. |
| Pattern practice | Practice by DSA pattern such as binary search, graph, heap, or sliding window. |
| Fuzzy search | Jump from rough text like two sum or binary tree to matching questions. |
| Curated sheets | Work through Blind 75, NeetCode 150, and Striver SDE style roadmaps. |
| Mock mode | Generate a timed random interview set with optional difficulty filtering. |
| Local progress | Track solved, attempted, skipped, bookmarks, notes, and streaks in SQLite. |
| Offline-first | Browse the bundled dataset without internet after installation. |
Install
From PyPI:
pip install dooma
From source:
git clone https://github.com/im-anishraj/dooma.git
cd dooma
pip install -e .
Dooma supports Python 3.9 and newer.
Quick Start
Launch the interactive terminal app:
dooma
First launch asks a short onboarding flow, then opens the command hub:
Commands:
1 practice Pattern-first question browser
2 browse Browse patterns & companies
3 search Fuzzy search questions
4 sheet Curated roadmaps
5 mock Timed mock interview
6 dashboard Your progress stats
7 help Command guide & workflows
8 quit Exit Dooma
Inside the menu, you can type the number, the command name, or shell-style input such as dooma help and dooma version.
Command Examples
Check the installed version:
dooma --version
dooma -V
dooma version
Open the built-in guide:
dooma help
dooma guide
Search for a problem:
dooma search "two sum"
dooma search --limit 5 "binary search"
Open a question detail screen:
dooma question two-sum
Browse company-wise questions:
dooma browse companies
dooma companies
dooma companies --limit 50
List patterns and sheets:
dooma patterns
dooma sheets
Practice by filters:
dooma practice --company google
dooma practice --difficulty medium
dooma practice --pattern sliding-window
Work through a sheet:
dooma sheet blind-75
dooma sheet neetcode-150
dooma sheet striver-sde
Start a mock interview:
dooma mock --count 5
dooma mock --count 3 --difficulty hard
View progress:
dooma dashboard
dooma stats
dooma bookmarks
Reset onboarding/config:
dooma config --reset
Check your installation:
dooma doctor
Question Actions
Inside question detail views, Dooma supports:
| Key | Action |
|---|---|
o |
Open the LeetCode URL in your browser. |
m |
Cycle status: unsolved -> attempted -> solved -> skipped. |
b |
Toggle bookmark. |
n |
Add or edit a note. |
q |
Go back. |
Progress is stored locally in ~/.dooma/state.db.
Project Layout
dooma/
cli/ Typer app registration and home screen
commands/ Command implementations
data/ Active YAML dataset plus generated runtime index.json
dataset/ Legacy JSON snapshot
config.py Local config and onboarding state
db.py SQLite progress, notes, bookmarks, streaks
display.py Rich rendering helpers and terminal wordmark
loader.py Prebuilt index loader with YAML fallback
search.py RapidFuzz search
scripts/
build_index.py Rebuild dooma/data/index.json from YAML
benchmark_loader.py
tests/ CLI, loader, search, and state tests
Development
Install development tools:
pip install -e ".[dev]"
Run the release checks:
ruff check .
mypy dooma
python -m pytest
Rebuild and verify the packaged runtime index after changing dataset YAML:
python scripts/build_index.py
python scripts/build_index.py --check
python scripts/benchmark_loader.py
Build a wheel locally:
python -m pip wheel . --no-deps -w dist
Data Contributions
When updating data, keep references internally consistent:
- Every question must have
id,title, andurl. - Difficulty should be
easy,medium,hard, or empty when unknown. - Company, pattern, and sheet references should point to existing YAML IDs.
- Keep generated caches, coverage files, and packaging artifacts out of git.
Philosophy
Dooma is intentionally small: a fast terminal interface, a local dataset, and local progress tracking. The goal is not to replace LeetCode. The goal is to remove friction before you practice.
Contributing
Contributions are welcome. Please read CONTRIBUTING.md, follow the existing command/data structure, and keep pull requests focused.
This project follows the Code of Conduct.
License
Dooma is released under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dooma-2.0.5.tar.gz.
File metadata
- Download URL: dooma-2.0.5.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
603c6ddc03ff4175d6079bf7bdc39382d6b071e03c0a3b8bbb3a38b1b0d2ae74
|
|
| MD5 |
0455a37750ef103eb405614d3d6281c1
|
|
| BLAKE2b-256 |
184ee0836a663a7aad16a2518e3a0b1fe40a774c15c48d7426db40f5db4dcda5
|
File details
Details for the file dooma-2.0.5-py3-none-any.whl.
File metadata
- Download URL: dooma-2.0.5-py3-none-any.whl
- Upload date:
- Size: 2.5 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78857a75273534a0d1e7770ed6d9f127ab1aab978ca9ee52c32f80e9e00dafd9
|
|
| MD5 |
22721f7e6787113dfae28e34848efc35
|
|
| BLAKE2b-256 |
6b57bc951b023ab9c325b4036d6ec4bba818b8158d5a9fc31d0db01b6b58573e
|