docs: PRD продукта
This commit is contained in:
parent
c9ef8a852b
commit
a6a639d75d
186
PRD.md
Normal file
186
PRD.md
Normal file
@ -0,0 +1,186 @@
|
||||
# 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.*
|
||||
Loading…
Reference in New Issue
Block a user