Недавно мне пришла в голову возродить свой старый каталог source-портов и графических модификаций для старых игр. Новая версия должна была стать максимально опенсорсной и открытой, чтобы любой пользователь мог править как содержание сайта, так и его код, а мне бы оставалось заниматься только премодерацией изменений. Если вам интересно, что из этого вышло, как я создал самому себе проблемы и как потом их решал — добро пожаловать под кат.
Краткое ТЗ на сайт
- На сайт будет выкладываться информация о модификациях для игр (фанатские патчи, наборы текстур, source-порты и т.д.), улучшающие графику, упрощающие какие-то аспекты управления, а также переносящие её на другую операционную систему или платформу. Пример подобных модов — добавление в Dune 2 рамочки для выбора юнитов или текстур высокого разрешения для Doom
- На сайте будет только информация, но не сами файлы модификаций и портов. На старой версии сайта я старался поддерживать и заливать к себе свежие копии файлов, и времени это жрало порядочно
- Сайт должен быть удобно использовать как с десктопа, так и с планшета или телефона
- Любой пользователь должен иметь возможность добавить на сайт игру, модификацию и так далее, а также отредактировать любую информацию, уже добавленную на сайт
- Любой пользователь должен иметь возможность редактировать код и вёрстку сайта
- У владельца сайта должна быть возможность премодерации любых изменений
- Должна быть возможность добавлять дополнительных модераторов
- Должны быть кнопки для шаринга в социальные сети
Решение
А давайте разместим все данные на гитхабе, и по этим данным будем генерировать статический сайт? Сплошные плюсы же!
- GitHub уже предоставляет веб-интерфейс для изменения или добавления файлов и отправки изменений в виде pull request
- Pull Request — отличная система премодерации изменений и просмотра диффов
- Нужны новые модераторы? Добавляем в проект на гитхабе пользователей, не нужно думать над системой прав
- Статический сайт можно разместить на абсолютно любом хостинге, включая GitHub Pages
- Всякие активности типа комментариев, шаринга или блока «случайная модификация» можно реализовать на клиенте с помощью JS и готовых решений типа Disqus
- Для простоты и скорости вёрстки используем Bootstrap
Тем более, что я давненько хотел поупражняться в написании генерации статического сайта на Java. Решено! В одном репозитории храним данные, во втором — генератор статического сайта. Поеха… Хотя нет, стоп, сначала нужно принять ещё одно решение.
В каком формате хранить информацию?
Хранить описания игры или модификации в файлах формата «JSON/XML/впишите свой вариант» — идея вроде и замечательная, но у нас же в требованиях стоит “… любой пользователь...”, а какой-нибудь JSON может и напугать. Ну ладно, фигня вопрос — давайте хранить данные в пачке текстовых или Markdown-файлов. Один файл — одна сущность, у MD-файлов на github есть превью — лепота! А чтобы ещё упростить ситуацию, подробно распишем в документации, что за что отвечает. Часть этой информации:
И что я хочу сказать — редактировать уже имеющуюся информацию в таком режиме действительно довольно удобно. Но есть один нюанс...
Добавление новой информации
Редактировать данные оказалось удобно, а вот заводить новую модификацию — не очень, потому что было необходимо за один раз создать от 4 до 14 файлов. И делать это с помощью интерфейса гитхаба чертовски неудобно. Первой мыслью было накидать многошаговые инструкции, описывающие добавление новой информации от и до.
Увы, вердикт пользователей сайта был однозначен: неудобно! А если пользователям неудобно на сайте, который должен жить за счёт пользовательской активности… сами понимаете, проекту кирдык.
PHP спешит на помощь
Ну что поделать, решение было в общем то очевидным: написать формочки для заведения новой информации путём создания пулл-реквеста со всеми необходимыми файлами, а также для загрузки скриншотов к уже существующим описаниям. По старой памяти, из-за желания запустить проект поскорее, а так же из-за того, что PHP уже был на хостинге — для этих формочек был использован PHP.
Взлетело?
После добавления удобных формочек процесс пошёл: первые недели после размещения информации о сайта в своём видеоблоге и на сайте Old-Games.RU новые моды и порты добавляли с такой скоростью, что я просто не успевал заниматься премодерацией!
Кроме добавления информации мне было скинуто и некоторое число замечаний и пожеланий по интерфейсу и функциональности, часть из которых я уже реализовал, а часть всё ещё ждёт своего часа.
Одной из частых претензий стал внешний вид сайта — и это понятно, ведь я задействовал дефолтную тему Bootstrap 4 с мыслью «это же временно, потом натяну красивый скин». Шутку про "нет ничего более постоянного, чем временное" даже воспроизводить не хочется.
Потом активность конечно пошла на спад, но какое-то количество активных пользователей на сайте всё ещё есть и сайт продолжает наполнять информацией. На момент старта в середине февраля на сайте было 227 модов к 86 играм, а на момент этой публикации — 323 мода к 130 играм.
И зачем ты это сюда написал?
Во-первых, рассказать очередную историю с очевидной моралью «интерфейс удобный и приятный программисту совсем не обязательно будет удобен пользователю сайта». Не смотря на банальность тезиса — его стоит периодически напоминать.
А во-вторых — позвать любителей покопаться в коде или порисовать и поверстать интерфейсы. Может быть быть вас заинтересует тематика сайта и вы захотите немного помочь в его развитии ;-)
Если вам это интересно, то весь исходный код сайта живёт на гитхабе.
P.S. Видеоэкскурсия по сайту
Комментарии (5)
liss8608
14.05.2019 09:31Дмитрий, ты как всегда молодец. Может стоит после переговоров с OG.RU ввести перекрестные ссылки? Например на ОГ я нахожу дум, и в закладке «Файлы» вижу — модификации, тыкаю и перехожу на страницу revival посвященной думу. Ну и собсно наоборот. Думаю выгодно будет всем.
Newbilius Автор
15.05.2019 10:45А там такое даже есть, блок "Модификации для этой игры" внизу описания игры на Old-Games ведёт именно на GR ;-)
na9ort
Крутота! Как раз в поисках опенсорсного проекта: хочется попробовать свои силы в чём то серьёзном, но чтобы не ынтырпрайз. Вы же не будете против?)
Newbilius Автор
Я только за ;-)