feat: геймификация — XP, уровни, сад и ачивки (ТЗ 0.8, п. 3.13)
Награда за закрытие задачи, принцип «только позитив» (без стриков и сгорания):
- XP = 10 база + бонус за приоритет (0–15) + бонус за оценку времени (0–15),
  один раз на задачу (xp_events, UniqueConstraint); удаление задачи не отнимает
- PATCH /api/tasks/{id} при первом закрытии ставит заголовок X-Earned-XP,
  фронт ловит его и празднует: конфетти + тост «+N XP» с похвалой
- GET /api/xp — сводка (total_xp, уровень, прогресс)
- Сад (/garden): растение за каждую закрытую задачу + уровень + ачивки-вехи
  (1/10/50 задач, уровни 5/10, регулярная, закрытый проект) с прогрессом
- celebrateEarned() в TaskView/ListView/ProjectView/OptionsView; локали ru/en/uk

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent a03246e commit d95a217a52ef24ac2ec82d4ea53069fba13ffc87
@root root authored 10 hours ago
Showing 21 changed files
View
backend/alembic/versions/a1f2c3d4e5f6_xp_events_table.py 0 → 100644
View
backend/app/api/tasks.py
View
backend/app/api/xp.py 0 → 100644
View
backend/app/main.py
View
backend/app/models.py
View
backend/app/services/xp.py 0 → 100644
View
backend/tests/test_xp.py 0 → 100644
View
docs/TZ.md
View
frontend/src/App.vue
View
frontend/src/api.ts
View
frontend/src/components/GamifyBridge.vue 0 → 100644
View
frontend/src/gamification.ts 0 → 100644
View
frontend/src/locales/en.ts
View
frontend/src/locales/ru.ts
View
frontend/src/locales/uk.ts
View
frontend/src/main.ts
View
frontend/src/views/GardenView.vue 0 → 100644
View
frontend/src/views/ListView.vue
View
frontend/src/views/OptionsView.vue
View
frontend/src/views/ProjectView.vue
View
frontend/src/views/TaskView.vue