Files
bedolaga-cabinet/.ai/BENTO_REFACTOR.md

8.7 KiB
Raw Blame History

Bento Grids Refactor

Ветка: bento-grids Статус: В работе Последнее обновление: 2026-01-20

Референс

  • Стиль: Bento Grids (карточки разных размеров в сетке)
  • Цветовая схема: Зеленый неон на темном фоне, чистота
  • Шрифт: Urbanist (современный гротеск)
  • Скругления: Крупные (24-32px)

План рефакторинга

Этап 1: Фундамент (Vibe Check)

Цель: Пустая страница уже выглядит "секси"

# Задача Статус Заметки
1.1 Подключить Urbanist шрифт [x] Google Fonts, заменить Inter
1.2 Tailwind: bento radius/spacing [x] rounded-bento, rounded-4xl, spacing.bento
1.3 globals.css: CSS переменные Bento [x] --bento-radius, --bento-gap, --bento-padding

Файлы:

  • src/styles/globals.css
  • tailwind.config.js

Этап 2: Атом (BentoCard)

Цель: Один идеальный компонент-карточка

# Задача Статус Заметки
2.1 Создать BentoCard компонент [x] С вариантами размеров
2.2 Обновить .card в globals.css [x] Новые классы .bento-card, .bento-card-hover, .bento-card-glow

Файлы:

  • src/components/ui/BentoCard.tsx (новый)
  • src/styles/globals.css

API компонента:

type BentoSize = 'sm' | 'md' | 'lg' | 'xl' // 1x1, 2x1, 1x2, 2x2

interface BentoCardProps {
  size?: BentoSize
  children: React.ReactNode
  className?: string
  hover?: boolean
  as?: 'div' | 'Link' | 'button'
}

Этап 3: Скелет (Floating TabBar)

Цель: Bottom navigation как "парящий остров"

# Задача Статус Заметки
3.1 Floating island стиль [x] margin 16px от краев, shadow
3.2 Active state с pill [x] rounded-2xl фон под активной иконкой
3.3 Убрать border-top [x] Заменено на shadow

Файлы:

  • src/components/layout/Layout.tsx (секция bottom-nav)
  • src/styles/globals.css (.bottom-nav классы)

Этап 4: Мясо (Dashboard Grid)

Цель: Главная страница в стиле Bento

# Задача Статус Заметки
4.1 Создать .bento-grid контейнер [x] CSS Grid с gap, 2 колонки mobile, 4 desktop
4.2 Subscription Status → bento-card [x] Главная карточка подписки
4.3 Stats Grid → bento-grid + bento-card-hover [x] Balance, Subscription, Referrals, Earnings
4.4 Quick Actions → bento-card [x] Контейнер для кнопок
4.5 Trial + Wheel Banner → bento-card-glow/hover [x] Акцентные карточки

Файлы:

  • src/pages/Dashboard.tsx
  • src/styles/globals.css

Правило: Логику JS/TS НЕ трогаем — только UI обёртки.


Решения и обоснования

Почему Urbanist, а не Inter?

  • Urbanist более геометричный, лучше подходит под Bento-эстетику
  • Хорошая читаемость на мобильных
  • Бесплатный, Google Fonts

Почему rounded-3xl (24px)?

  • Стандарт Bento — крупные скругления
  • 16px (текущий rounded-2xl) выглядит слишком "приложенечно"
  • 32px (rounded-4xl) для особо крупных элементов

Floating TabBar vs прилипший

  • Floating выглядит премиально
  • Отделяет навигацию от контента визуально
  • Работает с safe-area на iOS

Что НЕ делаем

  • Модалки (ConnectionModal, TopUpModal) — вторично
  • Страницы кроме Dashboard — после MVP
  • Header — работает, не ломаем
  • Рефакторинг логики — только UI

Прогресс

Этап 1: ██████████ 100%
Этап 2: ██████████ 100%
Этап 3: ██████████ 100%
Этап 4: ██████████ 100%
Этап 5: ██████████ 100%
─────────────────────
Общий:  ██████████ 100%

Заметки для агентов

Контекст: Это Mini App для Telegram (VPN кабинет). Мобильный фокус.

Текущий стек:

  • React + Vite + TypeScript
  • Tailwind CSS
  • React Query для данных

Ключевые файлы:

  • tailwind.config.js — цвета через CSS переменные
  • src/styles/globals.css — компонентные классы (.card, .btn, etc)
  • src/components/layout/Layout.tsx — шапка + таббар
  • src/pages/Dashboard.tsx — главный экран (монстр, но логику не трогаем)

Темы: Есть dark и light (champagne). Bento-стили должны работать в обеих.


Следующие этапы (Phase 2)

Этап 5: Остальные страницы пользователя

Применить bento-стили к основным страницам

# Страница Приоритет Объём Статус
5.1 Subscription.tsx High Большая — формы, тарифы, карточки [x]
5.2 Balance.tsx High Средняя — баланс, транзакции, методы оплаты [x]
5.3 Referral.tsx Medium Средняя — статистика, ссылка, условия [x]
5.4 Support.tsx Medium Малая — тикеты [x]
5.5 Profile.tsx Low Малая — настройки [x]
5.6 Info.tsx Low Малая — статичный контент [x]

Этап 6: Модалки

Обновить модальные окна в bento-стиле

# Компонент Заметки
6.1 ConnectionModal QR-код, кнопки подключения
6.2 TopUpModal Форма пополнения
6.3 InsufficientBalancePrompt Промпт о недостатке средств

Этап 7: Header

Обновить шапку (опционально)

# Задача Заметки
7.1 Лого в bento-стиле Скругления, тень
7.2 Mobile menu Floating стиль?

Этап 8: Полировка

Финальные штрихи

# Задача
8.1 Анимации появления карточек (stagger)
8.2 Микро-взаимодействия (hover glow)
8.3 Тестирование на разных устройствах
8.4 Performance check (особенно blur на mobile)

Changelog

2026-01-20 — MVP Complete

  • Urbanist шрифт
  • CSS переменные Bento
  • BentoCard компонент
  • Floating TabBar
  • Dashboard в bento-стиле
  • Commit: bf0bcfb

2026-01-20 — Subscription.tsx Refactor

  • Все секции cardbento-card (6 шт):
    • Current Subscription (line 429)
    • Daily Pause (line 634)
    • Additional Options (line 733)
    • My Devices (line 1153)
    • Tariffs section (line 1223)
    • Classic mode purchase (line 1925)
  • Tariff cards: bento-card-hover + bento-card-glow для выбранного
  • Period selection cards: bento-card-hover + bento-card-glow
  • Traffic selection cards: bento-card-hover + bento-card-glow
  • Исправлен .bento-grid — добавлен breakpoint для xs (<375px)

2026-01-20 — Phase 2 Complete (Все страницы пользователя)

  • Balance.tsx: 4 карточки → bento-card, методы оплаты → bento-card-hover
  • Referral.tsx: stats grid → bento-grid + bento-card-hover, 5 секций → bento-card
  • Support.tsx: 3 карточки → bento-card, tickets list items → rounded-bento
  • Profile.tsx: 3 карточки → bento-card
  • Info.tsx: FAQ items, rules, privacy, offer → bento-card