A gamified desktop productivity app that turns your daily tasks and habits into an RPG adventure. Built with Python and CustomTkinter.
- Add tasks with a name, difficulty (Easy / Medium / Hard), and icon
- Check off quests to earn XP and gold
- Easy = +25 XP, Medium = +50 XP, Hard = +100 XP
- Your character levels up automatically as you complete quests
- Track daily rituals with a 7-day visual streak display
- Click the
?square to check off today's habit - Streak bonuses: 3+ days = +25 XP, 7+ days = +35 XP per check-in
- High streaks (7+) grant active buffs (+2 INT) on your character sheet
- Four stats derived from real activity:
- STR — quests completed
- INT — total habit streaks
- WIS — your level
- VIT — mood + daily habit completions
- Active buffs/debuffs section based on streaks and mood
- Summary of quests, habits, gold, and level
- 10 unlockable achievements
- Set your daily energy level from Exhausted to Radiant
- Mood affects gameplay:
- 💀 Exhausted → -50% XP, HP capped at 50%
- 🌑 Low → -25% XP, HP capped at 75%
- 🌗 Neutral → no bonus or penalty
- 🌕 Good → +25% XP, full MP
- ✨ Radiant → +50% XP, full MP
- Weekly mood log tracks your history
- Python 3.10+
- CustomTkinter
pip install customtkinter pillowpython main.pySimpleCalendar/
├── main.py # Entry point — wires cogs + tab navigation
├── config.py # Colors, constants, achievements, game balance
├── data.py # JSON save/load persistence
├── game_engine.py # XP, leveling, mood effects, stat calculations
├── components/
│ ├── __init__.py # Re-exports all cog classes
│ ├── header.py # Header bar (avatar, HP/MP/XP/MO bars, level)
│ ├── quests.py # ⚔ Quest Log tab
│ ├── habits.py # ♻ Habits tab (7-day streaks)
│ ├── sheet.py # 📜 Character Sheet tab (stats, buffs, achievements)
│ └── mood.py # ✦ Mood tab (energy crystal, weekly log)
└── rpg_save.json # Auto-generated save file
The app uses a cog pattern — each tab is a self-contained module with its own _build() and refresh() methods. Cogs share a single data dict (the game state) and use callbacks to notify the main app when the header needs updating.
| Layer | File | Responsibility |
|---|---|---|
| Config | config.py |
Colors, XP tables, icons, achievements |
| Data | data.py |
Load/save JSON, merge defaults |
| Engine | game_engine.py |
XP math, leveling, mood effects, stat formulas |
| UI | components/*.py |
One cog per tab + header |
| App | main.py |
Window setup, tab switching, cog wiring |
- Create
components/my_tab.pywith a class that hasframe,_build(), andrefresh() - Add it to
components/__init__.py - Register it in
main.py's_build_tabs()method
- XP required per level:
50 × level^1.5 - Each level-up increases max HP (+10) and max MP (+5)
- Titles unlock at milestone levels (Novice → Apprentice → ... → Legend)
- Earned alongside XP:
XP gained ÷ 5(minimum 1)
| Achievement | Requirement |
|---|---|
| 🏁 First Steps | Complete 1 quest |
| 🔟 Determined | Complete 10 quests |
| ⚔ Relentless | Complete 50 quests |
| ⭐ Rising Star | Reach level 5 |
| 🛡 Veteran | Reach level 10 |
| 👑 Champion | Reach level 25 |
| 🔥 Consistent | Get a 7-day habit streak |
| ♻ Disciplined | Track 5 habits |
| ✨ Radiant Soul | Set mood to Radiant |
| 💰 Treasure Hunter | Earn 100 gold |
All progress is automatically saved to rpg_save.json in the project directory. The file is created on first run and updated whenever you complete a quest, check a habit, or change your mood. Delete it to reset your character.
MIT