Files
dating-app-frontend/promts/meetme-penpot-prompt.md
2026-06-08 15:09:53 +03:00

808 lines
32 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MeetMe — Дизайн-система в Penpot (Claude Code + MCP)
## Предисловие
Перед началом работы прочитай и усвой полностью:
- `.claude/skills/impeccable/SKILL.md` и все 7 файлов из `reference/`
- `.claude/skills/taste-skill/SKILL.md`
Эти скиллы — не опциональные. Без них выйдет типичный AI-слоп: Inter везде, фиолетово-синие градиенты, карточки внутри карточек, серый текст на цветном фоне. Читай. Потом работай.
---
## Контекст проекта
**MeetMe** — мобильное дейтинг-приложение (Vue 3 + Tauri 2). Пользователи регистрируются по телефону, создают несколько профилей, листают ленту, ставят лайки, получают матчи, переписываются в чате, договариваются о реальных встречах.
Весь дизайн — **на русском языке**: лейблы, плейсхолдеры, заголовки, подписи, пустые состояния, сообщения об ошибках, CTA-кнопки.
Два брейкпоинта:
- **Mobile** — 390 × 844 px (iPhone 14 Pro как эталон)
- **Desktop** — 1440 × 900 px
---
## Задача
Создать в Penpot полноценный дизайн-проект **MeetMe** со следующей структурой:
```
MeetMe/
├── 🎨 Foundations
│ ├── Color Palette
│ ├── Typography
│ ├── Spacing & Grid
│ ├── Elevation & Shadows
│ └── Motion Tokens
├── 🔷 Icons
│ └── Icon Library (48+ иконок)
├── 🧱 Components
│ ├── Atoms
│ ├── Molecules
│ └── Organisms
└── 📱 Screens
├── Mobile (390px)
└── Desktop (1440px)
```
---
## Айдентика и тон
**Название:** MeetMe
**Характер:** тёплый, живой, немного дерзкий — не корпоративный. Как хорошее свидание: интересно, немного волнительно, красиво.
**Аудитория:** 2235 лет, городские жители, ценят эстетику.
**Тон:** уверенный, человечный, без заигрывания. Не «найди любовь», а «встреть своего человека».
---
## 1. ЦВЕТОВАЯ ПАЛИТРА
### Принципы (из impeccable color-and-contrast)
- Все цвета определяй в **OKLCH** — предсказуемый контраст при изменении яркости
- Нейтралы должны быть **тёплыми** (чуть красный/жёлтый подтон), не холодно-серыми
- Избегай: синих оттенков по умолчанию, generic «brand purple», чистого чёрного/белого
### Палитра MeetMe
**Brand (основной акцент):**
Тёплый терракотово-коралловый — не стандартный розовый Tinder, не красный. Живой, зрелый.
```
--color-brand-50: oklch(97% 0.012 22) /* почти белый с теплом */
--color-brand-100: oklch(93% 0.030 22)
--color-brand-200: oklch(86% 0.065 22)
--color-brand-300: oklch(76% 0.110 22)
--color-brand-400: oklch(66% 0.148 22)
--color-brand-500: oklch(58% 0.172 22) /* основной — #D4614A approx */
--color-brand-600: oklch(50% 0.160 22)
--color-brand-700: oklch(42% 0.140 22)
--color-brand-800: oklch(32% 0.110 22)
--color-brand-900: oklch(22% 0.075 22)
```
**Neutral (тёплые серые):**
```
--color-neutral-0: oklch(100% 0 0)
--color-neutral-50: oklch(97% 0.004 60)
--color-neutral-100: oklch(94% 0.008 60)
--color-neutral-200: oklch(88% 0.012 60)
--color-neutral-300: oklch(78% 0.016 60)
--color-neutral-400: oklch(64% 0.014 60)
--color-neutral-500: oklch(52% 0.012 60)
--color-neutral-600: oklch(40% 0.010 60)
--color-neutral-700: oklch(30% 0.008 60)
--color-neutral-800: oklch(20% 0.006 60)
--color-neutral-900: oklch(12% 0.004 60)
```
**Semantic:**
```
--color-success: oklch(62% 0.155 145) /* зелёный — матч состоялся */
--color-warning: oklch(78% 0.140 72) /* янтарный — встреча pending */
--color-error: oklch(58% 0.180 15) /* красный — ошибка */
--color-info: oklch(60% 0.130 240) /* синий — уведомление */
```
**Поверхности (Light mode):**
```
--surface-page: --color-neutral-50
--surface-card: --color-neutral-0
--surface-elevated: --color-neutral-0
--surface-overlay: oklch(12% 0.004 60 / 60%)
```
**Все токены фиксируй в Penpot как Color Styles**, организованные в группы: `brand/`, `neutral/`, `semantic/`, `surface/`.
---
## 2. ТИПОГРАФИКА
### Принципы (из impeccable typography)
- Не Inter. Никогда Inter как единственный шрифт.
- Пара: выразительный дисплейный + читаемый текстовый
- Модульная шкала, не произвольные размеры
- Следи за tracking (letter-spacing) — по умолчанию он слишком тесный у большинства шрифтов
### Выбор для MeetMe
**Display / Headings:** `Playfair Display` (Google Fonts)
Причина: серифный, тёплый, немного романтичный. Хорошо работает в заголовках карточек профилей и экране матча. Контрастирует с современным гротеском основного текста.
**Body / UI:** `Manrope` (Google Fonts)
Причина: геометрический гротеск с тёплым характером, отличная читаемость на маленьких размерах, хорошие кириллические глифы.
### Типографическая шкала (модульная, ratio 1.25)
| Токен | Шрифт | Size | Weight | Line-height | Tracking | Применение |
| ------------- | ---------------- | ---- | ------ | ----------- | -------- | ---------------------- |
| `display-2xl` | Playfair Display | 48px | 700 | 1.1 | -0.02em | Экран матча, hero |
| `display-xl` | Playfair Display | 38px | 700 | 1.15 | -0.015em | Заголовки онбординга |
| `display-lg` | Playfair Display | 30px | 600 | 1.2 | -0.01em | Имя в профиле |
| `display-md` | Playfair Display | 24px | 600 | 1.25 | -0.005em | Заголовки секций |
| `heading-lg` | Manrope | 20px | 700 | 1.3 | -0.01em | Навбар, диалоги |
| `heading-md` | Manrope | 17px | 600 | 1.35 | -0.005em | Карточки, подзаголовки |
| `heading-sm` | Manrope | 15px | 600 | 1.4 | 0 | Лейблы полей |
| `body-lg` | Manrope | 16px | 400 | 1.6 | 0 | Основной текст |
| `body-md` | Manrope | 14px | 400 | 1.6 | 0 | Описание профиля |
| `body-sm` | Manrope | 12px | 400 | 1.5 | 0.01em | Мета, временные метки |
| `label-lg` | Manrope | 14px | 500 | 1 | 0.04em | Кнопки, таббар |
| `label-sm` | Manrope | 11px | 500 | 1 | 0.06em | Бейджи, чипы |
**Все токены фиксируй в Penpot как Text Styles.**
---
## 3. SPACING & GRID
### Шкала отступов (4px база)
```
--space-1: 4px
--space-2: 8px
--space-3: 12px
--space-4: 16px
--space-5: 20px
--space-6: 24px
--space-8: 32px
--space-10: 40px
--space-12: 48px
--space-16: 64px
--space-20: 80px
```
### Радиусы скругления
```
--radius-sm: 6px /* чипы, теги */
--radius-md: 12px /* карточки, поля ввода */
--radius-lg: 20px /* карточки профиля */
--radius-xl: 28px /* модальные окна */
--radius-full: 9999px /* кнопки, аватары */
```
### Грид Mobile (390px)
- Колонки: 4
- Гаттер: 16px
- Отступы: 20px
### Грид Desktop (1440px)
- Колонки: 12
- Гаттер: 24px
- Отступы: 80px
- Max content width: 1280px
---
## 4. ELEVATION & ТЕНИ
Не используй `box-shadow: 0 4px 20px rgba(0,0,0,0.25)` — это AI-слоп.
Тени должны быть тёплыми и слоистыми.
```
--shadow-xs: 0 1px 2px oklch(12% 0.004 60 / 8%)
--shadow-sm: 0 1px 3px oklch(12% 0.004 60 / 10%), 0 1px 2px oklch(12% 0.004 60 / 6%)
--shadow-md: 0 4px 6px oklch(12% 0.004 60 / 7%), 0 2px 4px oklch(12% 0.004 60 / 6%)
--shadow-lg: 0 10px 15px oklch(12% 0.004 60 / 8%), 0 4px 6px oklch(12% 0.004 60 / 5%)
--shadow-xl: 0 20px 25px oklch(12% 0.004 60 / 8%), 0 8px 10px oklch(12% 0.004 60 / 4%)
```
**Карточка профиля** использует `--shadow-lg` + небольшой warm tint.
---
## 5. БИБЛИОТЕКА ИКОНОК
Создай коллекцию **48 иконок** в едином стиле:
- Стиль: **Outlined с rounded endpoints**, stroke 1.52px, 24×24 viewport
- Никакого filled + outlined микса в одном экране
- Все иконки — компоненты Penpot с именованием `icon/[category]/[name]`
### Список иконок (сгруппируй в Penpot по категориям):
**Navigation (8)**
- `nav/feed` — сетка карточек или стопка
- `nav/matches` — сердце с двойным контуром или звёзды
- `nav/chat` — облако диалога
- `nav/dates` — календарь с точкой
- `nav/profile` — силуэт человека
- `nav/settings` — шестерёнка или слайдеры
- `nav/back` — стрелка влево
- `nav/close` — крест
**Actions (12)**
- `action/like` — сердце
- `action/dislike` — крест в круге или большой X
- `action/superlike` — звезда
- `action/send` — стрелка отправки
- `action/attach` — скрепка
- `action/camera` — камера
- `action/microphone` — микрофон
- `action/photo` — рамка изображения
- `action/video` — видеокамера
- `action/delete` — корзина
- `action/edit` — карандаш
- `action/more` — три точки (горизонтальные)
**Profile (8)**
- `profile/age` — торт или число
- `profile/location` — пин геолокации
- `profile/height` — линейка роста
- `profile/weight` — весы
- `profile/verified` — галочка в круге
- `profile/add` — плюс в круге
- `profile/switch` — стрелки обмена (смена профиля)
- `profile/tag` — тег/лейбл
**Chat (8)**
- `chat/read` — двойная галочка
- `chat/delivered` — одна галочка
- `chat/typing` — три точки анимированные
- `chat/audio` — волна аудио
- `chat/emoji` — смайлик
- `chat/date-proposal` — календарь с сердцем
- `chat/greetings` — рука с приветствием
- `chat/report` — флажок
**Status (6)**
- `status/online` — зелёная точка
- `status/pending` — часы
- `status/confirmed` — галочка
- `status/cancelled` — крест
- `status/match` — конфетти или двойное сердце
- `status/limit` — замок или стоп-сигнал
**Misc (6)**
- `misc/filter` — воронка
- `misc/search` — лупа
- `misc/notification` — колокол
- `misc/map-pin` — булавка карты
- `misc/link` — цепочка
- `misc/info` — буква i в круге
---
## 6. КОМПОНЕНТНАЯ БИБЛИОТЕКА
### ATOMS
#### Button
**Варианты (Property: variant)**
- `primary` — brand-500 фон, белый текст
- `secondary` — brand-100 фон, brand-700 текст
- `ghost` — прозрачный фон, brand-600 текст
- `destructive` — error фон, белый текст
**Размеры (Property: size)**
- `lg` — height 52px, padding 24px, radius-full, label-lg
- `md` — height 44px, padding 20px, radius-full, label-lg
- `sm` — height 36px, padding 16px, radius-md, label-sm
**Состояния (Property: state)**
- `default`, `hover`, `pressed`, `disabled`, `loading`
**Иконка (Property: icon):** leading / trailing / icon-only
#### Input
- height 52px, radius-md, border 1.5px neutral-200
- Лейбл над полем (floating label — анимируется при фокусе)
- Состояния: `default`, `focused` (brand-500 border), `error` (error border + helper text), `disabled`, `filled`
- Варианты: `text`, `password` (с кнопкой показа), `phone` (с префиксом +7), `search`
#### Avatar
- Размеры: 32px, 40px, 48px, 64px, 80px, 120px
- Форма: круг
- Состояния: с фото, инициалы (brand-100 фон), загрузка, онлайн-индикатор
- Бейдж: счётчик уведомлений (правый верхний угол)
#### Badge / Chip
- `badge` — небольшой счётчик (число), brand или error
- `chip` — тег с текстом, варианты: outline, filled; с иконкой или без; dismissible
#### Tag (интересы)
- Компактный чип с иконкой-эмодзи и текстом
- `selected` / `unselected` состояния
- Используется в профиле для отображения тегов интересов
#### Divider
- Горизонтальный, с опциональным текстом по центру («или»)
---
### MOLECULES
#### ProfileCard (карточка в ленте)
Основной компонент приложения. Полноэкранная карточка на мобиле.
**Структура:**
```
┌─────────────────────────────┐
│ │
│ [Фото профиля — bg] │
│ │
│ │
│ ╔═══════════════════════╗ │
│ ║ Анна, 26 ║ │
│ ║ 📍 Москва, Арбат ║ │
│ ║ 🏷 Путешествия Йога ║ │
│ ╚═══════════════════════╝ │
└─────────────────────────────┘
```
- Фоновое фото занимает всю карточку
- Снизу градиент `oklch(12% 0 0 / 0%)``oklch(12% 0 0 / 80%)` — 40% высоты
- Имя: `display-lg` белый
- Возраст: рядом с именем, `display-lg` `oklch(100% 0 0 / 75%)`
- Геолокация: `body-md` белый, иконка `profile/location`
- Теги: горизонтальный скролл чипов
- Тени под текстом нет — только градиент
**Действия (кнопки поверх карточки):**
- Дизлайк — круглая кнопка 64px, нейтральный фон, иконка `action/dislike` в neutral-600
- Лайк — круглая кнопка 64px, brand-500 фон, иконка `action/like` белый
- Суперлайк (опционально) — 52px, янтарный, звезда
**Свайп-оверлеи:**
- Свайп вправо: зелёный бейдж «НРАВИТСЯ» в левом верхнем углу, наклон текста
- Свайп влево: красный бейдж «ПРОПУСТИТЬ» в правом верхнем углу
#### MessageBubble
- Чужое сообщение: нейтральный фон, скругление `0 radius-lg radius-lg radius-lg`
- Моё сообщение: brand-500 фон, белый текст, скругление `radius-lg 0 radius-lg radius-lg`
- Время: `body-sm` neutral-400
- Статус доставки: иконки `chat/delivered`, `chat/read`
- Медиа-сообщение: превью фото/видео с rounded corners
- Голосовое: волна + длительность + кнопка воспроизведения
#### MatchCard (в списке матчей)
```
┌──────────────────────────────┐
│ [Avatar 64px] Анна, 26 │
│ Москва │
│ ────────── │
│ Написать → │
└──────────────────────────────┘
```
- Горизонтальный layout
- Левая часть: аватар с онлайн-индикатором
- Правая: имя `heading-md`, город `body-sm` neutral-500, CTA `label-lg` brand-600
- Правый край: время матча `body-sm` neutral-400
#### ChatListItem
```
┌──────────────────────────────────────┐
│ [Avatar 48px] Анна 14:32 │
│ Привет! Как дела? [2]│
└──────────────────────────────────────┘
```
- Аватар, имя, последнее сообщение (truncated), время, счётчик непрочитанных
- Active state: brand-50 фон
#### DateCard (встреча)
- Иконка `nav/dates` brand-500
- Имя партнёра, дата и время
- Адрес/координаты
- Status badge: `pending` (янтарный), `confirmed` (зелёный), `cancelled` (красный)
- Действия: «Подтвердить» / «Отменить» / «Перенести»
#### FilterSheet (панель фильтров)
Bottom sheet на мобиле, sidebar на десктопе.
- Возраст: range slider (ageMinageMax)
- Город: dropdown select
- Район: dropdown select (зависимый)
- Теги: chip multi-select
- CTA: «Применить фильтры», «Сбросить»
---
### ORGANISMS
#### BottomNav (Mobile)
Высота 83px (+ safe area). 5 вкладок:
- Лента (`nav/feed`)
- Матчи (`nav/matches`) — с бейджем
- Чат (`nav/chat`) — с бейджем
- Встречи (`nav/dates`)
- Профиль (`nav/profile`)
Active state: иконка brand-500, лейбл brand-600, точка под иконкой.
#### SideNav (Desktop)
Ширина 240px, фиксированная. Logo MeetMe сверху. Те же 5 пунктов + «Настройки». Имя и аватар активного профиля снизу с кнопкой смены.
#### ProfileHeader
Используется на экране публичного профиля.
- Фото-галерея (swiper, точки-индикаторы)
- Кнопка назад
- Кнопка «Пожаловаться» (три точки → меню)
- Информация профиля снизу
#### ChatHeader
- Назад, аватар + имя + онлайн-статус, три точки (закрыть чат / встреча / жалоба)
#### MatchModal (bottom sheet / центральный модал)
Появляется при взаимном лайке.
- Анимированный фон (конфетти? мягкие частицы)
- Два аватара с перекрытием
- Заголовок: `display-xl` «Это матч!»
- Подзаголовок: «Ты и Анна понравились друг другу»
- CTA primary: «Написать Анне»
- CTA ghost: «Продолжить поиск»
---
## 7. ЭКРАНЫ — MOBILE (390px)
Создай фреймы для всех экранов в Penpot. Каждый экран — отдельный фрейм 390×844.
### Авторизация
**LoginView**
- Логотип MeetMe (wordmark Playfair Display + иконка) по центру верхней трети
- `display-xl`: «Рады видеть тебя»
- Поля: телефон (+7), пароль
- Кнопка primary `lg`: «Войти»
- Ссылка: «Нет аккаунта? Зарегистрироваться»
**RegisterView**
- «Создай аккаунт»
- Поля: телефон, пароль, подтверждение пароля
- Кнопка: «Зарегистрироваться»
- Ссылка: «Уже есть аккаунт? Войти»
### Онбординг
**CreateProfileView — Шаг 1 (Основное)**
- Прогресс-бар (3 шага)
- «Расскажи о себе»
- Поля: Имя, Дата рождения, Пол (radio-кнопки с иконками ♂ ♀)
- CTA: «Далее»
**CreateProfileView — Шаг 2 (Детали)**
- Поля: Город (select), Район (select), Рост, Вес, Национальность
- Описание (textarea, 300 символов)
- CTA: «Далее»
**CreateProfileView — Шаг 3 (Интересы)**
- «Выбери до 10 интересов»
- Chip grid из тегов (GET /tags)
- CTA: «Готово»
**MediaUploadView**
- «Добавь фото»
- 6 слотов в сетке 2×3, первый — обязательный (основное фото)
- Плейсхолдер слота: `+` иконка, пунктирная рамка
- Подсказка: «Первое фото увидят все»
- CTA: «Начать знакомства»
### Лента
**FeedView**
- Карточка профиля на весь экран (за вычетом статус-бара и BottomNav)
- Вверху: логотип MeetMe (compact) + иконка фильтра + иконка уведомлений
- Кнопки действий снизу карточки
- Индикатор позиции (точки или счётчик «3 из 20»)
**FeedView — Empty State**
- Иллюстрация (простая, монолинейная, brand-200 цвет)
- «Ты просмотрел всех»
- «Попробуй позже или измени фильтры»
- CTA: «Изменить фильтры»
**FeedView — Limit Reached**
- «У тебя 10 матчей»
- «Пообщайся с ними, чтобы продолжить поиск»
- CTA: «Перейти к матчам»
### Матчи
**MatchesView**
- Заголовок «Матчи»
- Horizontal scroll «Новые» — аватары в кружках (как в Instagram Stories)
- Список MatchCard ниже — все матчи в хронологии
### Чат
**ChatsListView**
- Заголовок «Сообщения»
- Поиск по чатам
- Список ChatListItem
- Empty state: «Пока нет чатов. Напиши кому-нибудь из матчей!»
**ChatView**
- ChatHeader
- Сообщения (с группировкой по датам — «Сегодня», «Вчера», дата)
- Быстрые приветствия (горизонтальный скролл чипов, появляется при первом сообщении)
- Input bar: поле ввода + иконки: фото, голосовое, отправить
- Кнопка «Назначить встречу» — плавающая или в меню чата
### Встречи
**DatesView**
- Заголовок «Встречи»
- Фильтр по статусу (таббар: Все / Ожидают / Подтверждены)
- Список DateCard
- Empty state: «Пока нет встреч. Договорись в чате!»
**DateProposalSheet (bottom sheet)**
- «Назначить встречу»
- Поле: дата и время (date-time picker)
- Карта или поле координат
- CTA: «Отправить предложение»
### Профиль
**MyProfilesView**
- «Мои профили»
- Список профилей (аватар, имя, возраст)
- Кнопка «Добавить профиль» (+ иконка)
- Active badge на текущем профиле
**ProfileEditView**
- Редактирование с теми же полями что в создании
- Секция «Медиа» — галерея с drag-to-reorder
- Кнопка «Удалить профиль» (destructive, внизу)
**ProfilePublicView**
- ProfileHeader (фото-галерея)
- Имя, возраст, геолокация
- Описание
- Теги (chips)
- Рост, вес, национальность (иконки + значения)
- Кнопки Лайк/Дизлайк (если это лента) или «Написать» (если это матч)
### Настройки
**SettingsView**
- Аватар + имя аккаунта
- Секции: Аккаунт, Уведомления, Безопасность, О приложении
- Кнопка «Выйти» (destructive)
---
## 8. ЭКРАНЫ — DESKTOP (1440px)
Каждый фрейм 1440×900.
**Общий Layout:**
- Левая колонка: SideNav (240px, фиксированная)
- Основная область: 1200px
- Для чата: split-view — список (320px) + сообщения
**FeedView Desktop**
- SideNav слева
- Центр: карточка профиля 420×560px (не во весь экран!)
- Справа от карточки: детали профиля (имя, теги, описание) — 320px колонка
- Кнопки под карточкой или справа
**ChatsView Desktop**
- SideNav | ChatList 320px | ChatMessages | (опционально ProfilePanel 280px)
- Нет bottom sheet — поле ввода снизу в колонке сообщений
**MatchesView Desktop**
- Сетка 3 колонки из MatchCard
**ProfileEditView Desktop**
- Двухколоночный layout: форма | превью профиля
---
## 9. МОДАЛЬНЫЕ ОКНА И ОВЕРЛЕИ
- **MatchModal** — центральный модал на десктопе, bottom sheet на мобиле
- **FilterSheet** — right sidebar на десктопе, bottom sheet на мобиле
- **DateProposalSheet** — аналогично
- **ReportSheet** — «Пожаловаться»: тип жалобы (chips) + текстовое поле + «Отправить»
- **ConfirmDialog** — удаление профиля, закрытие чата
---
## 10. ПУСТЫЕ СОСТОЯНИЯ И СОСТОЯНИЯ ЗАГРУЗКИ
Для каждого ключевого экрана создай:
**Loading (Skeleton):**
- ProfileCard skeleton: прямоугольник с animated shimmer
- ChatListItem skeleton: аватар-круг + две строки
**Empty States (с иллюстрацией):**
- Лента пуста
- Нет матчей
- Нет чатов
- Нет встреч
**Error State:**
- Что-то пошло не так + кнопка «Повторить»
---
## 11. ЛОГОТИП MEETME
Создай wordmark:
- Текст «MeetMe» шрифтом Playfair Display, 700 weight
- «Meet» — neutral-900
- «Me» — brand-500
- Опционально: небольшой знак — стилизованное «M» из двух сердец или двух силуэтов
- Compact версия: только знак (для BottomNav, favicon)
- Размеры: Full (для онбординга), Medium (для NavBar), Small / Icon-only
---
## 12. ОРГАНИЗАЦИЯ В PENPOT
### Структура страниц:
```
Page 1: 🎨 Foundations
Frames: Color Palette | Typography Scale | Spacing | Shadows | Motion
Page 2: 🔷 Icons
Frame: Icon Library (сетка 8×6, все 48 иконок с лейблами)
Page 3: 🧱 Components — Atoms
Frames: Button | Input | Avatar | Badge | Chip | Tag | Divider
Page 4: 🧱 Components — Molecules
Frames: ProfileCard | MessageBubble | MatchCard | ChatListItem | DateCard | FilterSheet
Page 5: 🧱 Components — Organisms
Frames: BottomNav | SideNav | ProfileHeader | ChatHeader | MatchModal
Page 6: 📱 Mobile Screens
390×844: Login | Register | CreateProfile (×3) | MediaUpload |
Feed | Feed Empty | Feed Limit | Matches | ChatsList |
Chat | Dates | DateProposal | MyProfiles | ProfileEdit |
ProfilePublic | Settings
Page 7: 🖥 Desktop Screens
1440×900: Feed | Chat | Matches | ProfileEdit
```
### Именование в Penpot:
- Компоненты: `ComponentName/variant/size/state`
- Цвета: `brand/500`, `neutral/200`, `semantic/success`
- Текстовые стили: `display/2xl`, `body/md`, `label/lg`
- Иконки: `icon/nav/feed`, `icon/action/like`
---
## 13. ANTI-PATTERNS (не делай этого)
Из impeccable — то, что категорически запрещено:
-`font-family: Inter` как единственный шрифт
- ❌ Градиент `purple → blue` в качестве акцента
-`box-shadow: 0 4px 20px rgba(0,0,0,0.25)` — тёмная жирная тень
- ❌ Карточки внутри карточек внутри карточек
-`border-radius: 24px` на всём подряд
- ❌ Серый текст на цветном фоне (проверяй контраст WCAG AA)
- ❌ Bounce easing (cubic-bezier с выходом за 1)
- ❌ «Плавающие» заголовки с декоративными линиями и иконками над каждым
- ❌ Полупрозрачные карточки с `backdrop-filter: blur` везде
-Все кнопки одинаковые, round, pill-shaped — нужна иерархия
- ❌ Пустые состояния без иллюстрации и без конкретного CTA
- ❌ Текст `color: #666` на белом фоне — не пройдёт WCAG
---
## 14. ПОРЯДОК РАБОТЫ
1. **Foundations** — создай все токены как Penpot Styles (цвет, текст)
2. **Icons** — нарисуй все 48 иконок, сохрани как компоненты
3. **Логотип** — создай 3 версии
4. **Atoms** — Button, Input, Avatar, Badge, Chip
5. **Molecules** — ProfileCard, MessageBubble, MatchCard, ChatListItem, DateCard
6. **Organisms** — BottomNav, SideNav, ProfileHeader, ChatHeader, MatchModal
7. **Mobile screens** — собери все 17 экранов из компонентов
8. **Desktop screens** — 4 ключевых экрана
9. **States & Edge cases** — loading, empty, error для каждого экрана
Не спрашивай подтверждения на каждый шаг — работай последовательно до полной готовности проекта.
---
## Финальная проверка
После завершения прогони аудит по impeccable:
- Типографический контраст (все текстовые пары ≥ 4.5:1)
- Touch targets на мобиле (≥ 44×44px)
- Длина строк (4575 символов для body text)
- Консистентность радиусов (не более 3 уровней на один экран)
- Отступы кратны шкале (никаких «13px»)
- Все состояния компонентов реализованы
- Все иконки используются минимум на одном экране