Skip to content

# TASK_PHASE_NODE_DIRECTORY_ADD_NODE_CTA_v1

Мета: повернути та зафіксувати кнопку «Додати ноду» у Node Directory, щоб можна було запускати процес реєстрації нової ноди з інтерфейсу.

## 0. Поточний стан

- Сторінка `/nodes` (Node Directory) відображає:
- Production / Development фільтри.
- Список нод або empty state «Наразі немає зареєстрованих нод».
- Раніше була кнопка «Додати ноду», але після рефакторингів зникла.

## 1. UX / UI вимоги

### 1.1. Розміщення

- Сторінка `/nodes`:
- У верхній частині (праворуч від заголовка «Node Directory» або під фільтрами) додати кнопку:
  - Текст: «Додати ноду»
  - Іконка: server / plus (та сама стилістика, що й у кнопки «Створити MicroDAO»).

### 1.2. Поведінка

- Натискання → `router.push("/nodes/register")`.
- Якщо `/nodes/register` ще не існує:
- Створити просту заглушку-сторінку з текстом:
  - «Реєстрація нової ноди DAARION. На цьому етапі нода реєструється через встановлення Node Agent і heartbeat. Перегляньте інструкцію в docs/NODE_SETUP.md».
- Кнопка показується тільки для авторизованих користувачів із ролями:
- `is_admin` або `is_orchestrator` (перевірити існуючу систему ролей і використати наявний хук, наприклад `useCurrentUser()`).

### 1.3. Empty state

- Якщо `nodes.length === 0`:
- Замість просто «Ноди не знайдені» показати:
  - Текст: «Наразі немає жодної зареєстрованої ноди»;
  - Під текстом — кнопку «Додати першу ноду» з таким самим handler'ом (`/nodes/register`).

## 2. Технічна реалізація

### 2.1. Node Directory page

Файл (ймовірно): `apps/web/src/app/nodes/page.tsx`.

Зробити:

- Імпортувати кнопку (Button component) та `useRouter`.
- Додати кнопку в header:

    const router = useRouter();

    <Button
      variant="primary"
      onClick={() => router.push("/nodes/register")}
    >
      Додати ноду
    </Button>

- Обгорнути рендер у перевірку ролі користувача.

### 2.2. Сторінка `/nodes/register`

Файл: `apps/web/src/app/nodes/register/page.tsx`.

Мінімум:

    export default function NodeRegisterPage() {
      return (
        <div className="space-y-4">
          <h1 className="text-2xl font-semibold">Додати ноду</h1>
          <p className="text-sm text-muted-foreground">
            Щоб нода зʼявилась у каталозі, встановіть Node Agent на сервері / ноутбуці
            і переконайтесь, що heartbeat надсилається до DAARION.city.
          </p>
          <a
            href="https://daarion.space/docs/NODE_SETUP"
            className="text-primary underline"
          >
            Інструкція з встановлення ноди
          </a>
        </div>
      );
    }

(Якщо є реальний шлях до docs — використати його.)

## 3. Acceptance Criteria

1. На `/nodes`:
2. У header видно кнопку «Додати ноду».
3. При кліку відкривається `/nodes/register`.
4. У випадку 0 нод:
5. Empty state містить кнопку «Додати першу ноду».
6. Кнопка не показується гостям та користувачам без прав (тільки admin/orchestrator).
7. Після деплою кнопка не зникає при наступних оновленнях (перевірити в `check-deploy-post.py`, за бажанням, що `/nodes` повертає 200).