ํฌ๋์ ๋ฝ๋ชจ๋๋ก ํ์ด๋จธ - Pomodoro Timer with Gamification
๋ฝ๋ชจ๋๋ก ๊ธฐ๋ฒ๊ณผ ํฌ๋ ์ํ์ด๋ผ๋ ๊ฒ์ด๋ฏธํผ์ผ์ด์ ์์๋ฅผ ๊ฒฐํฉํ ์์ฐ์ฑ ๋๊ตฌ์ ๋๋ค.
**Ppodo (๋ฝ๋)**๋ ์ง์คํ ๋๋ง๋ค ํฌ๋์์ ํ๋ํ๊ณ , ํฌ๋์ก์ด์ ์์๋ฅผ ์์ฑํ๋ฉฐ, ๋ ๋ฒจ์ ๊ณผ ๋ฑ์ง ์์ง์ ํตํด ์ฑ์ทจ๊ฐ์ ๋๋ ์ ์๋ Windows ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
- ๐ ๋ฝ๋ชจ๋๋ก + ํฌ๋ = Ppodo (๋ฝ๋)
- ๐ ์ง์ค ์๊ฐ์ "ํฌ๋ ์ํ"์ผ๋ก ์๊ฐํ
- ๐ฎ RPG ๊ฒ์์ฒ๋ผ ์ฑ์ฅํ๋ ์์ฐ์ฑ ์ฑ
- ํ๊ตญ์ด (Korean) / English / ๆฅๆฌ่ช (Japanese) ์ง์
- ์ค์ ์์ ์ธ์ด ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ๋ชจ๋ UI ์์ ์๋ ๋ฒ์ญ
- 25๋ถ ์ง์ค / 5๋ถ ํด์ ์๋ ์ ํ (์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅ)
- ์์, ์ผ์์ ์ง, ์ฌ๊ฐ, ์ค์ง ๊ธฐ๋ฅ
- ์ง์ค ์๋ฃ ์ ์๋ ์๋ฆผ
- ์งํ๋ฅ ๋ฐ์ ์ํ ํ์
- ๊ณ ํด์๋ (High DPI) ๋์คํ๋ ์ด ์ง์
ํฌ๋์ (Grape Berry)
โ 10๊ฐ ๋ชจ์ผ๋ฉด
ํฌ๋์ก์ด (Grape Bunch)
โ 10์ก์ด ๋ชจ์ผ๋ฉด
ํฌ๋์์ (Grape Box)
โ 10์์ ๋ชจ์ผ๋ฉด
์์ธ๋ณ (Wine Bottle)
โ 10๋ณ ๋ชจ์ผ๋ฉด
์์ธ์์ (Wine Crate)
- ๋ฝ๋ชจ๋๋ก 1๊ฐ ์๋ฃ = ํฌ๋์ 1๊ฐ ํ๋
- 4๋จ๊ณ ์งํ ์์คํ (ํฌ๋ ์ํ โ ์์ธ ์์กฐ)
- 2x2 ๊ทธ๋ฆฌ๋ ๋ ์ด์์์ผ๋ก ๋ชจ๋ ๋จ๊ณ ์๊ฐํ
- ์ค๋ ํ๋ํ ํฌ๋์ ํต๊ณ
- ํฌ๋์ 1๊ฐ = 10 XP
- ๋ ๋ฒจ์
๊ณต์:
100 ร (1.5^(N-1))XP - ๋ ๋ฒจ์ ์ ์ถํ ๋ฉ์์ง
- ์ฐ์ ์ง์ค ์ผ์ ์ถ์
- ์ด ์ง์ค ์๊ฐ ๊ธฐ๋ก
- ๐ฑ ์ฒซ ๊ฑธ์: ํฌ๋์ 1๊ฐ ํ๋
- ๐ ์ฒซ ์ก์ด: ํฌ๋์ก์ด 1๊ฐ ์์ฑ
- ๐ฆ ์ฒซ ์์: ํฌ๋์์ 1๊ฐ ์์ฑ
- ๐ท ์ฒซ ์์ธ: ์์ธ๋ณ 1๊ฐ ์์ฑ
- ๐พ ์์ธ ๋ง์คํฐ: ์์ธ์์ 1๊ฐ ์์ฑ
- ๐ฅ ์ผ์ฃผ์ผ ์ฐ์: 7์ผ ์ฐ์ ์ง์ค
- ๐ช ๋๊ธฐ์: 50์ผ ์ฐ์ ์ง์ค
- โก ์ง์ค์: ํ๋ฃจ 10๊ฐ ํฌ๋์
- ๐ ํ ๋ฌ ๋ง์คํฐ: ํ ๋ฌ ์ค 25์ผ ์ง์ค
- ๐ฏ ๋ฐฑ์ ๋ ธ์ฅ: ํฌ๋์ 100๊ฐ ํ๋
- ๐ญ ํฌ๋๋์ฅ: ํฌ๋์์ 10๊ฐ ์์ฑ
- ๐ ์ ์ค: ํฌ๋์ 1000๊ฐ ํ๋
- ๐ ์๋ฒฝํ ์ธ๊ฐ: ์ค์ 6-9์ ์ง์ค
- ๐ฆ ์ฌ๋นผ๋ฏธ์กฑ: ๋ฐค 10์ ์ดํ ์ง์ค
- โญ ๋ ๋ฒจ ๋ง์คํฐ: ๋ ๋ฒจ 10 ๋ฌ์ฑ
- โ ์๋ฒฝ์ฃผ์์: ํ ์ผ 100๊ฐ ์๋ฃ
- โฐ ์๊ฐ์ฌํ์: ์ด 100์๊ฐ ์ง์ค
- ํ์คํฌ ์ถ๊ฐ, ์๋ฃ, ์ญ์
- ์ง์ค ์์ ์ ํ ์ผ ์ ํ
- ์๋ฃ๋ ํ ์ผ ํต๊ณ
- ์ฃผ๊ฐ ๋ฆฌํฌํธ: ์ต๊ทผ 7์ผ ์ง์ค ์๊ฐ ๋ง๋ ๊ทธ๋ํ
- ํ์คํฌ ๋ถํฌ: ์ค๋ ํ๋ฃจ ํ์คํฌ๋ณ ์๊ฐ ํ์ด ์ฐจํธ
- ์ผ๊ฐ/์ด ํต๊ณ ํ์
- Nordic: ๋ถ์ ๋ฝ์ ์ฐจ๋ถํจ๊ณผ ์ง์ ์ธ ๋ถ์๊ธฐ (์คํธ ๋ธ๋ฃจ)
- Midnight: ๊น์ ๋ฐค์ ๊ณ ์ํจ๊ณผ ์๋ฒฝํ ๋ชฐ์ (๋คํฌ ์ฌ๋ ์ดํธ)
- Forest: ์ฒ์์ ํผํค์น๋์ ๊ฐ์ ์์ ๊ฐ (๋ฅ ๊ทธ๋ฆฐ)
- Lavender: ์๊ฐ์ ๊นจ์ฐ๋ ๊ฐ๊ฐ์ ์ธ ๋ฐ์ด์ฌ๋ (๋น๋น๋ ๋ฐ์ด์ฌ๋ )
- Cafe: ์นดํ์์์ ์ฌ์ ๋กญ๊ณ ๋ฐ๋ปํ ์ง์ค (์ปคํผ๋น ๋ธ๋ผ์ด)
- ์ธ์ด: Python 3.8+
- UI ํ๋ ์์ํฌ: PySide6 (Qt for Python)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค: SQLite3
- ์ฐจํธ: Matplotlib
- ํจํค์ง: PyInstaller
pip install -r requirements.txtpython main.pypyinstaller --noconsole --onefile --name "Ppodo" main.py์์ฑ๋ ํ์ผ: dist/Ppodo.exe
Ppodo/
โโโ main.py # ์ ํ๋ฆฌ์ผ์ด์
์ง์
์
โโโ requirements.txt # ์์กด์ฑ ๋ชฉ๋ก
โโโ README.md # ํ๋ก์ ํธ ๋ฌธ์
โโโ core/ # ๋น์ฆ๋์ค ๋ก์ง
โ โโโ __init__.py
โ โโโ timer.py # ๋ฝ๋ชจ๋๋ก ํ์ด๋จธ ๋ก์ง
โ โโโ database.py # SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ
โ โโโ theme.py # ํ
๋ง ์์คํ
โ โโโ i18n.py # ๋ค๊ตญ์ด ์ง์ ์์คํ
โโโ ui/ # UI ๋ ์ด์ด
โโโ __init__.py
โโโ main_window.py # ๋ฉ์ธ ์๋์ฐ
โโโ mini_window.py # ๋ฏธ๋ ์๋์ฐ
โโโ timer_widget.py # ํ์ด๋จธ ๋์คํ๋ ์ด
โโโ task_widget.py # ํ ์ผ ๊ด๋ฆฌ
โโโ stats_widget.py # ํต๊ณ ์ฐจํธ
โโโ grape_widget.py # ํฌ๋์ ์์ง ์์คํ
โโโ level_widget.py # ๋ ๋ฒจ & ๊ฒฝํ์น
โโโ badge_widget.py # ๋ฑ์ง ์ปฌ๋ ์
โโโ settings_dialog.py # ์ค์ ๋ค์ด์ผ๋ก๊ทธ
โโโ styles/ # ์คํ์ผ๋ง ๋ชจ๋
โโโ __init__.py
โโโ theme_styles.py # ํ
๋ง ๊ธฐ๋ฐ ์คํ์ผ ์ ํธ๋ฆฌํฐ
- "๐ ํ ์ผ" ํญ์์ ์ ํ ์ผ ์ถ๊ฐ
- ๋ชฉ๋ก์์ ์์ ํ ํ ์ผ ์ ํ
- "โถ ์์" ๋ฒํผ ํด๋ฆญ
- 25๋ถ ํ์ด๋จธ ์๋ ์์
- ์งํ๋ฅ ๋ฐ๋ก ์งํ ์ํฉ ํ์ธ
- 25๋ถ ์๋ฃ ์ ์๋ ์๋ฆผ
- ๐ ํฌ๋์ +1 ํ๋
- ๐ซ ๊ฒฝํ์น +10 XP ํ๋
- ์๋์ผ๋ก 5๋ถ ํด์ ์์
- "๐ ํต๊ณ" ํญ์์ ์ฃผ๊ฐ ์ง์ค ์๊ฐ ํ์ธ
- ํ์คํฌ๋ณ ์๊ฐ ๋ถํฌ ํ์ธ
- "๐ ๋ฑ์ง" ํญ์์ ๋ฑ์ง ์ปฌ๋ ์ ํ์ธ
- ์กฐ๊ฑด ๋ฌ์ฑ ์ ์๋์ผ๋ก ๋ฑ์ง ํ๋
- โ ๋ฝ๋ชจ๋๋ก ์๋ฃ โ ํฌ๋์ +1
- โญ ๊ฒฝํ์น +10 XP
- ๐ ํฌ๋์ 10๊ฐ โ ํฌ๋์ก์ด ์์ฑ
- ๐ ํ๋ฃจ 10๊ฐ ํฌ๋์ โ "์ง์ค์" ๋ฑ์ง
- ๐ฆ ํฌ๋์ก์ด 10๊ฐ โ ํฌ๋์์ ์์ฑ
- ๐ท ํฌ๋์์ 10๊ฐ โ ์์ธ๋ณ ์์ฑ
- โญ ๋ ๋ฒจ 5 ๋ฌ์ฑ
- ๐ฅ 7์ผ ์ฐ์ ์ง์ค โ "์ผ์ฃผ์ผ ์ฐ์" ๋ฑ์ง
- ๐พ ์์ธ๋ณ 10๊ฐ โ ์์ธ์์ ์์ฑ (์ต์ข ๋จ๊ณ!)
- โญ ๋ ๋ฒจ 10 ๋ฌ์ฑ โ "๋ ๋ฒจ ๋ง์คํฐ" ๋ฑ์ง
- ๐ ํฌ๋์ 1000๊ฐ โ "์ ์ค" ๋ฑ์ง
- ๐๏ธ ์ ์ฒด ๋ฑ์ง 15๊ฐ ์์ง ์๋ฃ
- tasks: ํ ์ผ ๊ด๋ฆฌ
- focus_sessions: ์ง์ค ์ธ์ ๊ธฐ๋ก
- grape_stats: ์ผ๋ณ ํฌ๋์ ํต๊ณ
- user_profile: ์ฌ์ฉ์ ๋ ๋ฒจ/๊ฒฝํ์น/ํต๊ณ
- badge_definitions: ๋ฑ์ง ์ ์ (15๊ฐ)
- user_badges: ์ฌ์ฉ์ ํ๋ ๋ฑ์ง
๋ชจ๋ ๋ฐ์ดํฐ๋ ๋ก์ปฌ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค(ppodo.db)์ ์ ์ฅ๋ฉ๋๋ค.
- ํฌ๋์ ํ๋ ์ ๋๋ฉ์ด์ ํจ๊ณผ
- ๋ ๋ฒจ์ ์ถํ ์ ๋๋ฉ์ด์
- ๋ฑ์ง ํ๋ ์ ํ๋ ํจ๊ณผ
- ์ฌ์ด๋ ํจ๊ณผ (ํ๋์, ๋ ๋ฒจ์ ์)
- ์๊ฐ ํต๊ณ ๋ฐ ํธ๋ ๋ ๋ถ์
- ์ปค์คํ ์๋ฆผ์
- ๋ฐ์ดํฐ ๋ด๋ณด๋ด๊ธฐ (CSV/JSON)
- ์์ฆ๋ณ ํ์ ๋ฑ์ง
- ๋์ ๊ณผ์ ์์คํ
- ๋ค์ค ์คํ ๋ฆฌ์ง ๋ฐฑ์๋ ์ง์
- ๋ก์ปฌ SQLite (๊ธฐ๋ณธ)
- Notion Database ์ฐ๋
- Supabase ์ฐ๋
- ํด๋ผ์ฐ๋ ๋๊ธฐํ
- ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ ๋๊ตฌ
- ์ค์๊ฐ ๋ฐฑ์ ๊ธฐ๋ฅ
- ์น๊ตฌ์ ๋น๊ต
- ์ฃผ๊ฐ ๋ญํน
- ๋ฑ์ง ๊ณต์ ํ๊ธฐ
Dahae Julie Kim
This project is created for personal productivity enhancement.
๋ฝ๋ชจ๋๋ก ๊ธฐ๋ฒ์ ๋ง๋ Francesco Cirillo์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ฒ์ : 2.2 ์ต์ข ์์ ์ผ: 2026-01-03 ๊ฐ๋ฐ ์์์ผ: 2025-01-02
์๋ก์ด ๊ธฐ๋ฅ (v2.2):
- ๐ท ์์ธ ์์กฐ ์์คํ ์ถ๊ฐ (4๋จ๊ณ ์งํ)
- ๐ฆ 2x2 ๊ทธ๋ฆฌ๋ ๋ ์ด์์์ผ๋ก ์งํ๋ ์๊ฐํ
- ๐ ํฌ๋ ์ํ โ ์์ธ๋ณ โ ์์ธ์์ ์์ฑ ๋ชฉํ
์ด์ ์ ๋ฐ์ดํธ (v2.1):
- ๐ ๋ค๊ตญ์ด ์ง์ (ํ๊ตญ์ด, English, ๆฅๆฌ่ช)
- ๐ฑ ๊ณ ํด์๋ ๋์คํ๋ ์ด ์ต์ ํ
- ๐จ ๊ฐ์ ๋ UI ๊ฐ์์ฑ
์ง์คํ๊ณ , ์ฑ์ฅํ๊ณ , ํฌ๋๋ฅผ ์ํํด์ ์์ธ์ ๋ง๋์ธ์! ๐๐ทโจ