| brand | 21 hours ago | ||
| deploy | 2 hours ago | ||
| packages | 2 hours ago | ||
| server | 3 hours ago | ||
| .env.example | 1 day ago | ||
| .gitignore | 1 day ago | ||
| .npmrc | 1 day ago | ||
| Makefile | 2 hours ago | ||
| README.md | 2 hours ago | ||
| docker-compose.prod.yml | 2 hours 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}
# + zip-архивы в packages/web/public/ext (страница /download)
Пользователям расширение раздаётся через страницу панели /download (пункт меню «Расширение»): архивы для 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.
Стек прод-версии — docker-compose.prod.yml: caddy (статика панели + reverse-proxy /api), API-сервер, Postgres 16. Миграции применяются при старте контейнера сервера автоматически.
git clone <repo> && cd live-testing-tool npm ci make prod # сборка панели + up -d --build
Панель и API на одном origin: http://<host>:8081 (caddy: статика + /api → server). Первый зарегистрированный через панель аккаунт — обычный пользователь; проекты создаёт каждый сам, публичные ссылки выдаются на проект и репорт.
.env рядом с compose-файлом)| Переменная | По умолчанию | Назначение |
|---|---|---|
POSTGRES_PASSWORD |
ltt |
пароль БД (меняйте на проде) |
HTTP_PORT |
8081 |
порт панели на хосте |
HTTPS_PORT |
8443 |
порт HTTPS на хосте |
SITE_ADDRESS |
:80 |
адрес сайта для caddy |
Домен + автоматический HTTPS (caddy сам выпустит сертификат). Релизный адрес — https://bugtrail.gnexus.space:
# .env SITE_ADDRESS=bugtrail.gnexus.space HTTP_PORT=80 HTTPS_PORT=443
(образец — deploy/.env.example)
Для расширения в настройках указать URL сервера = адрес панели (https://bugtrail.example.com), войти и выбрать проект по умолчанию.
git pull make prod # пересоберёт панель и контейнеры, накатит миграции
Данные живут в volume postgres_data (БД) и каталоге ./data (файлы скриншотов/видео) — их достаточно для бэкапа: docker compose -f docker-compose.prod.yml exec postgres pg_dump -U ltt ltt > dump.sql плюс копия ./data.
/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 (сервер, логин, проект по умолчанию)