Typegram — дзэн блог платформа
Привет, Хабр. Решил показать вам движок, который я потихоньку разрабатываю. Это блог платформа, по возможностям очень близкая к медиум и подобным проектам.
Базовые возможности:
Публикации, комментарии, избранное, подписки, уведомления, рейтинги, голосования.
Минималистичный, текстовый дизайн:
Игровая площадка
Есть игровая площадка, на которой можно потрогать платформу, без ущерба для мирных жителей: test site.
Локализация
Сервис автоматически разделяет пользователей по языку, направляя, русскоязычных пользователей на русский субдомен, а англоязычных — на английский. Те разделение по сути реализовано на уровне контента. Правда интерфейс доступен только английский. На каждом субдомене своя база данных и свои пользователи, регистрация не сквозная (на каждом субдомене своя экосистема, жизнь зародилась не везде, например).
Оптимизация
Для сервиса характерна очень агрессивная оптимизация. Все загружаемые изображения более 100 килобайт, жмутся методом Аткинсона в черно белые превью, с возможностью просмотра оригинала, например:
Не используются тяжеловесные скрипты и стили, а также внешние скрипты, следящие за поведением пользователей. Сайт остается быстрым и удобным на любой платформе в том числе с отключенным яваскрипт. В перспективе хочется достичь скорости загрузки телеграм-каналов.
Подписки
На главной странице отображется список авторов, на которых подписан пользователь, и количество новых публикаций для каждого автора. При нажатии на данную кнопку, открываются непрочитанные публикации, в хронологическом порядке, как в телеграм каналах:
Уведомления
Также на главной странице отображаются уведомления о упоминаниях в комментариях, с возможностью перехода:
Редактор
Редактор поддерживает как маркдаун, так и визуальное форматирование текста, с возможностью превью, разворачивания на весь экран и тп. Ведутся работы по обеспечению доступности сайта для слепых и слабовидящих пользователей.
Система рейтинга
На главной странице есть три секции с странными наименованиями:
top mid btm
Да, я люблю доту (мою собаку зовут Пудж, например). Думаю, что рейтинги это больше про игровые механики/мотивации чем нечто серьезно адекватное. Все статьи идут фармить рейтинг на мид) Как нафармят — попадут в топ. Если сольют мид — провалятся на дно. Заветная формула бережно украдена с ycombinator (новым статьям необходимо меньше голосов для попадания в топ, чем старым). Простите за такое вольное манипулирование такой святой для многих вещью как рейтинг. Впрочем рейтинга авторов, как такового, на данный момент нет. Только рейтинг статей.
Рейтинг статьи.
+ 5: 1 -
У каждого пользователя есть 10 голосов в сутки. Он может потратить их как на плюсы, так и на минусы. Как на одну статью все 10 голосов, так и распределить их как ему хочется.
Автор статьи видит как негативные, так и позитивные реакции, раздельно.
Рейтинг комментариев
Комментарии оцениваются только позитивно. Не знаю почему, не спрашивайте. Хотелось дать больше возможностей для сбора фидбека с разными механиками. За комментарий можно отдать лишь один голос. У каждого пользователя — 10 голосов на комментарии в сутки. Один комментарий — один голос. Вроде прозрачно, но это не точно. Возможно скоро это изменится.
Теги
Каждая статья может иметь глобальный тег. Пока только один (меня почему то пугают огромные облака тегов на все случаи жизни).
Открытость
Исходный код проекта открыт. На гитхабе доступна инструкция по сборке и разворачиванию собственной версии: github
Ограничения
Это не первый проект с UGC. К сожалению, примерно раз в неделю прилетают письма счастья от Роскомнадзора/ Хостинг провайдера. Поэтому я довольно нервно реагирую на детское порно и прочий нелегальный контент. Кнопка бан — появилось одной их первых( Почему то многие как то странно трактуют значение слова опенсурс. Ну и срабатывают ассоциации с телеграм/телеграф. Есть ограничения и другого рода — пользователи ограничены по частоте публикации комментариев и постов, есть лимиты на регистрации. Например, нельзя оставлять новые комментарии чаще чем раз в минуту. В комментарии или в посте должно быть более 10 символов. Этот пул ограничений появился не на пустом месте. Некоторых это буквально бесит. Но вот так вот(
Что внутри
Проект написан на golang, без внешних зависимостей. Сейчас хостится на обычном выделенном сервере, с медленным hdd и под высокой нагрузкой пока не был. Не хотелось бы забегать вперед и рассказывать, какая прекрасная база данных лежит в основе, так как сперва надо убедиться что она действительно прекрасна)
Отказ от ответственности
Многое еще не завершено. Многие вещи реализованы не так, как у всех. Над чем то я экспериментирую. Что то вам покажется неправильным. Но если проект показался вам интересным — попробуйте: github