-
▲4▼
Проанализировал Lobsters и W3A, вот что обнаружилось Помимо фич, важно понимать философию проекта, которая делает его уникальным: Закрытая…
Проанализировал Lobsters и W3A, вот что обнаружилось
Помимо фич, важно понимать философию проекта, которая делает его уникальным:
- Закрытая регистрация по приглашениям — нет случайных людей, выше качество
- Никакой рекламы и трекеров — уважение к приватности
- Минимум JavaScript — работает даже без JS (прогрессивное улучшение)
- Сообщество само себя модерирует — флаги, карма, прозрачность
- Качество важнее количества — лучше 10 хороших обсуждений, чем 1000 комментариев мусора
В w3a многие из этих принципов уже реализованы (карма, флаги, ванильный JS, модульность).
Вот чего нет
По соотношению польза / сложность реализации:
Фича Польза Сложность Рекомендация User Muting ⭐⭐⭐⭐⭐ Легко В первую очередь Story Hiding ⭐⭐⭐⭐ Легко В первую очередь Saved Stories ⭐⭐⭐⭐ Легко В первую очередь RSS Feeds ⭐⭐⭐⭐ Очень легко В первую очередь Duplicate Detection ⭐⭐⭐⭐⭐ Средне Стоит сделать Moderation Log ⭐⭐⭐⭐ Средне Стоит сделать Hats ⭐⭐⭐⭐⭐ Средне Если есть официальные пользователи Merge Stories ⭐⭐⭐⭐ Сложно Только если есть проблема дубликатов Keyboard Nav ⭐⭐⭐ Средне Для гиков-пользователей Edit History ⭐⭐⭐ Сложно Есть Suggestions — возможно, избыточно Социальные фичи
User Muting (Игнорирование пользователей)
Можно полностью скрыть комментарии определённых пользователей из своей ленты. Они не удаляются — просто не показываются вам.
Story Hiding (Скрытие историй)
Кнопка "скрыть" на каждой истории — она исчезает из вашей ленты, но остаётся на сайте. Отличается от удаления — это персональная настройка.
Зачем: "Не интересно, не хочу видеть" без жалоб и модерации.
Saved Stories (Закладки)
Возможность сохранить историю в личный список "почитать позже". Отдельная страница
/saved.Ещё при создание и редактирование постов странный редирект. Например, при создание логично отправлять в пост и при редактирование тоже.
-
▲4▼
Возможно так достал ИИ, что он посчитал, что лучше дифирамбы спеть. Взял и выдал: W3A — это образец того, как нужно писать современные…
Возможно так достал ИИ, что он посчитал, что лучше дифирамбы спеть. Взял и выдал:
W3A — это образец того, как нужно писать современные PHP-приложения без использования "тяжелых" фреймворков. Архитектура HMVC реализована грамотно, код безопасен, чист и использует лучшие практики PHP 8.1+. Проект полностью готов к продакшену и служит отличным примером для изучения того, как устроены фреймворки "под капотом".
А я только упрощать начал. )
-
▲3▼
Lobster (и его современные форки) — платформа для агрегации, обсуждения и хранения ссылок. Её сила — в живом сообществе и качестве контента. Но у…
Lobster (и его современные форки) — платформа для агрегации, обсуждения и хранения ссылок. Её сила — в живом сообществе и качестве контента. Но у любой агрегаторной системы есть ахиллесова пята: информация со временем устаревает. Ссылки бьются, заголовки теряют актуальность, теги не отражают суть, а авторы давно не заходят в аккаунт.
Раньше править мог только автор или администратор. Теперь — любой зарегистрированный пользователь. Модуль
Suggestionsзакрывает эту лакуну, превращая пассивных читателей в сокураторов платформы, сохраняя при этом контроль качества, прозрачность и защиту от вандализма.
🔄 Как это работает: поток предложения
-
Создание предложения
На странице истории пользователь нажимает «Предложить правку». Доступны поля: заголовок, URL, описание, теги. Данные проходят строгую валидацию до сохранения. -
Мгновенное применение (для модераторов)
Если предложение оставляет модератор или администратор — оно применяется немедленно. Правка фиксируется в логе, старые предложения к этому посту удаляются. -
Кворум сообщества
Для обычных пользователей работает правило трёх: три идентичных предложения автоматически применяются к посту. Система нормализует JSON (сортирует ключи и массивы), поэтому{title: "A", tags: [1,2]}и{tags: [2,1], title: "A"}считаются одним предложением. -
Ручная модерация
Модераторы видят очередь предложений в панели управления. Могут одобрить, отклонить с указанием причины или игнорировать. При любом действии в аудит-лог пишется запись: кто, что, когда и почему. -
Применение изменений
При одобрении или достижении кворума запускается транзакция:- Обновляются поля поста (
title,url,description) - Атомарно пересинхронизируются теги (
DELETE+INSERTвtaggings) - Удаляются все активные предложения к этому посту
- Диспатчится событие
ContentUpdated - Записывается лог в
content_logs/audit_logs
- Обновляются поля поста (
💡 Зачем это Lobster?
Проблема Решение через SuggestionsПосты «замораживаются» после ухода автора Сообщество поддерживает актуальность без бюрократии Модераторы тонут в рутинных правках Кворум фильтрует очевидные случаи, модераторы работают только со спорными Непрозрачные изменения Каждый правка логируется с указанием автора, причины и старых/новых значений Вандализм и спам-теги Лимиты предложений на пользователя, валидация тегов, проверка доменов, квоты Дублирование валидации Единые Validator-классы для всех точек входа (create, update, suggest)
🧩 Технический стек и решения
Модуль построен по принципу Service-Driven Architecture:
SuggestionController— только маршрутизация и работа с запросомSuggestionService— вся бизнес-логика, кворум, применение правок, логирование- Модели (
Suggestion,ContentLog,Story) — только CRUD и параметризованные SQL - Валидаторы — чистые классы без состояния, легко покрываются юнит-тестами
Особое внимание уделено безопасности PDO: исправлена ошибка с повторением именованных параметров в
INSERT ... VALUES (...), заменена на позиционные плейсхолдеры. Все транзакции явно коммитятся/откатываются, ошибки логируются без проброса внутренних деталей наружу.
🔮 Что дальше?
Модуль
Suggestions— фундамент для более сложных механизмов курирования:- Версионирование контента: возможность откатить правку к предыдущему состоянию
- Репутационная система: вес голоса пользователя зависит от истории успешных предложений
- Автоматические проверки: битые ссылки, дубликаты, NSFW-контент через внешние API
- API для ботов: Telegram/Matrix-интеграции для модерации без входа в админку
✅ Итог
Suggestionsв Lobster — это не просто «форма правки». Это инфраструктура коллективного курирования, которая превращает платформу из статичного архива в живой, самоочищающийся организм. Он балансирует между открытостью сообщества и контролем качества, используя прозрачные правила, транзакционную надёжность и событийную архитектуру.В экосистеме, где контент — это валюта, такой модуль становится не опцией, а необходимостью. И он уже работает.
-
-
▲3▼
На основе анализа обоих репозиториев, я составил таблицу того, что необходимо реализовать в w3a для достижения функционального паритета с…
На основе анализа обоих репозиториев, я составил таблицу того, что необходимо реализовать в w3a для достижения функционального паритета с Lobsters.
Функция Статус в w3a Статус в Lobsters Приоритет Stories, Comments, Votes ✅ Есть ✅ Есть — Tags, Taggings ✅ Есть ✅ Есть — Users, Auth ✅ Есть ✅ Есть — Messages ✅ Есть ✅ Есть — Notifications ✅ Есть ✅ Есть — HiddenStory, SavedStory ❌ Нет ✅ Есть 🔴 Высокий Tag Filters ❌ Нет ✅ Есть 🔴 Высокий Flags ❌ Нет ✅ Есть 🔴 Высокий ModMail ❌ Нет ✅ Есть 🔴 Высокий Moderations Log ❌ Нет ✅ Есть 🔴 Высокий Invitations ❌ Нет ✅ Есть 🔴 Высокий Hats ❌ Нет ✅ Есть 🟡 Средний Suggestions ❌ Нет ✅ Есть 🟡 Средний Categories ⚠️ Частично ✅ Есть 🟡 Средний Cabinet ❌ Нет ✅ Есть 🟡 Средний Domains ❌ Нет ✅ Есть 🟡 Средний StoryImage ❌ Нет ✅ Есть 🟢 Низкий ReadRibbon ❌ Нет ✅ Есть 🟢 Низкий Stats ❌ Нет ✅ Есть 🟢 Низкий MastodonApp ❌ Нет ✅ Есть 🟢 Низкий Lobsters оказался не таким простым сообществом, как думал )
-
▲5▼
W3A — это философия веб‑разработки, основанная на аскетичном подходе: отказе от избыточных абстракций, минимизации зависимостей и возврате к основам…
W3A — это философия веб‑разработки, основанная на аскетичном подходе: отказе от избыточных абстракций, минимизации зависимостей и возврате к основам веба.
Ключевая идея: «Веб должен быть простым, понятным и предсказуемым. Код — читаемым без документации, рендеринг — лёгким, архитектура — прозрачной».
Основные принципы W3A
-
Категорический отказ от «магических абстракций»
- Никаких фреймворков с неявным поведением.
- Отсутствие «чёрных ящиков»: разработчик всегда понимает, что происходит под капотом.
- Явное управление состоянием и рендерингом.
-
Минимализм кода
- Минимизация строк кода без потери функциональности.
- Отказ от избыточных библиотек и инструментов.
- Предпочтение нативным возможностям браузера.
-
Отсутствие тяжёлого фронтенд‑рендеринга
- Серверный рендеринг (SSR) или статическая генерация (SSG) вместо SPA.
- Минимальный JavaScript или его полное отсутствие там, где можно обойтись без него.
- Приоритет HTML и CSS для базовой функциональности.
-
Прозрачность и предсказуемость
- Код должен быть понятен разработчику любого уровня.
- Поведение элементов всегда очевидно.
- Отладка не требует специальных инструментов.
-
Высокая производительность «из коробки»
- Малый размер бандла (< 10 KB для типовых страниц).
- Быстрая загрузка даже на слабом соединении.
- Минимальное потребление памяти.
-
Доступность и инклюзивность
- Соответствие стандартам WCAG по умолчанию.
- Нативная доступность HTML‑элементов без дополнительных усилий.
- Поддержка скринридеров и клавиатурной навигации без настроек.
-
Долговечность и стабильность
- Использование стабильных, проверенных технологий.
- Отсутствие зависимости от быстро меняющихся трендов.
- Код остаётся рабочим годами без рефакторинга.
Практические правила W3A‑разработки
Что делать:
- Использовать чистый HTML, CSS и минимальный JavaScript.
- Применять семантическую разметку.
- Оптимизировать изображения и медиа.
- Кэшировать статические ресурсы.
- Писать понятный, самодокументирующийся код.
Сравнение с традиционными подходами
Критерий Традиционный подход W3A Размер бандла 1–5 MB < 50 KB Время загрузки 2–10 с < 1 с Зависимости 50+ пакетов 0–2 пакета Сложность отладки Требует инструментов Достаточно DevTools Доступность Часто требует доработки Встроена по умолчанию Обучение Долгий старт Быстрое освоение Позиционирование:
W3A (World Wide Web Ascetic) — философия веб‑разработки для тех, кто ценит простоту, производительность и прозрачность. Мы отказываемся от избыточных абстракций в пользу чистого HTML, лёгкого CSS и осознанного использования JavaScript. Наш веб — быстрый, доступный и долговечный.
-