family-tasks/PRD.md
2026-06-26 06:51:11 +00:00

358 lines
28 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, статусы, действия | ✅ |
| Категории (виды) | ✅ |
| Длительность задачи | ✅ |
| Вкладки: Мои / Я поручил / Все / Семья | ✅ |
| Расписание: календарь + личные события | ✅ |
| Безлимит задач | ✅ |
| Синхронизация между устройствами | ❌ (не планируется в песочнице) |
---
## 13. Пользовательские сценарии (use cases)
### UC-1. Первый запуск и создание семьи
**Актор:** новый пользователь
**Предусловие:** данных в браузере нет.
1. Открывает ссылку → экран «Создайте семейный аккаунт».
2. Вводит название семьи (напр. «Семья Ивановых»).
3. Добавляет членов: вводит имена «Мама», «Папа», «Аня» (+ кнопкой добавляет строки).
4. Нажимает «Создать и войти».
**Результат:** семья создана, вход выполнен под первым членом, открыт раздел «Мои задачи».
### UC-2. Постановка задачи другому члену
**Актор:** текущий пользователь (Мама)
1. Нажимает «+ Новая задача».
2. Заполняет: «Отвезти Аню на танцы», кому = Папа, срок = 2026-06-27, время = 17:00, вид = 👶 Дети, важность = высокая, длительность = 1 ч.
3. Нажимает «Сохранить».
**Результат:** задача создана, видна Папе в «Мои задачи» и у Мамы в «Я поручил». В истории — «Создано» от Мамы.
### UC-3. Выполнение / перенос / отмена
**Актор:** Папа (исполнитель)
1. В «Мои задачи» видит «Отвезти Аню на танцы».
- Вариант A: нажимает «✓ Выполнить» → статус «Готово», задача уходит из активных.
- Вариант B: нажимает «📅 Перенести» → выбирает новую дату → статус «Перенесено».
- Вариант C: нажимает «✕ Отменить» → статус «Отменено».
**Результат:** статус обновлён, действие записано в историю, Мама видит изменение в «Все задачи».
### UC-4. Планирование личного дня
**Актор:** Аня (или родитель за неё)
1. Открывает «📅 Расписание», переключатель «Мои».
2. Нажимает «+ Событие».
3. Заполняет: «Школа», дата = 2026-06-28, 08:0012:00, вид = 📚 Учёба.
4. Сохраняет. Добавляет ещё «Бассейн» 14:0015:00 (❤️ Здоровье).
**Результат:** на календаре в этот день — два цветных блока; в панели дня — таймлайн 08:00 Школа, 14:00 Бассейн.
### UC-5. Просмотр занятости всей семьи
**Актор:** любой член
1. Открывает «Расписание», переключатель «Вся семья».
2. Видит события и задачи всех членов на календаре, цветом по владельцу/категории.
3. Кликает по дню → панель дня показывает общий таймлайн семьи.
**Результат:** видно, кто когда занят, чтобы ставить задачи без конфликтов.
### UC-6. Смена пользователя (вход под другим именем)
**Актор:** любой член за общим устройством
1. Кликает по аватару в шапке.
2. Выбирает другого члена из списка.
**Результат:** интерфейс переключается на контекст этого пользователя (его «Мои задачи», его расписание по умолчанию).
### UC-7. Фильтрация и поиск задач
**Актор:** любой член
1. Открывает «Все задачи».
2. Выбирает фильтры: член = Папа, статус = В работе, вид = 💼 Работа.
**Результат:** список отфильтрован; можно открыть любую задачу на редактирование.
### UC-8. Управление составом семьи
**Актор:** любой член
1. Шапка → «⚙️ Управление семьёй».
2. Добавляет нового члена «Бабушка», переименовывает, меняет emoji/цвет, сохраняет.
**Результат:** новый член доступен для входа и назначения задач.
## 14. Макеты экранов (wireframes)
### 14.1. Экран онбординга
```
┌──────────────────────────────────────────┐
│ 👨‍👩‍👧‍👦 │
│ Создайте семейный аккаунт │
│ Добавьте членов семьи — каждый сможет… │
│ │
│ Название семьи │
│ [ Семья Ивановых ] │
│ │
│ Члены семьи │
│ 👩 [ Мама ] [🗑] │
│ 👨 [ Папа ] [🗑] │
│ + добавить члена семьи │
│ │
│ ┌────────────────────────────────────┐ │
│ │ Данные хранятся в этом браузере… │ │
│ └────────────────────────────────────┘ │
│ [ Создать и войти ] │
└──────────────────────────────────────────┘
```
### 14.2. Главный экран (шапка + вкладки + список)
```
┌──────────────────────────────────────────────────────────┐
│ 📋 Семья Ивановых [+ Новая] (👩 Мама ▾) │
│ Семейные задачи и расписание │
│ [✅ Мои] [📤 Я поручил] [🗂 Все] [📅 Распис.] [👨‍👩 Семья] │
├──────────────────────────────────────────────────────────┤
│ Мои задачи │
│ 👩 Мама · выполнено за всё время: 3 │
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ ✓ [🛒 Покупки] Купить молоко [В работе] │ │
│ │ 👩 Мама от Папа ⏰ 27 июн · сегодня ⏱ 30 мин │ │
│ │ 🟡 Средняя │ │
│ │ ────────────────────────────────────────────────── │ │
│ │ [✓ Выполнить] [📅 Перенести] [✕ Отменить] [✎] │ │
│ └────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘
```
### 14.3. Модалка задачи
```
┌──────────────────────────────────────────┐
│ Новая задача ×
├──────────────────────────────────────────┤
│ Что нужно сделать * │
│ [ Купить молоко ] │
│ Подробности │
│ [ ] │
│ Кому * │ Срок │
│ [Мама ▾] │ [2026-06-27] │
│ Время │ Длительность │
│ [18:00] │ [30 мин ▾] │
│ Вид │ Важность │
│ [🛒 Покупки ▾] │ [🟡 Средняя ▾] │
│ ┌──────────────────────────────────────┐ │
│ │ От кого: Папа │ │
│ └──────────────────────────────────────┘ │
├──────────────────────────────────────────┤
│ [Удалить] [ Сохранить ] │
└──────────────────────────────────────────┘
```
### 14.4. Расписание (календарь + панель дня)
```
┌──────────────────────────────────────────────────────────┐
│ июнь 2026 ( Мои | Вся семья ) [Сегодня] [+Событ]│
├──────────────────────────────────────────────────────────┤
│ Пн Вт Ср Чт Пт Сб Вс
│ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ │
│ │ 1││ 2││ 3││ 4││ 5││ 6││ 7│ │
│ │ ││ ││ ││ ││ ││ ││ │ │
│ └──┘└──┘└──┘└──┘└──┘└──┘└──┘ │
│ ┌──┐┌──┐┌──┐┌════════┐┌──┐┌──┐ │
│ │ 8││ 9││10││11 сел. ││12││13│ ─ день выбран кликом │
│ │ ││ ││ ││08 Школа││ ││ │ │
│ │ ││ ││ ││14 Бассн││ ││ │ │
│ └──┘└──┘└──┘└────────┘└──┘└──┘ │
├──────────────────────────────────────────────────────────┤
│ четверг, 11 июня [+ событие в этот день] │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 08:00 │●│ Школа 👩 Аня · 📚 Учёба ✎ │ │
│ │ 12:00 │ │ │ │ │ │
│ ├──────────────────────────────────────────────────────┤ │
│ │ 14:00 │●│ Бассейн 👩 Аня · ❤️ Здоровье ✎ │ │
│ │ 15:00 │ │ │ │ │ │
│ ├──────────────────────────────────────────────────────┤ │
│ │ 18:00 │●│ Купить молоко 👩 Мама · 🛒 Покупки ✎ │ │
│ └──────────────────────────────────────────────────────┘ │
│ 🏠 Дом 💼 Работа 📚 Учёба 🛒 Покупки 👶 Дети … │
└──────────────────────────────────────────────────────────┘
```
### 14.5. Семья (статистика)
```
┌──────────────────────────────────────────────────────────┐
│ Семья Ивановых [⚙️ Управление] │
│ Членов: 3 · задач всего: 12 │
│ ┌────────────────────────────┐ ┌────────────────────────┐│
│ │ 👩 Мама поручил: 5 │ │ 👨 Папа поручил: 4 ││
│ │ [3] активных [6] готово │ │ [2] активных [1]гот. ││
│ │ [1] просроч. │ │ [0] просроч. ││
│ └────────────────────────────┘ └────────────────────────┘│
└──────────────────────────────────────────────────────────┘
```
---
*Документ описывает текущее состояние MVP и направления развития. Приложения «Family Tasks» — учебный проект в статической песочнице Vibe42.*