| brand | 21 hours ago | ||
| deploy | 1 day ago | ||
| packages | 4 hours ago | ||
| server | 18 hours ago | ||
| .env.example | 1 day ago | ||
| .gitignore | 1 day ago | ||
| .npmrc | 1 day ago | ||
| Makefile | 1 day ago | ||
| README.md | 21 hours ago | ||
| docker-compose.prod.yml | 1 day ago | ||
| docker-compose.yml | 1 day ago | ||
| package-lock.json | 18 hours ago | ||
| package.json | 21 hours ago | ||
Сервис для передачи багов от тестировщиков разработчикам: заметки на элементах страницы со скриншотами и аннотациями, запись алгоритма воспроизведения, веб-панель с неугадываемыми ссылками для Jira.
| Часть | Стек | Где |
|---|---|---|
| Сервер (API) | Python 3.13, FastAPI, SQLAlchemy async, Postgres 16, Alembic | server/ (Docker) |
| Веб-панель | Vue 3, vue-router, vue-i18n (en/ru), gnexus-ui-kit | packages/web |
| Общий код UI | Аннотации на скриншотах, контекст элемента | packages/ui |
| Расширение | Chrome + Firefox (MV3), Vite, closed shadow-DOM overlay | packages/extension |
| Общие типы/клиент API | TypeScript | packages/shared |
npm install # workspaces: shared, ui, web, extension make dev # postgres + API в docker, панель на http://localhost:5173
API: http://localhost:8001 (healthcheck: /api/healthz). Миграции применяются при старте контейнера; вручную — make migrate.
make ext # сборка в packages/extension/dist/{chrome,firefox}
Установка (dev):
chrome://extensions → Developer mode → Load unpacked → packages/extension/dist/chromeabout:debugging#/runtime/this-firefox → Load Temporary Add-on → packages/extension/dist/firefox/manifest.jsonЗатем: иконка расширения → Settings (или Alt+Shift+B → контекстное меню настроек не используется, страница настроек открывается из chrome://extensions → Details → Extension options): указать URL сервера, войти (email/пароль), выбрать проект по умолчанию.
Управление:
Пароли не сохраняются: маскирование ввода дублируется на сервере.
kit.css из gnexus-ui-kit ссылается на шрифты абсолютными путями /assets/.... Веб-панель копирует ассеты кита в свой dist/assets (dev-миддлварь + vite-plugin-static-copy). Расширение раздаёт их как web_accessible_resources и переписывает пути на chrome-extension://.../assets/... при загрузке стилей в shadow root (constructable stylesheets — CSS хост-страницы и её CSP не затрагиваются).
make ext-test (нужен поднятый make dev) — headless Chromium грузит собранное расширение, проходит сценарий «пикер → заметка» и «рекордер: клики + ввод», проверяет репорты через API.
make prod # web dist + docker-compose.prod.yml # панель и API на одном origin: http://localhost:8081 (caddy: статика + /api → server)
/p/<token>, /r/<token>).POST .../share/rotate).server/app/routers/ auth, projects, reports, uploads
packages/web/src/ pages (Login, Register, Projects, Project, Report, Settings), i18n
packages/ui/src/ AnnotationEditor, ScreenshotViewer, ElementContext, EnvironmentInfo
packages/extension/src/ background (SW: сеть, captureVisibleTab, буфер рекордера),
content (shadow-DOM оверлей: PickerLayer, NoteComposer, RecorderBar),
options (сервер, логин, проект по умолчанию)