Привет, Хабр. Решил показать вам движок, который я потихоньку разрабатываю. Это блог платформа, по возможностям очень близкая к медиум и подобным проектам.
Базовые возможности:
Публикации, комментарии, избранное, подписки, уведомления, рейтинги, голосования.
Минималистичный, текстовый дизайн:
Игровая площадка
Есть игровая площадка, на которой можно потрогать платформу, без ущерба для мирных жителей: test site.
Локализация
Сервис автоматически разделяет пользователей по языку, направляя, русскоязычных пользователей на русский субдомен, а англоязычных — на английский. Те разделение по сути реализовано на уровне контента. Правда интерфейс доступен только английский. На каждом субдомене своя база данных и свои пользователи, регистрация не сквозная (на каждом субдомене своя экосистема, жизнь зародилась не везде, например).
Оптимизация
Для сервиса характерна очень агрессивная оптимизация. Все загружаемые изображения более 100 килобайт, жмутся методом Аткинсона в черно белые превью, с возможностью просмотра оригинала, например:
Не используются тяжеловесные скрипты и стили, а также внешние скрипты, следящие за поведением пользователей. Сайт остается быстрым и удобным на любой платформе в том числе с отключенным яваскрипт. В перспективе хочется достичь скорости загрузки телеграм-каналов.
Подписки
На главной странице отображется список авторов, на которых подписан пользователь, и количество новых публикаций для каждого автора. При нажатии на данную кнопку, открываются непрочитанные публикации, в хронологическом порядке, как в телеграм каналах:
Уведомления
Также на главной странице отображаются уведомления о упоминаниях в комментариях, с возможностью перехода:
Редактор
Редактор поддерживает как маркдаун, так и визуальное форматирование текста, с возможностью превью, разворачивания на весь экран и тп. Ведутся работы по обеспечению доступности сайта для слепых и слабовидящих пользователей.
Система рейтинга
На главной странице есть три секции с странными наименованиями:
top mid btm
Да, я люблю доту (мою собаку зовут Пудж, например). Думаю, что рейтинги это больше про игровые механики/мотивации чем нечто серьезно адекватное. Все статьи идут фармить рейтинг на мид) Как нафармят — попадут в топ. Если сольют мид — провалятся на дно. Заветная формула бережно украдена с ycombinator (новым статьям необходимо меньше голосов для попадания в топ, чем старым). Простите за такое вольное манипулирование такой святой для многих вещью как рейтинг. Впрочем рейтинга авторов, как такового, на данный момент нет. Только рейтинг статей.
Рейтинг статьи.
+ 5: 1 -
У каждого пользователя есть 10 голосов в сутки. Он может потратить их как на плюсы, так и на минусы. Как на одну статью все 10 голосов, так и распределить их как ему хочется.
Автор статьи видит как негативные, так и позитивные реакции, раздельно.
Рейтинг комментариев
Комментарии оцениваются только позитивно. Не знаю почему, не спрашивайте. Хотелось дать больше возможностей для сбора фидбека с разными механиками. За комментарий можно отдать лишь один голос. У каждого пользователя — 10 голосов на комментарии в сутки. Один комментарий — один голос. Вроде прозрачно, но это не точно. Возможно скоро это изменится.
Теги
Каждая статья может иметь глобальный тег. Пока только один (меня почему то пугают огромные облака тегов на все случаи жизни).
Открытость
Исходный код проекта открыт. На гитхабе доступна инструкция по сборке и разворачиванию собственной версии: github
Ограничения
Это не первый проект с UGC. К сожалению, примерно раз в неделю прилетают письма счастья от Роскомнадзора/ Хостинг провайдера. Поэтому я довольно нервно реагирую на детское порно и прочий нелегальный контент. Кнопка бан — появилось одной их первых( Почему то многие как то странно трактуют значение слова опенсурс. Ну и срабатывают ассоциации с телеграм/телеграф. Есть ограничения и другого рода — пользователи ограничены по частоте публикации комментариев и постов, есть лимиты на регистрации. Например, нельзя оставлять новые комментарии чаще чем раз в минуту. В комментарии или в посте должно быть более 10 символов. Этот пул ограничений появился не на пустом месте. Некоторых это буквально бесит. Но вот так вот(
Что внутри
Проект написан на golang, без внешних зависимостей. Сейчас хостится на обычном выделенном сервере, с медленным hdd и под высокой нагрузкой пока не был. Не хотелось бы забегать вперед и рассказывать, какая прекрасная база данных лежит в основе, так как сперва надо убедиться что она действительно прекрасна)
Отказ от ответственности
Многое еще не завершено. Многие вещи реализованы не так, как у всех. Над чем то я экспериментирую. Что то вам покажется неправильным. Но если проект показался вам интересным — попробуйте: github
Комментарии (51)
CuamckuyKot
14.08.2018 01:15Спасибо за труды!
Открыл для себя awsm.css, пока просматривал репозиторий.
houk
14.08.2018 08:38Все что основано на принципе ничего лишнего, сам придерживаюсь и поддерживаю. Взял в закладки и плюсую
recompileme Автор
14.08.2018 09:04Спасибо! Интерфейс эволюционировал как то так:
habrastorage.org/webt/6j/po/zk/6jpozk_jqjx2dhm-3ss_-l7fcp0.png
habrastorage.org/webt/ec/uo/fy/ecuofypg9b4nr5rn3tefwntooau.jpeg
habrastorage.org/webt/to/gg/jv/toggjvv8bzfspvndjtkugi8bhbg.jpeg
habrastorage.org/webt/9_/ln/pq/9_lnpqs89tcnxygx_nmgd4vxbhw.png
muon
14.08.2018 08:43+1Хороший стиль, крутые превью. Вряд ли для этого нужен целый отдельный движок, но всё равно лайк.
recompileme Автор
14.08.2018 09:49Если честно писал то я бэкенд для мобильного приложения. Потом решил добавить админку и немного увлёкся
ClearAirTurbulence
14.08.2018 10:40Выглядит здорово. Рейтинг интересно устроен, идея со «счетом» +:- замечательная — сразу видно controversial комментарии.
Но рейтинг авторов все же скорее нужен. Тут периодически делались разные предложения об оптимизации кармы, например, о «плате» своим рейтингом за минус другому автору.JC_IIB
14.08.2018 11:12идея со «счетом» +:- замечательная
Так оно и на Хабре есть, достаточно навести мышь на цифру рейтинга комментария.
apapacy
14.08.2018 10:43Расскажите пожалуйста как Вы работаете с данными. Я тут как раз начал пилить go и обнаружил что orm к реляционным базам весьма неудобные и самая продвинутая из них gorm ногтей считают не самым удачным решением.
recompileme Автор
14.08.2018 10:57Из гоу я работал с mysql (напрямую, было очень много проблем, особенно на старте) и с boltdb (проблем на старте не было совсем, но они пришли с ростом базы), свой опыт поверхностно излагал в этом комментарии: habr.com/post/354224/#comment_10775784
Потом написал свою бд и собственно проблемы закончились, обзор на хабре — habr.com/post/354224
smallreg
14.08.2018 11:35Вопрос про баны, размер комментареим и бд:
А нельзя ли сделать так, чтобы каждый был сам себе модератор? не нравится чей-от комментарий — нажимаешь «убрать пользователя с глаз моих». И всё — никаких его комментариев не видишь. Дальше можно развивать «баны моего друга — это мои баны, баны друга друга — мои баны» ну и далее, с огоньком, задором и фантазией.recompileme Автор
14.08.2018 11:44пока думаю над этим, тут много морально этических сторон — к примеру я забанил и удалил одного пользователя с постом типа «абрвалг — какого хрена тут нельзя постить тексты без текстов?» — так он до сих пор за мной по всем соцсетям бегает, минусует.
Есть некоторые безумные идеи сложно реализуемые технически. Типа автор может иметь возможность удалить комментарий к своему посту, так как пост как бы его — но чтобы человек чей комментарий удален — не знал об этом. Или кнопка развидеть все от определенного человека, если достал. Пока в бэкграунде вызревают какие то идеи, и про карму и про модерацию — но еще не вызрелиLeopotam
14.08.2018 11:52Не настолько она и безумна, раз применяется на крупных ресурсах.
recompileme Автор
14.08.2018 12:02делал такую кнопку в админском интерфейсе для чата сапорта магазина как то давно, помогало от флуда типа девушка-девушка и тп, но тут и проект с открытым кодом и интерфейс единый.
rkfg
14.08.2018 16:39Это называется Web of Trust. Например, реализовано в расчёте доверия ключам GnuPG и в системе FMS у Freenet. Там можно ставить плюсы-минусы как непосредственно участникам, так и их «листам доверия». Соответственно, его рейтинги для участников взвешиваются относительно проставленного ему вами рейтинга листа (т.е. чем выше вы оцениваете его лист, тем больше он имеет влияния на оценку других пользователей), и всё это распространяется дальше по оценкам листов до какого-то предела. В итоге, позволяет рассчитывать коллективную карму для неизвестных (напрямую) участников через тех, кому и чьему мнению вы доверяете, ну и если карма ниже нуля, то сообщения скрываются по умолчанию.
Получается такая коллаборативная фильтрация для любого контента, где каждый видит то, что он хочет видеть, но нет глобального модератора.
sw0rl0k
14.08.2018 12:33Почему основной контент 640px по ширине? Ровно треть от разрешения fullhd монитора. Мне вот правда интересно, как принимаются такие решения)) Я понимаю крупные компании, где дизайнеры стараются сделать в первую очередь красиво, а потом удобно(привет, вконткте). Но вот чем руководствовались лично Вы?
recompileme Автор
14.08.2018 12:35отсутствием fullhd монитора)
SergeiMinaev
14.08.2018 16:14В дев тулзах браузера есть возможность выставлять размер окна, превышающий разрешение монитора. В хроме удобнее всего сделано, т.к. там все скалируется и можно видеть страницу целиком.
jimmyjonezz
14.08.2018 13:26Почему все сравнивают его с Хабром, по мне так это наподобие жуйка или поинта…
InterceptorTSK
14.08.2018 17:46-1Переименовывайтесь срочно. Хотя, конечно же это ваше дело.
Но никак не дело называться «тупеграм») И да, по статистике: как пишется — так и будут читать, т.е. именно «тупеграм». И еще. Когда подбираете имя, то крайне поинтересуйтесь заранее, что оно значит на хотя бы 10-и самых распространенных языках мира. Совсем экзотика — это проведение исследований на например тему: «с чем ассоциируется 'typegram' у испанцев».
И да, это должно стать абсолютной нормой, привыкайте) Глобализация же. Вас будут смотреть «всякие бразильцы» и прочие. Вы живете в такое время, что любое «имя собственное» сразу же должно быть международным.recompileme Автор
14.08.2018 18:04если инстаграм люлей не наваляет — то останется как есть, если наедет — придется переименовываться
To4KaXD
14.08.2018 17:53Будет ли проект дальше развиваться?
recompileme Автор
14.08.2018 18:02будет
kryatov
14.08.2018 18:22Если я правильно понял, то это что-то между Яндекс.Дзеном и Telegra.ph, так ведь?
recompileme Автор
14.08.2018 18:32довольно много идей украдено у медиум, телеграм и телеграф
немношко украдено с хакерньюс, немношко с реддит
Из дзена не нашлось что украсть. Не то чтобы проект плохой, даже вел там канал какое то время. Но мне не нравится в нем ничего, кроме самой идеи автоматических рекомендаций. Но даже она реализована крайне посредственно.kryatov
14.08.2018 18:42+1Ну, это не кража: много гениальных открытий в наше время делается из более простых составных) Не забрасывайте проект ни в коем случае. Успехов вам!
stratosmi
14.08.2018 18:40Это блог платформа, по возможностям очень близкая к медиум и подобным проектам.
А в чем оригинальность?recompileme Автор
14.08.2018 18:49много переосмыслено
— разделение контента по языкам
— подписки на каналы
— главная страница как пульт управления порталом а не поляна для рекламодателей /лендинг
— раздельный рейтинг
— динамический топ статей с пенальти по времени
— отсутствие внешних зависимостей
— минимальное использование скриптов
— оригинальный алгоритм сжатия картинок вместо ленивой загрузки
— минималистичный интерфейс
— отсутствие привязки к почте, возможность создания юзернейма из одной буквы, оригинальный алгоритм паджинации, чтение статей в хронологическом порядке, я могу продолжать бесконечно, но смысл? Все вебстраницы в чем то похожи друг на друга.
partizan205
14.08.2018 20:05Извините за идиотский вопрос, но то, что сайт работает на протоколе http, а не https — это всё из за того, что проект новый?
recompileme Автор
14.08.2018 20:08да, картинки пока не переехали на https и автообновление сертификатов не настроено
ImKremen
14.08.2018 21:19У вас что-то не так со шрифтами заголовков (те которые PT Sans Caption), они жутко мыльные:
ПримерImKremen
14.08.2018 21:27+1Нашел, у вас начертание только одно.
Нужно как-то такhttps://fonts.googleapis.com/css?family=PT+Sans+Caption:400,700|PT+Sans:400,400i,700,700i&subset=cyrillic"
Griboks
Прикольная штука, особенно про доту)) Конечно, некоторые раки скажут, что это костыльный велосипед с дырами в безопасности, производительности и поддержке, и они будут правы. Но это интересно и познавательно исправлять фатальный недостаток. Если бы в вашем проекте появилась какая-нибудь изюминка, я бы сам с удовольствием инвайтнулся в пати.
recompileme Автор
Велосипедов и правда много, а вот есть ли в нем фатальный недостаток — пока непонятно.
Griboks
Конечно же есть.