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.4

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.4
File Size Uploaded
dooma-1.0.4.tar.gz 1.2 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for dooma 1.0.4
File Interpreter ABI Platform
dooma-1.0.4-py3-none-any.whl Python 3 none any Details

Total release size: 3.7 MB

Release files / dooma-1.0.4.tar.gz

Download URL dooma-1.0.4.tar.gz
Size 1.2 MB
Tags Source
SHA-256 checksum
How to use checksums
144c05c2f84d884580b5ecb06af9724913f9c1eabadcaf46cb8cecc53e5176ce
BLAKE2b-256 checksum
How to use checksums
00b621740846b8dafd81dbd71c8f71d81a9f8798920856d7baef0b12815d842e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / dooma-1.0.4-py3-none-any.whl

Download URL dooma-1.0.4-py3-none-any.whl
Size 2.5 MB
Tags Python 3
SHA-256 checksum
How to use checksums
ba58c42af3e9f79e90d2e67cb8984785b22826de4e1d6f727c6fd3fa82617de0
BLAKE2b-256 checksum
How to use checksums
12bf4a02987d626dd496480bf53c50ff13621a5553a23c88f324483b0a084120
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

1.0.4 This release

2 release files

1.0.3

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