No description
  • TypeScript 70.1%
  • Vue 28.6%
  • CSS 1.2%
Find a file
2026-03-17 08:46:17 +03:00
.claude init 2026-03-12 23:14:35 +03:00
.github init 2026-03-12 23:14:35 +03:00
.storybook Dev clean 2026-03-16 23:58:37 +00:00
.vite/deps Dev clean 2026-03-16 07:35:06 +00:00
.vscode init 2026-03-12 23:14:35 +03:00
.zed init 2026-03-12 23:14:35 +03:00
docs feat: alerts, projects, mentions backend API integration 2026-03-15 15:34:20 +03:00
e2e Dev clean 2026-03-16 23:58:37 +00:00
openapi feat: synced project dashboards with backend API 2026-03-17 08:46:17 +03:00
public init 2026-03-12 23:14:35 +03:00
scripts feat: dashboards, api integration (pinia colada + openapi gen) 2026-03-15 11:14:16 +03:00
src feat: synced project dashboards with backend API 2026-03-17 08:46:17 +03:00
.dockerignore feat: fixed all tabs by adding tabs bar, dockerfile and etc 2026-03-14 22:32:11 +03:00
.gitattributes init 2026-03-12 23:14:35 +03:00
.gitignore docs: storybook files for most of components 2026-03-15 16:29:51 +03:00
.gitlab-ci.yml ci: added unit-tests to ci 2026-03-17 03:11:20 +03:00
.oxfmtrc.jsonc init 2026-03-12 23:14:35 +03:00
.oxlintrc.json Dev clean 2026-03-16 23:58:37 +00:00
AGENTS.md creating and editing organizations and projects using API 2026-03-15 17:46:32 +03:00
bun.lock ci: added unit-tests to ci 2026-03-17 03:11:20 +03:00
bunfig.toml init 2026-03-12 23:14:35 +03:00
components.json feat: dashboards, api integration (pinia colada + openapi gen) 2026-03-15 11:14:16 +03:00
Dockerfile fix environment variable setting in docker 2026-03-17 07:10:03 +03:00
env.d.ts init 2026-03-12 23:14:35 +03:00
GEMINI.md init 2026-03-12 23:14:35 +03:00
index.html init 2026-03-12 23:14:35 +03:00
lefthook.yml chore: update lefthook precommit hook 2026-03-17 03:42:24 +03:00
nginx.conf Dev clean 2026-03-16 23:58:37 +00:00
openapi-ts.config.ts feat: synced project dashboards with backend API 2026-03-17 08:46:17 +03:00
package-lock.json Plugins fix 2026-03-15 12:57:06 +03:00
package.json ci: added unit-tests to ci 2026-03-17 03:11:20 +03:00
playwright.config.ts init 2026-03-12 23:14:35 +03:00
policy.yml feat(project,scripts): project card, project page, component generation 2026-03-14 14:48:04 +03:00
README.md feat: synced project dashboards with backend API 2026-03-17 08:46:17 +03:00
tsconfig.app.json feat: Dockerfile + build 2026-03-15 02:40:32 +03:00
tsconfig.json feat: dashboards, api integration (pinia colada + openapi gen) 2026-03-15 11:14:16 +03:00
tsconfig.node.json init 2026-03-12 23:14:35 +03:00
tsconfig.vitest.json init 2026-03-12 23:14:35 +03:00
vite.config.ts init 2026-03-12 23:14:35 +03:00
vitest.config.ts init 2026-03-12 23:14:35 +03:00

Sauron Frontend

Frontend-приложение для мониторинга проектов, интеграций, постов, упоминаний, алертов и словарей.

Проект использует архитектуру FSD

Что умеет приложение

  • выбор активной организации
  • работа с проектами внутри организации
  • просмотр постов и упоминаний
  • управление правилами алертов
  • создание и редактирование интеграций
  • управление blacklist / whitelist / catastrophic lists
  • просмотр dashboard-экранов
  • настройки организации
  • локализованный интерфейс
  • аутентификация
  • fallback 404

На login-странице также есть временные mock-аккаунты для быстрого входа в development/demo-сценариях: если выбранного mock-пользователя нет в backend, он создаётся автоматически при первом входе.

Технологический стек

  • Vue 3
  • TypeScript
  • Vite
  • Vue Router
  • Pinia
  • Pinia Colada
  • Nuxt UI
  • Vue I18n
  • Zod
  • @hey-api/openapi-ts
  • Storybook
  • Vitest
  • Playwright
  • Ultracite / Oxlint / Oxfmt

Архитектура

Слои

  • src/app Точка входа, глобальные провайдеры, layouts, router.
  • src/pages Route-bound экраны и page-level orchestration.
  • src/widgets Крупные UI-секции, собирающие несколько features/entities.
  • src/features Переиспользуемые бизнес-взаимодействия и view-model логика.
  • src/entities Доменные сущности, API-обёртки, мапперы и типы.
  • src/shared Инфраструктура: generated API client, базовые UI-компоненты, i18n, роуты, утилиты.

Что важно в этом проекте

  • backend-контракты берутся из generated OpenAPI client
  • Pinia Colada используется как основной механизм server state
  • обычные Pinia stores применяются только для UI/client state и orchestration
  • raw DTO не должны напрямую протекать в presentation, если нужна нормализация
  • generated files в src/shared/api/generated/** считаются read-only

Как устроен доступ к данным

Поток данных в проекте выглядит так:

  1. OpenAPI-спецификация лежит в openapi/openapi.yml.
  2. Из неё генерируется клиент в src/shared/api/generated.
  3. Глобальная конфигурация клиента задаётся в src/shared/api/config.ts.
  4. Доменные обёртки над generated API лежат в src/entities/*/api.
  5. Query/mutation flow строится через Pinia Colada.
  6. Компоненты и страницы получают уже нормализованные данные через stores/composables.

Особенности API flow

  • базовый URL читается из VITE_BACKEND_URL
  • bearer token подставляется централизованно через setApiAccessToken()
  • для HTTP-запросов включён timeout 5s
  • timeout-ошибки нормализуются в читаемое для обычного пользователя сообщение с метаданными запроса

Полезные файлы:

State management

В проекте используются два уровня состояния:

1. Server state через Pinia Colada

Используется для:

  • backend lists
  • details
  • loading / error / refresh state
  • refetch и invalidation

Примеры:

2. UI/client state через Pinia stores

Используется для:

  • выбранной организации
  • активного проекта
  • локальной session state
  • modal/tab/filter state
  • compose-level orchestration

Примеры:

Persistence

Через pinia-plugin-persistedstate сохраняются:

  • user session
  • selected organization

Файлы:

Основные страницы и пользовательские сценарии

Login

Файлы:

Функции:

  • sign in / sign up
  • mock accounts для development/demo
  • redirect на исходный маршрут после логина

Organization Selection

Файлы:

Функции:

  • выбор активной организации
  • создание организации
  • переход к запрошенному ранее маршруту

Home

Файлы:

Функции:

  • список проектов текущей организации
  • создание/редактирование/удаление проекта
  • входная точка в project workspace

Project Workspace

Файлы:

Вкладки:

  • mentions
  • overview
  • alerts
  • integrations
  • lists

Dashboards

Файлы:

  • src/pages/data/**

Settings

Файлы:

Функции:

  • просмотр organization metadata
  • редактирование текущей организации из general settings

Not Found

Файлы:

Роутинг

Основной router:

Основные маршруты:

  • /
  • /login
  • /organizations/select
  • /dashboards
  • /projects
  • /user
  • /settings
  • catch-all 404

Route guard:

  • если организация не выбрана, пользователь переводится на экран выбора организации
  • login / organization selection / 404 работают в plain layout

Константы маршрутов лежат в:

UI, i18n и layouts

UI

Базовый UI построен на Nuxt UI.

Точка входа:

Shared UI primitives:

  • src/shared/ui/**

Локализация

Локали:

  • en
  • ru

Файлы:

Layouts

Файлы:

В проекте есть:

  • dashboard-layout для основных внутренних экранов
  • plain-layout для login, organization-selection и 404

Несколько полезных мест для старта

Тестирование

Unit tests

Vitest работает в jsdom.

Конфиг:

E2E

Используется Playwright.

Конфиг:

Поведение:

  • локально использует dev server
  • в CI использует preview server

OpenAPI и generated code

Спецификация:

Генерация:

Выход:

Важно:

  • при изменении backend contract сначала обновляется OpenAPI spec, затем регенерируется клиент

INfo

  • timeout API-запросов установлен в 5 секунд
  • на login-странице есть mock-аккаунты для быстрого входа
  • на mentions-экране в development могут использоваться локальные mock data, если backend ещё не отдаёт упоминания
  • в репозитории есть legacy-папка src/ogranization с опечаткой в названии; она не является основной архитектурной точкой входа

Полезные документы внутри репозитория