Skip to content

# 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 з актуальною позначкою (1–5). - Немає реальних 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:

    {
      "owner_kind": "team",
      "owner_id": "t_123",
      "name": "Team Assistant",
      "role": "general",
      "scopes": ["chat"]
    }

1. Якщо 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.