Сайт-портфолио, который цепляет заказчика за первые 2 секунды и сам доводит заявку до Telegram. Задача — сделать собственную веб-визитку разработчика, которая презентует услуги «глазами заказчика», собирает заявки с формы и мгновенно доставляет их владельцу в Telegram с двусторонней перепиской, проходит ATS-фильтры для рекрутеров и ранжируется в поиске по коммерческим запросам. Отдельное требование — владелец должен править весь контент сам, без разработчика.
Разработал full-stack приложение на Node.js (Express, ESM) с server-side rendering — без фронтенд-фреймворка, клиент на vanilla JS с прогрессивным улучшением. Публичная часть: Hero с AI-орбом, 8 карточек услуг с модалками, витрина production-проектов с галереями и лайтбоксом, ATS-корректное резюме с печатью в PDF, таймлайн, блог на Markdown. CMS-админка под паролем (scrypt, express-session) — правка всего контента через типизированные поля, форумный редактор статей, управление входящими заявками со статусами. Telegram-бот (telegraf): заявки с формы уходят админу, двусторонняя переписка, инлайн-кнопки статусов, deep-link связывает веб-заявку с чатом, ежедневная сводка. Многоуровневый анти-спам: honeypot, тайминг сабмита, скоринг контента, rate-limit 5/мин на IP. SEO: JSON-LD @graph (Person/WebSite/ProfessionalService), Open Graph, sitemap/robots под домен, Яндекс.Метрика и Вебмастер, 6 отдельных SEO-посадочных /uslugi/* под коммерческие кластеры запросов. Данные — в JSON-файлах с атомарной записью; изображения оптимизируются через headless Chromium (Playwright). Деплой на Windows Server: NSSM-сервис за IIS reverse-proxy, TLS Let's Encrypt.
Сайт в проде на sonix-it.ru (HTTPS, редиректы www→apex и HTTP→HTTPS, авто-продление сертификата). Работают все секции, 6 SEO-посадочных + хаб, CMS-админка, форма заявок и Telegram-бот. Валидация через Playwright: 0 ошибок консоли, сквозной путь «заявка с формы → доставка в Telegram → смена статуса → уведомление заявителю» подтверждён на боевом сервере. JSON-LD из 4 сущностей провалидирован, профиль обогащён 29 навыками, резюме приведено к ATS-корректному виду.