Новая жизнь старых игр: максимально опенсорсный каталог source-портов (Java + PHP)

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

9npscfnk_grnq5eizd29emiqq_q.png


Краткое ТЗ на сайт


  • На сайт будет выкладываться информация о модификациях для игр (фанатские патчи, наборы текстур, source-порты и т.д.), улучшающие графику, упрощающие какие-то аспекты управления, а также переносящие её на другую операционную систему или платформу. Пример подобных модов — добавление в Dune 2 рамочки для выбора юнитов или текстур высокого разрешения для Doom
  • На сайте будет только информация, но не сами файлы модификаций и портов. На старой версии сайта я старался поддерживать и заливать к себе свежие копии файлов, и времени это жрало порядочно
  • Сайт должен быть удобно использовать как с десктопа, так и с планшета или телефона
  • Любой пользователь должен иметь возможность добавить на сайт игру, модификацию и так далее, а также отредактировать любую информацию, уже добавленную на сайт
  • Любой пользователь должен иметь возможность редактировать код и вёрстку сайта
  • У владельца сайта должна быть возможность премодерации любых изменений
  • Должна быть возможность добавлять дополнительных модераторов
  • Должны быть кнопки для шаринга в социальные сети


Решение

А давайте разместим все данные на гитхабе, и по этим данным будем генерировать статический сайт? Сплошные плюсы же!


  • GitHub уже предоставляет веб-интерфейс для изменения или добавления файлов и отправки изменений в виде pull request
  • Pull Request — отличная система премодерации изменений и просмотра диффов
  • Нужны новые модераторы? Добавляем в проект на гитхабе пользователей, не нужно думать над системой прав
  • Статический сайт можно разместить на абсолютно любом хостинге, включая GitHub Pages
  • Всякие активности типа комментариев, шаринга или блока «случайная модификация» можно реализовать на клиенте с помощью JS и готовых решений типа Disqus
  • Для простоты и скорости вёрстки используем Bootstrap

Тем более, что я давненько хотел поупражняться в написании генерации статического сайта на Java. Решено! В одном репозитории храним данные, во втором — генератор статического сайта. Поеха… Хотя нет, стоп, сначала нужно принять ещё одно решение.


В каком формате хранить информацию?

Хранить описания игры или модификации в файлах формата «JSON/XML/впишите свой вариант» — идея вроде и замечательная, но у нас же в требованиях стоит »… любой пользователь…», а какой-нибудь JSON может и напугать. Ну ладно, фигня вопрос — давайте хранить данные в пачке текстовых или Markdown-файлов. Один файл — одна сущность, у MD-файлов на github есть превью — лепота! А чтобы ещё упростить ситуацию, подробно распишем в документации, что за что отвечает. Часть этой информации:

l4gifup8qfn8mpfzdtsufuwl0cq.png

И что я хочу сказать — редактировать уже имеющуюся информацию в таком режиме действительно довольно удобно. Но есть один нюанс…


Добавление новой информации

Редактировать данные оказалось удобно, а вот заводить новую модификацию — не очень, потому что было необходимо за один раз создать от 4 до 14 файлов. И делать это с помощью интерфейса гитхаба чертовски неудобно. Первой мыслью было накидать многошаговые инструкции, описывающие добавление новой информации от и до.

-u_mvholugnjnvpedtdv1toxedq.png

Увы, вердикт пользователей сайта был однозначен: неудобно! А если пользователям неудобно на сайте, который должен жить за счёт пользовательской активности… сами понимаете, проекту кирдык.


PHP спешит на помощь

Ну что поделать, решение было в общем то очевидным: написать формочки для заведения новой информации путём создания пулл-реквеста со всеми необходимыми файлами, а также для загрузки скриншотов к уже существующим описаниям. По старой памяти, из-за желания запустить проект поскорее, а так же из-за того, что PHP уже был на хостинге — для этих формочек был использован PHP.

m-xrebzknb_frlox3epdtc9hrec.png


Взлетело?

После добавления удобных формочек процесс пошёл: первые недели после размещения информации о сайта в своём видеоблоге и на сайте Old-Games.RU новые моды и порты добавляли с такой скоростью, что я просто не успевал заниматься премодерацией!

vfjqejn_6rxy9hbzcnsqhac0g1s.png

Кроме добавления информации мне было скинуто и некоторое число замечаний и пожеланий по интерфейсу и функциональности, часть из которых я уже реализовал, а часть всё ещё ждёт своего часа.

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

Потом активность конечно пошла на спад, но какое-то количество активных пользователей на сайте всё ещё есть и сайт продолжает наполнять информацией. На момент старта в середине февраля на сайте было 227 модов к 86 играм, а на момент этой публикации — 323 мода к 130 играм.


И зачем ты это сюда написал?

Во-первых, рассказать очередную историю с очевидной моралью «интерфейс удобный и приятный программисту совсем не обязательно будет удобен пользователю сайта». Не смотря на банальность тезиса — его стоит периодически напоминать.

А во-вторых — позвать любителей покопаться в коде или порисовать и поверстать интерфейсы. Может быть быть вас заинтересует тематика сайта и вы захотите немного помочь в его развитии ;-)

Если вам это интересно, то весь исходный код сайта живёт на гитхабе.


P.S. Видеоэкскурсия по сайту


© Habrahabr.ru