# AIVEXA Brand Hub > Бренд-хаб AIVEXA («нейроофис»): единые токены, шрифт Golos Text, ассеты и shadcn-реестр `@aivexa` (38 элементов), собранные из Figma «Айвекса/нейроофис». Светлый воздушный интерфейс, один фиолетовый акцент `--primary`, тёмная тема обязательна. Этот файл — точка входа для LLM-агента: что прочитать, что поставить, по какому эталону верстать и как себя проверить. Источник правды — этот хаб, а не память модели и не старые макеты. Любой UI для AIVEXA / Айвексы / продуктов AIVEXA (приложение, лендинг, виджет, письмо, отчёт в HTML) верстается только из токенов и компонентов `@aivexa`. Базовый URL: https://test-design.aivexa.pro ## Порядок действий агента **Шаг 1.** Прочитай правила: https://test-design.aivexa.pro/aivexa/rules.md — короткий обязательный свод с чек-листом. Подробности по любому значению — в DESIGN.md. **Шаг 2.** Проект (React + Tailwind 4 + shadcn). Есть свой — пропусти `init` и `cd`, остальное то же. Нового нет — команды ниже по порядку, как есть (bash; проверено с нуля 09.10.2026, `npm run build` — exit 0). `init` создаёт проект в подпапке `-n`, дальше всё — из неё: ```bash npx shadcn@latest init -t vite -b radix -p nova -n my-app --no-monorepo -y cd my-app # реестр @aivexa в components.json node -e 'const fs=require("fs"),f="components.json",j=JSON.parse(fs.readFileSync(f,"utf8"));j.registries={...j.registries,"@aivexa":"https://test-design.aivexa.pro/r/{name}.json"};fs.writeFileSync(f,JSON.stringify(j,null,2)+"\n")' ``` **Шаг 3.** Тема, компоненты и уборка шаблона. Тему ставь первой. `-o` обязателен: `init` уже положил шаблонный `src/components/ui/button.tsx`, без `-o` он останется вместо нашего. Шаблон `-t vite` оставляет свой `ThemeProvider` (ключ `theme`, хоткей «d») и шрифт Geist — их убираем: тема у нас — `theme-switcher` / `useTheme()` (класс `.dark` на `` + ключ `aivexa-theme`), шрифт — Golos Text из темы. ```bash npx shadcn@latest add @aivexa/aivexa-theme -y npx shadcn@latest add @aivexa/app-shell @aivexa/app-header @aivexa/button @aivexa/card @aivexa/field @aivexa/input @aivexa/notification -y -o # убрать шаблонный ThemeProvider и шрифт Geist rm -f src/components/theme-provider.tsx npm uninstall @fontsource-variable/geist node -e 'const fs=require("fs"),f="src/index.css";fs.writeFileSync(f,fs.readFileSync(f,"utf8").split("\n").filter(l=>!/geist/i.test(l)).join("\n"))' cat > src/main.tsx <<'EOF' import { StrictMode } from "react" import { createRoot } from "react-dom/client" import "./index.css" import App from "./App.tsx" createRoot(document.getElementById("root")!).render( ) EOF ``` Состав `add` — под свой экран (список элементов ниже; лишнее не ставь). Если `ThemeProvider` в проекте всё же остался (чужой код), `theme-switcher` с ним уживается: пишет оба ключа (`aivexa-theme` и `theme`) и следит за классом `.dark` на `` — но правильно его удалить. **Шаг 4.** `index.html`: язык `ru`, скрипт темы до бандла (без него страница при загрузке мигает светлой), favicon. Готовый файл для vite-проекта — заменяет шаблонный целиком: ```bash cat > index.html <<'EOF' AIVEXA
EOF ``` Не vite (Next.js и т. п.): тот же `