| 2026-09-18 |
Ukrainian localization; link-preview meta tags on share pages
...
- uk.json: full Ukrainian translation, uk added to SUPPORTED_LOCALES with
the shared slavic plural rules and a language option in settings
- /p/<token> and /r/<token> are now served by the API: it injects
og:title/description/url/image/video + twitter:card into the panel's
index.html so Telegram and Jira previews show the project or report
(title, description, creation date, screenshot/video). Caddy proxies
those paths to the server; the public origin comes from PUBLIC_BASE_URL
or the request host. Verified end-to-end through the prod stack.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
4 hours ago
|
Extension zips: 404 instead of SPA fallback; clear errors in packaging
...
A missing zip used to fall through try_files to index.html and download
as a 'broken archive'. /ext/* is now real files only, and package.mjs
fails early with a hint when zip or the built dist is missing.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
5 hours ago
|
Download page: extension install guide for Chrome and Firefox
...
- public /download page (nav item «Расширение»): per-browser download
buttons and step-by-step install instructions, setup (server URL is
the panel's own origin) and hotkey reference, en/ru
- npm run package -w @ltt/extension zips dist/{chrome,firefox} into
packages/web/public/ext (stable names, manifest at archive root so
"Load unpacked" works right after unpacking)
- make ext / make prod always build fresh zips; deploy/.env.example
seeds the release address bugtrail.gnexus.space
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
7 hours ago
|
v0.1.0-beta: production transfer guide and parameterized prod stack
...
- docker-compose.prod.yml reads POSTGRES_PASSWORD, HTTP(S)_PORT and
SITE_ADDRESS from .env; caddy persists its config in a volume
- Caddyfile takes the site address from the environment — a DNS name
turns on automatic HTTPS
- README: full first-transfer, domain/HTTPS, update and backup guide
Smoke-tested locally: fresh postgres migrates on boot, panel + /api
serve from one origin, SPA fallback works.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
7 hours ago
|
| 2026-09-17 |
Rename the service to BugTrail
...
Bug + trail: the recorded trail of actions leading to the bug.
User-facing rename in the web panel shell, extension manifest/popup/
options, API title, i18n locales and README; Firefox id is now
bugtrail@gnexus.space. Internal @ltt/* package scopes unchanged.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|

UI polish: fix black-on-dark leftovers, spacing, unstyled elements
...
- theme.css: design tokens mirroring kit's hardcoded Tokyo Night palette
(--ltt-* + --color-* aliases used by @ltt/ui and the overlay)
- CompactSelect: kit GnSelect is a 54px/600px form control — compact
variant for toolbar filters and the report status select
- ProjectPage: filters were blank (null modelValue matches no <option>)
and huge; drop the floating GnTable caption chip
- AppShell: empty topbar chip is now a user identity + logout; remove
unused props
- ReportPage/ProjectsPage/SettingsPage: kit .card is width:max-content/
max-width:340px — cards fill their grid now; toolbar shows localized
project count; PageHeader on settings
- ElementContext/EnvironmentInfo: row separators, dim labels, formatted
CAPTURED date, selector rendered as a code chip
- ScreenshotViewer: optional labels prop (panel passes i18n strings)
- i18n: ru plural rules ("1 проект"), no hardcoded EN strings on
auth pages; hide kit's "Forgot password?" stub link
- extension overlay: define --color-* vars on the shadow mount point
- Makefile: ext:watch/ext:test targets never parsed (colon in
.PHONY/rules) — renamed to ext-watch/ext-test
- shot.mjs: screenshot harness for visual review of all pages
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|

Extension: picker, note composer, recorder + infra (Makefile, prod compose, README)
...
- MV3 extension for Chrome and Firefox: single codebase, per-entry IIFE
builds (background / content / options), manifests generated per target
- Background service worker owns all networking (Bearer token from
storage.local), captureVisibleTab (windowId!), recorder event buffer
with offset_ms and auto-screenshots on clicks
- Content overlay in a closed shadow root (constructable stylesheets,
kit CSS fetched from assets/style.css with /assets URL rewrite);
PickerLayer, NoteComposer (autofocus, Ctrl+Enter submit),
RecorderBar (step counter, note, stop)
- Options page: server URL, login, default project
- Recorder steps link screenshots by uploaded file id (server accepts
attachment id or file id); environment/element JSONB serialized with
mode="json" (datetime captured_at broke inserts)
- e2e harness: headless Chromium + extension, note + recording flows
- Makefile, docker-compose.prod.yml (caddy :8081 + static panel),
deploy/Caddyfile, README (ru) with extension install and /assets notes
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|