Открытая децентрализованная платформа для создания и распространения образовательного контента в современных форматах. Минималистичный интерфейс в эстетике терминалов будущего.
Знания распространяются быстрее, когда инфраструктура не принадлежит одному центру. Ubik — это сеть независимых серверов (нод), которые обмениваются контентом между собой по открытому протоколу. Каждый может поднять свою ноду, каждая нода видит контент остальных.
Не социальная сеть. Платформа для структурированной передачи знаний в трёх форматах, заточенных под мобильное потребление.
Рилсы — вертикальное видео до 3 минут. Концентрированное объяснение одной идеи, одного приёма, одного инструмента. Без воды, без вступлений. Три минуты — достаточно для демонстрации, недостаточно для размазывания.
Голосовые заметки — аудио до 5 минут. Разбор, комментарий, рассуждение вслух. Формат для ситуаций, когда экран недоступен: дорога, прогулка, тренировка. Потребляется как подкаст-фрагмент.
Слайды — текст, разбитый на вертикальные карточки (до 7 штук). Листаются свайпом. Одна мысль — одна карточка. Структура вынуждает автора сжимать материал до сути. Формат для пошаговых инструкций, чеклистов, разборов, конспектов.
Лонгриды — структурированные step-by-step гайды без ограничения по длине. Формат для глубокого обучения: каждый шаг объясняет «почему», а не только «как». Поддерживают код, схемы, вставки из других форматов. Читаются как интерактивный учебник — с прогрессом и навигацией по разделам.
Рилсы, заметки и слайды — вертикальные, потребляются за минуты. Лонгриды — для тех, кто хочет разобраться глубже.
Нода A Нода B Нода C
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Go Server│◄──────►│ Go Server│◄──────►│ Go Server│
│ Users │ sync │ Users │ sync │ Users │
│ Content │ │ Content │ │ Content │
└──────────┘ └──────────┘ └──────────┘
▲ ▲ ▲
│ │ │
Flutter Flutter Flutter
clients clients clients
Каждая нода — самостоятельный Go-сервер со своей базой пользователей и контента. Ноды обмениваются контентом по протоколу синхронизации (вдохновлён ActivityPub / AT Protocol). Пользователь регистрируется на одной ноде, но видит контент со всех. Handle включает домен ноды: @neo@learn.ubik.net.
Что это даёт: ни одна компания не контролирует ленту; нода упала — остальные работают; цензура одной ноды не затрагивает сеть; каждое сообщество может настроить свою ноду под себя.
| Слой | Технология | Почему |
|---|---|---|
| Frontend | Flutter | Кроссплатформа: iOS, Android, Web из одной кодовой базы |
| Backend | Go | Скорость, один бинарник, легко поднять ноду |
| Авторизация | Passkeys (WebAuthn/FIDO2) | Без паролей, фишинг невозможен конструктивно |
| Токены | JWT (Ed25519) | Stateless-валидация на любой ноде |
| Синхронизация | Открытый протокол (federation) | Ноды обмениваются контентом без центрального сервера |
Flutter Client → API Gateway → Auth Domain
│ │
│ ┌────┴────────────────┐
│ │ Auth Service │
│ │ (WebAuthn RP) │
│ ├──────┬───────┬───────┤
│ │Token │Cred │Challenge│
│ │Issuer│Store │Manager │
│ └──┬───┴───┬───┴───┬────┘
│ │ │ │
│ Signing Postgres Redis
│ Keys
│
├──── JWT ──── Content Service (рилсы, голос, слайды)
├──── JWT ──── Feed Service (поток контента, рекомендации)
├──── JWT ──── Profile Service
├──── JWT ──── Media Service (хранение видео/аудио)
└──── JWT ──── Federation Service (синхронизация с другими нодами)
Federation Service — ключевой компонент для децентрализации. Он получает контент от других нод, отдаёт локальный контент наружу и разрешает федеративные handle.
Шаг 1: Passkey Demo → ubik-life/passkey-demo
Минимальный сервис для демонстрации полного цикла passkey-авторизации. Один бинарник Go, одна база SQLite, три экрана Flutter. Первый кирпич будущей ноды.
Умеет:
- Регистрация пользователя по handle + биометрия
- Вход по handle + биометрия
- Выход (инвалидация сессии)
- Проверка текущей сессии
НЕ умеет:
- Контент, лента, профили — следующие сервисы
- Федерация и мультинода — отдельный этап
Детали — API, архитектура, запуск — в репозитории сервиса: ubik-life/passkey-demo.