Commit Graph

22 Commits

Author SHA1 Message Date
AR 15 M4 5b54ad5c23 feat(sprint-5.5): add block version snapshots with switching between versions
- Add BlockSnapshot Prisma model (html, css, version, changelog) + migration
- Add API endpoints: POST/GET /blocks/snapshots, GET /blocks/snapshots/:id
- BlockMetaBar: version dropdown, HTML capture on save, onSnapshotSelect prop
- "Сохранить версию" now captures innerHTML snapshot + CSS and stores in DB
- Selecting archived version shows stored HTML snapshot instead of live component
- Yellow banner "Архивная версия" with link to return to current
- Split all 8 block pages into Server Component (metadata) + Client Component
- Add data-block-capture attribute for snapshot capture targeting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 00:17:25 +05:00
AR 15 M4 196526ffc4 feat(sprint-5.5): add "Save version" button, update navigation block and block components
- Add "Сохранить версию" button to BlockMetaBar that persists current
  version + changelog from code to PostgreSQL via PATCH API
- Update navigation page: menu items section now renders like live example
  with underlined links, hover dropdowns, and submenus
- Restore uncommitted changes from previous session (thirsty-mayer worktree):
  navigation v1.3 with dropdowns, updated hero/ceo/doctors/reviews/news/
  contact-forms/footer blocks, navData.ts extraction, seed updates
- Extract nav menu data to shared navData.ts module

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 23:28:05 +05:00
AR 15 M4 3094e9a2b7 refactor: move navigation page from /components to /blocks section
- Moved /components/navigation → /blocks/navigation
- Updated Sidebar: navigation is now first item in "Блоки"
- Updated PreviewClient block path
- Updated seed block path
- Updated SPRINTS.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 19:31:47 +05:00
AR 15 M4 e20d222183 feat(sprint-5.5): store block metadata (version, changelog) in PostgreSQL
- Prisma schema: added `changelog Json @default("[]")` to Block model
- Migration: 20260324141120_add_changelog_field
- Seed: 8 blocks with actual versions (v1.0–v1.2) and changelog entries
- API: PATCH /blocks/by-path accepts changelog field
- CORS: accept any localhost port (regex pattern)
- BlockChangelog component: renders version history from API or fallback
- BlockMetaBar: loads changelog from API, passes to BlockChangelog
  - Removed "API офлайн" text, replaced with subtle gray dot
  - Added defaultChangelog prop for offline fallback
- Block pages: removed hardcoded changelog JSX, use defaultChangelog prop
- Updated SPRINTS.md with completed tasks

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 19:21:56 +05:00
AR 15 M4 36d5faf67d fix(preview): enable block toggle via localStorage when API is offline
BlockMetaBar now falls back to localStorage for preview toggle when
NestJS API is unavailable. PreviewClient reads localStorage state
and listens for bb-preview-change events to stay in sync.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 18:52:21 +05:00
AR 15 M4 950799193a fix(sprint-5): sync block CSS styles with real site perm.oclinica.ru/lor
- H1: 36px #cb9768 (was ~20px #53514e)
- H2 sections: 36px #000 (was ~20-30px #111827)
- Hero title: 22px #333 (was 16px #111827)
- Hero CTA: pill style (was outline)
- Contact forms bg: #d4f6f8 for both (was #b8e6ed / #fff)
- News bg: #f2fee6 (was #fff)
- Added version changelogs to all block pages
- Updated typography, LLM_CONTEXT v4.3, SPRINTS.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 18:41:41 +05:00
AR 15 M4 2ed7eee63d feat(sprint-5.5): add NestJS API, BlockMetaBar, block components + fix Vercel build
- Add vercel.json to build only apps/web (fix Vercel build failure)
- NestJS API: BlocksModule, BlocksController, BlocksService with Prisma 7
- PostgreSQL migration: Block model (path, version, isInPreview)
- BlockMetaBar component: inline version edit, API fetch with offline fallback
- New block components: CeoBlock, ContactFormsBlock, FooterBlock, NewsBlock, ReviewsBlock
- PreviewClient: fetch isInPreview from API, block visibility toggle
- Pages updated: hero, doctors, ceo, contact-forms, contact, news, reviews
- docker-compose: PostgreSQL on port 5434

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 10:38:12 +05:00
AR 15 M4 c8217cfc2f feat(preview): add NavigationBlock component, show header in preview
NavigationBlock extracted from navigation/page.tsx into reusable component.
Preview now shows real header (ready: true) as first block — 3 of 8 ready.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 16:41:17 +05:00
AR 15 M4 72829b5d46 feat(sprint-5.5): add page preview section with Create button
- New route /pages/preview with empty state ("Создать") and assembled preview
- Preview assembles real site blocks in order (Hero + Doctors ready, rest placeholders)
- localStorage persists created state; "Пересобрать" resets it
- Extracted HeroBlock and DoctorsBlock as reusable components
- Refactored hero and doctors pages to import from components/blocks/
- Sidebar: added "Просмотр страницы" link, bumped to Sprint 5.5 · v0.5.5
- SPRINTS.md: added Sprint 5.5 plan with summary table row

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 16:21:40 +05:00
AR 15 M4 d4d86e6343 feat(sprint-5): document all blocks from perm.oclinica.ru/lor
Created 8 pages from real site (screenshot source):
- /components/navigation — header: top-bar, logo, nav menu (8 items)
- /blocks/hero         — hero banner: #b8e6ed bg, 3 checkmarks, CTA button
- /blocks/ceo          — intro text: clinic description + Q&A stimuli
- /blocks/doctors      — doctors: 3 stats (#dff0fa) + 6 card grid
- /blocks/reviews      — reviews carousel: #eef4d1 bg, decorative quote
- /blocks/contact-forms — 2 forms: "Будьте здоровы!" (#b8e6ed) + "Стоимость"
- /blocks/news         — 4 news cards row + "Все новости" button
- /blocks/contact      — footer: 4 link columns + logo + address + hours

globals.css: added .bb-nav-link:hover (#0089c3)
Sidebar: all blocks/navigation unlocked (removed soon), v0.5.1

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 00:05:10 +05:00
AR 15 M4 5b1ace962a plan: align Sprint 7-10 with TZ requirements (roles, API, experiments)
Added missing sprints from TZ spec:
- Sprint 7: Auth (viewer/editor roles, JWT, login, FT-60-64)
- Sprint 8: Real data integration (NestJS proxy → oclinica.ru, FT-41, INT-01-04)
- Sprint 9: Experiments — duplicate button, attribute editor, status workflow (FT-50-56)
- Sprint 10: Final polish, backend deploy

Sprint 6 expanded to all pages (prices, contacts, doctor profile).
Sidebar: Experiments section → "Дубли компонентов / Дубли страниц"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 23:52:46 +05:00
AR 15 M4 52f04f9f5d plan: consolidate all blocks into Sprint 5, add variants/duplicates sprints
- Sprint 5: ALL site blocks in one sprint (header, hero, CEO text, doctors,
  reviews, contact forms, news, footer) — taken from real perm.oclinica.ru/lor
- Sprint 6: Page assemblies (home, disease, doctors)
- Sprint 7: Duplicate/variant system for components and blocks
- Sprint 8: Duplicate/variant system for pages (templates per section)
- Sprint 9: Remaining pages (prices, contacts, doctor profile)
- Sprint 10: Final polish and deploy

Sidebar: added Variants section, reordered Blocks to match real page flow,
removed Experiments section.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 23:45:41 +05:00
AR 15 M4 754056642d plan: rewrite Sprint 5-12 — document only what exists on real site
Key principle: brandbook documents only existing perm.oclinica.ru blocks,
no invented style variants. Every sprint starts with Research phase.

Sprint 5: Header/Navigation
Sprint 6: Hero banner + Advantages block
Sprint 7: Intro text (CEO) + Services
Sprint 8: Doctors page blocks
Sprint 9: Reviews + News
Sprint 10: Contact forms + Contact block
Sprint 11: Pages — Disease + Home (assembled)
Sprint 12: Pages — Prices + Contacts + final smoke

Sidebar: removed invented hero variants, added "soon" back to blocks
pending documentation from real site.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 23:31:57 +05:00
AR 15 M4 6ce176f970 chore: close Sprint 4, open Sprint 5
- Sidebar: Hero/CEO-текст unlocked (not soon), Sprint 5 · v0.5.0
- SPRINTS.md: Sprint 4 marked  ЗАВЕРШЁН, Sprint 5 plan updated
- LLM_CONTEXT.md: v4.1 — cards/badges/alerts section 9b added

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 23:19:38 +05:00
AR 15 M4 2b9319e70d chore(sprint4): start Sprint 4 — cards
- Sidebar: Sprint 4 · v0.4.0, /components/cards removed from "soon"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 21:42:46 +05:00
AR 15 M4 c1731615ab fix(buttons): переделаны кнопки под реальный сайт oclinica.ru
Анализ CSS сайта (style.css темы clinic_bootstrap_mobile) выявил
4 реальных типа кнопок — заменены ранее придуманные варианты:

- primary  → коралловый #FFA39C + shadow (форм-сабмит «Запишите меня!»)
- outline  → белый + бежевая рамка #BF9975 («Записаться на прием»)
- teal     → бирюзовый #60959c («Позвонить»)
- pill     → кремовый #e9e4d4 + radius 25px («Заказать звонок»)

Удалены: secondary, ghost, danger (не существуют на реальном сайте)
Добавлен раздел «CSS с сайта» с точными значениями
Добавлена таблица «Где применяется» с реальными CSS-классами сайта
LLM-блок обновлён до v2.0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:41:27 +05:00
AR 15 M4 0855892643 feat(sprint3): кнопки, форм-контролы, LLM-блоки — Sprint 3 v0.3.0
- components/ui/Button.tsx — компонент Button (primary/secondary/ghost/danger, sm/md/lg, loading/disabled)
- components/ui/CodeCopy.tsx — компонент копирования кода (clipboard API)
- components/ui/Toggle.tsx — тумблер (client component, bb-toggle-track/thumb)
- globals.css — CSS-классы: bb-btn, bb-input/textarea/select, bb-checkbox/radio, bb-toggle, @keyframes bb-spin
- app/components/buttons/page.tsx — страница «Кнопки» (варианты, размеры, состояния, code copy, LLM-блок)
- app/components/forms/page.tsx — страница «Форм-контролы» (Input/Textarea/Select/Checkbox/Radio/Toggle, LLM-блок)
- foundation/logo/page.tsx — добавлен LLM-блок v1.0
- Sidebar: убраны «скоро» с Кнопок и Форм-контролов, версия Sprint 3 · v0.3.0
- docs/LLM_CONTEXT.md → версия 3.0, добавлена секция 9a с компонентами

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 20:20:41 +05:00
AR 15 M4 0198947c4e feat: LLM-блоки на страницах цветов и типографики + docs/LLM_CONTEXT.md
- Создан компонент components/llm/LlmBlock.tsx (use client):
  LlmBlock, LlmSection, LlmTable, LlmRules — переиспользуемый
  паттерн для LLM-спецификаций на всех страницах брендбука

- /foundation/colors: добавлен раздел «LLM-спецификация» (v2.1)
  · таблица фирменных цветов Oracal (7 шт.)
  · таблица цветов сайта oclinica.ru (11 шт., +3 новых: коралловый,
    светло-жёлтый, светло-зелёный)
  · таблица контрастности WCAG 2.1
  · правила применения ✓/✕
  · кнопка «Скопировать» — plain text для LLM

- /foundation/typography: добавлен раздел «LLM-спецификация» (v2.0)
  · таблица шрифтов DINPro vs Fira Sans
  · шкала DINPro (6 стилей)
  · шкала Fira Sans (11 стилей, включая letter-spacing)
  · применение по носителям + правила ✓/✕

- docs/LLM_CONTEXT.md: создан сводный машиночитаемый файл бренда
  Версия 2.1: все цвета, типографика, логотип, оффлайн, CSS-vars,
  правила — единый контекст для AI при работе с брендом клиники

- docs/TZ.md: добавлено требование ФТ-03-LLM
- docs/SPRINTS.md: задачи LLM-блоков в Sprint 3–8

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 19:59:58 +05:00
AR 15 M4 52acdc98e2 feat(sprint2): реальные фото из PDF, тайтлы страниц, убрана Печать
- Навигация: макет Кабинет 04 + карточка врача из PDF, фото дверей 13 и 31, указатели по этажам
- Транспорт: рендер макета трамвая из PDF вместо CSS-заглушки
- Тайтлы: единый формат «Раздел. Цифровой брендбук Клиники ухо, горло, нос им. проф. Е.Н.Оленевой» на всех страницах
- Сайдбар: убран пункт «Печать» (нет данных из брендбука)
- SPRINTS.md: обновлены фактические результаты Sprint 2

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 19:14:17 +05:00
AR 15 M4 02f561fcd3 feat(sprint-2): цвета, типографика, оффлайн элементы
Страницы фундамента:
- /foundation/colors — палитра 7 цветов, HEX/RGB/HSL/CSS-var с копированием,
  WCAG-контраст 7 пар, экспорт JSON-токенов
- /foundation/typography — DINPro (оффлайн) + Fira Sans (веб), шкалы,
  таблица применения, живой пример

Оффлайн элементы (5 страниц):
- /offline/uniform — схема формы, таблица размеров логотипа
- /offline/badges — макеты бейджей 70×30 мм (светлый/тёмный)
- /offline/navigation — 4 шаблона табличек, цвета Oracal
- /offline/transport — CSS-макет трамвая, трёхполосная схема
- /offline/print — макеты визитки и листовки А5, Telegram-бот

Sidebar: убраны «скоро» для Цветов, Типографики, всех Оффлайн
Версия: Sprint 2 · v0.2.0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 17:52:02 +05:00
AR 15 M4 03cceea13d feat(sprint-1): финальные правки — логотип, название клиники, порты
- PNG логотипа извлечён из PDF (PyMuPDF + Pillow), прозрачный фон (numpy)
- Инвертированный логотип: CSS filter brightness(0) invert(1) на прозрачном PNG
- Исправлено название: «Клиника ухо, горло, нос им. проф. Е.Н.Оленевой»
- PostgreSQL переведён на порт 5433 (5432 занят на хосте)
- next.config.ts: turbopack.root для монорепо
- docs/SPRINTS.md: Sprint 1 помечен  ЗАВЕРШЁН

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 17:39:18 +05:00
AR 15 M4 5105310c92 feat(sprint-1): инициализация monorepo, Next.js, NestJS, страница логотипа
Инфраструктура:
- pnpm workspaces monorepo (apps/web, apps/api, packages/)
- docker-compose.yml: PostgreSQL 16
- .env.example: DATABASE_URL, API_PORT, NEXT_PUBLIC_API_URL

Backend (apps/api — NestJS 11):
- Инициализирован NestJS с pnpm
- Prisma 7 + prisma.config.ts подключен к PostgreSQL
- Схема: User (role: viewer/editor), ExperimentalComponent (status: draft/review/approved)

Frontend (apps/web — Next.js 16):
- App Router, TypeScript, Tailwind CSS 4, Fira Sans (Google Fonts)
- globals.css: CSS-токены бренда (цвета 053M–080M, шрифты)
- layout.tsx: корневой layout с боковой навигацией
- Sidebar.tsx: навигация по всем разделам (Фундамент, Компоненты, Блоки, Страницы, Оффлайн, Эксперименты)
- page.tsx: редирект → /foundation/logo
- /foundation/logo: полная страница «Логотип»
  - Иерархия и версии (Основной / Общий)
  - Цветовые варианты (основной, инвертированный, на форме)
  - Охранная зона с визуализацией
  - Таблица минимальных размеров (форма сотрудников)
  - Недопустимые варианты (6 правил)
  - Блок скачивания (placeholder до получения вектора)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 17:13:42 +05:00