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

9.0 KiB
Raw Blame History

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
  • Виклик:
    {
      "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"]
}
```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.