Skip to main content

Dooma terminal logo

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.

CI PyPI Python 3.9+ MIT License Downloads


⚡ 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 hard to 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?

  1. Check the good first issue label.
  2. The highest impact task right now is adding pattern tags to existing questions in the YAML dataset.

Development Workflow

  1. Clone and install dependencies:
    git clone https://github.com/im-anishraj/dooma.git
    cd dooma
    pip install -e ".[dev]"
    
  2. Run tests and verify standards:
    ruff check .
    mypy dooma
    python -m pytest
    
  3. 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)

Source distribution for dooma 1.0.3
File Size Uploaded
dooma-1.0.3.tar.gz 1.2 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for dooma 1.0.3
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

1.0.4

2 release files

This release

1.0.3 This release

2 release files

1.0.2

2 release files

1.0.0

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page