Оригінал: https://gist.github.com/yana-kozlova/7ff680fbe3deb3104f9fcdd7773b37e3
WorkTrace — браузерне розширення та веб-платформа для автоматичного збору і AI-аналізу контексту розробника під час робочих сесій.
Головна мета практики: Навчитися працювати з сучасним Next.js App Router стеком та Chrome Extension Manifest V3, опанувати підхід AI-Assisted Development (цикл Plan → Review → Implement) за допомогою Claude Code або аналогічних інструментів.
- Manifest: V3 (background service worker, content scripts)
- Popup UI: HTML + CSS + vanilla JS
- Стан розширення: chrome.storage.local
- Framework: Next.js 15 (App Router, Server Components, Server Actions)
- UI: React 19 + Tailwind CSS v4
- Анімації: Framer Motion
- Графи / Аналітика: D3.js
- Стан / Запити: TanStack Query v5
- API: Next.js Route Handlers (використовується і дашбордом, і extension)
- ORM: Prisma
- База даних: PostgreSQL — Neon (production) / Docker (локально)
- Auth: google-auth-library (верифікація Google token) + jsonwebtoken (власний JWT)
- Валідація: Zod
- LLM: OpenAI API (GPT-4o-mini) або безкоштовні альтернативи: Groq (llama-3, безкоштовний tier), Google Gemini API (безкоштовний tier), OpenRouter (агрегатор з безкоштовними моделями)
- Підхід: Route Handler генерує AI-звіт по сесії та повертає структурований Markdown
- Deploy: Vercel (dashboard,
Root Directory: dashboard) +.zipдля локального завантаження extension - Контейнеризація: Docker + docker-compose (PostgreSQL локально)
- CI: GitHub Actions (lint, typecheck на кожен PR)
- Моніторинг: Vercel Analytics
Мета: два окремих проекти підняті, зв'язані між собою, Claude Code налаштований.
Dashboard (Next.js)
- AC 1 (Ініціалізація): Створено Next.js 15 застосунок з App Router. Встановлено всі базові пакети: Tailwind CSS v4, Prisma, Zod, TanStack Query, Framer Motion, D3.js, google-auth-library, jsonwebtoken. Змінні середовища задокументовані у
.env.example. - AC 2 (База даних та Docker): Створено
docker-compose.ymlз PostgreSQL для локальної розробки. Підключено Neon для production. Створено Prisma-моделі:User,Session,Event(url, title, content, tags, timestamp),Track(artist, title, sessionId). Виконано першу міграцію. - AC 3 (CORS): У Route Handlers налаштовано
Access-Control-Allow-Originдляchrome-extension://*. Перевірено через Postman — запит проходить без помилок.
Chrome Extension
- AC 4 (Ініціалізація): Створено Chrome Extension з Manifest V3. Є фоновий service worker, базовий content script та порожній HTML popup. Розширення завантажується у Chrome без помилок (
chrome://extensions→ Load unpacked). - AC 5 (Структура репо): Dashboard і Extension живуть в одному репо у папках
/dashboardі/extension. У Vercel налаштованоRoot Directory: dashboard. Є кореневийREADME.mdз інструкцієюdocker-compose upі як запустити extension локально.
AI-асистент
- AC 6 (CLAUDE.md + Skills): Створено
CLAUDE.mdз правилами (бізнес-логіка у/server, Zod для валідації,anyзаборонено, не змішувати імпорти extension і dashboard, API запити з extension тільки через background service worker, auth логіка тільки у Route Handlers і middleware). Створено.claude/skills/з файламиapi-route.md,prisma-model.md,extension-message.md. - AC 7 (Тест ШІ): Використовуючи Claude Code, згенеровано Route Handler
POST /api/v1/eventsз Zod-валідацією який пише у БД. AI не поліз з логікою в компонент.
Мета: розширення реально збирає дані і відправляє на бекенд.
- AC 1 (Auth Extension → Dashboard): Extension реалізує повний auth flow у service worker:
chrome.identity.launchWebAuthFlow→ отримуємо Google OAuth tokenPOST /api/auth/extensionпередає Google token на Next.js Route Handler- Route Handler верифікує token через
google-auth-library→ видає власний підписаний JWT - JWT зберігається у
chrome.storage.local(тільки в service worker, не в content script і не в popup) - Всі подальші запити до API йдуть через background service worker з цим JWT у хедері
Authorization: Bearer
- AC 2 (Content Script): Content script парсить технічний контент сторінки (title, meta description, заголовки h1–h3, URL).
- AC 3 (Сесії): Реалізовано менеджер сесій: старт/стоп вручну, таймер активної роботи, збереження у
chrome.storage.local. - AC 4 (Popup UI): HTML popup відображає: статус сесії та таймер, індикатор синхронізації, кнопку паузи збору, поле для швидких нотаток і тегів.
- AC 5 (Передача даних): Зібрані події надсилаються батчами на
POST /api/v1/eventsз Bearer token. Є retry-логіка при помилці мережі. - ⭐ AC 6 (Музика) — бонус: Content script захоплює метадані поточного треку з YouTube Music і SoundCloud (назва, виконавець). Оновлюється в реальному часі через MutationObserver. Поточний трек відображається в popup.
- ⭐ AC 7 (Приватність) — бонус: Реалізовано чорний список доменів. Сторінки зі списку не парсяться і не відправляються. Фільтрація відбувається локально до будь-якої передачі даних.
- ⭐ AC 8 (Режими парсингу) — бонус: Content script підтримує режими: повний текст / лише заголовки / лише мета-теги. Режим налаштовується в popup.
Мета: повноцінний дашборд з стрічкою подій, графіками і AI-звітами.
- AC 1 (Auth): Реалізовано middleware (
middleware.ts) який перевіряє JWT на всіх/dashboard/*роутах. Неавторизований юзер редіректиться на/login. Сторінка логіну запускає Google OAuth flow — той самий що і в extension — юзер залогінений в обох місцях через один JWT. - AC 2 (Стрічка подій): Сторінка
/dashboardвідображає хронологічну стрічку подій поточного юзера. Є фільтрація по даті та тегах. Дані підтягуються через TanStack Query. - AC 3 (AI-звіт): Кнопка "Згенерувати звіт" на сторінці сесії викликає Route Handler → LLM отримує контекст сесії (події, треки, нотатки) як system prompt → повертає структурований Markdown. Результат відображається на сторінці і доступний для завантаження як
.mdфайл. - ⭐ AC 4 (Аналітика музики) — бонус: Сторінка
/dashboard/musicпоказує кореляцію між музикою і активністю: топ виконавців, активність по годинах. Графіки через D3.js. (Залежить від бонусного AC 6 тижня 2) - ⭐ AC 5 (Error Handling) — бонус: Усі Route Handlers повертають типізовані помилки. UI показує toast-нотифікації при помилках мережі або валідації. Extension показує статус помилки синхронізації в popup.
Мета: стабільний, задеплоєний продукт готовий до демо.
- AC 1 (CI/CD): GitHub Actions запускає lint + typecheck на кожен PR до
developmentіmain. PR не можна змерджити якщо checks не пройшли. При мерджі вmain— автодеплой на Vercel. - AC 2 (Deploy): Dashboard задеплоєно на Vercel з підключеним Neon. Extension упаковано у
.zipз інструкцією для локального завантаження..env.exampleактуальний. - AC 3 (Демо): Записано Loom демо: розширення збирає сесію → дані з'являються у стрічці → AI генерує звіт → експорт у Markdown.
- ⭐ AC 4 (Анімації) — бонус: Framer Motion анімації на ключових переходах: поява карток у стрічці подій, індикатор завантаження AI-звіту, transition між сторінками дашборду.
Проєкт має дві захищені гілки:
main— production. Прямі пуші заборонені. Мерджиться тільки зdevelopmentпісля фінального рев'ю.development— основна гілка розробки. Прямі пуші заборонені. Всі фічі мерджаться сюди через PR.
Для обох гілок (main та development):
- ✅ Require a pull request before merging
- ✅ Require status checks to pass before merging (lint, typecheck)
- ✅ Do not allow bypassing the above settings
Кожна задача — окрема гілка від development:
development → feature/[назва] → PR → code review → merge до development
development → fix/[назва] → PR → code review → merge до development
development → chore/[назва] → PR → code review → merge до development
Після завершення етапу: development → PR → main.
feature/extension-auth-google-oauth
feature/dashboard-event-feed
feature/ai-session-report
fix/extension-sync-retry
chore/update-prisma
Формат: <type>(<scope>): <short description>
Типи:
feat— нова функціональністьfix— виправлення багаchore— оновлення залежностей, конфіги, без змін логікиrefactor— рефакторинг без зміни поведінкиstyle— форматування, CSS, без змін логікиtest— додавання або виправлення тестівdocs— зміни у документації
Приклади:
feat(extension): add content script for page metadata parsing
feat(extension): implement session manager with chrome.storage
feat(dashboard): implement event feed with TanStack Query
feat(ai): add session report generator with llm api
feat(export): add markdown download route handler
fix(extension): retry failed event sync on network error
fix(popup): fix session timer reset on service worker restart
chore(deps): update Prisma to 5.14
refactor(server): extract event queries to separate module
docs(readme): add extension local install instructions
Правила:
- Опис — англійською, lowercase, без крапки в кінці
- Довжина першого рядка — до 72 символів
- Якщо потрібен контекст — додавай тіло через порожній рядок
Не проси AI одразу "написати фічу". Використовуй пайплайн:
Plan— AI аналізує файли проєкту, CLAUDE.md і генерує markdown-файл із технічним планом у папку/plans.Review— Ти як Tech Lead перевіряєш план і даєш апрув.Implement— AI пише код по затвердженому плану.