OFFROAD38 - от WordPress к своей платформе
✎Домен: https://offroad38.ru
Назначение: платформа для offroad-маршрутов, выездов и сообщества.
Вводные
Изначально проект был на WordPress, но быстро уперлись в потолок:
- треки были обычными постами
- структура держалась на костылях (ACF)
- админка была перегруженной
- масштабируемость была практически нулевая
Решение: переписать проект с нуля.
Что сделали
- полностью отказались от WordPress
- разработали backend и frontend под задачу
- перенесли данные (маршруты, выезды, медиа)
- собрали минималистичную админку
- вывели систему в прод
Разработка, миграция и запуск выполнены через Codex.
Архитектура
Схема: архитектура OFFROAD38
Mobile/SPA (frontend)
|
| REST API
v
Node.js backend -----> Data (Track / Ride / Media)
Схема: модель данных (упрощённо)
Track 1 ---< Ride (event) >--- Participants
|
+---< Media (photos/videos/files)
Backend:
- Node.js
- REST API
Frontend:
- SPA (ориентир на mobile-first)
Данные:
- Track (маршрут)
- Ride (выезд)
- Media (фото, файлы)
Модель данных
Track:
- название
- описание
- регион
- сложность
- протяженность
- GPX
- стартовая точка
Ride:
- привязка к маршруту
- дата
- точка сбора
- статус
Админка
Сделано ровно то, что нужно:
- создание маршрутов
- загрузка GPX
- добавление фото
- создание выездов
- привязка выездов к маршрутам
Без лишнего:
- ролей
- лишних настроек
- перегруженности
Инфраструктура
Сервер:
- VPS (Debian)
Настроено:
- SSH только по ключу
- multiplex (одна сессия, много команд)
- отключена парольная аутентификация
- fail2ban и firewall
- systemd для сервиса
- nginx как reverse proxy
Что это дало
- нормальная структура данных
- быстрый сайт
- контроль над логикой
- возможность развивать продукт
Теперь это не блог, а система:
Маршруты -> Выезды -> Люди
Дальше
- карта маршрутов
- фильтры
- Telegram-интеграция
- развитие базы треков
Проект живой и будет развиваться.