Назад к портфолио
Frontend проекты

Личный сайт-портфолио (kirill-ai.tech)

Задача

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

Проблема

Большинство портфолио разработчиков — это список технологий и ссылки на GitHub. Они отвечают на вопрос «что умеет» но не отвечают на вопрос «как думает». Нужен был сайт, который сам по себе рассказывает историю.

💡

Инсайт

Личный сайт разработчика — это не резюме в браузере. Это продукт, который должен работать по тем же стандартам, по которым ты делаешь коммерческие проекты. Если у тебя медленный портфолио — зачем верить, что ты умеешь делать быстрые сайты?

Вклад

Полная разработка: архитектура, дизайн-система, блог, SEO, деплой, CI/CD

Результат

Lighthouse 95–100 по всем метрикам, Islands Architecture на Astro, автоматический деплой с smoke-тестами

Astro React TypeScript Tailwind CSS Framer Motion MDX Schema.org

Я несколько раз пересобирал этот сайт. Первая версия — на чистом React + Vite. Вторая — попытка добавить SSR. Третья, текущая — миграция на Astro. Каждый раз я понимал что-то новое не только про технологии, но про то, что такое хорошее портфолио.

Сейчас сайт — это не просто место, где лежат ссылки на проекты. Это рабочий аргумент в пользу того, как я подхожу к разработке.

Анализ: почему большинство портфолио не работают

Я изучил десятки портфолио разработчиков и выявил два полюса:

Полюс «просто»: список проектов с GitHub-ссылками, технологии в виде иконок, никакого нарратива. Технически возможно — но ничего не говорит о мышлении.

Полюс «сложно»: Three.js, WebGL, анимации на весь экран. Красиво, но грузится 10 секунд, и текст теряется за эффектами.

Мой вывод: лучшее портфолио — то, которое быстро загружается, честно рассказывает истории и само является примером правильной разработки. Все три критерия одновременно.

Решение: Astro Islands как архитектурный выбор

Переход с React SPA на Astro был ключевым решением. Islands Architecture означает: страница рендерится в статический HTML на сервере, а интерактивные компоненты (анимации, формы, переключатель темы) «гидрируются» только тогда и там, где они нужны.

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

Статичный HTML (Astro)
  ├── Текст, SEO, структура — нет JS
  ├── AnimatedSection (client:visible) — гидрируется при появлении в viewport
  ├── ParticleBackground (client:load) — гидрируется сразу
  └── ContactForm (client:load) — гидрируется сразу

Это позволило получить Lighthouse 95–100 без компромиссов по визуалу.

Дизайн-система

CSS-токены для всех визуальных параметров: цвета, отступы, радиусы, тени. Dark/light mode без «мигания» (flash of unstyled content) — тема определяется до первого рендера через script в <head>.

Компоненты эффектов — GlitchText, TypingAnimation, ParticleBackground, HolographicCard, MouseTrail — написаны как отдельные переиспользуемые модули с понятным API.

Блог на MDX

Технический блог — это не просто контент-маркетинг. Это способ показать, что я умею объяснять сложные вещи. MDX позволяет вставлять React-компоненты прямо в статьи — интерактивные примеры, живые демо, кастомные блоки.

Коллекция контента в Astro со строгой Zod-схемой: все поля типизированы, сборка падает если что-то не так.

SEO и структурированные данные

Person разметка на главной странице, CollectionPage для портфолио, Article для блога. Все канонические URL прописаны явно. sitemap.xml и robots.txt генерируются автоматически при сборке.

CI/CD с smoke-тестами

Bash-скрипт деплоя делает четыре вещи:

  1. Собирает проект (astro build)
  2. Загружает архив на VPS
  3. Очищает Nginx cache (инвалидация статики)
  4. Запускает smoke-тесты: проверяет HTTP 200, наличие корректного title на каждой странице

Если тест не прошёл — деплой считается неудачным. Это простое, но работающее QA-ограждение.

Результат

Lighthouse 95–100 по всем четырём метрикам: Performance, Accessibility, Best Practices, SEO. Время до первого байта — под 200ms.

Но главный результат не технический. Этот сайт — это ответ на вопрос «как ты подходишь к работе?» Он быстрый, потому что я считаю, что медленные сайты — это неуважение к пользователю. Он рассказывает истории, потому что список технологий без контекста не имеет ценности. Он сделан по тем же стандартам, по которым я делаю коммерческие проекты.

Так и должно быть.

Вернуться к списку проектов