- Статус работы
- Реализованный проект
- Задача
- Создать управляемый сайт компании с отдельным контентом, поисковой структурой и рабочим процессом приёма заявок.
- Результат и границы
- Сайт размещён на VPS с HTTPS. Заявки сначала сохраняются в базе, затем доставляются в Telegram; тексты и изображения можно обновлять отдельно от шаблонов страниц.
Как устроен процесс
- Найти нужный раздел
Перейти от услуги к объяснению процесса или примеру.
- Заполнить форму
Указать контакт и подтвердить согласие.
- Сохранить заявку
Проверить данные на сервере и записать их в SQLite.
- Доставить уведомление
Передать заявку в согласованную тему Telegram-группы.
- Next.js
- TypeScript
- MDX / JSON
- SQLite
- Telegram
- Docker / Caddy
Сайт как рабочий инструмент компании
Switch On AI создавался как собственный сайт услуг автоматизации. Нужно было объяснить направления работы, подготовить структуру для развития контента и сделать понятный способ обращения. Поэтому задача не ограничивалась первым экраном и кнопкой контакта.
Проект объединяет страницы услуг, справочные материалы, кейсы и документы. Общий интерфейс собирается из переиспользуемых компонентов, чтобы новые разделы не выглядели отдельными сайтами.
Контент отделён от интерфейса
Тексты и данные находятся в MDX и JSON. Компоненты отвечают за представление, навигацию и поведение элементов. Такой подход позволяет редактировать содержание без поиска фраз внутри программной логики.
Для адресов действуют общие правила: латиница, нижний регистр и дефисы. У каждой страницы есть заголовок, описание для поиска и указание основного адреса — canonical. Структурированные данные строятся из того же содержания, которое видит посетитель: например, ответы FAQ не поддерживаются отдельной скрытой копией.
Основное содержание подготавливается статически. Динамический обработчик используется там, где он нужен по смыслу, — при приёме заявки. Это позволяет развивать страницы независимо от механизма уведомлений.
Заявка сначала сохраняется
В форме посетитель указывает имя и удобный контакт. Описание задачи необязательно. Перед отправкой требуется отдельное согласие, связанное с документами сайта. Проверка выполняется не только в браузере, но и в серверном обработчике.
После проверки заявка и сведения о согласии сохраняются в SQLite на VPS. Уведомление доставляется в согласованную тему закрытой Telegram-группы отдельным процессом. База отделена от исходного кода и сборочного образа.
Такой порядок важен при временной ошибке Telegram: сохранённая заявка не должна зависеть только от успешности одного внешнего запроса. Статус доставки можно разбирать отдельно от факта приёма формы.
Проверка обычного и ошибочного пути
Посетитель может отправить заявку без подробного описания, но не без контакта и согласия. При ошибке он получает понятное сообщение и сохраняет возможность исправить данные. Контактные действия в шапке остаются альтернативой форме.
Отдельно проверяется повторное действие и отказ внешнего канала уведомлений. Успех интерфейса должен соответствовать фактическому сохранению заявки, а не просто нажатию кнопки. Секреты бота не попадают в браузер и публичный контент.
Что получилось
Сайт Switch On AI размещён на VPS и работает по HTTPS. Настроены страницы, приём заявок, база и доставка уведомлений. Новые материалы используют общий шаблон и проходят проверки перед размещением.
Согласие проверяется на сервере. Аналитика загружается только после отдельного выбора посетителя; данные формы отделены от статистики посещений.
Границы решения
Развитие сайта продолжается после запуска: материалы нужно дополнять, обращения — обрабатывать, а техническое состояние — проверять. Для оценки поискового результата отдельно отслеживаются индексация, посещения и заявки.
Подготовка запросов разобрана в семантической карте, а наблюдение за сайтом — в SEO-мониторинге.
Вопросы по этой задаче
Можно менять тексты без редактирования компонентов?
Да. Содержание проекта хранится в MDX и JSON отдельно от интерфейсной логики. Изменения всё равно проходят проверку и сборку.
Заявка существует только как сообщение в Telegram?
Нет. Сначала она сохраняется в SQLite на VPS, затем отдельный процесс доставляет уведомление. Хранение и доставка разделены.

