Skip to main content

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 terminal logo

PyPI Python 3.9+ MIT License Downloads

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, and url.
  • 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dooma-2.0.5.tar.gz (1.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dooma-2.0.5-py3-none-any.whl (2.5 MB view details)

Uploaded Python 3

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

Hashes for dooma-2.0.5.tar.gz
Algorithm Hash digest
SHA256 603c6ddc03ff4175d6079bf7bdc39382d6b071e03c0a3b8bbb3a38b1b0d2ae74
MD5 0455a37750ef103eb405614d3d6281c1
BLAKE2b-256 184ee0836a663a7aad16a2518e3a0b1fe40a774c15c48d7426db40f5db4dcda5

See more details on using hashes here.

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

Hashes for dooma-2.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 78857a75273534a0d1e7770ed6d9f127ab1aab978ca9ee52c32f80e9e00dafd9
MD5 22721f7e6787113dfae28e34848efc35
BLAKE2b-256 6b57bc951b023ab9c325b4036d6ec4bba818b8158d5a9fc31d0db01b6b58573e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page