358 lines
28 KiB
Markdown
358 lines
28 KiB
Markdown
# 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:00–12:00, вид = 📚 Учёба.
|
||
4. Сохраняет. Добавляет ещё «Бассейн» 14:00–15: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.*
|