Колофон

Как сделан этот сайт.

Стек, дизайнерские решения и рабочий процесс этого портфолио, которое само по себе — отдельный проект.

Фреймворк
Next.js 16
App Router, React 19
Язык
TypeScript
strict, без any
Компоненты
shadcn на Base UI
стилизованы собственным CSS сайта
Стили
Tailwind CSS v4
плюс собственный CSS на дизайн-токенах
Хостинг
Vercel
превью для каждой ветки, продакшн после мержа
Языки
3
английский, украинский, русский

Архитектура

Каждая страница рендерится в статический HTML при сборке сайта. Небольшой прокси сопоставляет каждый адрес с языком, а остальное отдаёт CDN.

Код
Репозиторий GitHubTypeScript · pnpm
Веткапревью-деплой после push
Сборка
Vercelnext build
Доставка
Статические страницысгенерированы заранее
Проксивыбирает язык
Домен
Cloudflare DNStymurmustafaiev.com
// мерж в main → продакшн примерно за полторы минуты

Дизайн

Одна гарнитура, Geist, и Geist Mono для мелких данных. Один акцент — оранжевый, и он редкий: подчёркивание ссылки, активное состояние, точка статуса.

Каждый цвет — это токен. Одни и те же компоненты получают светлую и тёмную тему только за счёт замены токенов, поэтому ничего не стилизуется дважды. Переключите тему, чтобы увидеть, как меняются образцы ниже.

Компоненты устроены как в shadcn, на примитивах Base UI, но внешний вид им задаёт собственный CSS сайта. Когда примитивы сменились, дизайн остался прежним пиксель в пиксель.

  • Фон--bg
  • Поверхность--card-2
  • Текст--fg
  • Приглушённый текст--fg-dim
  • Линия--line-strong
  • Акцент--accent

Качество

Lint Правила дизайн-системы
@shadcn/lint не пропускает значения вне шкалы и перестилизацию компонентов на страницах.
a11y Доступность по умолчанию
Видимый фокус клавиатуры, настоящая семантика ссылок и кнопок и анимация, которая отключается по вашему запросу.
i18n Три языка
Английский, украинский и русский, каждый по своему адресу, с hreflang-ссылками между ними.
SEO Создан, чтобы им делились
У каждого кейса своя карточка предпросмотра, теги Open Graph и X и структурированные данные.

Почему такой стек

Я начал это портфолио на Astro — очевидный выбор для статического сайта. Потом перешёл на Next.js, чтобы оно следовало моему собственному архитектурному гайду для Next.js, по которому я делаю настоящие продукты.

Сайту нужны только правила гайда о дизайн-системе и структуре, поэтому более тяжёлые части, вроде аутентификации и загрузки данных, остались за бортом. Осталось то, по чему оценивают фронтенд-инженера: компоненты, токены и детали.