Page 1 of 21
System Requirements Document for shadow-project
1. Introduction
shadow-project — публичный веб-сайт кофейни: одностраничный по духу, но трёхстраничный по структуре информационный сайт, который представляет кофейню, её меню и напитки, а также сведения для планирования визита (местоположение и часы работы). Продукт создаётся для кофейни, чей образ — «кофе как конфета»: яркое, фотогеничное, оптимистичное место, где напиток становится маленьким праздником.
Аудитория продукта:
- Посетитель сайта кофейни — человек, который ищет кофейню и хочет понять, что она предлагает: изучить меню и напитки, узнать о самой кофейне и её атмосфере, найти адрес и часы работы, чтобы решить, стоит ли прийти.
- Владелец кофейни — человек, которому нужен публичный сайт для представления своей кофейни: он определяет содержимое — меню, описание кофейни, контактные данные и часы работы — чтобы привлекать посетителей.
Сайт не является интернет-магазином, системой заказов, бронирования или доставки: он информирует и направляет к визиту. Все три страницы публичны и не требуют учётной записи.
Page 2 of 21
2. System Overview
shadow-project — это публичный информационный веб-сайт кофейни, состоящий из трёх страниц:
- Landing — анонимная первая страница сайта: представляет кофейню, объясняет её предложение и направляет посетителя к меню и сведениям для визита.
- Menu — отдельная страница для просмотра представления кофейни, меню и напитков.
- Visit Info — отдельная информационная страница с местоположением и часами работы для планирования визита.
Акторы:
- Посетитель сайта кофейни (человек) — просматривает Landing, изучает Menu, читает Visit Info, принимает решение о визите.
- Владелец кофейни (человек) — определяет содержимое сайта: меню, описание кофейни, контактные данные и часы работы.
- Система (веб-сайт) — не-персональный актор: отображает страницы, состояния загрузки, пустые состояния и ошибки.
Принятое поведение: представление кофейни и её предложения; просмотр меню и напитков; просмотр местоположения и часов работы; переходы между тремя страницами; корректные состояния загрузки, пустого содержимого, успеха, ошибки и восстановления.
Узкие исключения: сайт не принимает заказы, не обрабатывает платежи, не выполняет бронирование, не ведёт доставку, не требует учётной записи и не содержит личного кабинета. Это информационный сайт кофейни.
Page 3 of 21
2a. Product Interpretation and Delivery Boundary
Владение доставкой. Продукт доставляется как собственный (first-party) веб-сайт приложения: все три страницы — Landing, Menu, Visit Info — принадлежат приложению и отрисовываются его собственным интерфейсом. Внешние провайдеры, сторонние платформы и headless-доставка источником не заданы и не используются.
Владение доступом. Все три страницы имеют access_requirement: none: они публичны и анонимны. Посетитель открывает сайт и сразу видит содержимое — без регистрации, входа, приглашения или провижининга. Учётная запись, сессия и личный кабинет не требуются и не создаются: ни одна принятая задача не создаёт долговременного персонального состояния, обязательства, права или передачи ценности, которое нужно было бы привязать к конкретному человеку и возобновить при следующем визите. Соответственно, нет ни анонимного пред-идентификационного жизненного цикла, ни защищённых страниц, ни управления доступом.
Роль владельца кофейни. Владелец кофейни — принятый человек-актор, который определяет содержимое сайта (меню, описание кофейни, контактные данные, часы работы). Это авторство содержимого, а не отдельная страница или модуль продукта: в текущем горизонте сайт не содержит административной панели, редактора контента или иного интерфейса управления. Содержимое, определённое владельцем, отображается на публичных страницах и является тем, что видит посетитель.
Границы текущего и будущего. Текущий горизонт — три публичные страницы и описанное выше поведение. Всё, что выходит за эти границы (заказы, платежи, бронирование, доставка, учётные записи, административные интерфейсы), в текущий продукт не входит.
2c. Page Content and Component Coverage
Page 4 of 21
Landing
- Назначение и информация/состояние: анонимная первая страница сайта. Представляет кофейню, объясняет её предложение и направляет посетителя к меню и сведениям для визита. Отображает: название/образ кофейни, короткое описание предложения и атмосферы, визуальные якоря (глянцевые 3D-рендеры напитков, абстрактные blob-формы), точки перехода к Menu и Visit Info.
- Основные действия: переход к Menu («Смотреть меню»); переход к Visit Info.
- Поддерживающие действия: прокрутка страницы к секциям; навигация между страницами сайта.
- Доменные сущности: Кофейня (название, описание, образ); Напиток (представление, визуальный якорь); Меню (точка входа); Сведения для визита (точка входа).
- Компоненты:
- Hero-блок: гигантский заголовок «Кофе как конфета» (Comfortaa 700,
clamp(56px, 12vw, 128px), отрицательный трекинг, выравнивание по левому краю, уход за правый край с overflow: hidden), капсульная кнопка «Смотреть меню» (белый фон, розовый текст, глянцевый блик), 3D-рендер чашки латте с лаймовым акцентом в правом нижнем углу, частично выходящий за край; плоский розовый фон (#FF4D8D) с едва заметным шумом.
- Секция представления кофейни: описание кофейни и её атмосферы.
- Секция «О нас»: два перекрывающихся цветовых блока (розовый и лаймовый) с текстом внутри; крупный план зерна кофе как глянцевый 3D-объект.
- Волнистые SVG-разделители между секциями, окрашенные в цвет следующего блока.
- Навигация: фиксированная капсула внизу экрана на мобильном, сверху на десктопе; при скролле — плавающая капсула сверху с blur-эффектом.
- Состояния:
- Загрузка: скелетон/плейсхолдеры для hero-заголовка, кнопки и 3D-рендера; контент появляется со stagger-анимацией (translateY 20px + opacity, 400ms ease-out).
- Пустое: если описание кофейни или визуальный якорь недоступны — секция показывает нейтральную подложку и не ломает раскладку; заголовок и кнопка «Смотреть меню» остаются видимыми.
- Успех: заголовок, кнопка и 3D-рендер отображаются целиком внутри вьюпорта и контейнера на 375px, 768px и 1280px; переходы к Menu и Visit Info доступны.
- Ошибка: если 3D-рендер не загрузился — показывается абстрактная blob-форма-заменитель; заголовок и кнопка не затрагиваются.
- Восстановление: повторная загрузка ресурса или замена на заменитель; страница остаётся полностью читаемой и навигируемой.
Page 5 of 21
Menu
- Назначение и информация/состояние: отдельная страница для просмотра представления кофейни, меню и напитков. Отображает: категории меню, позиции напитков с названиями и описаниями, визуальные якоря напитков (глянцевые 3D-рендеры).
- Основные действия: просмотр категорий и позиций меню; чтение названий и описаний напитков.
- Поддерживающие действия: переход к Landing; переход к Visit Info; навигация между страницами сайта.
- Доменные сущности: Меню; Категория меню; Напиток (название, описание, визуальный якорь).
- Компоненты:
- Заголовок страницы и микро-лейблы категорий (13px, letter-spacing 0.08em, uppercase только для категорий меню).
- Карточки меню: мягкие прямоугольники с радиусом 32px, лёгкая тень, смещённая вниз (0 8px 24px rgba(255,77,141,0.12)); расположены лесенкой (staggered) с чередованием розового и лаймового фона; 3D-рендер напитка выглядывает за верхний край карточки.
- Навигация: фиксированная капсула внизу экрана на мобильном, сверху на десктопе.
- Состояния:
- Загрузка: карточки меню появляются со stagger-анимацией (translateY 20px + opacity, 400ms ease-out); плейсхолдеры для названий и описаний.
- Пустое: если в категории нет позиций — категория показывает нейтральное сообщение об отсутствии позиций и не отображает пустые карточки; остальные категории остаются видимыми.
- Успех: все категории и позиции отображаются; названия, описания и элементы управления целиком внутри вьюпорта и контейнера на 375px, 768px и 1280px.
- Ошибка: если данные меню не загрузились — страница показывает сообщение об ошибке и действие «Повторить»; навигация к Landing и Visit Info остаётся доступной.
- Восстановление: повторная загрузка данных меню; при повторной неудаче сообщение остаётся, страница не ломается.
Page 6 of 21
Visit Info
- Назначение и информация/состояние: отдельная информационная страница с местоположением и часами работы для планирования визита. Отображает: адрес кофейни, часы работы, контактные данные, определённые владельцем кофейни.
- Основные действия: чтение адреса; чтение часов работы; чтение контактных данных.
- Поддерживающие действия: переход к Landing; переход к Menu; навигация между страницами сайта.
- Доменные сущности: Местоположение (адрес); Часы работы; Контактные данные.
- Компоненты:
- Блок местоположения: адрес кофейни.
- Блок часов работы: дни и интервалы.
- Блок контактных данных: телефон и/или иные контакты, определённые владельцем.
- Навигация: фиксированная капсула внизу экрана на мобильном, сверху на десктопе.
- Состояния:
- Загрузка: плейсхолдеры для адреса, часов работы и контактов.
- Пустое: если часы работы или контактные данные не заданы — блок показывает нейтральное сообщение «уточняется» и не отображает пустые строки; адрес отображается, если задан.
- Успех: адрес, часы работы и контактные данные отображаются целиком внутри вьюпорта и контейнера на 375px, 768px и 1280px.
- Ошибка: если данные не загрузились — страница показывает сообщение об ошибке и действие «Повторить»; навигация к Landing и Menu остаётся доступной.
- Восстановление: повторная загрузка данных; при повторной неудаче сообщение остаётся, страница не ломается.
3. Functional Requirements
Page 7 of 21
FR-1. Представление кофейни на первой странице
As a Посетитель сайта кофейни I should открыть первую страницу сайта и увидеть, что это за кофейня и что она предлагает, so that я могу решить, интересно ли мне это место.
- Provenance:
required_inference (Landing, public_entry_surface).
- Триггер/вход: посетитель открывает сайт по адресу; анонимный доступ, без учётной записи.
- Наблюдаемый результат: отображаются название/образ кофейни, короткое описание предложения и атмосферы, визуальные якоря (глянцевые 3D-рендеры напитков, абстрактные blob-формы).
- Доступ: публичный, анонимный (
access_requirement: none).
- Отказ/восстановление: если визуальный якорь не загрузился — показывается абстрактная blob-форма-заменитель; заголовок и описание остаются видимыми.
- Продолжение: посетитель переходит к Menu или Visit Info.
FR-2. Переход к меню с первой страницы
As a Посетитель сайта кофейни I should нажать «Смотреть меню» на первой странице и попасть на страницу меню, so that я могу изучить напитки.
- Provenance:
required_inference (Landing → Menu).
- Триггер/вход: нажатие капсульной кнопки «Смотреть меню» (белый фон, розовый текст, глянцевый блик).
- Наблюдаемый результат: открывается страница Menu с меню и напитками.
- Доступ: публичный, анонимный.
- Отказ/восстановление: если переход не сработал — кнопка остаётся видимой и нажимаемой; повторное нажатие повторяет переход.
- Продолжение: просмотр меню (FR-4).
Page 8 of 21
FR-3. Переход к сведениям для визита с первой страницы
As a Посетитель сайта кофейни I should перейти с первой страницы к сведениям для визита, so that я могу узнать адрес и часы работы.
- Provenance:
required_inference (Landing → Visit Info).
- Триггер/вход: выбор перехода к Visit Info в навигации или в содержимом страницы.
- Наблюдаемый результат: открывается страница Visit Info с местоположением и часами работы.
- Доступ: публичный, анонимный.
- Отказ/восстановление: если переход не сработал — элемент навигации остаётся видимым и нажимаемым; повторный выбор повторяет переход.
- Продолжение: чтение сведений для визита (FR-6, FR-7).
FR-4. Просмотр меню и напитков
As a Посетитель сайта кофейни I should просматривать меню по категориям и читать названия и описания напитков, so that я могу понять, что предлагает кофейня.
- Provenance:
required_inference (Menu).
- Триггер/вход: открытие страницы Menu; просмотр категорий и позиций.
- Наблюдаемый результат: отображаются категории меню и позиции напитков с названиями и описаниями; карточки меню — капсулы с чередованием розового и лаймового фона, расположенные лесенкой, с 3D-рендером напитка, выглядывающим за верхний край карточки.
- Доступ: публичный, анонимный.
- Отказ/восстановление: если данные меню не загрузились — сообщение об ошибке и действие «Повторить»; навигация к Landing и Visit Info остаётся доступной.
- Продолжение: посетитель переходит к Visit Info или возвращается на Landing.
Page 9 of 21
FR-5. Пустое состояние категории меню
As a Посетитель сайта кофейни I should видеть понятное сообщение, если в категории меню нет позиций, so that я не принимаю пустую категорию за ошибку.
- Provenance:
required_inference (состояние Menu).
- Триггер/вход: открытие категории, в которой нет позиций.
- Наблюдаемый результат: категория показывает нейтральное сообщение об отсутствии позиций; пустые карточки не отображаются; остальные категории остаются видимыми.
- Доступ: публичный, анонимный.
- Отказ/восстановление: не применимо — это уже корректное состояние.
- Продолжение: просмотр других категорий (FR-4).
FR-6. Просмотр местоположения
As a Посетитель сайта кофейни I should видеть адрес кофейни на странице сведений для визита, so that я могу понять, где находится кофейня.
- Provenance:
required_inference (Visit Info).
- Триггер/вход: открытие страницы Visit Info.
- Наблюдаемый результат: отображается адрес кофейни, определённый владельцем кофейни.
- Доступ: публичный, анонимный.
- Отказ/восстановление: если данные не загрузились — сообщение об ошибке и действие «Повторить»; навигация к Landing и Menu остаётся доступной.
- Продолжение: чтение часов работы (FR-7).
Page 10 of 21
FR-7. Просмотр часов работы
As a Посетитель сайта кофейни I should видеть часы работы кофейни, so that я могу спланировать визит.
- Provenance:
required_inference (Visit Info).
- Триггер/вход: открытие страницы Visit Info.
- Наблюдаемый результат: отображаются дни и интервалы работы, определённые владельцем кофейни.
- Доступ: публичный, анонимный.
- Отказ/восстановление: если часы работы не заданы — блок показывает нейтральное сообщение «уточняется» и не отображает пустые строки; если данные не загрузились — сообщение об ошибке и действие «Повторить».
- Продолжение: посетитель принимает решение о визите.
FR-8. Просмотр контактных данных
As a Посетитель сайта кофейни I should видеть контактные данные кофейни, so that я могу связаться с кофейней при необходимости.
- Provenance:
required_inference (Visit Info).
- Триггер/вход: открытие страницы Visit Info.
- Наблюдаемый результат: отображаются контактные данные, определённые владельцем кофейни.
- Доступ: публичный, анонимный.
- Отказ/восстановление: если контактные данные не заданы — блок показывает нейтральное сообщение «уточняется» и не отображает пустые строки.
- Продолжение: посетитель принимает решение о визите.
Page 11 of 21
FR-9. Навигация между страницами сайта
As a Посетитель сайта кофейни I should перемещаться между Landing, Menu и Visit Info, so that я могу получить всю нужную информацию за один визит на сайт.
- Provenance:
required_inference (навигация сайта).
- Триггер/вход: выбор пункта навигации; на мобильном — фиксированная капсула внизу экрана, на десктопе — сверху; при скролле капсула становится плавающей сверху с blur-эффектом.
- Наблюдаемый результат: открывается выбранная страница; текущая страница визуально отличима.
- Доступ: публичный, анонимный.
- Отказ/восстановление: если переход не сработал — элемент навигации остаётся видимым и нажимаемым; повторный выбор повторяет переход.
- Продолжение: продолжение просмотра выбранной страницы.
FR-10. Определение содержимого сайта владельцем кофейни
As a Владелец кофейни I should определить содержимое сайта — меню, описание кофейни, контактные данные и часы работы, so that сайт отражает мою кофейню и её предложение для внешней аудитории.
- Provenance:
required_inference (роль владельца кофейни).
- Триггер/вход: владелец кофейни формирует содержимое: меню и напитки, описание кофейни и её атмосферы, контактные данные, часы работы.
- Наблюдаемый результат: определённое содержимое отображается на публичных страницах Landing, Menu и Visit Info и является тем, что видит посетитель.
- Доступ: в текущем горизонте сайт не содержит административной панели, редактора контента или иного интерфейса управления; содержимое, определённое владельцем, отображается на публичных страницах.
- Отказ/восстановление: если часть содержимого не задана — соответствующая секция показывает нейтральное состояние (см. FR-5, FR-7, FR-8) и не ломает раскладку.
- Продолжение: посетитель видит актуальное содержимое на публичных страницах.
4. User Personas
Page 12 of 21
Посетитель сайта кофейни
Контекст продукта. Человек, который ищет кофейню и хочет понять, что она предлагает. Он заходит с телефона, хочет быстро увидеть меню, понять вайб и решить, идти ли сюда. Аудитория — городская, 18–35, ищет не только напиток, но и атмосферу: яркое, фотогеничное место, где кофе — это маленький праздник.
Основная цель. Получить нужную информацию о кофейне и спланировать визит.
Отличительные принятые обязанности. Просматривает первую страницу и составляет первое впечатление о кофейне; изучает меню по категориям и читает названия и описания напитков; читает адрес, часы работы и контактные данные; переходит между тремя страницами сайта.
Входы и решения. Вход — открытие сайта по адресу, без учётной записи. Решения: интересно ли место; что заказать; стоит ли идти и когда.
Взаимодействие с другими участниками. Владелец кофейни определяет содержимое, которое видит посетитель: меню, описание кофейни, контактные данные и часы работы. Посетитель — получатель этого содержимого; его собственное действие — чтение и выбор.
Наблюдаемый успех. Посетитель получает нужную информацию о кофейне и может спланировать визит: он увидел предложение, изучил меню, узнал адрес и часы работы.
Page 13 of 21
Владелец кофейни
Контекст продукта. Человек, которому нужен публичный сайт для представления своей кофейни. Он определяет содержимое, чтобы привлекать посетителей.
Основная цель. Сайт, отражающий кофейню и её предложение для внешней аудитории.
Отличительные принятые обязанности. Определяет меню и напитки; определяет описание кофейни и её атмосферы; определяет контактные данные; определяет часы работы.
Входы и решения. Вход — собственное знание кофейни: её меню, атмосфера, местоположение, часы работы, контакты. Решения: что включить в меню; как описать кофейню; какие контакты и часы указать.
Взаимодействие с другими участниками. Владелец кофейни — автор содержимого; посетитель сайта кофейни — его аудитория. Содержимое, определённое владельцем, отображается на публичных страницах и является тем, что видит посетитель.
Наблюдаемый успех. Сайт отражает кофейню и её предложение для внешней аудитории: посетитель видит меню, описание, контакты и часы работы.
5. Core User Flows
Page 14 of 21
Flow 1. Посетитель впервые открывает сайт и составляет впечатление о кофейне
- Стартовый контекст: посетитель сайта кофейни открывает сайт по адресу с телефона. Учётная запись не требуется; доступ анонимный.
- Действие: посетитель видит страницу Landing.
- Наблюдаемый результат: отображается hero-блок: гигантский заголовок «Кофе как конфета» (Comfortaa 700,
clamp(56px, 12vw, 128px), отрицательный трекинг, выравнивание по левому краю, уход за правый край с overflow: hidden), капсульная кнопка «Смотреть меню» (белый фон, розовый текст, глянцевый блик), 3D-рендер чашки латте с лаймовым акцентом в правом нижнем углу, частично выходящий за край; плоский розовый фон (#FF4D8D) с едва заметным шумом.
- Действие: посетитель прокручивает страницу.
- Наблюдаемый результат: секции мягко всплывают при скролле; волнистые SVG-разделители, окрашенные в цвет следующего блока, создают эффект «перетекания» страницы; секция «О нас» показывает два перекрывающихся цветовых блока (розовый и лаймовый) с текстом внутри и крупный план зерна кофе как глянцевый 3D-объект.
- Материальный отказ/восстановление: если 3D-рендер не загрузился — показывается абстрактная blob-форма-заменитель; заголовок и кнопка не затрагиваются.
- Продолжение: посетитель переходит к Flow 2 или Flow 4.
Flow 2. Посетитель переходит к меню и изучает напитки
- Стартовый контекст: посетитель находится на странице Landing.
- Действие: посетитель нажимает капсульную кнопку «Смотреть меню».
- Наблюдаемый результат: открывается страница Menu.
- Действие: посетитель просматривает категории меню.
- Наблюдаемый результат: карточки меню появляются со stagger-анимацией (translateY 20px + opacity, 400ms ease-out); карточки — капсулы с чередованием розового и лаймового фона, расположенные лесенкой, с 3D-рендером напитка, выглядывающим за верхний край карточки; микро-лейблы категорий — 13px, letter-spacing 0.08em, uppercase.
- Действие: посетитель читает названия и описания напитков.
- Наблюдаемый результат: названия, описания и элементы управления целиком внутри вьюпорта и контейнера на 375px, 768px и 1280px.
- Материальный отказ/восстановление: если данные меню не загрузились — страница показывает сообщение об ошибке и действие «Повторить»; навигация к Landing и Visit Info остаётся доступной. Если в категории нет позиций — категория показывает нейтральное сообщение об отсутствии позиций, остальные категории остаются видимыми.
- Продолжение: посетитель переходит к Flow 4 или возвращается на Landing (Flow 1).
Page 15 of 21
Flow 3. Посетитель планирует визит: адрес, часы работы, контакты
- Стартовый контекст: посетитель находится на странице Landing или Menu.
- Действие: посетитель выбирает переход к Visit Info в навигации или в содержимом страницы.
- Наблюдаемый результат: открывается страница Visit Info.
- Действие: посетитель читает адрес кофейни.
- Наблюдаемый результат: отображается адрес, определённый владельцем кофейни.
- Действие: посетитель читает часы работы.
- Наблюдаемый результат: отображаются дни и интервалы работы, определённые владельцем кофейни.
- Действие: посетитель читает контактные данные.
- Наблюдаемый результат: отображаются контактные данные, определённые владельцем кофейни.
- Материальный отказ/восстановление: если часы работы или контактные данные не заданы — блок показывает нейтральное сообщение «уточняется» и не отображает пустые строки; если данные не загрузились — сообщение об ошибке и действие «Повторить», навигация к Landing и Menu остаётся доступной.
- Продолжение: посетитель принимает решение о визите; при необходимости возвращается к меню (Flow 2).
Flow 4. Посетитель перемещается между страницами сайта
- Стартовый контекст: посетитель находится на любой из трёх страниц сайта.
- Действие: посетитель выбирает пункт навигации. На мобильном навигация — фиксированная капсула внизу экрана; на десктопе — сверху; при скролле капсула становится плавающей сверху с blur-эффектом.
- Наблюдаемый результат: открывается выбранная страница; текущая страница визуально отличима.
- Материальный отказ/восстановление: если переход не сработал — элемент навигации остаётся видимым и нажимаемым; повторный выбор повторяет переход.
- Продолжение: продолжение просмотра выбранной страницы.
Page 16 of 21
Flow 5. Владелец кофейни определяет содержимое сайта
- Стартовый контекст: владелец кофейни формирует содержимое для публичного сайта своей кофейни.
- Действие: владелец определяет меню и напитки.
- Наблюдаемый результат: меню и напитки отображаются на странице Menu и являются тем, что видит посетитель.
- Действие: владелец определяет описание кофейни и её атмосферы.
- Наблюдаемый результат: описание отображается на странице Landing.
- Действие: владелец определяет контактные данные и часы работы.
- Наблюдаемый результат: контактные данные и часы работы отображаются на странице Visit Info.
- Материальный отказ/восстановление: если часть содержимого не задана — соответствующая секция показывает нейтральное состояние (FR-5, FR-7, FR-8) и не ломает раскладку.
- Продолжение: посетитель видит актуальное содержимое на публичных страницах (Flow 1–4).
Page 17 of 21
6. Visuals Colors and Theme
Муза: Karim Rashid. Заголовок направления: Sensual pop minimalism for a coffee house that feels like a candy-coloured ritual.
Направление переводится в конкретные токены:
Палитра (light mode):
background — #FFF5F7 (тёплый розовато-белый, не чистый белый, чтобы глянцевые поверхности читались).
surface — #FFFFFF (карточки и капсулы).
text — #1A1420 (почти чёрный с фиолетовым подтоном, не чистый чёрный).
primary — #FF4D8D (насыщенный bubblegum pink; кнопки, активные состояния, крупные цветовые блоки; 15–20% площади).
accent — #C6FF4D (кислотный лайм; микро-акценты, hover-состояния, маркеры в меню; не более 5%).
muted — #F0D9E0 (разделители и второстепенные подложки).
Контраст: текст на фоне — 14:1; на розовом primary — 5.2:1 (достаточно для крупных кнопок; для мелкого текста использовать белый на primary).
Типографика:
- Заголовки — Comfortaa, веса 700 и 400; sentence case, лёгкий отрицательный трекинг (-0.02em); hero-заголовок 56px на мобильном, 128px на десктопе; никакого uppercase.
- Body — Quicksand.
- Шкала — модульная 1.333: 128/96/72/54/40/30/22/16/14. Базовый body — 16px с line-height 1.7. Заголовки — line-height 1.05–1.15. Микро-лейблы — 13px, letter-spacing 0.08em, uppercase только для категорий меню.
Язык формы: органические капсулы и blob-формы; border-radius от 24px до полной капсулы (999px). Кнопки — капсулы с глянцевым бликом (linear-gradient сверху). Карточки меню — мягкие прямоугольники с радиусом 32px и лёгкой тенью, смещённой вниз (0 8px 24px rgba(255,77,141,0.12)). Секции разделяются волнистыми краями (SVG-кривые), а не прямыми линиями. Крупные цветовые блоки — с закруглением только с одной стороны, чтобы создавать ощущение «капли».
Раскладка: асимметричная сетка с крупными цветовыми полями. Hero — полноэкранный розовый блок, внутри — гигантский заголовок, уходящий за край, и капсульная кнопка. Меню — карточки-капсулы, расположенные лесенкой (staggered), с чередованием цветов фона. Секция «О нас» — два перекрывающихся цветовых блока (розовый и лаймовый) с текстом внутри. Навигация — фиксированная капсула внизу экрана на мобильном, сверху на десктопе. Отступы: 24px на мобильном, 48px на планшете, 80px на десктопе.
Стиль изображений: глянцевые 3D-рендеры чашек и напитков на цветных фонах — как конфеты. Никакой стоковой фотографии людей. Каждый напиток — отдельный 3D-объект с мягким студийным светом и цветным отражением. Дополнительно — абстрактные blob-формы и капли, парящие в пространстве. Для секции «О нас» — крупный план зерна кофе, обработанный как глянцевый 3D-объект.
Запрещено: прямые углы и острые линии; стоковые фотографии людей с чашками кофе; градиентные blob-фоны и синие кнопки; шрифты Inter, Roboto, Arial, Helvetica, Poppins; тёмная тема; сложные анимации с резкими движениями; перегруженные текстом секции; квадратные фотографии. Общий шаблонный вид indigo/blue-on-white SaaS запрещён для этого проекта.
Читаемость: заголовки, вордмарки, лейблы, числа, текст карточек и элементы управления остаются целиком внутри вьюпорта и своего контейнера на 375px, 768px и 1280px, переносясь или масштабируясь (например, font-size: clamp(...) с мобильным размером). Изображения, декор и движение могут обрезаться, выходить за край, поворачиваться, перекрываться и обрезаться ровно так, как просит направление, если они не закрывают читаемый текст или элемент управления.
Page 18 of 21
7. Signature Design Concept
Публичный вход — страница Landing.
Первый экран — полноэкранный блок цвета bubblegum pink (#FF4D8D). В левом верхнем углу — гигантский заголовок «Кофе как конфета» шрифтом Comfortaa 700, размером clamp(56px, 12vw, 128px), с отрицательным трекингом, выровненный по левому краю и уходящий за правый край экрана (overflow: hidden). Под заголовком — капсульная кнопка «Смотреть меню» с белым фоном и розовым текстом, с глянцевым бликом. В правом нижнем углу — 3D-рендер чашки латте с лаймовым акцентом, частично выходящий за край. Фон hero — не градиент, а плоский розовый с едва заметным шумом. Никаких центрированных заголовков и синих кнопок.
Сигнатурные приёмы, реализуемые на этой странице:
- Гигантский заголовок hero, уходящий за правый край экрана, обрезанный
overflow: hidden — создаёт ощущение масштаба и движения.
- Капсульная навигация внизу экрана на мобильном, которая при скролле превращается в плавающую капсулу сверху с blur-эффектом.
- Волнистые SVG-разделители между секциями, окрашенные в цвет следующего блока — создают эффект «перетекания» страницы.
- Кнопки с анимированным глянцевым бликом, который скользит по поверхности при hover, как на глянцевом пластике.
- Секция «О нас» — два перекрывающихся цветовых блока (розовый и лаймовый) с текстом внутри.
Концепт только перекомпоновывает принятое содержимое, состояния и элементы управления: заголовок, кнопку «Смотреть меню», переходы к Menu и Visit Info, описание кофейни и визуальные якоря. Он не вводит нового поведения, страниц или назначений.
Page 19 of 21
8. Interaction Model & Motion Direction
Interaction Model: Animated
Motion Tempo: expressive
Hero Dimensionality: layered_2d
Landing Hero Motion Brief
- Фокальный субъект: 3D-рендер чашки латте с лаймовым акцентом в правом нижнем углу hero-блока, частично выходящий за край; гигантский заголовок «Кофе как конфета», уходящий за правый край.
- Тезис вход → преобразование → результат: при загрузке страницы заголовок и кнопка «Смотреть меню» появляются как первый слой; 3D-рендер чашки всплывает как второй слой; при наведении на кнопку её глянцевый блик медленно скользит по поверхности (background-position shift), а сама кнопка слегка растягивается по горизонтали (scaleX 1.05) и меняет оттенок. Результат — hero выглядит как глянцевый объект желания, а не как статичная страница.
- Словарь движения направления: плавные liquid-морфы; никаких резких движений — только «дыхание» и «перетекание»; stagger-анимация появления (translateY 20px + opacity, 400ms ease-out); секции при скролле мягко всплывают; волнистые SVG-разделители окрашены в цвет следующего блока.
- Скомпонованный первый кадр: плоский розовый фон (#FF4D8D) с едва заметным шумом; гигантский заголовок в левом верхнем углу, обрезанный правым краем; капсульная кнопка «Смотреть меню» под заголовком; 3D-рендер чашки латте в правом нижнем углу, частично за краем.
- Состояние при reduced motion: при
prefers-reduced-motion все анимации отключаются, контент показывается сразу: заголовок, кнопка и 3D-рендер видны в конечном положении без stagger, без скользящего блика и без всплытия секций.
9. Non-Functional Requirements
- NFR-1. Адаптивность и читаемость. Заголовки, вордмарки, лейблы, числа, текст карточек и элементы управления остаются целиком внутри вьюпорта и своего контейнера на 375px, 768px и 1280px, переносясь или масштабируясь (например,
font-size: clamp(...) с мобильным размером). Никакой другой элемент не закрывает их. Provenance: explicit (направление, правило читаемости).
- NFR-2. Контраст. Контраст текста на фоне — 14:1; на розовом primary — 5.2:1; для мелкого текста на primary используется белый. Provenance: explicit (направление).
- NFR-3. Reduced motion. При
prefers-reduced-motion все анимации отключаются, контент показывается сразу. Provenance: explicit (направление).
- NFR-4. Публичный анонимный доступ. Все три страницы доступны без учётной записи, входа, приглашения или провижининга. Provenance: explicit (Planning Scope,
access_requirement: none).
- NFR-5. Отсутствие тёмной темы. Палитра светлая, конфетная, оптимистичная; тёмная тема не предусмотрена. Provenance: explicit (направление).
- NFR-6. Отсутствие стоковых фотографий людей. Используются только 3D-рендеры и абстрактные формы. Provenance: explicit (направление).
- NFR-7. Устойчивость состояний. Каждая страница имеет корректные состояния загрузки, пустого содержимого, успеха, ошибки и восстановления; ошибка загрузки данных не ломает раскладку и не блокирует навигацию. Provenance: required_inference (состояния страниц).
- NFR-8. Отсутствие заказов, платежей, бронирования и доставки. Сайт информационный; эти возможности в текущий продукт не входят. Provenance: explicit (границы продукта).
Page 20 of 21
10. Tech Stack
- Frontend: React (веб-сайт приложения; три публичные страницы — Landing, Menu, Visit Info).
- Стилизация: CSS с токенами палитры и типографики направления; шрифты Comfortaa и Quicksand.
- Изображения: глянцевые 3D-рендеры напитков и абстрактные blob-формы как статические ресурсы.
- Backend: Python/FastAPI — для отдачи содержимого страниц (меню, описание кофейни, контактные данные, часы работы).
- Хранилище: хранилище содержимого сайта (меню, описание, контакты, часы работы), достаточное для отдачи публичным страницам.
- Развёртывание: Docker/docker-compose для локального запуска и развёртывания.
Примечание: конкретные технологии не заданы пользователем; перечисленное — минимальный набор, необходимый для доставки принятого поведения.
11. Assumptions and Constraints
- A-1. Сайт состоит ровно из трёх страниц: Landing, Menu, Visit Info. Страницы не добавляются, не удаляются, не объединяются, не разделяются, не переименовываются и не переупорядочиваются. Provenance: explicit (Planning Scope,
page_contract_version=1).
- A-2. Все три страницы публичны и анонимны (
access_requirement: none); учётная запись, сессия и личный кабинет не создаются. Provenance: explicit (Planning Scope).
- A-3. Активные человеческие роли — ровно две: Посетитель сайта кофейни и Владелец кофейни. Provenance: explicit (Planning Scope,
personas).
- A-4. Владелец кофейни определяет содержимое сайта; в текущем горизонте сайт не содержит административной панели, редактора контента или иного интерфейса управления. Provenance: required_inference (роль владельца кофейни).
- A-5. Сайт не принимает заказы, не обрабатывает платежи, не выполняет бронирование и не ведёт доставку. Provenance: explicit (границы продукта).
- A-6. Конкретные значения меню, описания кофейни, контактных данных и часов работы определяются владельцем кофейни и не заданы в источнике; сайт отображает то, что определено. Provenance: required_inference.
- A-7. Визуальные токены (палитра, типографика, формы, раскладка, движение) заданы направлением и обязательны к соблюдению. Provenance: explicit (CREATIVE DIRECTION).
- A-8. Технологический стек не задан пользователем; выбран минимальный набор для доставки принятого поведения. Provenance: basic_default.
Page 21 of 21
12. Glossary
- Landing — анонимная первая страница сайта; представляет кофейню, объясняет её предложение и направляет посетителя к меню и сведениям для визита.
- Menu — отдельная страница для просмотра представления кофейни, меню и напитков.
- Visit Info — отдельная информационная страница с местоположением и часами работы для планирования визита.
- Посетитель сайта кофейни — человек, который ищет кофейню и хочет понять, что она предлагает, чтобы решить, стоит ли прийти.
- Владелец кофейни — человек, которому нужен публичный сайт для представления своей кофейни; определяет содержимое сайта.
- Капсула — форма с border-radius от 24px до полной капсулы (999px), используемая для кнопок и навигации.
- Stagger-анимация — последовательное появление элементов со смещением (translateY 20px + opacity, 400ms ease-out).
- Liquid-морф — плавное «перетекание» формы или состояния без резких движений.
- Глянцевый блик — анимированный световой отблеск на кнопке, скользящий по поверхности при hover (background-position shift).
- Волнистый SVG-разделитель — криволинейная граница между секциями, окрашенная в цвет следующего блока.
No comments yet. Be the first!