# 🚀 НАЧНИТЕ ЗДЕСЬ - Новый Frontend Material UI 3 ## ✅ Что нужно знать ### Технологии: - ✅ **Next.js 16** (с Turbopack - быстрее Vite) - ✅ **Material Web Components 3** - ТОЛЬКО Material компоненты - ✅ **Material Design 3 Grid** - для layout - ✅ **Чистый CSS** - БЕЗ Tailwind CSS - ✅ **iOS 24+ стиль** - blur, rounded corners - ✅ **Bottom Navigation** - вместо sidebar ### Цвета из landing_site: - `#7444FD` - основной фиолетовый - `#FAF8FF` - светлый фон - `#282C32` - темный текст - `#858585` - серый текст --- ## 📝 Пошаговая инструкция ### Шаг 1: Инициализация проекта ```bash cd front_material # Создать Next.js проект БЕЗ Tailwind CSS npx create-next-app@latest . --typescript --no-tailwind --app --no-src-dir --eslint # Ответы на вопросы: # ✔ Would you like to use TypeScript? … Yes # ✔ Would you like to use ESLint? … Yes # ✔ Would you like to use Tailwind CSS? … No (ВАЖНО!) # ✔ Would you like to use `src/` directory? … No # ✔ Would you like to use App Router? … Yes # ✔ Would you like to customize the default import alias (@/*)? … No ``` ### Шаг 2: Установка зависимостей ```bash # Material Web Components npm install @material/web # API и утилиты npm install axios date-fns # Видеозвонки npm install livekit-client # TypeScript типы npm install -D @types/node @types/react @types/react-dom ``` ### Шаг 3: Создание структуры папок ```bash # Создать основные папки mkdir -p components/navigation mkdir -p components/layout mkdir -p components/dashboard mkdir -p components/chat mkdir -p components/video mkdir -p components/common mkdir -p contexts mkdir -p hooks mkdir -p api mkdir -p lib mkdir -p styles mkdir -p types # Создать группы маршрутов mkdir -p app/\(auth\)/login mkdir -p app/\(auth\)/register mkdir -p app/\(protected\)/dashboard/mentor mkdir -p app/\(protected\)/dashboard/client mkdir -p app/\(protected\)/schedule mkdir -p app/\(protected\)/chat ``` ### Шаг 4: Создание базовых файлов #### `types/material-web.d.ts`: ```typescript declare namespace JSX { interface IntrinsicElements { 'md-filled-button': any; 'md-outlined-button': any; 'md-text-button': any; 'md-filled-text-field': any; 'md-outlined-text-field': any; 'md-elevated-card': any; 'md-list': any; 'md-list-item': any; 'md-navigation-bar': any; 'md-navigation-tab': any; 'md-icon': any; 'md-icon-button': any; 'md-dialog': any; 'md-circular-progress': any; // ... добавить остальные } } ``` #### `lib/material-components.ts`: ```typescript // Импортировать все нужные Material компоненты import '@material/web/button/filled-button.js'; import '@material/web/button/outlined-button.js'; import '@material/web/textfield/outlined-text-field.js'; import '@material/web/labs/card/elevated-card.js'; import '@material/web/labs/navigationbar/navigation-bar.js'; import '@material/web/labs/navigationtab/navigation-tab.js'; import '@material/web/icon/icon.js'; import '@material/web/list/list.js'; import '@material/web/list/list-item.js'; // ... добавить остальные по необходимости ``` #### `styles/material-theme.css`: ```css :root { --md-sys-color-primary: #7444FD; --md-sys-color-on-primary: #FFFFFF; --md-sys-color-primary-container: #FAF8FF; --md-sys-color-on-primary-container: #282C32; --md-sys-color-surface: #FFFFFF; --md-sys-color-on-surface: #282C32; --md-sys-color-background: #F6F7FF; --md-sys-color-on-background: #282C32; } [data-theme="dark"] { --md-sys-color-primary: #9D6AFF; --md-sys-color-surface: #161921; --md-sys-color-on-surface: #FFFFFF; --md-sys-color-background: #161921; } ``` #### `styles/material-grid.css`: ```css .md-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; padding: 0 16px; } @media (min-width: 600px) { .md-grid { grid-template-columns: repeat(8, 1fr); gap: 24px; } } @media (min-width: 840px) { .md-grid { grid-template-columns: repeat(12, 1fr); } } .md-col-4 { grid-column: span 4; } .md-col-6 { grid-column: span 6; } .md-col-12 { grid-column: span 12; } ``` #### `styles/ios-material.css`: ```css /* iOS 24+ стилизация Material компонентов */ md-navigation-bar { --md-navigation-bar-container-color: rgba(255, 255, 255, 0.8); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-radius: 24px 24px 0 0; border-top: 0.5px solid rgba(0, 0, 0, 0.1); } md-elevated-card { --md-elevated-card-container-shape: 20px; backdrop-filter: blur(20px); } md-filled-button { --md-filled-button-container-shape: 16px; } ``` #### `app/layout.tsx`: ```typescript import '@/lib/material-components'; import '@/styles/material-theme.css'; import '@/styles/material-grid.css'; import '@/styles/ios-material.css'; import './globals.css'; export default function RootLayout({ children }: { children: React.ReactNode }) { return (
{children} ); } ``` ### Шаг 5: Создание первой страницы (Login) #### `app/(auth)/login/page.tsx`: ```tsx 'use client'; export default function LoginPage() { return (