6.5 KiB
6.5 KiB
Системный промпт для AI-ассистента проекта XFlow
Текущая архитектура
Проект реализован на Nuxt 3 PWA.
Стек
- Frontend/Backend: Nuxt 3 (Vue 3 + Nitro SSR)
- Стили: Tailwind CSS
- PWA:
@vite-pwa/nuxt(Service Worker, манифест, оффлайн-кэш) - Аутентификация: Firebase Auth (Google Sign-In), JWT на Nitro
- Визуализация:
@vue-flow/core+@vue-flow/background+@vue-flow/controls+@vue-flow/minimap - Markdown:
markdown-it(рендеринг нод) - Push: Web Push API + Notification API + вибро
- База данных: In-memory (заглушка на Nitro utils/db.ts), миграция на Postgres в планах
Файловая структура
app/
app.vue # Корневой компонент
assets/css/main.css # Tailwind + кастомные стили для Vue Flow
components/
CanvasViewer.vue # Основной канвас (Vue Flow)
MarkdownNode.vue # Рендеринг markdown в нодах
AchievementOverlay.vue # Всплывающие ачивки
composables/
useAuth.ts # Firebase Google Sign-In + JWT decode
useCanvas.ts # Загрузка .canvas JSON, парсинг frontmatter
usePush.ts # Подписка/отправка Web Push
useAchievements.ts # Управление ачивками
layouts/
default.vue # Навигация + AchievementOverlay
middleware/
auth.ts # Проверка JWT (cookie xflow_token)
admin.ts # Проверка role === 'admin'
pages/
index.vue # Дашборд (статы задач и ачивок)
login.vue # Только Google Sign-In (Firebase)
canvas.vue # CanvasViewer страница
admin.vue # Панель админа (пуши, скрипты)
settings.vue # Настройки пушей и ачивок
plugins/
firebase.client.ts # Инициализация Firebase SDK (только клиент)
push-notifications.client.ts # Обработка пуш-событий
server/
api/auth/google.post.ts # Верификация Firebase ID token + выдача JWT
api/auth/validate.get.ts # Проверка JWT
api/canvas/[id].get.ts # Мок .canvas JSON
api/nodes/[id].put.ts # Обновление статуса ноды + автовыдача ачивок
api/nodes/index.get.ts # Список нод с RBAC (фильтр по assigned_to)
api/achievements/index.get.ts # Список ачивок пользователя
api/push/subscribe.post.ts # Сохранение подписки
api/push/send.post.ts # Отправка пуша (admin only)
utils/auth.ts # Генерация/верификация JWT (jose)
utils/db.ts # In-memory store (users, nodes, achievements, pushSubs)
public/
favicon.svg
pwa-*.svg # Иконки PWA (SVG заглушки)
Ключевые бизнес-правила
- Авторизация: Только Firebase Google Sign-In. Email/password удален. Cookie
xflow_token. - RBAC:
role: 'admin'дает доступ к/admin. Обычные пользователи видят только ноды сassigned_to == свой email. - Canvas ноды: Double-click переключает статус
pending -> in_progress -> completed. Приcompletedсервер автоматически выдает ачивку. - Frontmatter: Ноды могут содержать YAML frontmatter с полями
alarm,script_id,assigned_to. - Push: Админ отправляет пуши через
/api/push/send. Клиентский плагин слушаетPUSH_RECEIVEDи вибрирует. - Gamification: Ачивки выдаются автоматически при завершении нод. Отображаются через AchievementOverlay.
Конфигурация (.env)
Обязательные переменные для Firebase:
NUXT_PUBLIC_FIREBASE_API_KEY=
NUXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
NUXT_PUBLIC_FIREBASE_PROJECT_ID=
NUXT_PUBLIC_FIREBASE_APP_ID=
NUXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
NUXT_FIREBASE_API_KEY= # Серверная верификация (тот же ключ)
NUXT_JWT_SECRET= # Секрет для подписи JWT
Критически важное правило: документация в .md
При ЛЮБЫХ изменениях архитектуры, API, бизнес-логики или структуры данных — обновляй соответствующие .md файлы.
Структура документации в проекте
docs/architecture/— архитектурные решения, ADRdocs/api/— контракты API, форматы данныхdocs/features/— описание функционалаREADME.md— общее описание, setup, структура
Правила обновления .md
-
Если добавляешь новый composable/component/API route — создай или обнови
.md:- Назначение
- Зависимости
- Публичный API (методы, параметры, типы)
- Пример использования
-
Если меняешь формат данных (.canvas JSON, frontmatter схема):
- Обнови документацию формата
- Укажи версию схемы
- Опиши миграцию если нужна
-
Если добавляешь фичу:
- Создай
docs/features/feature-name.md - Опиши user flow, edge cases
- Создай
Инструкция для сессии
- Перед изменениями — прочитай соответствующий
.mdфайл и код - После изменений — обнови
.mdили создай новый - Не ломай существующие форматы данных без явного запроса
- При добавлении зависимостей — проверяй совместимость с Nuxt 3 / Vue 3 / TypeScript
- Все Dart/Flutter файлы удалены — не возвращай их
- Cookie называется
xflow_token - Проект называется XFlow