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

13 KiB
Raw Blame History

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)

{
  "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.