Files
microdao-daarion/docs/cursor/06_tasks_onboarding_mvp.md
2026-02-16 07:48:48 -08:00

333 lines
9.0 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.
# 06 — Tasks: Onboarding & MVP Core (for Cursor)
Цей документ містить чіткі технічні задачі для Cursor.
Кожна задача сформульована у форматі, який Cursor розуміє найкраще:
- контекст
- специфікації
- API
- acceptance criteria
- очікуваний вивід (list of files + diff)
Всі задачі беруть дані з:
- 01_product_brief_mvp.md
- 02_architecture_basics.md
- 03_api_core_snapshot.md
- 04_ui_ux_onboarding_chat.md
- 05_coding_standards.md
## BLOCK A — ONBOARDING (5 кроків)
### Task A1 — Create route `/onboarding` + base layout
**Context:**
Onboarding складається з 5 кроків. Потрібен базовий контейнер зі state machine.
**Specs:**
- Створити сторінку `/onboarding`.
- Додати компонент `OnboardingLayout`.
- Зберігати поточний крок у локальному стані.
- Кроки: `welcome`, `team`, `privacy`, `channel`, `agent`, `invite`.
- У верхній частині: step indicator.
**Acceptance Criteria:**
- `/onboarding` відкривається без помилок.
- Є stepper з актуальною позначкою (15).
- Немає реальних API-викликів (тільки каркас).
**Cursor Output:**
- Список файлів для змін.
- Код.
### Task A2 — Onboarding Step 1: Welcome Screen
**Specs:**
- Заголовок: "Створимо твою MicroDAO".
- Підзаголовок: "5 кроків — і твоя спільнота буде готова до роботи."
- Кнопка: "Почати".
- При натисканні — перехід на Step 2.
**Acceptance Criteria:**
- Стиль згідно з 04_ui_ux_onboarding_chat.md.
- Робоча кнопка.
### Task A3 — Step 2: Create Team (API: POST /teams)
**Specs:**
- Форма:
- `Назва спільноти` (required)
- `Опис` (optional)
- Виклик: `POST /teams`
- Результат: зберегти `teamId` у state onboarding.
**Acceptance Criteria:**
- Форма валідна: без назви кнопка disabled.
- Після успішного виклику → Step 3.
- Обробка помилок через toast.
### Task A4 — Step 3: Privacy mode (PATCH /teams/{id})
**Specs:**
UI: дві великі карточки:
- PUBLIC:
- Текст: "Є публічний канал. Гості можуть читати та приєднатися."
- CONFIDENTIAL:
- Текст: "Тільки запрошені учасники. Чати зашифровані."
При натисканні — PATCH `/teams/{teamId}`.
**Acceptance Criteria:**
- Виділяється вибраний режим.
- Успішний PATCH → Step 4.
### Task A5 — Step 4: Create first channel (POST /channels)
**Specs:**
- Поля:
- Назва каналу
- Тип: public | group
- Виклик:
```json
{
"team_id": "...",
"type": "...",
"title": "...",
"mode": "public" | "confidential"
}
```
**Acceptance Criteria:**
- Після успіху → Step 5.
- Канал створений і додається до списку каналів у state.
### Task A6 — Step 5: Agent & memory settings (POST /agents)
**Specs:**
UI:
- toggle: "Увімкнути приватного агента"
- select: мова агента
- select: профіль агента
- select: memory depth
API:
1. Якщо toggle ON →
`POST /agents` body:
```json
{
"owner_kind": "team",
"owner_id": "t_123",
"name": "Team Assistant",
"role": "general",
"scopes": ["chat"]
}
```text
2. Якщо OFF → skip
**Acceptance Criteria:**
- Вибір зберігається в onboarding state.
- API викликається тільки якщо агент включений.
- Після успіху → Step 6.
### Task A7 — Step 6: Invite (UI only)
**Specs:**
UI:
- Заголовок: "Спільнота створена!"
- Показати посилання-запрошення (stub: `/invite?t=ID`).
- Кнопка: "Перейти в чат".
**Acceptance Criteria:**
- Немає API.
- При натисканні — redirect до `/t/:teamId/c/:channelId`.
## BLOCK B — CHAT CORE
### Task B1 — Channel List in Sidebar
**Specs:**
- Зробити компонент `SidebarChannels`.
- Отримати список каналів командою:
- Використати локальний state (оновлює онбординг).
- У реальному додатку — GET `/teams/{id}/channels` (можна додати).
- Показати активний канал.
**Acceptance Criteria:**
- Sidebar показує всі канали.
- Active канал підсвічений.
### Task B2 — Messages Stream (GET /channels/{id}/messages)
**Specs:**
- Компонент: `MessagesStream`.
- Пагінація: cursor-based scroll.
- Рендер: avatar + name + time + text.
- Confidential → body_enc (можна stub дешифрування).
**Acceptance Criteria:**
- Стрічка відображає повідомлення.
- При скролі догори → підвантаження старих.
### Task B3 — Composer (POST /messages)
**Specs:**
- Компонент: `MessageComposer`.
- Input + кнопка "Надіслати".
- Enter → відправка.
- Shift+Enter → новий рядок.
**Acceptance Criteria:**
- Повідомлення додається в стрічку без перезавантаження.
- Порожній інпут → заборонити надсилання.
### Task B4 — Follow-up creation (POST /followups)
**Specs:**
- Контекстне меню у повідомленні: "Створити follow-up".
- Модалка: назва (автоматично), assignee (список членів), due.
- API: POST `/followups`.
**Acceptance Criteria:**
- Follow-up створюється успішно.
- Помилки показуються через toast.
## BLOCK C — PROJECTS & TASKS
### Task C1 — Project List (GET /projects)
**Specs:**
- Вкладка "Проєкти".
- Список проєктів (назва).
- Кнопка "Створити проєкт".
**Acceptance Criteria:**
- Працює рендер списку.
- Порожній стан: "Проєкти ще не створені".
### Task C2 — Create Project (POST /projects)
**Specs:**
- Модалка → створення нового проєкту.
- Поля: назва, visibility (public/confidential).
- API: POST `/projects`.
**Acceptance Criteria:**
- Новий проєкт зʼявляється в списку.
### Task C3 — Tasks Board (GET/POST /projects/{id}/tasks)
**Specs:**
- 3 колонки: backlog, in_progress, done.
- Карточка задачі: title + status.
- При кліку → змінити статус.
**Acceptance Criteria:**
- Задачі змінюють статус (PATCH можна stub: просто оновлювати client state).
- Мінімальний Kanban працює.
## BLOCK D — AGENTS
### Task D1 — Agents List (GET /agents)
**Specs:**
- Вкладка "Агенти".
- Показати всіх агентів команди.
**Acceptance Criteria:**
- Один агент "Team Assistant" відображається.
### Task D2 — Agent Chat (stub)
**Specs:**
- Створити окремий чат з агентом:
- `MessageComposer`
- потік повідомлень (локальний state)
- В API-запиті викликати зовнішній LLM (можна mock)
- Зберігати історію до reload.
**Acceptance Criteria:**
- Агент відповідає у вигляді тексту.
- Історія видно в UI.
## BLOCK E — FINALIZATION
### Task E1 — Route redirect after onboarding
**Specs:**
- Після Step 6 redirect:
`/t/:teamId/c/:channelId`
**Acceptance Criteria:**
- Після онбордингу користувач потрапляє у свій перший канал.
### Task E2 — Mobile adaptation
**Specs:**
- Sidebar → Drawer
- Composer sticky bottom
- Onboarding → одна колонка
**Acceptance Criteria:**
- Мобільна версія не ламається.
### Task E3 — Error Handling Audit
**Specs:**
Перевірити всі виклики API:
- login
- teams
- channels
- messages
- followups
- projects
- tasks
- agents
**Acceptance Criteria:**
- Усі помилки показуються через toast.
- Немає uncaught exceptions у консолі.
## Кінець документа
Цей файл є головним TODO для Cursor.
Кожна задача може бути надіслана як окремий prompt,
Cursor повинен завжди відповідати:
- списком файлів,
- diff,
- коротким summary.