home.social

#мессенджер — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #мессенджер, aggregated by home.social.

  1. Мессенджер HalChat теперь в Google Play: 3 года разработки, ИИ в браузере и квест с модерацией

    Всем привет! Моему мессенджеру HalChat исполнилось три года. За это время он прошел огромный путь: из месива символов и сырых блоков превратился в стабильную систему с интуитивным дизайном и современными протоколами. Я разрабатываю его один и позиционирую как приватный, кастомизируемый и автоматизированный мессенджер. Далее: итоги разработки, локальный ИИ в браузере без сторонних серверов и история о том, как я проходил квест с новыми жесткими правилами тестирования в Google Play.

    habr.com/ru/articles/1038816/

    #мессенджер #android #google_play #петпроект #приватность #шифрование #локальный_ИИ #halchat

  2. Мессенджер HalChat теперь в Google Play: 3 года разработки, ИИ в браузере и квест с модерацией

    Всем привет! Моему мессенджеру HalChat исполнилось три года. За это время он прошел огромный путь: из месива символов и сырых блоков превратился в стабильную систему с интуитивным дизайном и современными протоколами. Я разрабатываю его один и позиционирую как приватный, кастомизируемый и автоматизированный мессенджер. Далее: итоги разработки, локальный ИИ в браузере без сторонних серверов и история о том, как я проходил квест с новыми жесткими правилами тестирования в Google Play.

    habr.com/ru/articles/1038816/

    #мессенджер #android #google_play #петпроект #приватность #шифрование #локальный_ИИ #halchat

  3. Мессенджер HalChat теперь в Google Play: 3 года разработки, ИИ в браузере и квест с модерацией

    Всем привет! Моему мессенджеру HalChat исполнилось три года. За это время он прошел огромный путь: из месива символов и сырых блоков превратился в стабильную систему с интуитивным дизайном и современными протоколами. Я разрабатываю его один и позиционирую как приватный, кастомизируемый и автоматизированный мессенджер. Далее: итоги разработки, локальный ИИ в браузере без сторонних серверов и история о том, как я проходил квест с новыми жесткими правилами тестирования в Google Play.

    habr.com/ru/articles/1038816/

    #мессенджер #android #google_play #петпроект #приватность #шифрование #локальный_ИИ #halchat

  4. Мессенджер HalChat теперь в Google Play: 3 года разработки, ИИ в браузере и квест с модерацией

    Всем привет! Моему мессенджеру HalChat исполнилось три года. За это время он прошел огромный путь: из месива символов и сырых блоков превратился в стабильную систему с интуитивным дизайном и современными протоколами. Я разрабатываю его один и позиционирую как приватный, кастомизируемый и автоматизированный мессенджер. Далее: итоги разработки, локальный ИИ в браузере без сторонних серверов и история о том, как я проходил квест с новыми жесткими правилами тестирования в Google Play.

    habr.com/ru/articles/1038816/

    #мессенджер #android #google_play #петпроект #приватность #шифрование #локальный_ИИ #halchat

  5. mastodon.social/@westsibe/1165
    Вчера удалось потестировать #мессенджер #WhiteNoise, что работает на серверах #Nostr , протокол #Marmot : заявленных звонков там не нашли, текст отправляет без #vpn , а вот для вставки аватары в профиль или для обмена медиа - он нужен. Есть опция создания групп (готовые не нашли). Самое главное там - это записать приватный ключ куда-нибудь, а если он есть, то можно сменить имя в профиле, аватару там и получить открытый ключ. Впечатления смешанные от него.
    @Russia #ркн

  6. mastodon.social/@westsibe/1165
    Вчера удалось потестировать #мессенджер #WhiteNoise, что работает на серверах #Nostr , протокол #Marmot : заявленных звонков там не нашли, текст отправляет без #vpn , а вот для вставки аватары в профиль или для обмена медиа - он нужен. Есть опция создания групп (готовые не нашли). Самое главное там - это записать приватный ключ куда-нибудь, а если он есть, то можно сменить имя в профиле, аватару там и получить открытый ключ. Впечатления смешанные от него.
    @Russia #ркн

  7. mastodon.social/@westsibe/1165
    Вчера удалось потестировать #мессенджер #WhiteNoise, что работает на серверах #Nostr , протокол #Marmot : заявленных звонков там не нашли, текст отправляет без #vpn , а вот для вставки аватары в профиль или для обмена медиа - он нужен. Есть опция создания групп (готовые не нашли). Самое главное там - это записать приватный ключ куда-нибудь, а если он есть, то можно сменить имя в профиле, аватару там и получить открытый ключ. Впечатления смешанные от него.
    @Russia #ркн

  8. Telegram замедляют, а мы запустили мессенджер с Asana внутри. Без шуток

    Кейс компании ПАКС ЛАЙВ. Что мы построили за полгода и зачем команде из 15 человек 7 рабочих приложений, когда можно один. Полгода назад мы начали делать ONEMIX не потому что мир ждал ещё один мессенджер, а потому что у нас были технические ограничения Telegram Bot API для своих AI-продуктов. Через шесть месяцев Telegram в России начало замедлять, и наш «внутренний инструмент» оказался востребован командами которые ищут альтернативу. Расскажу что получилось на самом деле: канбан задач, KPI с прогресс- барами, голосования с кворумом и AI-аудит прямо внутри группового чата. С честными цифрами 100 пользователей, 8000 сообщений, 126 версий разработки и понимание что мы только начали. Без хайпа про «убийцу Telegram». Просто про то как делать B2B-продукт в 2026 году, когда экосистема вокруг тебя меняется быстрее чем твоя дорожная карта.

    habr.com/ru/articles/1036084/

    #ONEMIX #мессенджер #управление_проектами #бизнесрежим #AI #OTIF #E2E_шифрование #ЦУП #задачи_команды #российский_мессенджер

  9. Telegram замедляют, а мы запустили мессенджер с Asana внутри. Без шуток

    Кейс компании ПАКС ЛАЙВ. Что мы построили за полгода и зачем команде из 15 человек 7 рабочих приложений, когда можно один. Полгода назад мы начали делать ONEMIX не потому что мир ждал ещё один мессенджер, а потому что у нас были технические ограничения Telegram Bot API для своих AI-продуктов. Через шесть месяцев Telegram в России начало замедлять, и наш «внутренний инструмент» оказался востребован командами которые ищут альтернативу. Расскажу что получилось на самом деле: канбан задач, KPI с прогресс- барами, голосования с кворумом и AI-аудит прямо внутри группового чата. С честными цифрами 100 пользователей, 8000 сообщений, 126 версий разработки и понимание что мы только начали. Без хайпа про «убийцу Telegram». Просто про то как делать B2B-продукт в 2026 году, когда экосистема вокруг тебя меняется быстрее чем твоя дорожная карта.

    habr.com/ru/articles/1036084/

    #ONEMIX #мессенджер #управление_проектами #бизнесрежим #AI #OTIF #E2E_шифрование #ЦУП #задачи_команды #российский_мессенджер

  10. Telegram замедляют, а мы запустили мессенджер с Asana внутри. Без шуток

    Кейс компании ПАКС ЛАЙВ. Что мы построили за полгода и зачем команде из 15 человек 7 рабочих приложений, когда можно один. Полгода назад мы начали делать ONEMIX не потому что мир ждал ещё один мессенджер, а потому что у нас были технические ограничения Telegram Bot API для своих AI-продуктов. Через шесть месяцев Telegram в России начало замедлять, и наш «внутренний инструмент» оказался востребован командами которые ищут альтернативу. Расскажу что получилось на самом деле: канбан задач, KPI с прогресс- барами, голосования с кворумом и AI-аудит прямо внутри группового чата. С честными цифрами 100 пользователей, 8000 сообщений, 126 версий разработки и понимание что мы только начали. Без хайпа про «убийцу Telegram». Просто про то как делать B2B-продукт в 2026 году, когда экосистема вокруг тебя меняется быстрее чем твоя дорожная карта.

    habr.com/ru/articles/1036084/

    #ONEMIX #мессенджер #управление_проектами #бизнесрежим #AI #OTIF #E2E_шифрование #ЦУП #задачи_команды #российский_мессенджер

  11. Telegram замедляют, а мы запустили мессенджер с Asana внутри. Без шуток

    Кейс компании ПАКС ЛАЙВ. Что мы построили за полгода и зачем команде из 15 человек 7 рабочих приложений, когда можно один. Полгода назад мы начали делать ONEMIX не потому что мир ждал ещё один мессенджер, а потому что у нас были технические ограничения Telegram Bot API для своих AI-продуктов. Через шесть месяцев Telegram в России начало замедлять, и наш «внутренний инструмент» оказался востребован командами которые ищут альтернативу. Расскажу что получилось на самом деле: канбан задач, KPI с прогресс- барами, голосования с кворумом и AI-аудит прямо внутри группового чата. С честными цифрами 100 пользователей, 8000 сообщений, 126 версий разработки и понимание что мы только начали. Без хайпа про «убийцу Telegram». Просто про то как делать B2B-продукт в 2026 году, когда экосистема вокруг тебя меняется быстрее чем твоя дорожная карта.

    habr.com/ru/articles/1036084/

    #ONEMIX #мессенджер #управление_проектами #бизнесрежим #AI #OTIF #E2E_шифрование #ЦУП #задачи_команды #российский_мессенджер

  12. Push-уведомления в мессенджере: production-грабли которых нет в туториалах

    Это девятая статья про инженерные решения в ONEMIX. Тема узкая, push-уведомления. Но я её давно хотел разобрать, потому что туториалов в интернете много, а production-граблей в них почти нет. Если коротко, туториал по push выглядит так. Регистрируешь токен через Notifications.getExpoPushTokenAsync() . Отправляешь на бэкенд. Когда приходит пуш — addNotificationResponseReceivedListener ловит тап, навигируешь в нужный экран. Всё. В реальном мессенджере таких туториалов недостаточно. Появляется десяток узких проблем. Пуш приходит когда юзер уже в этом чате. Пуш приходит когда приложение убито системой. Navigation после открытия из пуша добавляет дублирующийся экран в стек. На iOS звонки идут через отдельный канал VoIP который требует совершенно другой инфраструктуры. Эти грабли я и разберу.

    habr.com/ru/articles/1035992/

    #react_native #push_notifications #expo #fcm #apns #callkit #voip #мессенджер #мобильная_разработка #deep_linking

  13. Push-уведомления в мессенджере: production-грабли которых нет в туториалах

    Это девятая статья про инженерные решения в ONEMIX. Тема узкая, push-уведомления. Но я её давно хотел разобрать, потому что туториалов в интернете много, а production-граблей в них почти нет. Если коротко, туториал по push выглядит так. Регистрируешь токен через Notifications.getExpoPushTokenAsync() . Отправляешь на бэкенд. Когда приходит пуш — addNotificationResponseReceivedListener ловит тап, навигируешь в нужный экран. Всё. В реальном мессенджере таких туториалов недостаточно. Появляется десяток узких проблем. Пуш приходит когда юзер уже в этом чате. Пуш приходит когда приложение убито системой. Navigation после открытия из пуша добавляет дублирующийся экран в стек. На iOS звонки идут через отдельный канал VoIP который требует совершенно другой инфраструктуры. Эти грабли я и разберу.

    habr.com/ru/articles/1035992/

    #react_native #push_notifications #expo #fcm #apns #callkit #voip #мессенджер #мобильная_разработка #deep_linking

  14. Push-уведомления в мессенджере: production-грабли которых нет в туториалах

    Это девятая статья про инженерные решения в ONEMIX. Тема узкая, push-уведомления. Но я её давно хотел разобрать, потому что туториалов в интернете много, а production-граблей в них почти нет. Если коротко, туториал по push выглядит так. Регистрируешь токен через Notifications.getExpoPushTokenAsync() . Отправляешь на бэкенд. Когда приходит пуш — addNotificationResponseReceivedListener ловит тап, навигируешь в нужный экран. Всё. В реальном мессенджере таких туториалов недостаточно. Появляется десяток узких проблем. Пуш приходит когда юзер уже в этом чате. Пуш приходит когда приложение убито системой. Navigation после открытия из пуша добавляет дублирующийся экран в стек. На iOS звонки идут через отдельный канал VoIP который требует совершенно другой инфраструктуры. Эти грабли я и разберу.

    habr.com/ru/articles/1035992/

    #react_native #push_notifications #expo #fcm #apns #callkit #voip #мессенджер #мобильная_разработка #deep_linking

  15. Push-уведомления в мессенджере: production-грабли которых нет в туториалах

    Это девятая статья про инженерные решения в ONEMIX. Тема узкая, push-уведомления. Но я её давно хотел разобрать, потому что туториалов в интернете много, а production-граблей в них почти нет. Если коротко, туториал по push выглядит так. Регистрируешь токен через Notifications.getExpoPushTokenAsync() . Отправляешь на бэкенд. Когда приходит пуш — addNotificationResponseReceivedListener ловит тап, навигируешь в нужный экран. Всё. В реальном мессенджере таких туториалов недостаточно. Появляется десяток узких проблем. Пуш приходит когда юзер уже в этом чате. Пуш приходит когда приложение убито системой. Navigation после открытия из пуша добавляет дублирующийся экран в стек. На iOS звонки идут через отдельный канал VoIP который требует совершенно другой инфраструктуры. Эти грабли я и разберу.

    habr.com/ru/articles/1035992/

    #react_native #push_notifications #expo #fcm #apns #callkit #voip #мессенджер #мобильная_разработка #deep_linking

  16. Интересно, кто-нибудь юзал #E2E #мессенджер #WhiteNoise на базе серверов #Nostr ? (Только логин придумать и вперёд.) Звонки, вроде как, есть - если судить по ресурсам.
    Так понял, он под #iPhone и #Android

    Ссылки: github.com/marmot-protocol/whi
    github.com/marmot-protocol/whi (APK-релизы)

    Желающие понажимать или те, кому есть что написать по теме - комменты открыты.
    #Marmot #MLS @Russia

  17. Интересно, кто-нибудь юзал #E2E #мессенджер #WhiteNoise на базе серверов #Nostr ? (Только логин придумать и вперёд.) Звонки, вроде как, есть - если судить по ресурсам.
    Так понял, он под #iPhone и #Android

    Ссылки: github.com/marmot-protocol/whi
    github.com/marmot-protocol/whi (APK-релизы)

    Желающие понажимать или те, кому есть что написать по теме - комменты открыты.
    #Marmot #MLS @Russia

  18. Интересно, кто-нибудь юзал #E2E #мессенджер #WhiteNoise на базе серверов #Nostr ? (Только логин придумать и вперёд.) Звонки, вроде как, есть - если судить по ресурсам.
    Так понял, он под #iPhone и #Android

    Ссылки: github.com/marmot-protocol/whi
    github.com/marmot-protocol/whi (APK-релизы)

    Желающие понажимать или те, кому есть что написать по теме - комменты открыты.
    #Marmot #MLS @Russia

  19. Свой P2P-файлообменник с блэкджеком и NAT punching: как пет-проект Z-Folder стал заменой облакам

    В современных реалиях, когда интернет всё чаще напоминает минное поле с блокировками и замедлениями, надежда на зарубежные (да и на некоторые локальные) сервисы тает с каждым днем. В какой-то момент я пришел к выводу: если хочешь, чтобы инструмент работал стабильно и не зависел от настроения провайдеров или геополитики — напиши его сам. Так появился, например, Fury Messenger (о котором я уже писал здесь ) — мессенджер для Android, заточенный под нестабильное соединение. Но решив проблему текстового общения, я столкнулся со следующей «болью»: обмен файлами и документооборот. Именно на большом обьеме, а не кидая файлики или фоточки через мессенджер. В этой статье расскажу, как я реализовал систему прямой передачи данных между компьютерами, почему облака — это иногда лишнее звено, и как мой «велосипед» в итоге уехал в B2B-сегмент. Проблема: Танцы с бубном вокруг VPN Типичный сценарий обмена файлами сегодня выглядит так: 1. Залить в Telegram (ограничение по размеру, скорость иногда «режут»). 2. Закинуть на Google Drive/Dropbox (нужен VPN, который нужно то включать, то выключать, чтобы не отвалились другие сервисы). 3. Передать через локальную сеть (сложно настроить права доступа, если люди сидят в разных сегментах или городах). Мне хотелось простоты: как в старой доброй Windows Shared Folder, но через интернет и без необходимости быть системным администратором 80-го уровня. Чтобы можно было просто «расшарить» папку конкретному человеку и передать файл на максимально возможной скорости канала.

    habr.com/ru/articles/1035894/

    #p2pсети #файлообмен #мессенджер #документооборот #шаринг #облака #windows #share

  20. Свой P2P-файлообменник с блэкджеком и NAT punching: как пет-проект Z-Folder стал заменой облакам

    В современных реалиях, когда интернет всё чаще напоминает минное поле с блокировками и замедлениями, надежда на зарубежные (да и на некоторые локальные) сервисы тает с каждым днем. В какой-то момент я пришел к выводу: если хочешь, чтобы инструмент работал стабильно и не зависел от настроения провайдеров или геополитики — напиши его сам. Так появился, например, Fury Messenger (о котором я уже писал здесь ) — мессенджер для Android, заточенный под нестабильное соединение. Но решив проблему текстового общения, я столкнулся со следующей «болью»: обмен файлами и документооборот. Именно на большом обьеме, а не кидая файлики или фоточки через мессенджер. В этой статье расскажу, как я реализовал систему прямой передачи данных между компьютерами, почему облака — это иногда лишнее звено, и как мой «велосипед» в итоге уехал в B2B-сегмент. Проблема: Танцы с бубном вокруг VPN Типичный сценарий обмена файлами сегодня выглядит так: 1. Залить в Telegram (ограничение по размеру, скорость иногда «режут»). 2. Закинуть на Google Drive/Dropbox (нужен VPN, который нужно то включать, то выключать, чтобы не отвалились другие сервисы). 3. Передать через локальную сеть (сложно настроить права доступа, если люди сидят в разных сегментах или городах). Мне хотелось простоты: как в старой доброй Windows Shared Folder, но через интернет и без необходимости быть системным администратором 80-го уровня. Чтобы можно было просто «расшарить» папку конкретному человеку и передать файл на максимально возможной скорости канала.

    habr.com/ru/articles/1035894/

    #p2pсети #файлообмен #мессенджер #документооборот #шаринг #облака #windows #share

  21. Свой P2P-файлообменник с блэкджеком и NAT punching: как пет-проект Z-Folder стал заменой облакам

    В современных реалиях, когда интернет всё чаще напоминает минное поле с блокировками и замедлениями, надежда на зарубежные (да и на некоторые локальные) сервисы тает с каждым днем. В какой-то момент я пришел к выводу: если хочешь, чтобы инструмент работал стабильно и не зависел от настроения провайдеров или геополитики — напиши его сам. Так появился, например, Fury Messenger (о котором я уже писал здесь ) — мессенджер для Android, заточенный под нестабильное соединение. Но решив проблему текстового общения, я столкнулся со следующей «болью»: обмен файлами и документооборот. Именно на большом обьеме, а не кидая файлики или фоточки через мессенджер. В этой статье расскажу, как я реализовал систему прямой передачи данных между компьютерами, почему облака — это иногда лишнее звено, и как мой «велосипед» в итоге уехал в B2B-сегмент. Проблема: Танцы с бубном вокруг VPN Типичный сценарий обмена файлами сегодня выглядит так: 1. Залить в Telegram (ограничение по размеру, скорость иногда «режут»). 2. Закинуть на Google Drive/Dropbox (нужен VPN, который нужно то включать, то выключать, чтобы не отвалились другие сервисы). 3. Передать через локальную сеть (сложно настроить права доступа, если люди сидят в разных сегментах или городах). Мне хотелось простоты: как в старой доброй Windows Shared Folder, но через интернет и без необходимости быть системным администратором 80-го уровня. Чтобы можно было просто «расшарить» папку конкретному человеку и передать файл на максимально возможной скорости канала.

    habr.com/ru/articles/1035894/

    #p2pсети #файлообмен #мессенджер #документооборот #шаринг #облака #windows #share

  22. Свой P2P-файлообменник с блэкджеком и NAT punching: как пет-проект Z-Folder стал заменой облакам

    В современных реалиях, когда интернет всё чаще напоминает минное поле с блокировками и замедлениями, надежда на зарубежные (да и на некоторые локальные) сервисы тает с каждым днем. В какой-то момент я пришел к выводу: если хочешь, чтобы инструмент работал стабильно и не зависел от настроения провайдеров или геополитики — напиши его сам. Так появился, например, Fury Messenger (о котором я уже писал здесь ) — мессенджер для Android, заточенный под нестабильное соединение. Но решив проблему текстового общения, я столкнулся со следующей «болью»: обмен файлами и документооборот. Именно на большом обьеме, а не кидая файлики или фоточки через мессенджер. В этой статье расскажу, как я реализовал систему прямой передачи данных между компьютерами, почему облака — это иногда лишнее звено, и как мой «велосипед» в итоге уехал в B2B-сегмент. Проблема: Танцы с бубном вокруг VPN Типичный сценарий обмена файлами сегодня выглядит так: 1. Залить в Telegram (ограничение по размеру, скорость иногда «режут»). 2. Закинуть на Google Drive/Dropbox (нужен VPN, который нужно то включать, то выключать, чтобы не отвалились другие сервисы). 3. Передать через локальную сеть (сложно настроить права доступа, если люди сидят в разных сегментах или городах). Мне хотелось простоты: как в старой доброй Windows Shared Folder, но через интернет и без необходимости быть системным администратором 80-го уровня. Чтобы можно было просто «расшарить» папку конкретному человеку и передать файл на максимально возможной скорости канала.

    habr.com/ru/articles/1035894/

    #p2pсети #файлообмен #мессенджер #документооборот #шаринг #облака #windows #share

  23. ONYX open-beta 1.5 — новый взгляд на навигацию в мессенджерах

    Недавно я выпустил ONYX open-beta 1.5 — одно из самых крупных обновлений моего мессенджера за всё время разработки. В обновлении основной фокус был сделан не только на приватности и новых возможностях, но и на самом ощущении от использования мессенджера. Мне хотелось уйти от ощущения «ещё одного списка чатов» и попробовать сделать взаимодействие с сообщениями более интерактивным и живым.

    habr.com/ru/articles/1034860/

    #мессенджер #дизайн #flutter

  24. Production-стек для мессенджера на 10к пользователей: FastAPI, SQLite в проде и почему монолит

    Это восьмая статья из моей серии про инженерные решения в ONEMIX. До этого было про клиентскую часть мессенджера: кэш сообщений , E2E , WebRTC звонки , Electron , outbox-паттерн . Параллельно про AI-агента Лиру и мнение про вайб-кодинг . Сегодня про серверную сторону. Backend ONEMIX — это один файл main.py на 19603 строки , 379 эндпоинтов, FastAPI + SQLite, держит мессенджер с регистрацией через SMS, звонками через LiveKit, E2E через Double Ratchet, push-нотификациями на iOS и Android. Этот файл я пишу больше года. За это время он эволюционировал из прототипа на 800 строк в production монолит. В статье разберу почему стек именно такой, какие решения оказались правильными, какие я бы поменял если бы начинал сейчас, и где у этого подхода границы применимости. Сразу важная оговорка. У меня не было требования держать 100к одновременных пользователей или 10к RPS. Это бэкенд под мобильное приложение с трафиком который для соло-разработчика разумно поддерживать одному. Если у вас задачи другого масштаба, мой опыт может не подойти.

    habr.com/ru/articles/1034814/

    #fastapi #sqlite #python #монолит #websocket #мессенджер #бэкенд #продакшн #авторизация #миграции

  25. Production-стек для мессенджера на 10к пользователей: FastAPI, SQLite в проде и почему монолит

    Это восьмая статья из моей серии про инженерные решения в ONEMIX. До этого было про клиентскую часть мессенджера: кэш сообщений , E2E , WebRTC звонки , Electron , outbox-паттерн . Параллельно про AI-агента Лиру и мнение про вайб-кодинг . Сегодня про серверную сторону. Backend ONEMIX — это один файл main.py на 19603 строки , 379 эндпоинтов, FastAPI + SQLite, держит мессенджер с регистрацией через SMS, звонками через LiveKit, E2E через Double Ratchet, push-нотификациями на iOS и Android. Этот файл я пишу больше года. За это время он эволюционировал из прототипа на 800 строк в production монолит. В статье разберу почему стек именно такой, какие решения оказались правильными, какие я бы поменял если бы начинал сейчас, и где у этого подхода границы применимости. Сразу важная оговорка. У меня не было требования держать 100к одновременных пользователей или 10к RPS. Это бэкенд под мобильное приложение с трафиком который для соло-разработчика разумно поддерживать одному. Если у вас задачи другого масштаба, мой опыт может не подойти.

    habr.com/ru/articles/1034814/

    #fastapi #sqlite #python #монолит #websocket #мессенджер #бэкенд #продакшн #авторизация #миграции

  26. Production-стек для мессенджера на 10к пользователей: FastAPI, SQLite в проде и почему монолит

    Это восьмая статья из моей серии про инженерные решения в ONEMIX. До этого было про клиентскую часть мессенджера: кэш сообщений , E2E , WebRTC звонки , Electron , outbox-паттерн . Параллельно про AI-агента Лиру и мнение про вайб-кодинг . Сегодня про серверную сторону. Backend ONEMIX — это один файл main.py на 19603 строки , 379 эндпоинтов, FastAPI + SQLite, держит мессенджер с регистрацией через SMS, звонками через LiveKit, E2E через Double Ratchet, push-нотификациями на iOS и Android. Этот файл я пишу больше года. За это время он эволюционировал из прототипа на 800 строк в production монолит. В статье разберу почему стек именно такой, какие решения оказались правильными, какие я бы поменял если бы начинал сейчас, и где у этого подхода границы применимости. Сразу важная оговорка. У меня не было требования держать 100к одновременных пользователей или 10к RPS. Это бэкенд под мобильное приложение с трафиком который для соло-разработчика разумно поддерживать одному. Если у вас задачи другого масштаба, мой опыт может не подойти.

    habr.com/ru/articles/1034814/

    #fastapi #sqlite #python #монолит #websocket #мессенджер #бэкенд #продакшн #авторизация #миграции

  27. Production-стек для мессенджера на 10к пользователей: FastAPI, SQLite в проде и почему монолит

    Это восьмая статья из моей серии про инженерные решения в ONEMIX. До этого было про клиентскую часть мессенджера: кэш сообщений , E2E , WebRTC звонки , Electron , outbox-паттерн . Параллельно про AI-агента Лиру и мнение про вайб-кодинг . Сегодня про серверную сторону. Backend ONEMIX — это один файл main.py на 19603 строки , 379 эндпоинтов, FastAPI + SQLite, держит мессенджер с регистрацией через SMS, звонками через LiveKit, E2E через Double Ratchet, push-нотификациями на iOS и Android. Этот файл я пишу больше года. За это время он эволюционировал из прототипа на 800 строк в production монолит. В статье разберу почему стек именно такой, какие решения оказались правильными, какие я бы поменял если бы начинал сейчас, и где у этого подхода границы применимости. Сразу важная оговорка. У меня не было требования держать 100к одновременных пользователей или 10к RPS. Это бэкенд под мобильное приложение с трафиком который для соло-разработчика разумно поддерживать одному. Если у вас задачи другого масштаба, мой опыт может не подойти.

    habr.com/ru/articles/1034814/

    #fastapi #sqlite #python #монолит #websocket #мессенджер #бэкенд #продакшн #авторизация #миграции

  28. Outbox-паттерн для мобильного мессенджера: как Telegram не теряет сообщения и почему ваш код их теряет

    Это седьмая статья про инженерные решения в ONEMIX. Тема узкая, но болезненная для каждого кто делал мобильное приложение с отправкой сообщений или файлов. Сценарий с которого всё началось у меня. Пользователь в чате выбирает большое видео, нажимает отправить. Видео начинает грузиться. Пользователь нетерпеливый, прокручивает вверх посмотреть переписку, потом переходит в другой чат, потом возвращается. Что должен он увидеть? В Telegram он увидит свой видео-бабл с прогрессбаром, как и оставил. В большинстве самописных мессенджеров он увидит пустой чат без своего сообщения , потому что upload жил в state экрана, а экран размонтировался. XHR продолжал работать в фоне, файл загрузился на сервер, но результат пришёл в null, потому что setter уже не существует. Сообщение фактически отправлено, но пользователь об этом не знает. Это боль которая лечится не "правильным useState", а отдельным архитектурным слоем . Этот слой называется outbox. В этой статье разберу свою реализацию из ONEMIX, это 820 строк TypeScript которые делают то что в Telegram кажется естественным.

    habr.com/ru/articles/1034690/

    #react_native #мессенджер #optimistic_update #outbox #мобильная_разработка #архитектура #telegram #асинхронность #обработка_ошибок #retry

  29. Outbox-паттерн для мобильного мессенджера: как Telegram не теряет сообщения и почему ваш код их теряет

    Это седьмая статья про инженерные решения в ONEMIX. Тема узкая, но болезненная для каждого кто делал мобильное приложение с отправкой сообщений или файлов. Сценарий с которого всё началось у меня. Пользователь в чате выбирает большое видео, нажимает отправить. Видео начинает грузиться. Пользователь нетерпеливый, прокручивает вверх посмотреть переписку, потом переходит в другой чат, потом возвращается. Что должен он увидеть? В Telegram он увидит свой видео-бабл с прогрессбаром, как и оставил. В большинстве самописных мессенджеров он увидит пустой чат без своего сообщения , потому что upload жил в state экрана, а экран размонтировался. XHR продолжал работать в фоне, файл загрузился на сервер, но результат пришёл в null, потому что setter уже не существует. Сообщение фактически отправлено, но пользователь об этом не знает. Это боль которая лечится не "правильным useState", а отдельным архитектурным слоем . Этот слой называется outbox. В этой статье разберу свою реализацию из ONEMIX, это 820 строк TypeScript которые делают то что в Telegram кажется естественным.

    habr.com/ru/articles/1034690/

    #react_native #мессенджер #optimistic_update #outbox #мобильная_разработка #архитектура #telegram #асинхронность #обработка_ошибок #retry

  30. Outbox-паттерн для мобильного мессенджера: как Telegram не теряет сообщения и почему ваш код их теряет

    Это седьмая статья про инженерные решения в ONEMIX. Тема узкая, но болезненная для каждого кто делал мобильное приложение с отправкой сообщений или файлов. Сценарий с которого всё началось у меня. Пользователь в чате выбирает большое видео, нажимает отправить. Видео начинает грузиться. Пользователь нетерпеливый, прокручивает вверх посмотреть переписку, потом переходит в другой чат, потом возвращается. Что должен он увидеть? В Telegram он увидит свой видео-бабл с прогрессбаром, как и оставил. В большинстве самописных мессенджеров он увидит пустой чат без своего сообщения , потому что upload жил в state экрана, а экран размонтировался. XHR продолжал работать в фоне, файл загрузился на сервер, но результат пришёл в null, потому что setter уже не существует. Сообщение фактически отправлено, но пользователь об этом не знает. Это боль которая лечится не "правильным useState", а отдельным архитектурным слоем . Этот слой называется outbox. В этой статье разберу свою реализацию из ONEMIX, это 820 строк TypeScript которые делают то что в Telegram кажется естественным.

    habr.com/ru/articles/1034690/

    #react_native #мессенджер #optimistic_update #outbox #мобильная_разработка #архитектура #telegram #асинхронность #обработка_ошибок #retry

  31. Outbox-паттерн для мобильного мессенджера: как Telegram не теряет сообщения и почему ваш код их теряет

    Это седьмая статья про инженерные решения в ONEMIX. Тема узкая, но болезненная для каждого кто делал мобильное приложение с отправкой сообщений или файлов. Сценарий с которого всё началось у меня. Пользователь в чате выбирает большое видео, нажимает отправить. Видео начинает грузиться. Пользователь нетерпеливый, прокручивает вверх посмотреть переписку, потом переходит в другой чат, потом возвращается. Что должен он увидеть? В Telegram он увидит свой видео-бабл с прогрессбаром, как и оставил. В большинстве самописных мессенджеров он увидит пустой чат без своего сообщения , потому что upload жил в state экрана, а экран размонтировался. XHR продолжал работать в фоне, файл загрузился на сервер, но результат пришёл в null, потому что setter уже не существует. Сообщение фактически отправлено, но пользователь об этом не знает. Это боль которая лечится не "правильным useState", а отдельным архитектурным слоем . Этот слой называется outbox. В этой статье разберу свою реализацию из ONEMIX, это 820 строк TypeScript которые делают то что в Telegram кажется естественным.

    habr.com/ru/articles/1034690/

    #react_native #мессенджер #optimistic_update #outbox #мобильная_разработка #архитектура #telegram #асинхронность #обработка_ошибок #retry

  32. Как я сделал desktop-версию мессенджера на vanilla Electron, не на React Native for Desktop. И не пожалел

    Это четвёртая статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В предыдущих разбирал трёхуровневый кэш сообщений , Double Ratchet E2E и WebRTC звонки с trickle ICE . Последняя про звонки набрала больше всего просмотров, и в комментариях несколько раз спрашивали про десктоп: "а как у тебя там устроено?". Сегодня — отдельная статья про desktop-версию. Сразу скажу: я не использовал React Native for Desktop , не Tauri, не React, не TypeScript. Чистый Electron + vanilla HTML/JS. Это нестандартное решение, и я объясню почему пошёл этим путём, что от этого выиграл, и где это бьёт по голове.

    habr.com/ru/articles/1034184/

    #electron #desktop_app #кроссплатформенная_разработка #мессенджер #ipc #electronbuilder #autoupdater #deep_links #system_tray #vanilla_js

  33. Как я сделал desktop-версию мессенджера на vanilla Electron, не на React Native for Desktop. И не пожалел

    Это четвёртая статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В предыдущих разбирал трёхуровневый кэш сообщений , Double Ratchet E2E и WebRTC звонки с trickle ICE . Последняя про звонки набрала больше всего просмотров, и в комментариях несколько раз спрашивали про десктоп: "а как у тебя там устроено?". Сегодня — отдельная статья про desktop-версию. Сразу скажу: я не использовал React Native for Desktop , не Tauri, не React, не TypeScript. Чистый Electron + vanilla HTML/JS. Это нестандартное решение, и я объясню почему пошёл этим путём, что от этого выиграл, и где это бьёт по голове.

    habr.com/ru/articles/1034184/

    #electron #desktop_app #кроссплатформенная_разработка #мессенджер #ipc #electronbuilder #autoupdater #deep_links #system_tray #vanilla_js

  34. Как я сделал desktop-версию мессенджера на vanilla Electron, не на React Native for Desktop. И не пожалел

    Это четвёртая статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В предыдущих разбирал трёхуровневый кэш сообщений , Double Ratchet E2E и WebRTC звонки с trickle ICE . Последняя про звонки набрала больше всего просмотров, и в комментариях несколько раз спрашивали про десктоп: "а как у тебя там устроено?". Сегодня — отдельная статья про desktop-версию. Сразу скажу: я не использовал React Native for Desktop , не Tauri, не React, не TypeScript. Чистый Electron + vanilla HTML/JS. Это нестандартное решение, и я объясню почему пошёл этим путём, что от этого выиграл, и где это бьёт по голове.

    habr.com/ru/articles/1034184/

    #electron #desktop_app #кроссплатформенная_разработка #мессенджер #ipc #electronbuilder #autoupdater #deep_links #system_tray #vanilla_js

  35. Как я сделал desktop-версию мессенджера на vanilla Electron, не на React Native for Desktop. И не пожалел

    Это четвёртая статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В предыдущих разбирал трёхуровневый кэш сообщений , Double Ratchet E2E и WebRTC звонки с trickle ICE . Последняя про звонки набрала больше всего просмотров, и в комментариях несколько раз спрашивали про десктоп: "а как у тебя там устроено?". Сегодня — отдельная статья про desktop-версию. Сразу скажу: я не использовал React Native for Desktop , не Tauri, не React, не TypeScript. Чистый Electron + vanilla HTML/JS. Это нестандартное решение, и я объясню почему пошёл этим путём, что от этого выиграл, и где это бьёт по голове.

    habr.com/ru/articles/1034184/

    #electron #desktop_app #кроссплатформенная_разработка #мессенджер #ipc #electronbuilder #autoupdater #deep_links #system_tray #vanilla_js

  36. Как я сделал групповые звонки в React Native мессенджере: WebRTC, CallKit и грабли production'а

    Это третья статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В первой я разбирал трёхуровневый кэш сообщений, во второй — реализацию Double Ratchet E2E. Сегодня — про звонки. Звонки в мессенджере — это та функция, которая работает либо отлично, либо никак. Пользователь привык что WhatsApp/Telegram звонят мгновенно, показывают входящие на заблокированном экране, переживают переключения Wi-Fi/LTE, и работают из фона. Если твоя реализация делает хоть что-то из этого хуже — пользователь это сразу заметит и переключится на "нормальный" мессенджер. Я потратил несколько месяцев на то чтобы довести звонки в ONEMIX до production-уровня. В процессе пришлось изучить WebRTC изнутри, разобраться с iOS CallKit и VoIP push notifications, и собрать десяток граблей которые в туториалах не упоминают. В этой статье — как это устроено, какие решения оказались критичными, и что бы я сделал по-другому. Сразу оговорка. Я не использую готовые SDK типа Agora, Twilio, 100ms. У них отличное качество и поддержка, но они не дают полного контроля над процессом — а для мессенджера контроль критичен. Когда звонок не проходит, пользователь винит приложение, а не "SDK от третьей стороны". Плюс готовые SDK стоят денег, которые на раннем этапе продукта лучше направить в другие места.

    habr.com/ru/articles/1033930/

    #webrtc #react_native #livekit #callkit #voip_push_notifications #trickle_ice #мобильная_разработка #звонки #мессенджер

  37. Как я сделал групповые звонки в React Native мессенджере: WebRTC, CallKit и грабли production'а

    Это третья статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В первой я разбирал трёхуровневый кэш сообщений, во второй — реализацию Double Ratchet E2E. Сегодня — про звонки. Звонки в мессенджере — это та функция, которая работает либо отлично, либо никак. Пользователь привык что WhatsApp/Telegram звонят мгновенно, показывают входящие на заблокированном экране, переживают переключения Wi-Fi/LTE, и работают из фона. Если твоя реализация делает хоть что-то из этого хуже — пользователь это сразу заметит и переключится на "нормальный" мессенджер. Я потратил несколько месяцев на то чтобы довести звонки в ONEMIX до production-уровня. В процессе пришлось изучить WebRTC изнутри, разобраться с iOS CallKit и VoIP push notifications, и собрать десяток граблей которые в туториалах не упоминают. В этой статье — как это устроено, какие решения оказались критичными, и что бы я сделал по-другому. Сразу оговорка. Я не использую готовые SDK типа Agora, Twilio, 100ms. У них отличное качество и поддержка, но они не дают полного контроля над процессом — а для мессенджера контроль критичен. Когда звонок не проходит, пользователь винит приложение, а не "SDK от третьей стороны". Плюс готовые SDK стоят денег, которые на раннем этапе продукта лучше направить в другие места.

    habr.com/ru/articles/1033930/

    #webrtc #react_native #livekit #callkit #voip_push_notifications #trickle_ice #мобильная_разработка #звонки #мессенджер

  38. Как я сделал групповые звонки в React Native мессенджере: WebRTC, CallKit и грабли production'а

    Это третья статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В первой я разбирал трёхуровневый кэш сообщений, во второй — реализацию Double Ratchet E2E. Сегодня — про звонки. Звонки в мессенджере — это та функция, которая работает либо отлично, либо никак. Пользователь привык что WhatsApp/Telegram звонят мгновенно, показывают входящие на заблокированном экране, переживают переключения Wi-Fi/LTE, и работают из фона. Если твоя реализация делает хоть что-то из этого хуже — пользователь это сразу заметит и переключится на "нормальный" мессенджер. Я потратил несколько месяцев на то чтобы довести звонки в ONEMIX до production-уровня. В процессе пришлось изучить WebRTC изнутри, разобраться с iOS CallKit и VoIP push notifications, и собрать десяток граблей которые в туториалах не упоминают. В этой статье — как это устроено, какие решения оказались критичными, и что бы я сделал по-другому. Сразу оговорка. Я не использую готовые SDK типа Agora, Twilio, 100ms. У них отличное качество и поддержка, но они не дают полного контроля над процессом — а для мессенджера контроль критичен. Когда звонок не проходит, пользователь винит приложение, а не "SDK от третьей стороны". Плюс готовые SDK стоят денег, которые на раннем этапе продукта лучше направить в другие места.

    habr.com/ru/articles/1033930/

    #webrtc #react_native #livekit #callkit #voip_push_notifications #trickle_ice #мобильная_разработка #звонки #мессенджер

  39. Как я сделал групповые звонки в React Native мессенджере: WebRTC, CallKit и грабли production'а

    Это третья статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native. В первой я разбирал трёхуровневый кэш сообщений, во второй — реализацию Double Ratchet E2E. Сегодня — про звонки. Звонки в мессенджере — это та функция, которая работает либо отлично, либо никак. Пользователь привык что WhatsApp/Telegram звонят мгновенно, показывают входящие на заблокированном экране, переживают переключения Wi-Fi/LTE, и работают из фона. Если твоя реализация делает хоть что-то из этого хуже — пользователь это сразу заметит и переключится на "нормальный" мессенджер. Я потратил несколько месяцев на то чтобы довести звонки в ONEMIX до production-уровня. В процессе пришлось изучить WebRTC изнутри, разобраться с iOS CallKit и VoIP push notifications, и собрать десяток граблей которые в туториалах не упоминают. В этой статье — как это устроено, какие решения оказались критичными, и что бы я сделал по-другому. Сразу оговорка. Я не использую готовые SDK типа Agora, Twilio, 100ms. У них отличное качество и поддержка, но они не дают полного контроля над процессом — а для мессенджера контроль критичен. Когда звонок не проходит, пользователь винит приложение, а не "SDK от третьей стороны". Плюс готовые SDK стоят денег, которые на раннем этапе продукта лучше направить в другие места.

    habr.com/ru/articles/1033930/

    #webrtc #react_native #livekit #callkit #voip_push_notifications #trickle_ice #мобильная_разработка #звонки #мессенджер

  40. Я реализовал Double Ratchet в React Native мессенджере. Разбор протокола и кода

    В прошлой статье про трёхуровневый кэш сообщений я уже упоминал, что делаю мессенджер ONEMIX на React Native. Базовое E2E у меня было простое: ECDH P-256 для обмена ключами при первом контакте, AES-GCM для шифрования каждого сообщения общим секретом. Это работает, но имеет одну проблему: общий секрет один на всю переписку . Если у одной из сторон скомпрометируют приватный ключ — все сообщения за всё время превращаются в открытый текст. Это называется отсутствием Perfect Forward Secrecy (PFS). И это значит, что человек, к которому в руки попадёт твой телефон через год, может прочитать переписку из прошлого года. WhatsApp, Signal, и серьёзные части Telegram давно используют другую схему — Double Ratchet — которая ключи переизбретает заново на каждом сообщении. Так делают потому, что любой ключ компрометируется в один момент времени, и компрометация не должна давать доступа ни к прошлому, ни к будущему. Я реализовал Double Ratchet с нуля для ONEMIX. В этой статье разберу:

    habr.com/ru/articles/1033830/

    #double_ratchet #signal_protocol #e2e #endtoend_encryption #react_native #криптография #мессенджер #ecdh #hkdf #web_crypto_api

  41. Я реализовал Double Ratchet в React Native мессенджере. Разбор протокола и кода

    В прошлой статье про трёхуровневый кэш сообщений я уже упоминал, что делаю мессенджер ONEMIX на React Native. Базовое E2E у меня было простое: ECDH P-256 для обмена ключами при первом контакте, AES-GCM для шифрования каждого сообщения общим секретом. Это работает, но имеет одну проблему: общий секрет один на всю переписку . Если у одной из сторон скомпрометируют приватный ключ — все сообщения за всё время превращаются в открытый текст. Это называется отсутствием Perfect Forward Secrecy (PFS). И это значит, что человек, к которому в руки попадёт твой телефон через год, может прочитать переписку из прошлого года. WhatsApp, Signal, и серьёзные части Telegram давно используют другую схему — Double Ratchet — которая ключи переизбретает заново на каждом сообщении. Так делают потому, что любой ключ компрометируется в один момент времени, и компрометация не должна давать доступа ни к прошлому, ни к будущему. Я реализовал Double Ratchet с нуля для ONEMIX. В этой статье разберу:

    habr.com/ru/articles/1033830/

    #double_ratchet #signal_protocol #e2e #endtoend_encryption #react_native #криптография #мессенджер #ecdh #hkdf #web_crypto_api

  42. Я реализовал Double Ratchet в React Native мессенджере. Разбор протокола и кода

    В прошлой статье про трёхуровневый кэш сообщений я уже упоминал, что делаю мессенджер ONEMIX на React Native. Базовое E2E у меня было простое: ECDH P-256 для обмена ключами при первом контакте, AES-GCM для шифрования каждого сообщения общим секретом. Это работает, но имеет одну проблему: общий секрет один на всю переписку . Если у одной из сторон скомпрометируют приватный ключ — все сообщения за всё время превращаются в открытый текст. Это называется отсутствием Perfect Forward Secrecy (PFS). И это значит, что человек, к которому в руки попадёт твой телефон через год, может прочитать переписку из прошлого года. WhatsApp, Signal, и серьёзные части Telegram давно используют другую схему — Double Ratchet — которая ключи переизбретает заново на каждом сообщении. Так делают потому, что любой ключ компрометируется в один момент времени, и компрометация не должна давать доступа ни к прошлому, ни к будущему. Я реализовал Double Ratchet с нуля для ONEMIX. В этой статье разберу:

    habr.com/ru/articles/1033830/

    #double_ratchet #signal_protocol #e2e #endtoend_encryption #react_native #криптография #мессенджер #ecdh #hkdf #web_crypto_api

  43. Я реализовал Double Ratchet в React Native мессенджере. Разбор протокола и кода

    В прошлой статье про трёхуровневый кэш сообщений я уже упоминал, что делаю мессенджер ONEMIX на React Native. Базовое E2E у меня было простое: ECDH P-256 для обмена ключами при первом контакте, AES-GCM для шифрования каждого сообщения общим секретом. Это работает, но имеет одну проблему: общий секрет один на всю переписку . Если у одной из сторон скомпрометируют приватный ключ — все сообщения за всё время превращаются в открытый текст. Это называется отсутствием Perfect Forward Secrecy (PFS). И это значит, что человек, к которому в руки попадёт твой телефон через год, может прочитать переписку из прошлого года. WhatsApp, Signal, и серьёзные части Telegram давно используют другую схему — Double Ratchet — которая ключи переизбретает заново на каждом сообщении. Так делают потому, что любой ключ компрометируется в один момент времени, и компрометация не должна давать доступа ни к прошлому, ни к будущему. Я реализовал Double Ratchet с нуля для ONEMIX. В этой статье разберу:

    habr.com/ru/articles/1033830/

    #double_ratchet #signal_protocol #e2e #endtoend_encryption #react_native #криптография #мессенджер #ecdh #hkdf #web_crypto_api

  44. Как я сделал трёхуровневый кэш сообщений в мессенджере на React Native — и что узнал по дороге

    Я делаю мессенджер ONEMIX на React Native. К моменту, когда я начал писать этот пост, в нём уже больше десятка экранов, групповые WebRTC-звонки через LiveKit, E2E на Double Ratchet + Sealed Sender, push-нотификации с cold-start навигацией и десктоп-версия на Electron. Но самым важным куском, который определяет ощущение от приложения, оказался не звук и не видео. А то, насколько быстро открывается чат. Если вы хоть раз делали список сообщений на React Native, вы знаете эту боль: открыл чат — пустой экран на 200–800 мс, потом подгрузка, потом скачок при докрутке наверх. В Telegram такого не бывает: открыл — мгновенно увидел последние сообщения, прокрутил наверх — никаких пустот, история идёт сплошной лентой. Я разбирался с этим несколько месяцев. В итоге пришёл к трёхуровневой архитектуре кэша, которую и хочу разобрать. Это не теория — это код, который сейчас работает в продакшне. Покажу как реализовано, какие были тупики и какие решения оказались критичными.

    habr.com/ru/articles/1033502/

    #react_native #sqlite #кэширование #expo #мессенджер #drizzle_orm #мобильная_разработка #производительность #архитектура #telegram

  45. Как я сделал трёхуровневый кэш сообщений в мессенджере на React Native — и что узнал по дороге

    Я делаю мессенджер ONEMIX на React Native. К моменту, когда я начал писать этот пост, в нём уже больше десятка экранов, групповые WebRTC-звонки через LiveKit, E2E на Double Ratchet + Sealed Sender, push-нотификации с cold-start навигацией и десктоп-версия на Electron. Но самым важным куском, который определяет ощущение от приложения, оказался не звук и не видео. А то, насколько быстро открывается чат. Если вы хоть раз делали список сообщений на React Native, вы знаете эту боль: открыл чат — пустой экран на 200–800 мс, потом подгрузка, потом скачок при докрутке наверх. В Telegram такого не бывает: открыл — мгновенно увидел последние сообщения, прокрутил наверх — никаких пустот, история идёт сплошной лентой. Я разбирался с этим несколько месяцев. В итоге пришёл к трёхуровневой архитектуре кэша, которую и хочу разобрать. Это не теория — это код, который сейчас работает в продакшне. Покажу как реализовано, какие были тупики и какие решения оказались критичными.

    habr.com/ru/articles/1033502/

    #react_native #sqlite #кэширование #expo #мессенджер #drizzle_orm #мобильная_разработка #производительность #архитектура #telegram

  46. Как я сделал трёхуровневый кэш сообщений в мессенджере на React Native — и что узнал по дороге

    Я делаю мессенджер ONEMIX на React Native. К моменту, когда я начал писать этот пост, в нём уже больше десятка экранов, групповые WebRTC-звонки через LiveKit, E2E на Double Ratchet + Sealed Sender, push-нотификации с cold-start навигацией и десктоп-версия на Electron. Но самым важным куском, который определяет ощущение от приложения, оказался не звук и не видео. А то, насколько быстро открывается чат. Если вы хоть раз делали список сообщений на React Native, вы знаете эту боль: открыл чат — пустой экран на 200–800 мс, потом подгрузка, потом скачок при докрутке наверх. В Telegram такого не бывает: открыл — мгновенно увидел последние сообщения, прокрутил наверх — никаких пустот, история идёт сплошной лентой. Я разбирался с этим несколько месяцев. В итоге пришёл к трёхуровневой архитектуре кэша, которую и хочу разобрать. Это не теория — это код, который сейчас работает в продакшне. Покажу как реализовано, какие были тупики и какие решения оказались критичными.

    habr.com/ru/articles/1033502/

    #react_native #sqlite #кэширование #expo #мессенджер #drizzle_orm #мобильная_разработка #производительность #архитектура #telegram

  47. Как я сделал трёхуровневый кэш сообщений в мессенджере на React Native — и что узнал по дороге

    Я делаю мессенджер ONEMIX на React Native. К моменту, когда я начал писать этот пост, в нём уже больше десятка экранов, групповые WebRTC-звонки через LiveKit, E2E на Double Ratchet + Sealed Sender, push-нотификации с cold-start навигацией и десктоп-версия на Electron. Но самым важным куском, который определяет ощущение от приложения, оказался не звук и не видео. А то, насколько быстро открывается чат. Если вы хоть раз делали список сообщений на React Native, вы знаете эту боль: открыл чат — пустой экран на 200–800 мс, потом подгрузка, потом скачок при докрутке наверх. В Telegram такого не бывает: открыл — мгновенно увидел последние сообщения, прокрутил наверх — никаких пустот, история идёт сплошной лентой. Я разбирался с этим несколько месяцев. В итоге пришёл к трёхуровневой архитектуре кэша, которую и хочу разобрать. Это не теория — это код, который сейчас работает в продакшне. Покажу как реализовано, какие были тупики и какие решения оказались критичными.

    habr.com/ru/articles/1033502/

    #react_native #sqlite #кэширование #expo #мессенджер #drizzle_orm #мобильная_разработка #производительность #архитектура #telegram

  48. Писать или не писать… свой мессенджер — вот в чем вопрос

    Корпоративный мессенджер своими руками. Попробуем разобрать, что может пойти не так — без драматизации, но с цифрами и реальным опытом. И сразу важная оговорка: мы не считаем, что “пилить” свой мессенджер — это по умолчанию плохая идея. Иногда это абсолютно правильное решение.

    habr.com/ru/companies/frisbee/

    #корпоративный_мессенджер #мессенджер #самописный_софт #разработка #итинфраструктура #frisbee #платформа_коммункиаций #коммуникации

  49. Писать или не писать… свой мессенджер — вот в чем вопрос

    Корпоративный мессенджер своими руками. Попробуем разобрать, что может пойти не так — без драматизации, но с цифрами и реальным опытом. И сразу важная оговорка: мы не считаем, что “пилить” свой мессенджер — это по умолчанию плохая идея. Иногда это абсолютно правильное решение.

    habr.com/ru/companies/frisbee/

    #корпоративный_мессенджер #мессенджер #самописный_софт #разработка #итинфраструктура #frisbee #платформа_коммункиаций #коммуникации

  50. Писать или не писать… свой мессенджер — вот в чем вопрос

    Корпоративный мессенджер своими руками. Попробуем разобрать, что может пойти не так — без драматизации, но с цифрами и реальным опытом. И сразу важная оговорка: мы не считаем, что “пилить” свой мессенджер — это по умолчанию плохая идея. Иногда это абсолютно правильное решение.

    habr.com/ru/companies/frisbee/

    #корпоративный_мессенджер #мессенджер #самописный_софт #разработка #итинфраструктура #frisbee #платформа_коммункиаций #коммуникации