Files
restaurant-reservation-shadcn/AGENTS.md

7.8 KiB
Raw Blame History

AGENTS.md

Juniper Table — seasonal restaurant template for booking-driven dining: keep menu architecture, service windows, seating formats, allergies, pairing, private dining and host confirmation central to the experience.

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; композиция каждой страницы живёт в отдельном widget (`src/widgets/-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.
  • After changes run `pnpm lint` and `pnpm build`.

Visual Rules

  • Кириллица обязательна для видимого текста и выбранных 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-4xltext-[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.tsxSiteHeader + SiteFooter (обёртка из src/app/layout.tsx).
  • src/widgets/menu-section-board.tsxMenuSectionBoard (Home, Menu).
  • src/widgets/dish-showcase.tsxDishShowcase (Home, Menu; локальный DishRow внутри).
  • src/widgets/seating-guide.tsxSeatingGuide (Home, Reservations).
  • src/widgets/restaurant-evening-plan.tsxRestaurantEveningPlan (Home, Reservations).
  • src/widgets/private-events-grid.tsxPrivateEventsGrid (Home, Private events).
  • src/widgets/testimonial-band.tsxTestimonialBand (Home, About).
  • src/shared/ui/container.tsxContainer (горизонтальный wrapper всех секций).
  • src/shared/ui/restaurant-panel.tsxRestaurantPanel (фирменная карточка-панель).
  • src/shared/ui/section-header.tsxSectionHeader (eyebrow + заголовок секции).
  • src/shared/ui/inner-hero.tsxInnerHero (хедер всех внутренних страниц).
  • src/shared/ui/info-columns.tsxInfoColumns (правила/dietary notes; используется в Menu и Reservations).
  • src/shared/ui/cta-panel.tsxCtaPanel (Menu, Private events).
  • src/shared/ui/split-story.tsxSplitStory (готовый 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.