Тема: Social Engine - GitHub (Движок DCMS-Social/Предложения и пожелания) MarkPrior (31 Jul 2026 в 17:00) [url=https://imgur.com/a/ZdoYtzB]Первая галерея скриншотов[/url] с уже имеющейся наработкой, подробно расписанной на [url=https://github.com/markolockwood/my-social-engine]GitHub[/url]. Всё работает моментально без перезагрузок страниц благодаря React. С самого начала сразу реализована мультиязычность и цветовая схема (светлая/тёмная), чтобы не мучаться в будущем. Дизайн полностью адаптивный. ---- Если у кого-то будут вопросы или пожелания по реализации чего-то в будущем (чаты, форум, блоги, раздел для видео с котятами, сторис и т.п.) - можете писать. MarkPrior (1 Aug 2026 в 17:16) 01.08 update - [url=https://imgur.com/a/d45Qde4]Галерея скриншотов[/url] - [url=https://github.com/markolockwood/my-social-engine/blob/main/CHANGELOG.md]Подробный Changelog[/url] В [url=https://github.com/markolockwood/my-social-engine/tree/main]репозитории[/url] создан раздел [url=https://github.com/markolockwood/my-social-engine/tree/main/docs]/docs/[/url], куда перенесена часть информации из readme.md, которая будет каждое обновление пополняться: сейчас там информация об api endpoints и архитектуре постов. Основное: - Убраны таблицы comments и retweets и код, связанный с ними: обновлён database/schema.sql. - Рефакторинг архитектуры API: Переход от монолитного api/index.php к модульной структуре с контроллерами. - Все контроллеры изолированы и могут тестироваться независимо. - Подготовлена структура для будущего расширения функционала (блоги, музыка и т.п.). ----- - Прикрепление изображений к постам: пользователи могут добавлять до 4 изображений к посту. - Реализовано с превью изображений. - Адаптивная сетка отображения: изображения отображаются в оптимальной сетке в зависимости от количества (1-4). - Изображения просматриваются в модальном окне с листингом. ----- - Быстрые ответы (при нажатии на иконку комментария) теперь работают из любой части: лента постов, детальный просмотр поста, просмотр фото к посту. - Реализовано с модальным окном; быстрый ответ считается полноценным постом, а не комментарием. ----- - Динамическая загрузка новых постов: проверка каждые 30 сек, загрузка по клику на главной странице. - Комментарии под постами обновляются каждые 20 сек по мере их появления. ----- К исправлению: * Нет прикрепления фото при быстром ответе, всё ещё используется старое поле для ввода текста. * Не появляются новые комменты при просмотре фото. * Удаление постов иногда двоит, из-за чего возникает ошибка. * Нет динамического обновления времени, когда был оставлен пост (без обновления страницы или перехода по страницам так и будет \"Только что\"). MarkPrior (2 Aug 2026 в 15:47) 02.08 update - [url=https://imgur.com/a/pQakg0x]Галерея скриншотов[/url] - [url=https://github.com/markolockwood/my-social-engine/blob/main/CHANGELOG.md]Changelog[/url] --- Обновление касается переработки прикрепления изображений к постам. - Унификация медиа: объединены изображения и GIF в единую систему post_media с поддержкой разных типов файлов. - Для прикрепляемых изображений создаются миниатюры, которые отображаются в ленте постов; оригинальное изображение используется в модульном окне при просмотре (но подгоняется под размер экрана). - Конвертация GIF в MP4: автоматическая конвертация GIF в MP4 через FFmpeg (экономия ~96% размера файла). - GIF можно останавливать и воспроизводить. - Ограничение в 4 файла к одному посту, любой тип: изображение, гиф, видео (скоро). (!) Улучшена безопасность: SQL-инъекции невозможны (prepared statements), XSS защищён через React, пароли хешируются через bcrypt, JWT с проверкой подписи, но реализованы некоторые дополнительные меры защиты (подробно в Changelog в секции Безопасность от 02.08). (!) Изменено кеширование, т.к. после чистки кеша в браузере могли возникать проблемы от отсутствия дизайна до проблем с навигацией. --- К доработке: * Улучшить динамическое обновление контента: не обновляется время создания поста, в модульном окне под постом не появляются новые комментарии, если их оставляют. * Вкладка Media на странице пользователя будет содержать файлы, которые он прикреплял к своим постам. * Видео-плеер (hls) и прикрепление видео к посту. MarkPrior (3 Aug 2026 в 15:06) 03.08 update - [url=https://www.dropbox.com/scl/fi/6zmbb1blwionh62qbb2wo/Video_2026-08-03_073258.mp4?rlkey=3q2f6qu9otl8gymanw6rix8ld&st=hzd7wkh9&dl=0]Видео-демонстрация (Dropbox)[/url] - [url=https://github.com/markolockwood/my-social-engine/blob/main/CHANGELOG.md]ПОДРОБНЫЙ Changelog от 03.08[/url] Обновление ориентировано на работу с медиа у постов: прикрепление, обработка, просмотр. ---- - Реализовано прикрепление видео к посту с HLS-конвертацией через FFmpeg. - Автоматическая генерация HLS-потоков с множественными уровнями качества (360p, 720p, 1080p, добавится 480p). - Реализован кастомный видео-плеер с выбором качества видео: смена происходит моментально. - Последний установленный уровень громкости пользователем сохраняется в базу данных, дефолтно 0.45, чтобы не оглохли. - Если пользователь начинает создавать пост (вводит текст и прикрепляет файлы), но не отправляет на сервер (уходит на другую страницу или вовсе с сайта), то содержимое сохраняется в localStorage браузера: прикреплённые файлы на сервере живут 48 часов и удаляются через скрипт на Cron (на случай, если пользователь очистил данные браузера). ---- (!) С этим функционалом будет проще реализовывать личные сообщения и другие разделы сайта, где будет использоваться медиа. ---- К доработке: * Слабое динамическое обновление контента: ни время создания поста, ни счётчики лайков/комментов не обновляются в реальном времени. * Если оставить коммент под постом через быстрый ответ, он не отобразится под постом сразу же (через 20 секунд по средством подгрузки новых комментов). * Не реализована подгрузка последующих постов/комментов под постами при скроллинге ленты/комментов (грузится сразу всё, что есть в БД). MarkPrior (5 Aug 2026 в 16:18) 05.08 update - [url=https://github.com/markolockwood/my-social-engine/blob/main/CHANGELOG_RU.md]RU Changelog[/url] Апдейтов по функционалу особо нет. На 04.08 было реализовано прикрепление видео к посту в фоновом режиме: можно спокойно продолжать пользоваться сайтом (переходить на другие страницы), пока видео загружается и конвертируется. При попытке обновить страницу появится предупреждение: если всё же обновить, загрузка прервётся, файлы с диска будут удалены. --- Были проблемы с удалением видео с диска при откреплении их от поста или отмене загрузки видео: файл зависал в процессах php, ffmpeg. Потому принял решение переводить проект на Linux (через WSL на Windows) и одновременно с Apache на Nginx. Поэтому время было занято фиксами возникших проблем. --- Конфиг сайта в nginx.conf, можно просто инклудировать в системный конфиг Nginx. --- Детально изменения прописаны в [url=https://github.com/markolockwood/my-social-engine/blob/main/CHANGELOG_RU.md]подробном Changelog[/url]. VILLIAMS (6 Aug 2026 в 00:06) Good MarkPrior (6 Aug 2026 в 14:13) 06.08 - upcoming update Так как прикрепление медиа к постам вышло уже за пределы возможностей самого Twitter, который брался за эталон, сегодня будут лишь фиксы некоторых проблем. В Твиттере, если ты прикрепляешь медиа, но обновляешь страницу, оно открепляется и с сервера удаляется. У нас же даже после обновления страницы юзер будет видеть прикреплённые ранее файлы: реализовано на случай сбоя браузера, чтобы юзер не терял время на повторную загрузку (а в случае с видео - не тратил и мощности сервера на повторную конвертацию). Но есть явные дыры для злоупотребления: * Можно загружать бесконечно много файлов на сервер, просто очищая данные браузера (сбрасывая localStorage). * Юзер банально может открыть другую вкладку и загрузить ещё 4 файла (базовый лимит - 4 медиа на пост) и так хоть в 100 вкладках, даже без очистки данных браузера. * Данные о прикреплённых файлах сохранялись и под чужими постами, чего не требуется: здесь мы пойдём по пути Твиттера - если юзер ушёл со страницы поста, то файлы удаляются сразу. --- Откажемся от localStorage для медиа браузера в пользу сохранения user_id в temp_uploads - так мы перекроем путь к злоупотреблению и засорению диска и сможем легко контролировать лимит в 4 медиа, даже если юзер уйдёт в другую вкладку. В localStorage будет сохраняться только текстовое содержимое не опубликованного поста. Также уменьшим время очистки файлов из бд и диска у незавершённых постов с 48 часов до 6 через cleanup_temp_uploads.php, сэкономит пространство на диске. --- Также требуется реализовать, чтобы в случае загрузки видео, если пользователь открывает новую вкладку, в ней тоже отображался прогресс загрузки. MarkPrior (6 Aug 2026 в 17:16) 06.08 update - [url=https://www.dropbox.com/scl/fi/lrf6wvwrzn1w858mslud0/Video_2026-08-06_165957.mp4?rlkey=plbb3cvpvajs6jo2nxdhco5zz&st=q2nkeqom&dl=0]Видео демонстрация[/url] - [url=https://github.com/markolockwood/my-social-engine/blob/main/CHANGELOG_RU.md]RU Changelog[/url] Реализовано всё, что планировалось постом ранее с некоторыми правками. - Отказались от localStorage для инфы о прикреплённых файлах в пользу лишь серверного варианта temp_uploads по user_id: препятствует махинациям со стороны клиента. - Теперь нельзя прикреплять разные файлы в разных вкладках: что прикрепится в одной - отобразится в другой. Прогресс загрузки видео показываться будет лишь в той вкладке, где оно загружается, но по завершению конвертации тоже отобразится во всех. Открепление файла в одной вкладке - открепит его во всех. - Если файлов уже 3 и в одной вкладке поставить на загрузку четвёртый, затем в другой вкладке попытаться прикрепить ещё один - выдаст ошибку, т.к. лимит в 4 файла уже занят. (?) Для безопасности предусмотрены все варианты, какие смог придумать, для обхода ограничений, включая скрипты для одновременной отправки постов с нескольких вкладок (для дубляжа постов) или скрипты одновременной загрузки более 4-ёх файлов, и несколько других \"обходов\". Всё будет блокироваться. Вариант с редактированием сбилденного js не поможет, на сервере присутствуют все проверки. Мы следуем правилу: \"Never trust the client. Always validate on the server.\". --- Касаемо медиа - реализовано всё, что требуется, и обновления пока что не требуются. Дальше: * Сосредоточиться на реализации динамического обновления контента. MarkPrior (7 Aug 2026 в 15:56) 07.08 update - [url=https://github.com/markolockwood/my-social-engine/blob/main/CHANGELOG_RU.md]RU Changelog[/url] Начата реализация динамического обновления содержимого страницы. - У постов (в абсолютно любом месте сайта) время создания обновляется каждую минуту. Функция будет упразднена: обновление будет работать лишь для постов возрастом до суток, т.к. дальше формат времени создания не в стиле \"5 минут назад\", а просто дата в стиле \"8 авг\". - Динамического обновления количества лайков, комментов и просмотров у постов в ленте не будет, от этого отказался и Твиттер, слишком геморно. Но нашёл компромисс: обновляться эти данные будут при детальном просмотре конкретного поста или просмотра медиа, прикреплённого к посту, где тоже выводятся эти данные. То есть можно открыть какой-то пост и в лайв-режиме наблюдать изменение показателей. - Под постами реализована сортировка комментариев (выбор сортировки будет отображаться, лишь если есть комменты): relevant, recent, likes. Обновление в зависимости от выбранной сортировки моментальное. Для relevant формула пока что самая простая. - Ранее под постами новые комментарии не появлялись. Теперь, если они есть, будет показываться баннер \"Показать <N> новых ответов\": после клика - подгружаются новые комменты. Функция аналогична с постами на главной странице. - Реализована пагинация постов на главной странице: изначально загружается 25 постов, далее при скорллинге будут подгружаться ещё по 15. - Реализована пагинация комментариев под постами (и при детальном просмотре поста, и в лайтбоксе при просмотре медиа): изначально загружается 15 комментов, далее при скроллинге - ещё по 10. --- Подробно все изменения расписаны в [url=https://github.com/markolockwood/my-social-engine/blob/main/CHANGELOG_RU.md]Changelog[/url] MarkPrior (8 Aug 2026 в 16:48) 08.08 ч1 - большое обновление перед перерывом - [url=https://github.com/markolockwood/my-social-engine/blob/main/changelog/1.8.0_ru.md]RU Changelog[/url] Масштабно актуализирован [url=https://github.com/markolockwood/my-social-engine/blob/main/README_RU.md]README[/url]: особенно расширена инструкция по установке. Структура Changelog\'ов немного изменена: в основном файле будут лишь указаны версии с ссылками на изменения в них, иначе сам Changelog получался уже огромным. Актуализированы все данные в папке /docs/ (архитектура постов, API endpoints) и добавлены три новых в соответствии с нововведениями. --- - В любом месте сайта при наведении на имя пользователя будет всплывать [url=https://github.com/markolockwood/my-social-engine/blob/main/docs/user_hover_card.md]карточка[/url] с краткой информацией о пользователе. - Реализована система [url=https://github.com/markolockwood/my-social-engine/blob/main/docs/follow_system.md]подписок[/url]: подписка/отписка, отображение количества подписчиков/подписок на личной странице юзера/в карточке юзера, [url=https://github.com/markolockwood/my-social-engine/blob/main/docs/follow_list_page.md]страница просмотра[/url] подписчиков/подписок. --- - У проекта новая зависимость - Redis (установка описана в readme) - будет использоваться для эфемерных данных. Сейчас через него реализована дедупликация просмотров, в будущем - presence/typing-индикаторы для переписок. - Просмотр на пост засчитывается: >> в ленте постов, если пост виден минимум на 50% и пользователь остановился на нём минимум на 3 секунды (да, просмотр может приплюсоваться сразу к нескольким постам, если те по параметру видимости подходят - это не баг, такова логика). >> на странице самого поста. - Просмотр от одного пользователя в любом месте сайта - это один просмотр, а не два (и более) разных. MarkPrior (8 Aug 2026 в 16:49) 08.08 ч2 - большое обновление перед перерывом - [url=https://github.com/markolockwood/my-social-engine/blob/main/changelog/1.8.0_ru.md]RU Changelog[/url] - Информация о просмотре хранится 3 часа, далее очищается и если пользователь снова посмотрит пост, который уже видел ранее, то будет ещё +1 просмотр - это не баг, так работает практически у всех крупных соц. сетей, просто рамки времени везде свои. - Запрос на просмотр для конкретного поста отправляется не более одного раза за SPA-сессию. Повторное появление того же поста в ленте (после скролла вверх/вниз) не создаёт лишних сетевых запросов. НО если пользователь обновит страницу или зайдёт с другой вкладки - это другая сессия, запрос пойдёт снова, но Redis всё равно вернёт достоверную информацию (пост просмотрен). Сами запросы нагрузки не создают, но такая оптимизация лишней не будет. --- Насчёт корректной работы просмотров в ленте постов есть сомнения, будет дополнительно тестироваться. MarkPrior (11 Aug 2026 в 17:16) 11.08 update - [url=https://github.com/markolockwood/my-social-engine/blob/main/CHANGELOG_RU.md]RU Changelog[/url] Подробно расписывать не буду, всё детально описано в Changelog версий. =========== * [url=https://github.com/markolockwood/my-social-engine/blob/main/changelog/1.8.1_ru.md]1.8.1[/url]: - Добавлена страница с настройками пользователя и новые поля в users (страна, ip регистрации, гендер). - Крупный рефакторинг структуры страниц: единый Layout для всех приватных страниц. (детально всё в файле версии) =========== * [url=https://github.com/markolockwood/my-social-engine/blob/main/changelog/1.8.2_ru.md]1.8.2[/url]: - Крупный рефакторинг всей структуры проекта: убран дублированный код, реструктуризация фронтенд-компонентов по фичам, устранены некоторые критические уязвимости. (детально всё в файле версии) =========== Обновления могут публиковаться чуть реже, т.к. занялся ещё одним проектом на Java, но обнов будет много. MarkPrior (20 Aug 2026 в 19:35) 20.08 update - [url=https://github.com/markolockwood/my-social-engine/blob/main/changelog/1.8.3_ru.md]RU Changelog[/url] - [url=https://www.dropbox.com/scl/fi/pjlezvlrj812yd19yhgvo/Video_2026-08-20_121634.mp4?rlkey=x2z90tf5anp380k0qqkua202o&st=2bdtqkfr&dl=0]Видео демонстрация[/url] На небольшой видео демонстрации показано, как работает прикрепление файлов к постам: - При загрузке в одной вкладке файл отобразится и в другой, но текстовое содержимое нет, т.к. оно идёт в localStorage браузера: обновление страницы не сбросит последний введённый текст. На видео не показано, но, как ранее писалось, не получится прикрепить более 4-ёх файлов к посту, даже если начать загрузку сразу в нескольких файлах посредством скрипта. Добавлена настройка защиты постов: - Пользователь может запретить не подписанным юзерам смотреть свои посты. - Если защита включена, то подписки на пользователя сперва будут идти в запросы, где он может отклонить или принять запрос. Информация о запросах появляется в боковой панели, а также на странице просмотра Подписчиков и Подписок появляется вкладка Запросы. --- Все подробности расписаны в changelog по ссылке. Это начало подготовки к реализации мессенджера: введение пользовательских настроек приватности. Источник: http://dcms-social.ru/forum/13/5/63545/