13 KiB
PRD — Семейный таск-менеджер «Family Tasks»
Версия: 1.2 Дата: 2026-06-26 Статус: реализовано (MVP), итеративно дорабатывается Платформа: статический сайт (HTML + CSS + ванильный JS), без бэкенда
1. Краткое описание
Веб-приложение для совместного управления задачами и расписанием внутри семьи. Каждый член семьи заходит под своим именем, видит порученные ему задачи, может ставить задачи другим, планировать личное расписание дня (школа, работа, тренировки) и отслеживать выполнение.
2. Проблема и мотивация
В семье задачи и договорённости часто теряются: кто за чем должен сходить, кто забрал ребёнка, когда бассейн или школа. Нужен простой общий «список дел» + календарь, где видно занятость каждого. Существующие решения либо перегружены, либо требуют регистрации и серверов. Цель — лёгкий семейный инструмент, который открывается по ссылке и сразу работает.
3. Целевая аудитория
- Семьи (родители + дети), пользующиеся одним общим устройством (домашний ПК / планшет).
- Любой человек, кому важен результат, а не технические детали.
Ключевое ограничение среды: данные хранятся локально в браузере (localStorage). Приложение оптимально для одного общего семейного устройства, где члены семьи по очереди выбирают своё имя.
4. Цели продукта
- Единый семейный аккаунт с перечнем членов семьи.
- Вход «кто я сейчас» — выбор текущего пользователя без паролей.
- Постановка задач друг другу с указанием исполнителя, срока, времени, длительности, важности и вида.
- Жизненный цикл задачи: выполнить / перенести / отменить / вернуть в работу.
- Личное расписание: свои события-блоки по времени на календаре.
- Общий обзор: «Мои задачи», «Я поручил», «Все задачи», «Расписание», «Семья».
5. Платформа и ограничения (железные)
- Только статика: HTML + CSS + JS в браузере. Никакого серверного кода.
- Нет бэкенда, БД, аутентификации, Docker, сборщиков.
- Хранение:
localStorage(пер-браузер). Синхронизация между устройствами не поддерживается — это сознательное ограничение песочницы. - «Вход» — это выбор имени из списка членов семьи (локальная идентификация), не настоящая аутентификация.
- Публикация: push в ветку
pagesGit-репозитория → сайт доступен мгновенно.
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. Представления (вкладки)
- Мои задачи — активные (todo/postponed), порученные текущему пользователю; сортировка по сроку; счётчик «выполнено за всё время».
- Я поручил — задачи, поставленные текущим пользователем другим.
- Все задачи — общий список с фильтрами: по члену, по статусу, по виду.
- Расписание — календарь месяца + личные события (см. 7.8).
- Семья — карточки членов со статистикой: активных / готово / просрочено / поручено другим.
7.8. Расписание и личные события
- Календарь месяца с ячейками по дням; в ячейках — цветные чипы событий и задач.
- Переключатель Мои / Вся семья (фильтрует события и задачи по принадлежности).
- Кнопка + Событие — создание личного временного блока.
- Событие: название, дата, время начала, время конца, чьё расписание (владелец), вид/цвет.
- Валидация: конец позже начала; дата и время обязательны.
- Клик по дню → панель дня: таймлайн событий и задач этого дня, отсортированных по времени; кнопка «+ событие в этот день».
- Клик по чипу/строке → редактирование (события или задачи).
- Легенда категорий под календарём.
7.9. Навигация и UX
- Залипающая шапка с навигацией-вкладками, адаптивная (мобильный/десктоп).
- Кнопка «+ Новая задача» всегда доступна.
- Тосты-уведомления о действиях.
- Пустые состояния с подсказками.
- Подсветка просроченных задач.
8. Модель данных (localStorage, ключ family_tasks_v1)
{
"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.