feat: split big file and update agents.md

This commit is contained in:
2026-06-18 23:17:14 +03:00
parent e383c3fdc5
commit 973f7a924d
29 changed files with 907 additions and 762 deletions

View File

@@ -5,7 +5,7 @@ Juniper Table — seasonal restaurant template for booking-driven dining: keep m
## Project Specifics
- Source content lives in \`src/entities/site-content.ts\`; keep visible copy there or directly in route JSX.
- \`src/app\` is routing only; page composition belongs to \`src/widgets/template-ui.tsx\`.
- \`src/app\` is routing only; композиция каждой страницы живёт в отдельном widget (\`src/widgets/<page>-page.tsx\`). См. File Map.
- Keep cards at 8px radius or less and preserve the restaurant palette in \`src/app/globals.css\`.
- This is a static frontend template: do not add real payments, deposits, table-management API, delivery, auth, persistence, external API calls, or backend contracts without an explicit product request.
- Keep restaurant specificity: seating, service windows, host confirmation, allergies/dietary requests, pairing, supplier story and private dining packages.
@@ -15,3 +15,67 @@ Juniper Table — seasonal restaurant template for booking-driven dining: keep m
- Кириллица обязательна для видимого текста и выбранных Google Fonts.
- Do not flatten this into a generic cafe landing page. Every page should answer a real restaurant business question.
## Design System
Источник токенов — `src/app/globals.css` (`@theme inline` + `:root`/`.dark`). Шрифты: заголовки (`h1/h2/h3`, `.font-display`) — **Cormorant Garamond** (`--font-display`, элегантный serif), текст/UI — **Manrope** (`--font-sans`). Работай через семантические классы Tailwind (`bg-primary`, `text-foreground`, `border-border`, `text-muted-foreground`, `font-display`), никогда не хардкодь hex/oklch.
Личность: **тёплый сезонный fine-dining** — кремово-пергаментный фон (тёплый, hue ~7592), глубокий приглушённый «можжевеловый» зелёный primary (hue ~145) как фирменный цвет, тёплый терракот/обожжённый оранжевый accent (hue ~34). Контраст элегантного serif-заголовка и спокойного гротеска в тексте. Тон ресторанный, тёплый, не «технологичный».
| Роль | Light | Характер |
|---|---|---|
| `background` | тёплый кремовый пергамент | основной фон страниц |
| `foreground` | тёмный тёплый коричнево-чёрный | текст |
| `primary` | глубокий можжевеловый зелёный | бренд: лого JT, CTA, цены, акценты; footer/CTA-панели `bg-primary text-primary-foreground` |
| `accent` | терракот/обожжённый оранжевый | редкие тёплые точечные акценты (charts) |
| `secondary` | тёплый светлый песочный | мягкие бейджи, плашки |
| `muted` / `muted-foreground` | тёплый бежевый / приглушённый коричневый | вторичный текст, фон секций, hover |
| `card` | чистый белый | панели `RestaurantPanel`, формы, таблицы |
| `border` | тёплый бежевый | тонкие границы (1px) везде |
Узнаваемые приёмы (держи их — это «лицо» шаблона):
- **Мягкие углы:** `--radius` = 0.5rem; всё на `rounded-md` (карточки, кнопки, фото-панели). Не используй острые `rounded-none` или сильно скруглённые pill-формы.
- **`RestaurantPanel`** (`src/shared/ui/restaurant-panel.tsx`) — фирменная панель: `rounded-md border border-border bg-card` + едва заметная тёплая тень `shadow-[0_1px_0_rgba(67,44,17,0.05)]`. Используй её для секционных карточек вместо голого `div`.
- **`Container`** (`src/shared/ui/container.tsx`) — `max-w-[1320px]` + `px-5 sm:px-8`; единый горизонтальный ритм страниц.
- **Hero-фон:** утилита `.restaurant-tablecloth` (тёплая «скатерть» — зелёно-охровая сетка-льняная фактура 42px с mask-fade) для главного hero.
- **Serif-дисплей:** заголовки через `font-display` (`text-4xl``text-[6.2rem]`, плотный `leading-[0.94]`); eyebrow-метки `text-xs font-semibold uppercase tracking-[0.18em] text-primary`.
- **Тонкие разделители:** `Separator` и `border-b border-border` в списках блюд/пакетов; структура на линиях, не на тенях.
Do / Don't:
- **Do:** держи кремово-зелёную палитру и терракотовый акцент; serif-заголовки + Manrope-текст; оборачивай секции в `Container`/`RestaurantPanel`; продавай ресторанную специфику (посадка, pairing, аллергены, тайминг вечера).
- **Don't:** не вводи холодный синий/чёрный primary, неоновые градиенты, тяжёлые drop-shadow, острые углы или generic-SaaS hero — это ломает тёплый fine-dining тон.
## File Map
| Route | Widget |
|---|---|
| `/` | `src/widgets/home-page.tsx` (`HomePage`) |
| `/menu` | `src/widgets/menu-page.tsx` (`MenuPage`) |
| `/reservations` | `src/widgets/reservations-page.tsx` (`ReservationsPage`) |
| `/private-events` | `src/widgets/private-events-page.tsx` (`PrivateEventsPage`) |
| `/about` | `src/widgets/about-page.tsx` (`AboutPage`) |
| `/contact` | `src/widgets/contact-page.tsx` (`ContactPage`) |
Переиспользуемые блоки:
- `src/widgets/site-shell.tsx``SiteHeader` + `SiteFooter` (обёртка из `src/app/layout.tsx`).
- `src/widgets/menu-section-board.tsx``MenuSectionBoard` (Home, Menu).
- `src/widgets/dish-showcase.tsx``DishShowcase` (Home, Menu; локальный `DishRow` внутри).
- `src/widgets/seating-guide.tsx``SeatingGuide` (Home, Reservations).
- `src/widgets/restaurant-evening-plan.tsx``RestaurantEveningPlan` (Home, Reservations).
- `src/widgets/private-events-grid.tsx``PrivateEventsGrid` (Home, Private events).
- `src/widgets/testimonial-band.tsx``TestimonialBand` (Home, About).
- `src/shared/ui/container.tsx``Container` (горизонтальный wrapper всех секций).
- `src/shared/ui/restaurant-panel.tsx``RestaurantPanel` (фирменная карточка-панель).
- `src/shared/ui/section-header.tsx``SectionHeader` (eyebrow + заголовок секции).
- `src/shared/ui/inner-hero.tsx``InnerHero` (хедер всех внутренних страниц).
- `src/shared/ui/info-columns.tsx``InfoColumns` (правила/dietary notes; используется в Menu и Reservations).
- `src/shared/ui/cta-panel.tsx``CtaPanel` (Menu, Private events).
- `src/shared/ui/split-story.tsx``SplitStory` (готовый props-блок image+points, сейчас не подключён ни одной страницей).
Одноразовые блоки колоцированы со своей страницей:
- `PageHero` — внутри `home-page.tsx`.
- `FeaturedGrid`, `PairingBoard` (+ `WineIcon`), `PricingTiles`, `DietaryNotes` — внутри `menu-page.tsx`.
- `ReservationForm`, `ReservationRules` — внутри `reservations-page.tsx`.
- `ChefStory`, `SupplierLedger`, `MetricStrip` — внутри `about-page.tsx`.
- `IconCards`, `HoursBoard`, `ContactForm` — внутри `contact-page.tsx`.
- `EventPlanner` — внутри `private-events-page.tsx`.