Flutter-клиент eblo.id для iOS и Android с одной кодовой базой и единым интерфейсом.
|
Поддержка помогает развивать мобильный клиент, тестировать платформенные сценарии и доводить проект до полноценного релиза. |
||||
Готово · Интерфейс · Архитектура · Безопасность · Ограничения
Eblo.id — нативный по поведению мобильный клиент для просмотра и публикации пользовательского медиаконтента на eblo.id.
Приложение использует одно Flutter-дерево интерфейса для iOS и Android. Платформенные различия изолированы в адаптерах авторизации, безопасного хранилища, выбора файлов, воспроизведения медиа, системной отправки ссылок и deep links.
Проект находится в активной разработке. Текущий код уже поддерживает основной пользовательский маршрут, но пока не считается готовым к публикации в App Store и Google Play.
Публичный репозиторий содержит демонстрационный снимок интерфейса и ограниченную часть исходного кода. Build manifests, platform projects, composition root, controllers и integration layer намеренно не публикуются, поэтому этот snapshot нельзя использовать для сборки приложения.
Текущая тестовая версия доступна в GitHub Releases.
Это debug APK для тестирования Beta 1. Сборка не предназначена для публикации в Google Play или использования как production release.
| Лента | Публикация | Создание | Профиль |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Видео | Поиск | Уведомления | Настройки |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Поддержка | Правила | Конфиденциальность |
|---|---|---|
![]() |
![]() |
![]() |
- ✅ Общая лента с сортировками, периодами, фильтрами по типу медиа, обновлением и пагинацией.
- ✅ Изображения, видео, аудио, одиночные публикации и альбомы.
- ✅ Экран публикации с исходным соотношением сторон и полноэкранным просмотром изображений.
- ✅ Нативное воспроизведение видео и аудио.
- ✅ Twitch-авторизация на Android и iOS через изолированный eblo.id WebView flow.
- ✅ Безопасное сохранение и восстановление eblo.id session через Android Keystore и iOS Keychain.
- ✅ Профиль активного пользователя, публичные профили и публикации автора.
- ✅ Upvote/downvote публикаций с восстановлением выбранной реакции.
- ✅ Реакции на комментарии и ответы с optimistic update и откатом при ошибке.
- ✅ Комментарии и вложенные ответы.
- ✅ Создание публикаций с изображениями, видео, аудио и несколькими файлами.
- ✅ Публикации «В ленте» и «По ссылке».
- ✅ Защищённый локальный черновик, прогресс загрузки, отмена и повтор.
- ✅ Общий поиск по публикациям, видео и пользователям.
- ✅ Нативный центр уведомлений: полный доступный список, unread badge, категории, прочтение одного/всех и очистка.
- ✅ Переходы из уведомлений в публикацию, конкретный комментарий, профиль и проверенную внешнюю video-ссылку.
- ✅ Настройки уведомлений о лайках/комментариях и локальный звук с rollback при ошибке.
- ✅ Нативная поддержка: Telegram-канал, чат с администраторами, email и безопасный fallback с копированием адреса.
- ✅ Справочные Rules/Privacy экраны с зафиксированной редакцией, verified public facts и ссылкой на eblo.id.
- ✅ Копирование runtime version/build и явный email flow запроса удаления данных.
- ✅ Системная отправка канонической ссылки на публикацию.
- ✅ Единый адаптивный интерфейс, название и launcher icons для Android и iOS.
- ✅ Android debug Beta APK и проверенная iOS Simulator сборка из одного Flutter-дерева.
iOS / Android
-> Flutter UI
-> Riverpod controllers и dependency injection
-> Domain models и repository interfaces
-> Dio / platform adapters / secure storage
-> подтверждённые web compatibility endpoints eblo.id
Основные принципы:
go_routerуправляет общим route graph и deep links.- UI зависит от domain models и controllers, а не от transport DTO.
- Remote, cache и platform logic скрыты за repository/adapters.
- API origin задаётся через проверенную build configuration.
- Неподтверждённые backend-возможности не подменяются фиктивными данными.
- Один media-first дизайн и одна тема используются на обеих платформах.
- Клиент сохраняет только eblo.id cookie
session; Twitch cookies и tokens не переносятся в приложение. - Session хранится через Keychain/Android Keystore-backed secure storage.
- CSRF token обновляется перед authenticated mutations.
- Session cookie передаётся только на точный HTTPS origin
eblo.id. - Upload filenames нормализуются и не раскрывают исходные локальные пути.
- Draft и локальные реакции разделяются по пользователю и очищаются по auth lifecycle.
- Tokens, cookies, тексты комментариев, media paths и signed URLs не должны попадать в logs.
- Cleartext traffic и отключение TLS validation не используются.
Из публичного source snapshot намеренно исключены компоненты, необходимые для сборки и подключения к backend. Локальный рабочий проект и готовые APK от этого не зависят:
- Flutter dependency manifests и Android/iOS platform projects.
- Entrypoint, composition root, router и navigation shell приложения.
- API client и transport wiring.
- Authenticated mutation guard.
- Remote repositories для auth, content, notifications и upload.
- Session interceptor для authenticated requests.
- Controllers, protected-intent flow, cache/storage implementations и platform adapters.
- Media/comment internals, unit/widget/integration tests и build harness.
В репозитории остаются только публичная документация, screenshots, design-facing domain types, общие UI widgets и часть screen composition. Это showcase snapshot, а не распространяемый Flutter SDK или reproducible source release.
Готовая тестовая Android-сборка публикуется только через GitHub Releases.
- README содержит публичное описание, архитектуру и известные ограничения.
- Внутренняя продуктовая, исследовательская и development-документация не публикуется в репозитории.
- Turnstile/CAPTCHA challenge пока возвращается как controlled terminal blocker без встроенного challenge UI.
- Background/resumable upload и server-side cleanup требуют дополнительного backend/platform решения.
- Public-safe cache первой страницы feed, доступных post/comments и публичных profile uploads готов.
- Read cache хранится в disposable, не попадающем в backup temporary storage до 24 часов. В него не записываются authenticated responses, реакции/права пользователя, avatar/media URL, restricted/non-available posts или partial comments.
- В Beta 1 авторизованный read-path не обновляет public cache: offline fallback использует только ранее сохранённый guest/public-scope результат, пока visibility contract не позволит безопасную нормализацию.
- Жалобы, block/mute и account deletion отложены до появления согласованных backend contracts; локальные имитации в Beta 1 не используются.
- OAuth login подтверждён на Android/iOS simulator и физическом Android-устройстве; physical iOS и финальный deep-link smoke ещё требуются.
- In-app notification center, unread и настройки работают; системная push-доставка требует отдельного device-token transport.
- Неподдерживаемый системным декодером media-файл можно открыть через проверенную каноническую ссылку в браузере; финальный playback smoke требуется на физических iOS/Android устройствах.
Актуальная тестовая Android-сборка доступна в Beta 1 release. Известные пользовательские ограничения перечислены выше.










