family-tasks/PRD.md
2026-06-26 06:48:08 +00:00

187 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PRD — Семейный таск-менеджер «Family Tasks»
**Версия:** 1.2
**Дата:** 2026-06-26
**Статус:** реализовано (MVP), итеративно дорабатывается
**Платформа:** статический сайт (HTML + CSS + ванильный JS), без бэкенда
---
## 1. Краткое описание
Веб-приложение для совместного управления задачами и расписанием внутри семьи. Каждый член семьи заходит под своим именем, видит порученные ему задачи, может ставить задачи другим, планировать личное расписание дня (школа, работа, тренировки) и отслеживать выполнение.
## 2. Проблема и мотивация
В семье задачи и договорённости часто теряются: кто за чем должен сходить, кто забрал ребёнка, когда бассейн или школа. Нужен простой общий «список дел» + календарь, где видно занятость каждого. Существующие решения либо перегружены, либо требуют регистрации и серверов. Цель — лёгкий семейный инструмент, который открывается по ссылке и сразу работает.
## 3. Целевая аудитория
- Семьи (родители + дети), пользующиеся одним общим устройством (домашний ПК / планшет).
- Любой человек, кому важен результат, а не технические детали.
**Ключевое ограничение среды:** данные хранятся локально в браузере (localStorage). Приложение оптимально для одного общего семейного устройства, где члены семьи по очереди выбирают своё имя.
## 4. Цели продукта
1. Единый семейный аккаунт с перечнем членов семьи.
2. Вход «кто я сейчас» — выбор текущего пользователя без паролей.
3. Постановка задач друг другу с указанием исполнителя, срока, времени, длительности, важности и вида.
4. Жизненный цикл задачи: выполнить / перенести / отменить / вернуть в работу.
5. Личное расписание: свои события-блоки по времени на календаре.
6. Общий обзор: «Мои задачи», «Я поручил», «Все задачи», «Расписание», «Семья».
## 5. Платформа и ограничения (железные)
- **Только статика:** HTML + CSS + JS в браузере. Никакого серверного кода.
- **Нет бэкенда, БД, аутентификации, Docker, сборщиков.**
- Хранение: `localStorage` (пер-браузер). Синхронизация между устройствами **не поддерживается** — это сознательное ограничение песочницы.
- «Вход» — это выбор имени из списка членов семьи (локальная идентификация), **не** настоящая аутентификация.
- Публикация: push в ветку `pages` Git-репозитория → сайт доступен мгновенно.
## 6. Сущности и роли
- **Семья (family):** название + список членов + задачи + события.
- **Член семьи (member):** id, имя, emoji-аватар, цвет.
- **Текущий пользователь (me):** выбранный член семьи (хранится в sessionStorage-подобном ключе).
- **Задача (task):** см. модель данных.
- **Событие расписания (event):** личный временной блок.
## 7. Функциональные требования
### 7.1. Онбординг (первый запуск)
- Если данных нет → экран создания семьи: название + добавление членов (имя, аватар-emoji, цвет). Минимум 1 член.
- Можно добавлять/удалять строки членов до создания.
- После создания — вход под первым членом.
### 7.2. Вход / смена пользователя
- В шапке аватар + имя текущего пользователя; клик открывает список членов семьи.
- Выбор = «вход» под этим именем; запоминается в браузере.
- Доступен быстрый переход в управление семьёй.
### 7.3. Управление семьёй
- Переименование семьи.
- Добавление / переименование / удаление членов.
- Смена аватара (emoji + цвет) по клику.
- При удалении члена его задачи остаются «без исполнителя».
### 7.4. Задачи — поля
| Поле | Описание | Обязательное |
|------|----------|--------------|
| title | что сделать | да |
| note | подробности | нет |
| assigneeId | кому поручено | да |
| assignerId | от кого (автоматически = текущий пользователь) | авто |
| dueDate | срок (дата) | нет |
| time | время срока | нет |
| duration | длительность (15/30/45/60/90/120/180/240/360 мин) | нет |
| category | вид задачи (см. 7.5) | да (по умолч. «Другое») |
| priority | низкая / средняя / высокая | да |
| status | todo / done / postponed / cancelled | авто |
| history | журнал изменений | авто |
### 7.5. Виды задач (категории)
8 предустановленных категорий с цветом:
🏠 Дом · 💼 Работа · 📚 Учёба · 🛒 Покупки · 👶 Дети · 💰 Финансы · ❤️ Здоровье · 🎉 Другое.
Категория отображается цветным бейджем на карточке и доступна как фильтр в «Все задачи».
### 7.6. Действия с задачей
- **Выполнить** (✓) → статус done.
- **Вернуть в работу** (↩) → статус todo.
- **Перенести** (📅) → выбор новой даты, статус postponed.
- **Отменить** (✕) → статус cancelled.
- **Редактировать** (✎) → модалка со всеми полями.
- **Удалить** (в модалке) — безвозвратно.
- Каждое действие фиксируется в истории (кто, когда, что).
### 7.7. Представления (вкладки)
1. **Мои задачи** — активные (todo/postponed), порученные текущему пользователю; сортировка по сроку; счётчик «выполнено за всё время».
2. **Я поручил** — задачи, поставленные текущим пользователем другим.
3. **Все задачи** — общий список с фильтрами: по члену, по статусу, по виду.
4. **Расписание** — календарь месяца + личные события (см. 7.8).
5. **Семья** — карточки членов со статистикой: активных / готово / просрочено / поручено другим.
### 7.8. Расписание и личные события
- Календарь месяца с ячейками по дням; в ячейках — цветные чипы событий и задач.
- Переключатель **Мои / Вся семья** (фильтрует события и задачи по принадлежности).
- Кнопка **+ Событие** — создание личного временного блока.
- **Событие:** название, дата, время начала, время конца, чьё расписание (владелец), вид/цвет.
- Валидация: конец позже начала; дата и время обязательны.
- Клик по дню → панель дня: таймлайн событий и задач этого дня, отсортированных по времени; кнопка «+ событие в этот день».
- Клик по чипу/строке → редактирование (события или задачи).
- Легенда категорий под календарём.
### 7.9. Навигация и UX
- Залипающая шапка с навигацией-вкладками, адаптивная (мобильный/десктоп).
- Кнопка «+ Новая задача» всегда доступна.
- Тосты-уведомления о действиях.
- Пустые состояния с подсказками.
- Подсветка просроченных задач.
## 8. Модель данных (localStorage, ключ `family_tasks_v1`)
```jsonc
{
"familyName": "Семья Ивановых",
"members": [{ "id": "m1", "name": "Мама", "color": "#ec4899", "emoji": "👩" }],
"tasks": [{
"id": "t1", "title": "Купить молоко", "note": "",
"assigneeId": "m1", "assignerId": "m2",
"dueDate": "2026-06-27", "time": "18:00",
"duration": 30, "category": "shop", "priority": "medium",
"status": "todo", "createdAt": 0, "updatedAt": 0, "completedAt": null,
"history": [{ "at": 0, "byId": "m2", "action": "created", "detail": " Создано" }]
}],
"events": [{
"id": "e1", "title": "Школа", "date": "2026-06-28",
"start": "08:00", "end": "12:00", "ownerId": "m3", "category": "study"
}]
}
```
Текущий пользователь хранится отдельно в ключе `family_tasks_user`.
## 9. Нефункциональные требования
- **Производительность:** мгновенный отклик, рендер по изменению состояния.
- **Надёжность:** отсутствие внешних runtime-зависимостей (стили — локальный CSS, без CDN); обработчик ошибок показывает красную плашку вместо белого экрана.
- **Адаптивность:** корректная работа на телефоне и десктопе.
- **Локализация:** интерфейс на русском; даты/время в формате ru-RU.
- **Приватность:** данные не покидают браузер пользователя.
## 10. Не входят в скоуп (non-goals)
- Синхронизация между устройствами / облако.
- Настоящая аутентификация, пароли, роли с правами.
- Уведомления (push/e-mail), интеграции с календарями (Google/Apple).
- Повторяющиеся задачи, подзадачи, вложения, комментарии.
- Мультисемейность (несколько семей в одном браузере).
## 11. Будущие улучшения (бэклог)
- Экспорт/импорт данных семьи (JSON-файл) для бэкапа и переноса.
- Повторы задач (ежедневно/еженедельно).
- Напоминания о просрочке на основе времени.
- Тёмная тема.
- Статистика и графики продуктивности по членам/категориям.
- Поиск по всем задачам.
- Перетаскивание задач между днями в календаре.
## 12. Статус реализации
| Блок | Статус |
|------|--------|
| Онбординг, создание семьи | ✅ |
| Вход сменой пользователя | ✅ |
| Управление семьёй | ✅ |
| Задачи: CRUD, статусы, действия | ✅ |
| Категории (виды) | ✅ |
| Длительность задачи | ✅ |
| Вкладки: Мои / Я поручил / Все / Семья | ✅ |
| Расписание: календарь + личные события | ✅ |
| Безлимит задач | ✅ |
| Синхронизация между устройствами | ❌ (не планируется в песочнице) |
---
*Документ описывает текущее состояние MVP и направления развития. Приложения «Family Tasks» — учебный проект в статической песочнице Vibe42.*