https://github.com/tldrwtf/pokedo
Pokemon themed task and wellbeing manager
https://github.com/tldrwtf/pokedo
cli-app documentation integrations pokemon python task-manager wellbeing
Last synced: 4 months ago
JSON representation
Pokemon themed task and wellbeing manager
- Host: GitHub
- URL: https://github.com/tldrwtf/pokedo
- Owner: tldrwtf
- Created: 2025-11-21T04:58:13.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2026-02-17T21:38:56.000Z (4 months ago)
- Last Synced: 2026-02-18T01:32:58.987Z (4 months ago)
- Topics: cli-app, documentation, integrations, pokemon, python, task-manager, wellbeing
- Language: Python
- Homepage: https://tldrwtf.github.io/pokedo/
- Size: 231 KB
- Stars: 6
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: docs/CONTRIBUTING.md
- Roadmap: docs/ROADMAP_ACTIONS.md
Awesome Lists containing this project
README
# PokeDo
A Pokemon-themed CLI task manager and wellbeing tracker. Complete tasks to catch Pokemon, build your collection, and track your mental and physical wellbeing.
**Version:** 0.3.1 | **License:** MIT | **Python:** 3.10+
 
## Table of Contents
- [Features](#features)
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Usage](#usage)
- [Server Usage (Optional)](#server-usage-optional)
- [How It Works](#how-it-works)
- [Data Storage](#data-storage)
- [Development](#development)
- [Troubleshooting](#troubleshooting)
- [FAQ](#faq)
- [Credits](#credits)
## Features
### Task Management
- Create tasks with categories (work, exercise, learning, personal, health, creative)
- Set difficulty levels (easy, medium, hard, epic) that affect XP and Pokemon rarity
- Recurring tasks (daily, weekly, monthly)
- Task priorities and due dates
### Pokemon System
- Catch Pokemon by completing tasks
- **All 1025 Pokemon** from Gen 1 (Kanto) through Gen 9 (Paldea)
- Pokemon rarity based on task difficulty
- Pokemon **EVs (Effort Values) and IVs (Individual Values)** for stat training (partial implementation)
- Shiny Pokemon (rare variants with boosted rates from streaks)
- Legendary, Mythical, Pseudo-Legendary, and Ultra Beast encounters
- Paradox Pokemon from Scarlet/Violet
- Pokedex tracking with generation filtering
- Active team of 6 Pokemon
- Pokemon evolution based on level
- Nickname your Pokemon
### Wellbeing Tracking
- Mood logging (1-5 scale)
- Exercise tracking with type detection
- Sleep logging with catch rate modifiers
- Hydration tracking (Water-type bonuses)
- Meditation logging (Psychic/Fairy bonuses)
- Gratitude journaling (friendship bonuses)
### Progression
- Trainer levels and XP
- **Trainer Classes** to specialize your journey (e.g., Ace Trainer, Hiker, Scientist). Choose your class via `pokedo stats set-class`.
- Daily streaks with milestone rewards
- Achievement badges
- Inventory system (Pokeballs, evolution items)
## Installation
### Requirements
- Python 3.10 or higher
- pip (Python package manager)
- Internet connection (for initial Pokemon data download)
### Install from Source
```bash
# Clone the repository
git clone https://github.com/tldrwtf/pokedo.git
cd pokedo
# Create virtual environment (recommended)
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install PokeDo
pip install -e .
```
## Quick Start
```bash
# 1. Initialize (downloads Pokemon data)
pokedo init --name "YourName" --quick # Quick start with Gen 1 only
# 2. Add your first task
pokedo task add "Complete a task" --difficulty easy
# 3. Complete the task and catch a Pokemon!
pokedo task complete 1
# 4. View your dashboard
pokedo
```
## Usage
You can use `pd` as a shorthand for `pokedo` once installed.
### Initialize
```bash
# Full initialization (all 1025 Pokemon, takes a few minutes first time)
pokedo init --name "Ash"
# Speed up full initialization with parallel requests
pokedo init --name "Ash" --concurrency 20
# Quick start with Gen 1 only (151 Pokemon)
pokedo init --name "Ash" --quick
# Initialize specific generation
pokedo init --name "Ash" --gen 9 # Paldea only
```
### Tasks
```bash
# Add a task
pokedo task add "Complete project report" --category work --difficulty hard --due tomorrow
# List tasks
pokedo task list
pokedo task list --today
pokedo task list --category work
# Complete a task (triggers Pokemon encounter!)
pokedo task complete 1
# Edit/delete tasks
pokedo task edit 1 --priority urgent
pokedo task delete 1
```
### Pokemon
```bash
# View your team
pokedo team
pokedo pokemon team
# View all Pokemon
pokedo pokemon box
# View Pokedex
pokedo pokedex
pokedo pokemon pokedex --caught
pokedo pokemon pokedex --gen 3 # Filter by generation
# Manage team
pokedo pokemon set-active 5
pokedo pokemon remove-active 5
# Evolve Pokemon
pokedo pokemon evolve 3
# Nickname
pokedo pokemon nickname 1 "Sparky"
# Release
pokedo pokemon release 10
```
### Wellbeing
```bash
# Quick commands
pokedo mood 4 --note "Feeling productive"
pokedo exercise cardio --duration 30 --intensity 4
pokedo sleep 7.5 --quality 4
pokedo water --glasses 8
pokedo meditate 15
# Full commands
pokedo wellbeing mood 5
pokedo wellbeing exercise running --duration 45
pokedo wellbeing today
```
### Stats & Profile
```bash
# Dashboard
pokedo
pokedo daily
# Profiles
pokedo init --name "Misty"
pokedo profile set-default Misty
# Profile
pokedo profile
pokedo stats profile
pokedo profile set-default
# Streaks
pokedo streaks
# Badges
pokedo badges
# Inventory
pokedo stats inventory
# History
pokedo stats history --days 14
```
### TUI (Preview)
Launch the new terminal UI dashboard to get a live overview of your trainer profile, tasks, and team.
Press `p` to switch profiles and optionally set a new default.
```bash
pokedo tui
```
### Server Usage (Optional)
PokeDo is developing a FastAPI server to enable cloud synchronization and multi-user features. This system uses `requests` for client-side pushing and `bcrypt` for secure authentication.
1. **Run the Server:**
```bash
uvicorn pokedo.server:app --reload --port 8000
```
(Ensure you have installed development dependencies: `pip install -e ".[dev]"`)
2. **Register a User:**
```bash
curl -X POST http://localhost:8000/register -H "Content-Type: application/json" -d "{\"username\": \"testuser\", \"password\": \"testpassword\"}"
```
3. **Login and Get an Access Token:**
```bash
curl -X POST http://localhost:8000/token -F "username=testuser" -F "password=testpassword"
```
This will return a JSON object containing your `access_token`.
4. **Access Protected Endpoints (e.g., /users/me or /sync):**
Replace `` with the token received from the login step.
```bash
curl -X GET http://localhost:8000/users/me -H "Authorization: Bearer "
```
## How It Works
### Catching Pokemon
When you complete a task, there's a chance to encounter a Pokemon:
- **Encounter Rate**: ~70% base, increases with difficulty and streaks
- **Rarity**: Determined by task difficulty
- Easy: Mostly common Pokemon
- Medium: Common + Uncommon
- Hard: Higher rare/epic chances
- Epic: Best legendary chances
- **Catch Rate**: Based on Pokemon rarity and trainer level
### Rarity Tiers
- **Common** (60%): Early-route Pokemon from all generations
- **Uncommon** (25%): Mid-evolution Pokemon, starters
- **Rare** (10%): Final evolutions, Paradox Pokemon
- **Epic** (4%): Final starter evolutions, Pseudo-Legendaries (Dragonite, Tyranitar, Salamence, Metagross, Garchomp, etc.), Ultra Beasts
- **Legendary** (1%): Articuno, Zapdos, Moltres, Mewtwo, Lugia, Ho-Oh, Weather Trio, Creation Trio, Tao Trio, and more
- **Mythical**: Mew, Celebi, Jirachi, Arceus, and more (special encounters only)
### Generation Support
- **Gen 1 (Kanto)**: #001-151
- **Gen 2 (Johto)**: #152-251
- **Gen 3 (Hoenn)**: #252-386
- **Gen 4 (Sinnoh)**: #387-493
- **Gen 5 (Unova)**: #494-649
- **Gen 6 (Kalos)**: #650-721
- **Gen 7 (Alola)**: #722-809
- **Gen 8 (Galar)**: #810-905
- **Gen 9 (Paldea)**: #906-1025
### Shiny Pokemon
- Base rate: 1/100
- Streak bonus: +0.5% per day of streak
- Perfect week: Boosted shiny chance
### Streak Rewards
- 3 days: Great Balls (better catch rate)
- 7 days: Evolution Stone
- 14 days: Ultra Balls
- 30 days: Master Ball
- 100 days: Legendary Ticket
### Wellbeing Bonuses
- **Good mood**: Pokemon happiness boost
- **Exercise**: Type-specific encounter bonuses
- **Good sleep**: Catch rate boost
- **Hydration goal**: Water-type bonus
- **Meditation**: Psychic/Fairy bonus
- **Journaling**: Friendship evolution bonus
### Type Affinities
Task categories influence Pokemon type encounter probabilities:
| Category | Boosted Types |
|----------|---------------|
| Work | Steel, Electric, Normal |
| Exercise | Fighting, Fire, Rock |
| Learning | Psychic, Ghost, Dark |
| Personal | Normal, Fairy, Flying |
| Health | Grass, Water, Poison |
| Creative | Fairy, Dragon, Ice |
Wellbeing actions also affect type encounters:
- **Hydration goal (8 glasses)**: Water-type bonus
- **Meditation**: Psychic/Fairy bonus
- **Exercise**: Fighting-type bonus
---
## Recent Fixes & Behavior Notes
- **EV/IV persistence**: Pokemon now persist their EV/IV dictionaries, so every completion permanently boosts the lead Pokémon’s stats (see `pokedo/data/database.py` and `pokedo/core/pokemon.py`).
- **Affinity-aware encounters**: The reward engine filters rarity pools by task/wellbeing affinities, backfills missing type data (`_ensure_pokedex_entry_types`), and consumes the best available ball (master/ultra/great) for each attempt (`pokedo/core/rewards.py`).
- **Pokedex tracking parity**: Every catch or evolution increments `pokedex_seen`/`pokedex_caught` (with first-caught timestamps and shiny flags), keeping trainer completion metrics in sync (`pokedo/cli/commands/tasks.py`, `pokedo/cli/commands/pokemon.py`).
- **Priority ordering & streak sync**: Task listings now sort using explicit numeric weights, and streak best counters update immediately on first-day or resumed streaks (`pokedo/data/database.py`, `pokedo/core/trainer.py`).
### EV/IV System (In Progress)
This system introduces deeper RPG mechanics for training your Pokemon's stats:
- **IVs (Individual Values):** Represents a Pokemon's innate potential (0-31 per stat), assigned randomly at capture.
- **EVs (Effort Values):** Training points gained by completing tasks (max 510 total, 252 per stat).
**Task Categories influence which stats are trained:**
| Task Category | Stat Trained |
| ------------- | --------------- |
| Work | Special Attack |
| Exercise | Attack |
| Learning | Special Defense |
| Health | HP |
| Personal | Defense |
| Creative | Speed |
**Task Difficulty determines the EV yield:**
| Difficulty | EV Yield |
| ---------- | -------- |
|------------|----------|
| Easy | 1 EV |
| Medium | 2 EVs |
| Hard | 4 EVs |
| Epic | 8 EVs |
## Data Storage
All data is stored locally in `~/.pokedo/`:
- `pokedo.db`: SQLite database
- `cache/`: Cached PokeAPI data
- `cache/sprites/`: Downloaded Pokemon sprites
## Development
The project includes a FastAPI server (`pokedo/server.py`) for future cloud synchronization and currently provides **user authentication (registration/login with JWT)**.
```bash
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run tests with coverage
pytest --cov=pokedo
# Run specific test file
pytest tests/test_tasks.py
```
For more development information, see:
- [Architecture Documentation](docs/ARCHITECTURE.md) - System design and code structure
- [Contributing Guide](docs/CONTRIBUTING.md) - How to contribute to PokeDo
- [API Reference](docs/API.md) - Internal API documentation
---
## Troubleshooting
### Common Issues
**"Command not found: pokedo"**
- Ensure you installed with `pip install -e .`
- Check that your virtual environment is activated
- Try running with `python -m pokedo` instead
**"Database error" on first run**
- Run `pokedo init --name "YourName"` to initialize the database
- Check write permissions in your home directory
**Slow initialization**
- Full initialization downloads data for 1025 Pokemon
- Use `--quick` flag for Gen 1 only (151 Pokemon)
- Use `--gen N` to initialize a specific generation
- Use `--concurrency N` to increase parallel PokeAPI requests
**Pokemon sprites not displaying**
- Sprites require terminal with image support (iTerm2, Kitty, etc.)
- Text fallback is used in unsupported terminals
- Check `~/.pokedo/cache/sprites/` for cached images
**API rate limiting**
- PokeAPI is free and has generous limits
- Data is cached locally after first fetch
- Clear cache: delete `~/.pokedo/cache/` folder
### Reset Data
```bash
# Remove all PokeDo data (start fresh)
rm -rf ~/.pokedo
# Reinitialize
pokedo init --name "YourName"
```
---
## FAQ
**Q: Can I play offline?**
A: Yes, after initial setup. All Pokemon data is cached locally.
**Q: How do I backup my progress?**
A: Copy the `~/.pokedo/` directory. The `pokedo.db` file contains all your data.
**Q: What happens if I miss a day?**
A: Your daily streak resets to 0, but your best streak is preserved.
**Q: Can I catch legendary Pokemon?**
A: Yes! Epic and hard tasks have small chances to encounter legendaries. Mythical Pokemon require special tickets earned from long streaks.
**Q: How does shiny hunting work?**
A: Base shiny rate is 1%. Each day of your streak adds 0.5% (up to 10% max).
**Q: Can I have multiple profiles?**
A: Yes. Each trainer profile is stored in the same local database. The CLI uses the default profile, and the TUI lets you switch profiles (press `p`) and set a new default.
**Q: Does wellbeing tracking affect gameplay?**
A: Yes! Good sleep improves catch rates, hydration goals boost Water-type encounters, and meditation increases Psychic/Fairy encounters.
**Q: How do I evolve Pokemon?**
A: Level up your Pokemon by completing tasks. When evolution requirements are met, use `pokedo pokemon evolve `.
---
## Project Structure
```
pokedo/
├── cli/ # Command-line interface
├── core/ # Business logic and models
├── data/ # Database and API clients
└── utils/ # Configuration and helpers
```
See [ARCHITECTURE.md](docs/ARCHITECTURE.md) for detailed documentation.
---
## Credits
- Pokemon data from [PokeAPI](https://pokeapi.co/)
- Built with [Typer](https://typer.tiangolo.com/) and [Rich](https://rich.readthedocs.io/)
- Inspired by the Pokemon franchise by Nintendo/Game Freak
---
## License
MIT License - see LICENSE file for details.