Initial commit
This commit is contained in:
267
docs/ru/design-system.md
Normal file
267
docs/ru/design-system.md
Normal file
@@ -0,0 +1,267 @@
|
||||
# Morpheus — Дизайн-система
|
||||
|
||||
## Философия дизайна
|
||||
|
||||
### «Ощущается живым, никогда — тяжёлым.»
|
||||
|
||||
Morpheus должен ощущаться как самое быстрое приложение на телефоне. Вдохновлено скоростью Telegram,
|
||||
визуальной отполированностью нативных приложений iOS и характером Discord — но с собственной
|
||||
идентичностью. Не корпоративный. Не андеграунд. Живой.
|
||||
|
||||
## Визуальная идентичность
|
||||
|
||||
### Название и символ
|
||||
|
||||
- **Morpheus** — пробуждающий, тот кто предлагает выбор
|
||||
- Символ: абстрактный глаз или форма пилюли — узнаваемость без объяснений
|
||||
- Символ должен работать в размере 16x16 фавикон и на билборде
|
||||
|
||||
### Цветовая система
|
||||
|
||||
#### Основная палитра
|
||||
|
||||
```plaintext
|
||||
Morpheus Violet #7C3AED — Основной цвет бренда, CTA, активные состояния
|
||||
Electric Indigo #4F46E5 — Вторичный, ссылки, интерактивные элементы
|
||||
```
|
||||
|
||||
#### Нейтральная палитра
|
||||
|
||||
```plaintext
|
||||
Void #09090B — Самый тёмный фон (тёмная тема)
|
||||
Charcoal #18181B — Фон карточек (тёмная тема)
|
||||
Slate #27272A — Границы, разделители (тёмная тема)
|
||||
Mist #A1A1AA — Вторичный текст
|
||||
Cloud #F4F4F5 — Фон карточек (светлая тема)
|
||||
Snow #FAFAFA — Самый светлый фон (светлая тема)
|
||||
Pure #FFFFFF — Текст на тёмном, карточки на светлом
|
||||
```
|
||||
|
||||
#### Акцентная палитра (семантическая)
|
||||
|
||||
```plaintext
|
||||
Pulse Green #10B981 — Успех, онлайн, отправлено
|
||||
Flame Orange #F59E0B — Предупреждение, ожидание
|
||||
Signal Red #EF4444 — Ошибка, деструктивные действия
|
||||
Ice Blue #06B6D4 — Информация, ссылки в контексте
|
||||
```
|
||||
|
||||
#### Градиент
|
||||
|
||||
```plaintext
|
||||
Градиент Morpheus: #7C3AED → #4F46E5 → #06B6D4
|
||||
Применение: экраны онбординга, премиум-бейджи, только «героические» моменты
|
||||
Никогда на тексте body. Никогда на фонах с текстом поверх.
|
||||
```
|
||||
|
||||
### Тёмная тема — по умолчанию
|
||||
|
||||
- Тёмная тема по умолчанию. Светлая полностью поддерживается, но вторична.
|
||||
- Обоснование: целевая аудитория предпочитает тёмную. Тёмная тема экономит батарею OLED.
|
||||
- Тёмные фоны используют шкалу Void/Charcoal, никогда чистый #000000 для карточек.
|
||||
|
||||
## Типографика
|
||||
|
||||
### Набор шрифтов
|
||||
|
||||
```plaintext
|
||||
Основной: Inter (текст интерфейса, body)
|
||||
Моноширинный: JetBrains Mono (ключи, коды, техническая информация)
|
||||
Дисплейный: Manrope или Unbounded (заголовки, маркетинг, hero-текст)
|
||||
```
|
||||
|
||||
### Шкала типографики
|
||||
|
||||
```plaintext
|
||||
Display XL: 36px / 40px межстрочный — Только hero-текст
|
||||
Display: 30px / 36px — Заголовки страниц
|
||||
Heading 1: 24px / 32px — Заголовки секций
|
||||
Heading 2: 20px / 28px — Заголовки карточек
|
||||
Body: 16px / 24px — Стандартный читаемый текст
|
||||
Body Small: 14px / 20px — Вторичная информация, время
|
||||
Caption: 12px / 16px — Лейблы, бейджи, метаданные
|
||||
```
|
||||
|
||||
### Использование жирности
|
||||
|
||||
```text
|
||||
Regular (400): Текст body, описания
|
||||
Medium (500): Лейблы UI, навигация, кнопки
|
||||
Semibold (600): Заголовки, акценты
|
||||
Bold (700): Дисплейный текст, только hero-моменты
|
||||
```
|
||||
|
||||
## Отступы и сетка
|
||||
|
||||
### Шкала отступов (база 4px)
|
||||
|
||||
```text
|
||||
xs: 4px — Внутренние отступы inline, зазоры иконок
|
||||
sm: 8px — Тесная группировка
|
||||
md: 12px — Стандартный внутренний отступ
|
||||
lg: 16px — Отступ карточек, зазоры секций
|
||||
xl: 24px — Между секциями
|
||||
2xl: 32px — Отступы на уровне страницы
|
||||
3xl: 48px — Крупные разрывы секций
|
||||
```
|
||||
|
||||
### Радиусы скругления
|
||||
|
||||
```text
|
||||
sm: 6px — Кнопки, инпуты, мелкие карточки
|
||||
md: 10px — Карточки, диалоги
|
||||
lg: 16px — Крупные карточки, модалы
|
||||
xl: 24px — Аватары (скруглённый квадрат), карточки фич
|
||||
full: 9999px — Пиллы, теги, круглые аватары
|
||||
```
|
||||
|
||||
### Сетка
|
||||
|
||||
- Mobile-first. Одна колонка по умолчанию.
|
||||
- Максимальная ширина контента: 640px для лент (читаемость).
|
||||
- Десктоп: центрированная колонка контента с контекстными сайдбарами.
|
||||
- Никакого бесконечного горизонтального скролла. Вертикальный — нативный.
|
||||
|
||||
## Компоненты
|
||||
|
||||
### Кнопки
|
||||
|
||||
```text
|
||||
Primary: Morpheus Violet фон, белый текст, радиус 6px, medium вес
|
||||
Hover: слегка светлее. Active: слегка темнее.
|
||||
Secondary: Прозрачный фон, фиолетовый текст, граница 1px фиолетовая
|
||||
Hover: заливка violet/10
|
||||
Ghost: Прозрачный фон, mist текст, без границы
|
||||
Hover: заливка slate
|
||||
Destructive: Signal Red фон, белый текст (требуется подтверждение)
|
||||
|
||||
Размер: По умолчанию 40px высота, компактный 32px, большой 48px
|
||||
Минимальная зона касания: всегда 44x44px
|
||||
```
|
||||
|
||||
### Карточки
|
||||
|
||||
```text
|
||||
Тёмная тема: Charcoal фон, граница 1px Slate, радиус md
|
||||
Светлая тема: Pure фон, граница 1px Cloud, радиус md
|
||||
Возвышение: Тень только при hover (никогда в покое)
|
||||
Отступ: lg (16px)
|
||||
```
|
||||
|
||||
### Поля ввода
|
||||
|
||||
```text
|
||||
Высота: 44px (удобно для касания)
|
||||
Граница: 1px Slate, фокус → 2px Morpheus Violet
|
||||
Фон: Void (тёмная) / Snow (светлая)
|
||||
Placeholder: цвет Mist
|
||||
Ошибка: граница Signal Red + текст подсказки ниже
|
||||
```
|
||||
|
||||
### Аватары
|
||||
|
||||
```text
|
||||
Размеры: 24px (inline), 32px (список), 40px (по умолчанию), 64px (профиль), 96px (hero)
|
||||
Форма: Скруглённый квадрат (радиус xl) — отличает от других платформ
|
||||
Фолбэк: Генерируемый градиент из хеша публичного ключа (каждый пользователь уникален)
|
||||
Точка онлайн: Pulse Green, справа внизу, 25% от размера аватара
|
||||
```
|
||||
|
||||
### Навигация
|
||||
|
||||
```text
|
||||
Мобильная: Нижняя панель вкладок, максимум 5 элементов. Хаптик при касании.
|
||||
Активная вкладка: иконка Morpheus Violet + лейбл
|
||||
Неактивная: иконка Mist, без лейбла
|
||||
Десктоп: Левый сайдбар, сворачиваемый. Иконки + лейблы.
|
||||
Переходы: Горизонтальный слайд между вкладками, вертикальный внутри лент
|
||||
```
|
||||
|
||||
## Анимация и движение
|
||||
|
||||
### Принципы
|
||||
|
||||
- **Целенаправленная**: каждая анимация что-то сообщает (смена состояния, пространственная связь)
|
||||
- **Быстрая**: стандартная длительность 150-200мс. Никогда не превышать 300мс для переходов UI.
|
||||
- **Прерываемая**: ввод пользователя немедленно отменяет любую текущую анимацию
|
||||
- **Никакой декоративной анимации**: без плавающих частиц, пульсирующих логотипов, фоновых эффектов
|
||||
|
||||
### Стандартные кривые
|
||||
|
||||
```text
|
||||
ease-out: cubic-bezier(0.0, 0.0, 0.2, 1) — Элементы входят
|
||||
ease-in: cubic-bezier(0.4, 0.0, 1, 1) — Элементы выходят
|
||||
ease-in-out: cubic-bezier(0.4, 0.0, 0.2, 1) — Элементы трансформируются
|
||||
spring: spring(1, 80, 10) — Игривые взаимодействия (реакции, лайки)
|
||||
```
|
||||
|
||||
### Ключевые анимации
|
||||
|
||||
```text
|
||||
Переход страницы: Горизонтальный слайд, 200мс ease-out
|
||||
Модал: Scale от 0.95 + fade, 150мс ease-out
|
||||
Тост/снэкбар: Слайд снизу вверх, 200мс ease-out, автоисчезновение 3с
|
||||
Pull to refresh: Нативное ощущение, кастомный индикатор с символом Morpheus
|
||||
Отправка сообщения: Слайд вверх + лёгкий scale, spring easing
|
||||
Реакция: Pop + взрыв частиц, spring easing (один из немногих «весёлых» моментов)
|
||||
Скелетон загрузки: Шиммер-градиент, цикл 1.5с (только при реальной загрузке)
|
||||
```
|
||||
|
||||
## Иконографика
|
||||
|
||||
### Стиль
|
||||
|
||||
- Outlined стиль (не filled) для навигации и UI — обводка 1.5px
|
||||
- Filled стиль для активных/выбранных состояний
|
||||
- Базовый размер 24x24, оптически скорректирован для каждой иконки
|
||||
- Единообразные метафоры: не смешивать material/feather/custom в одном виде
|
||||
|
||||
### Нужны кастомные иконки
|
||||
|
||||
- Индикатор статуса реле
|
||||
- Иконка ключа/идентичности (не буквальный ключ — слишком крипто-бро)
|
||||
- Индикатор шифрования (тонкий, не замок — нормализация, не тревога)
|
||||
- Morpheus-специфичные действия (напр. «zap» для чаевых при использовании Lightning)
|
||||
|
||||
## Тон голоса (UI-тексты)
|
||||
|
||||
### Принципы тона
|
||||
|
||||
- **Разговорный, но не детский** — «Привет», не «Приветствуем вас, уважаемый пользователь»
|
||||
- **Прямой** — «Отправить», не «Подтвердить отправку сообщения»
|
||||
- **Уверенный** — «Ваши сообщения зашифрованы», не «Мы стараемся защитить...»
|
||||
- **Двуязычный** — UI должен работать на русском и английском с первого дня
|
||||
- **Без корпоративного языка** — «Что-то пошло не так», не «Произошла непредвиденная ошибка»
|
||||
|
||||
### Примеры
|
||||
|
||||
```text
|
||||
Пустое состояние: «Тут пока никого. Будь первым.» (не «Контент отсутствует»)
|
||||
Ошибка: «Не удалось подключиться. Нажми, чтобы повторить.» (не «Ошибка сети 503»)
|
||||
Онбординг: «Этот ключ — это ты. Сохрани его в надёжном месте.» (не «Создайте резервную копию ключевой пары»)
|
||||
Деструктивное: «Удалить навсегда?» (не «Вы уверены, что хотите удалить?»)
|
||||
```
|
||||
|
||||
## Доступность
|
||||
|
||||
- Минимальный коэффициент контрастности: 4.5:1 для текста body, 3:1 для крупного текста
|
||||
- Все интерактивные элементы: минимальная зона касания 44x44px
|
||||
- Метки screen reader для всех иконок и нетекстовых элементов
|
||||
- Поддержка Reduce Motion: отключение всей необязательной анимации
|
||||
- Масштабирование шрифта: поддержка системных настроек размера шрифта (до 200%)
|
||||
- Информация не передаётся только цветом (всегда дублировать иконкой или текстом)
|
||||
|
||||
## Целевые платформы
|
||||
|
||||
### Приоритет
|
||||
|
||||
1. **Мобильные (iOS + Android)** — React Native или Flutter, нативное ощущение обязательно
|
||||
2. **Веб (PWA)** — Полный паритет функций, устанавливаемый
|
||||
3. **Десктоп** — Electron или Tauri обёртка веба, или нативный при наличии ресурсов
|
||||
|
||||
### Адаптация к платформам
|
||||
|
||||
- Следовать соглашениям платформы для паттернов навигации (iOS свайп назад, Android кнопка назад)
|
||||
- Нативные share sheets, уведомления, хаптик
|
||||
- Уважать системную тёмную/светлую тему по умолчанию, разрешить ручное переключение
|
||||
- Адаптивные лейауты: телефон → планшет → десктоп, не просто масштабированные
|
||||
104
docs/ru/monetization.md
Normal file
104
docs/ru/monetization.md
Normal file
@@ -0,0 +1,104 @@
|
||||
# Morpheus — Стратегия монетизации
|
||||
|
||||
## Ограничения
|
||||
|
||||
Бизнес-модель должна удовлетворять всем следующим условиям:
|
||||
|
||||
1. **Никакой рекламы** — никогда. Ни поведенческой, ни контекстной, ни «уважающей приватность». Ноль рекламы.
|
||||
2. **Никакой продажи данных** — никогда
|
||||
3. **Доступно для молодёжи** — у большинства пользователей нет банковских карт
|
||||
4. **Устойчиво** — должно покрывать инфраструктуру (хостинг реле, CDN, разработка)
|
||||
5. **Согласовано с приватностью** — доход и интересы пользователей никогда не должны конфликтовать
|
||||
6. **Законопослушно** — обработка платежей и бизнес-операции соответствуют применимому праву
|
||||
|
||||
## Потоки дохода
|
||||
|
||||
### Уровень 1: Основной доход (с первого дня)
|
||||
|
||||
#### 1.1 Morpheus Pro (Подписка)
|
||||
|
||||
Ежемесячная подписка, открывающая премиум-функции:
|
||||
|
||||
- Кастомные темы и продвинутая стилизация профиля
|
||||
- Увеличенные лимиты загрузки медиа (длина видео, качество изображений)
|
||||
- Приоритетный доступ к реле (быстрая доставка сообщений)
|
||||
- Эксклюзивные стикерпаки и реакции
|
||||
- Бейджи профиля и визуальные украшения
|
||||
- Ранний доступ к новым функциям
|
||||
|
||||
**Стратегия ценообразования:**
|
||||
|
||||
- Доступные цены (~149-299 руб/мес)
|
||||
- Оплата российскими методами: СБП, карты Мир, оплата с баланса мобильного
|
||||
- Оплата с мобильного критически важна — молодёжь может платить с баланса телефона
|
||||
- Подарочные коды, покупаемые в рознице (как карты для игр)
|
||||
- «Подарить Pro другу» как социальная механика
|
||||
|
||||
**Почему работает:** Молодёжь уже платит за Discord Nitro, Telegram Premium, игровые пропуски.
|
||||
Статусные символы и кастомизация — проверенная монетизация для этой аудитории.
|
||||
|
||||
#### 1.2 Маркетплейс стикеров и тем
|
||||
|
||||
- Создатели дизайнят и продают стикерпаки, темы и декорации профилей
|
||||
- Morpheus берёт комиссию 15-20%
|
||||
- Создатели зарабатывают реальные деньги, что стимулирует качественный контент
|
||||
- Бесплатные базовые паки гарантируют, что неплатящие пользователи не исключены
|
||||
|
||||
### Уровень 2: Доход роста (месяцы 3-6)
|
||||
|
||||
#### 2.1 Инструменты для создателей (платные)
|
||||
|
||||
Для пользователей с аудиторией (блогеры, музыканты, художники):
|
||||
|
||||
- Дашборд аналитики (агрегированная, неидентифицирующая)
|
||||
- Платные подписки на каналы создателей (Morpheus берёт 10-15%)
|
||||
- Чаевые через интегрированную оплату (Lightning Network или традиционная)
|
||||
- Закрытый контент для подписчиков
|
||||
|
||||
#### 2.2 Бизнес-профили
|
||||
|
||||
- Верифицированные бизнес-аккаунты с расширенными возможностями
|
||||
- Инструменты коммуникации с клиентами
|
||||
- Никакого рекламного таргетинга — бизнесы постят для своих подписчиков органически
|
||||
- Фиксированная месячная плата, никаких плат за показы
|
||||
|
||||
### Уровень 3: Доход экосистемы (месяцы 6-12)
|
||||
|
||||
#### 3.1 Хостинг реле Morpheus
|
||||
|
||||
- Управляемая инфраструктура реле для сообществ и организаций
|
||||
- «Ваше сообщество, ваш реле, наша инфраструктура»
|
||||
- Тарификация по хранилищу и пропускной способности
|
||||
|
||||
#### 3.2 Доступ к API
|
||||
|
||||
- Бесплатный уровень с ограничениями для разработчиков-любителей
|
||||
- Платные уровни для ботов, интеграций и сторонних приложений
|
||||
- Развивает экосистему, не субсидируя её бесконечно
|
||||
|
||||
## Антипаттерны (чего мы НЕ будем делать)
|
||||
|
||||
| Антипаттерн | Почему нет |
|
||||
| --- | --- |
|
||||
| Любая форма рекламы | Основной принцип — никакой рекламы, никогда |
|
||||
| Лицензирование / продажа данных | Нарушает обещание приватности |
|
||||
| Freemium с изуродованным бесплатным уровнем | Отталкивает основную аудиторию |
|
||||
| Токены / криптовалютные спекуляции | Отвлекает от продукта, привлекает не тех |
|
||||
| Рост любой ценой на венчурные деньги | Неверные стимулы, ведёт к деградации продукта |
|
||||
| Платные базовые сообщения | Общение — право, а не премиум-функция |
|
||||
|
||||
## Модель финансовой устойчивости
|
||||
|
||||
**Фаза 1 (0-6 месяцев):** Начальное финансирование или гранты.
|
||||
Компактная команда. Запуск реле по себестоимости.
|
||||
|
||||
**Фаза 2 (6-18 месяцев):** Pro-подписки + комиссии маркетплейса покрывают серверные расходы.
|
||||
Цель: конверсия 3-5% в Pro среди активных пользователей.
|
||||
|
||||
**Фаза 3 (18+ месяцев):** Экономика создателей + бизнес-профили генерируют маржу.
|
||||
Хостинг реле становится центром прибыли. Устойчивость без внешнего финансирования.
|
||||
|
||||
## Ключевая метрика
|
||||
|
||||
**Доход с пользователя никогда не должен требовать знания, кто этот пользователь.**
|
||||
Вся монетизация добровольная, явная и не зависящая от личности.
|
||||
131
docs/ru/philosophy.md
Normal file
131
docs/ru/philosophy.md
Normal file
@@ -0,0 +1,131 @@
|
||||
# Morpheus — Философия
|
||||
|
||||
> «Все знают твоё имя. Никто не читает твои сообщения.»
|
||||
|
||||
## Главное различие
|
||||
|
||||
**Morpheus — приватный, не анонимный.**
|
||||
|
||||
У тебя есть реальная личность в Morpheus — профиль, репутация, подписчики, история.
|
||||
Люди тебя знают. В этом суть социальной сети.
|
||||
|
||||
Но твои личные сообщения зашифрованы сквозным шифрованием NIP-44. Не потому что мы
|
||||
решили их не читать — а потому что мы архитектурно *не можем*. Шифрование происходит
|
||||
на твоём устройстве, между тобой и получателем. У нас никогда нет ключей.
|
||||
|
||||
Это не политическое заявление. Это инженерное решение.
|
||||
|
||||
| Что мы МОЖЕМ предоставить по закону | Чего мы НЕ МОЖЕМ предоставить, никогда |
|
||||
| --- | --- |
|
||||
| Публичные посты (они публичные по замыслу) | Содержание зашифрованных ЛС |
|
||||
| Метаданные аккаунта (дата создания, публичный ключ) | Приватные ключи шифрования |
|
||||
| Логи подключений к реле (IP, время) | Расшифрованные сообщения |
|
||||
| Публичный социальный граф (кто на кого подписан) | Сообщения, не хранившиеся на наших реле |
|
||||
|
||||
Мы соблюдаем закон. Мы также строим системы, в которых самые чувствительные данные
|
||||
просто не существуют в доступной нам форме. Эти два утверждения не противоречат друг другу.
|
||||
|
||||
## Зачем Morpheus существует
|
||||
|
||||
Социальные сети в России под давлением. Сервисы блокируют, API ограничивают,
|
||||
контент модерируют по внешнему указанию. Молодые люди заслуживают социальное пространство, которое:
|
||||
|
||||
1. **Быстрое** — потому что они привыкли к лучшим приложениям в мире
|
||||
2. **Красивое** — потому что эстетика важна для этого поколения
|
||||
3. **Честное насчёт приватности** — не «доверьтесь нам», а «проверьте: вот код»
|
||||
4. **Устойчивое** — если что-то изменится политически, твои сообщения по-прежнему твои
|
||||
|
||||
## Принципы дизайна
|
||||
|
||||
### 1. Скорость — это уважение
|
||||
|
||||
Каждая миллисекунда загрузки говорит «мы не ценим твоё время».
|
||||
Morpheus должен ощущаться мгновенным — быстрее Telegram, плавнее Instagram.
|
||||
60fps или ничего. Если пользователь замечает задержку — это баг.
|
||||
|
||||
### 2. Приватность через архитектуру, а не через политику
|
||||
|
||||
Не говори «мы не будем читать ваши сообщения». Говори «мы не можем».
|
||||
Шифрование NIP-44 означает, что содержимое ЛС — шифротекст на наших реле.
|
||||
Мы не даём обещание приватности — мы даём математическую гарантию.
|
||||
Публичные посты — публичные. Личные сообщения — личные. Никакой двусмысленности.
|
||||
|
||||
### 3. Не анонимный, не под наблюдением — просто приватный
|
||||
|
||||
У пользователей есть личности. Они строят репутацию. Они отвечают за публичное поведение.
|
||||
Но их личные разговоры — их. Это то же ожидание, что люди имеют
|
||||
от почтовых писем, телефонных звонков и личных бесед.
|
||||
Morpheus просто распространяет это ожидание на цифровое общение.
|
||||
|
||||
### 4. Простота — это сила
|
||||
|
||||
Каждая функция должна оправдать своё существование. Если подросток не может
|
||||
разобраться за 3 секунды — слишком сложно. Никаких страниц настроек. Никаких переключателей.
|
||||
Приложение должно ощущаться как читающее мысли, а не как требующее инструкцию.
|
||||
|
||||
### 5. Мы бизнес, а не движение
|
||||
|
||||
Morpheus — это компания, которая делает продукт. Мы берём деньги за премиум-функции.
|
||||
Мы не финансируемся рекламой, не продажей данных, не идеологией.
|
||||
Наш стимул прост: сделать продукт настолько хорошим, чтобы за него платили.
|
||||
Когда стимулы понятны — доверие следует.
|
||||
|
||||
### 6. Законопослушный и принципиальный
|
||||
|
||||
Мы работаем в рамках закона. Регистрируемся где требуется. Отвечаем на законные запросы.
|
||||
И строим системы, где зашифрованный контент не может быть расшифрован нами.
|
||||
Это не противоречия — это ответственная инженерия.
|
||||
Мы никогда не установим бэкдоры, депонирование ключей или призрачные протоколы.
|
||||
Если мы технически не можем выполнить конкретный запрос, мы об этом прозрачно сообщаем.
|
||||
|
||||
### 7. Открытый по умолчанию
|
||||
|
||||
Клиент с открытым исходным кодом. Протокол (Nostr) открытый.
|
||||
Пользователи могут проверить каждое заявление о приватности, прочитав код.
|
||||
Если не доверяете нам — не верьте на слово — проведите аудит.
|
||||
|
||||
## Что такое Morpheus
|
||||
|
||||
- Быстрая, красивая социальная сеть для молодых русскоязычных людей
|
||||
- Построена на протоколе Nostr для настоящего шифрования и переносимости
|
||||
- Бизнес, который зарабатывает на премиум-функциях, а не на данных пользователей
|
||||
- Соблюдает применимое законодательство, защищая то, что защищает шифрование
|
||||
- Приложение, о котором друг рассказывает потому что оно хорошее, а не потому что политическое
|
||||
|
||||
## Чем Morpheus НЕ является
|
||||
|
||||
- **Не анонимный** — у тебя реальная, постоянная личность
|
||||
- **Не инструмент протеста** — это для мемов, групповых чатов, знакомств, музыки, друзей
|
||||
- **Не крипто/Web3 проект** — Nostr использует ключи, но нет токенов и блокчейна
|
||||
- **Не антиправительственный** — мы соблюдаем закон; мы также используем надёжное шифрование
|
||||
- **Не даркнет-приложение** — эстетика яркая, современная и мейнстримная
|
||||
|
||||
## Спектр приватности
|
||||
|
||||
```plaintext
|
||||
Полная слежка Позиция Morpheus Полная анонимность
|
||||
|__________________________|___________________________|
|
||||
VK, OK «Приватный, не анонимный» Tor, I2P
|
||||
- Реальные личности
|
||||
- E2E-шифрованные ЛС
|
||||
- Публичные посты публичны
|
||||
- Законопослушная работа
|
||||
- Без бэкдоров
|
||||
```
|
||||
|
||||
Morpheus занимает практичную золотую середину: та же приватность, которую ты ожидаешь
|
||||
в реальной жизни, применённая к цифровому общению. Не более экстремально. Не менее.
|
||||
|
||||
## Обещание Morpheus
|
||||
|
||||
Мы будем:
|
||||
|
||||
- Шифровать все ЛС с NIP-44 — всегда, по умолчанию, без необходимости включения
|
||||
- Публиковать наш исходный код
|
||||
- Отвечать на законные запросы данными, которыми мы реально располагаем
|
||||
- Быть прозрачными о том, какие данные существуют, а какие нет
|
||||
- Никогда не добавлять бэкдоры и не ослаблять шифрование
|
||||
- Никогда не продавать данные пользователей и не запускать рекламу
|
||||
- Строить устойчивый бизнес на премиум-функциях
|
||||
|
||||
Мы будем честны, когда не можем что-то сделать, а не притворяться, что можем.
|
||||
242
docs/ru/threat-model-and-workarounds.md
Normal file
242
docs/ru/threat-model-and-workarounds.md
Normal file
@@ -0,0 +1,242 @@
|
||||
# Morpheus — Модель угроз и решения
|
||||
|
||||
## Юридическая позиция
|
||||
|
||||
Morpheus — **законопослушная, принципиальная** компания:
|
||||
|
||||
- Мы регистрируемся где требуется и работаем в рамках применимого права
|
||||
- Мы отвечаем на законные запросы данными, которыми реально располагаем
|
||||
- Мы используем сквозное шифрование NIP-44 для ЛС — содержимое ЛС не является данными, которые мы имеем в читаемой форме
|
||||
- Мы никогда не добавим бэкдоры, депонирование ключей и не ослабим шифрование
|
||||
- Мы прозрачны: если нас просят о данных, которые мы не можем предоставить, мы объясняем почему
|
||||
|
||||
Это модель Apple/WhatsApp, применённая к социальным сетям:
|
||||
полное сотрудничество, но архитектура делает определённые запросы технически невозможными.
|
||||
|
||||
---
|
||||
|
||||
## Основное различие: Приватный ≠ Анонимный
|
||||
|
||||
Morpheus — **приватный**, не **анонимный**.
|
||||
|
||||
| | Анонимный | Приватный (Morpheus) |
|
||||
| --- | --- | --- |
|
||||
| Идентичность | Скрытая, одноразовая | Реальная, постоянная, с репутацией |
|
||||
| Публичный контент | Нельзя отследить автора | Автор известен — в этом суть |
|
||||
| ЛС | Никто не может их прочитать | Никто не может их прочитать (NIP-44) |
|
||||
| Метаданные | Скрытые (уровень Tor) | Доступны операторам реле |
|
||||
| Юридическая позиция | Уклонение от идентификации | Законопослушность; шифрование защищает контент |
|
||||
| Атмосфера | Даркнет, паранойя | Нормальная социальная жизнь с реальной защитой |
|
||||
|
||||
**Позиция Morpheus:** «Все знают твоё имя. Никто не читает твои сообщения.»
|
||||
|
||||
NIP-44 шифрует *содержание* личных сообщений. Метаданные (кто с кем общался, когда)
|
||||
видны операторам реле. Это честная и защитимая позиция:
|
||||
мы защищаем разговор, а не факт его существования.
|
||||
|
||||
---
|
||||
|
||||
## Проблема 1: Несоответствие аудитории и ценностного предложения
|
||||
|
||||
**Проблема:** Молодёжь не покупает «приватность». Они покупают скорость, эстетику и статус.
|
||||
|
||||
**Решения:**
|
||||
|
||||
1. **Вести продуктом, а не протоколом.** Маркетинг никогда не упоминает Nostr, реле или шифрование напрямую. Он говорит: «самое быстрое социальное приложение» или «групповые чаты, которые реально работают».
|
||||
|
||||
2. **Приватность как текстура, а не фича.** Вместо страницы «настройки приватности» приватность проявляется как:
|
||||
- Тонкая иконка замка на ЛС (всегда там, нельзя отключить — просто работает)
|
||||
- «Сообщения зашифрованы» показано один раз при онбординге, потом никогда
|
||||
- Нет «был в сети» или «прочитано» по умолчанию (приватность = социальный комфорт)
|
||||
|
||||
3. **Скорость — ЭТО фича.** Молодёжь сравнивает приложения по ощущению скорости. Инвестировать непропорционально в воспринимаемую производительность: оптимистичный UI, мгновенная отправка, предзагрузка лент, агрессивное кеширование.
|
||||
|
||||
4. **Социальное доказательство важнее фич.** Получить 5 популярных создателей на платформу до публичного запуска. Молодёжь идёт за людьми, а не за протоколами.
|
||||
|
||||
---
|
||||
|
||||
## Проблема 2: Технические ограничения Nostr
|
||||
|
||||
**Проблема:** Nostr не имеет нативной поддержки функций, которые ожидает молодёжь.
|
||||
|
||||
### 2a. Групповые чаты
|
||||
|
||||
**Текущее состояние:** NIP-29 (группы на базе реле) базовый. Нет богатых функций.
|
||||
|
||||
**Решение:**
|
||||
|
||||
- Строить на NIP-29 для публичных групп (модерируемые реле, обнаруживаемые)
|
||||
- Для приватных групп: NIP-44 шифрование с общим групповым ключом, ротация при смене участников
|
||||
- Реализовать функции групп на уровне клиента: ответы, реакции, закрепы, упоминания, треды
|
||||
- Это кастомная работа, но даёт конкурентное преимущество — «лучшие групповые чаты на Nostr»
|
||||
|
||||
### 2b. Хостинг медиа
|
||||
|
||||
**Текущее состояние:** Nostr-события текстовые. Медиа требует внешний хостинг.
|
||||
|
||||
**Решение:**
|
||||
|
||||
- Запуск управляемых серверов Blossom (BLOb Simple Storage) для загрузки медиа
|
||||
- NIP-96 хранение файлов как стандарт — пользователи загружают через приложение, раздача через CDN
|
||||
- Агрессивная клиентская компрессия (WebP/AVIF для изображений, H.265 для видео)
|
||||
- Прогрессивная загрузка: превью → среднее → полное разрешение
|
||||
- Квота хранения привязана к уровню аккаунта (бесплатный = разумный, Pro = щедрый)
|
||||
- Контентно-адресуемое хранение (дедупликация по хешу) экономит расходы
|
||||
|
||||
### 2c. Поиск и обнаружение
|
||||
|
||||
**Текущее состояние:** Нет глобального поиска. Поиск по реле — специфичен для реле.
|
||||
|
||||
**Решение:**
|
||||
|
||||
- Клиентский полнотекстовый индекс контента подписок (SQLite/Realm на устройстве)
|
||||
- «Обзор» на базе курируемой агрегации реле — Morpheus запускает индексирующий реле
|
||||
- Трендовые темы вычисляются по объёму публичных событий через реле сообщества Morpheus
|
||||
- Обнаружение по хештегам (NIP-12 запросы по общим тегам)
|
||||
- «Люди, которых вы можете знать» на основе пересечения социальных графов (вычисляется на клиенте)
|
||||
- Курируемые людьми рекомендуемые аккаунты и сообщества (редакционно, не алгоритмически)
|
||||
|
||||
### 2d. Управление ключами / Восстановление личности
|
||||
|
||||
**Текущее состояние:** Потерял nsec = потерял всё. Неприемлемо для молодёжи.
|
||||
|
||||
**Решение:**
|
||||
|
||||
- **Социальное восстановление ключа (основное):** Разделение секрета Шамира — ключ восстановления делится между N доверенными контактами, требуется K из N для восстановления. «Выбери 5 друзей. Любые 3 могут помочь восстановить аккаунт.»
|
||||
- **Зашифрованный облачный бэкап (опционально):** Зашифровать nsec паролем пользователя, хранить зашифрованный блоб в iCloud/Google Drive.
|
||||
- **Ключи привязанные к устройству:** Хранение nsec в Secure Enclave / Android Keystore. Биометрическая разблокировка.
|
||||
- **NIP-46 (Nostr Connect):** Паттерн удалённого подписанта — для продвинутых пользователей.
|
||||
- **Прогрессивное раскрытие:** Новые пользователи получают ключ на устройстве + предложение облачного бэкапа. Продвинутые пользователи могут экспортировать nsec.
|
||||
|
||||
### 2e. Истории / Эфемерный контент
|
||||
|
||||
**Текущее состояние:** Нет нативного примитива Nostr для исчезающего контента.
|
||||
|
||||
**Решение:**
|
||||
|
||||
- NIP-40 (таймстамп истечения) на событиях — реле удаляют после TTL
|
||||
- Клиент обеспечивает отображение истечения (даже если rogue-реле хранит событие)
|
||||
- Истории как карусель событий kind:20 или kind:1063 с истечением через 24ч
|
||||
- Не «исчезающие» в смысле Signal — но соответствует UX историй Instagram/Telegram
|
||||
|
||||
---
|
||||
|
||||
## Проблема 3: Блокировка государством
|
||||
|
||||
**Проблема:** Роскомнадзор может заблокировать домены и IP реле.
|
||||
|
||||
**Контекст:** Morpheus работает законопослушно, но блокировка может произойти несмотря на это (как с Telegram в 2018-2020). Цель — не уклонение от правоохранительных органов, а обеспечение доступности сервиса.
|
||||
|
||||
**Решения:**
|
||||
|
||||
### Слой 1: Стандартная устойчивость
|
||||
|
||||
- WebSocket через TLS (wss://) выглядит как обычный HTTPS-трафик для DPI
|
||||
- Реле за Cloudflare или аналогичным CDN — блокировка CDN блокирует миллионы сайтов
|
||||
- Несколько доменов реле в разных TLD — избыточность, не уклонение
|
||||
- Приложение автоматически переключается на рабочие реле
|
||||
|
||||
### Слой 2: Устойчивость распространения
|
||||
|
||||
- Android: Google Play, RuStore, прямая загрузка APK, F-Droid
|
||||
- iOS: App Store, PWA как запасной вариант при удалении из магазина
|
||||
- Веб-приложение всегда доступно как базовая линия
|
||||
- Ссылки на APK/PWA через существующие каналы (Telegram-боты, QR-коды)
|
||||
|
||||
### Слой 3: Проактивное взаимодействие
|
||||
|
||||
- Проактивно взаимодействовать с регуляторами — объяснять, какие данные у нас есть, и предоставлять их
|
||||
- Демонстрировать готовность к сотрудничеству для снижения мотивации к блокировке
|
||||
- Поддерживать диалог — блокировка часто переговоры, а не бинарное решение
|
||||
|
||||
**Примечание:** Если Morpheus заблокируют несмотря на сотрудничество, протокол Nostr гарантирует
|
||||
доступ к данным через любой другой Nostr-клиент. Это ультимативная устойчивость.
|
||||
|
||||
---
|
||||
|
||||
## Проблема 4: Юридическое соответствие (Закон Яровой / СОРМ)
|
||||
|
||||
**Проблема:** Российское законодательство требует хранения и предоставления доступа к коммуникациям.
|
||||
|
||||
**Подход: Полное сотрудничество, честное объяснение архитектуры.**
|
||||
|
||||
1. **Регистрация по требованию.** Юрлицо (юрисдикция TBD по совету юристов). Регистрация как организатор распространения информации при необходимости.
|
||||
|
||||
2. **Хранить то, что можем.** Публичные посты, метаданные, логи подключений — они существуют на наших реле и мы можем их предоставить.
|
||||
|
||||
3. **Объяснять то, что не можем хранить.** Содержимое ЛС зашифровано на стороне клиента NIP-44. У нас никогда нет ключей дешифрования. Это не уклонение — это задокументированная, проверяемая архитектура.
|
||||
|
||||
4. **Открытый исходный код подтверждает наши заявления.** Любой технический аудит кодовой базы подтвердит, что сервер никогда не имеет доступа к открытому тексту ЛС.
|
||||
|
||||
5. **Юридический прецедент.** WhatsApp, Signal и iMessage работают с E2E-шифрованием во многих юрисдикциях.
|
||||
|
||||
6. **Сбор данных регистрации не более необходимого.** Если для юридического соответствия требуется телефон/email, мы собираем. Но не больше.
|
||||
|
||||
**Ключевой принцип:** Мы никогда не отказываемся сотрудничать. Мы объясняем техническую реальность. Зашифрованное зашифровано — не потому что мы выбираем не расшифровывать, а потому что не можем.
|
||||
|
||||
---
|
||||
|
||||
## Проблема 5: Монетизация без рекламы
|
||||
|
||||
**Проблема:** Никакой рекламы, никогда. Нужен альтернативный доход.
|
||||
|
||||
**Подход:** См. [monetization.md](./monetization.md). Резюме:
|
||||
|
||||
- Подписка Morpheus Pro (премиум-функции, кастомизация, увеличенные лимиты)
|
||||
- Маркетплейс стикеров/тем (экономика создателей с комиссией)
|
||||
- Инструменты для создателей (платная аналитика, контент только для подписчиков)
|
||||
- Бизнес-профили (фиксированная месячная плата, только органический охват)
|
||||
- Управляемый хостинг реле (инфраструктура-как-сервис для сообществ)
|
||||
|
||||
Все потоки дохода добровольные и не требуют профилирования пользователей.
|
||||
|
||||
---
|
||||
|
||||
## Проблема 6: Модерация контента
|
||||
|
||||
**Проблема:** Молодёжь на платформе требует ответственной модерации без подрыва приватности.
|
||||
|
||||
**Подход:**
|
||||
|
||||
1. **Публичный контент модерируем.** Публичные посты... публичные. Мы можем и будем модерировать публичный контент на реле, которые мы оперируем. Стандартные правила сообщества.
|
||||
|
||||
2. **Зашифрованные ЛС не модерируемы нами — и это нормально.** Как почтовая служба не читает ваши письма. Клиентские функции безопасности (блок, жалоба, мут) дают пользователям контроль.
|
||||
|
||||
3. **Многоуровневая модерация публичного контента:**
|
||||
- **Уровень реле:** Реле Morpheus применяют опубликованные правила сообщества.
|
||||
- **Уровень сообщества:** Модераторы групп управляют своими пространствами. NIP-56 жалобы поступают к модераторам.
|
||||
- **Уровень клиента:** Спам-фильтры, предупреждения о контенте, мут/блок инструменты.
|
||||
|
||||
4. **Соответствие CSAM:** Хеш-сопоставление (PhotoDNA или эквивалент) на медиа, загружаемые на серверы Morpheus. Обязательное юридическое и этическое обязательство. На серверной стороне медиа CDN.
|
||||
|
||||
5. **Отчёты прозрачности.** Ежеквартальные публикации: сколько модерационных действий, сколько юридических запросов, какие данные были предоставлены.
|
||||
|
||||
---
|
||||
|
||||
## Проблема 7: Холодный старт / Сетевые эффекты
|
||||
|
||||
**Проблема:** Социальная сеть без пользователей бесполезна.
|
||||
|
||||
**Решения:**
|
||||
|
||||
1. **Запуск как мессенджер, потом как соцсеть.** Групповым чатам не нужны сетевые эффекты — нужны 5-10 друзей. «Перенеси свою группу друзей в Morpheus» — выполнимое предложение.
|
||||
|
||||
2. **Мост в Telegram.** Бот для кросспостинга между группами Telegram и Morpheus. Снижает стоимость перехода.
|
||||
|
||||
3. **Таргетировать конкретные сообщества:**
|
||||
- Студенческие группы университетов
|
||||
- Игровые сообщества
|
||||
- Музыка/арт сцены
|
||||
- Технически продвинутые ранние пользователи
|
||||
|
||||
4. **Партнёрства с создателями.** Привлечь популярных русскоязычных создателей контента. Их аудитории последуют.
|
||||
|
||||
5. **Функция «Импорт группы».** Создать группу Morpheus из существующей группы Telegram/VK, авто-приглашение участников.
|
||||
|
||||
6. **Реферальные механики.** «Пригласи 3 друзей → разблокируй эксклюзивный стикерпак.»
|
||||
|
||||
7. **Запустить киллер-фичу, которой нет нигде:**
|
||||
- Голосовые сообщения с автоматической транскрипцией (огромный спрос в русскоязычных сообществах)
|
||||
- Встроенный редактор мемов
|
||||
- Анонимные вопросы на профилях (как ASKfm — весело и вирально)
|
||||
- Превосходные инструменты создания стикеров
|
||||
85
docs/ru/web-of-trust.md
Normal file
85
docs/ru/web-of-trust.md
Normal file
@@ -0,0 +1,85 @@
|
||||
# Morpheus — Сеть доверия (Web of Trust)
|
||||
|
||||
## Основная идея
|
||||
|
||||
Реле Morpheus принимает события только от публичных ключей, на которые
|
||||
подписаны как минимум **N** существующих участников реле. Используется
|
||||
граф подписок, уже существующий в Nostr (NIP-02 списки контактов) —
|
||||
никаких кастомных NIP, токенов-приглашений или специальных событий
|
||||
поручительства.
|
||||
|
||||
## Как это работает
|
||||
|
||||
1. Пользователь A публикует список контактов NIP-02, включающий
|
||||
публичный ключ пользователя B
|
||||
2. Реле подсчитывает, сколько существующих участников подписаны на B
|
||||
3. Если количество достигает порога (например, 3), реле начинает
|
||||
принимать события от B
|
||||
4. Если количество подписчиков B падает ниже порога (отписки), реле
|
||||
перестаёт принимать новые события от него
|
||||
|
||||
```text
|
||||
Реле получает событие от pubkey X
|
||||
→ Подсчитать NIP-02 списки контактов на этом реле, включающие X
|
||||
→ Если количество >= N: принять событие
|
||||
→ Если количество < N: отклонить с auth-required или closed
|
||||
```
|
||||
|
||||
## Почему это работает
|
||||
|
||||
- **Спам умирает естественно** — боты не могут набрать реальные подписки
|
||||
от существующих участников и никогда не достигают порога
|
||||
- **Нет затрат на модерацию** — граф подписок и есть слой модерации;
|
||||
ни одному админу не нужно вручную одобрять или банить пользователей
|
||||
- **Сообщество остаётся целостным** — начальное сообщество русскоязычное,
|
||||
подписки распространяются через реальные социальные связи, поэтому
|
||||
сеть остаётся культурно и лингвистически однородной без явных
|
||||
языковых фильтров
|
||||
- **Нерелевантный шум исчезает** — реле обслуживает только события от
|
||||
множества участников, случайный глобальный трафик Nostr не попадает
|
||||
в ленту
|
||||
- **Нет кастомного протокола** — используются только NIP-01 (события)
|
||||
и NIP-02 (списки контактов), которые поддерживает каждый клиент Nostr
|
||||
- **Децентрализованное доверие** — нет единого привратника; доверие
|
||||
распределено по графу подписок
|
||||
|
||||
## Настройка порога
|
||||
|
||||
| N | Эффект |
|
||||
| --- | --- |
|
||||
| 1 | Минимальный барьер — одна подписка от любого участника даёт доступ. Лёгкий рост, слабая защита от спама. |
|
||||
| 3 | Баланс — требуется небольшой социальный кластер. Хорошо для фазы раннего роста. |
|
||||
| 5+ | Тесное сообщество — труднее попасть, сильная защита от спама. Хорошо для зрелой сети. |
|
||||
|
||||
Порог может быть динамическим — ниже в период раннего роста, выше по
|
||||
мере взросления сети. Также может различаться по типу событий
|
||||
(например, публикация требует 3 подписок, а ЛС — только 1).
|
||||
|
||||
## Граничные случаи
|
||||
|
||||
- **Проблема курицы и яйца** — первые N пользователей добавляются
|
||||
вручную (начальное множество). Это основатели сообщества.
|
||||
- **Наблюдатели** — пользователи, которые читают, но не публикуют, тоже
|
||||
нуждаются в подписках для взаимодействия. Доступ на чтение может быть
|
||||
открытым.
|
||||
- **Кросс-реле** — пользователи могут подключаться к публичным реле
|
||||
параллельно с реле Morpheus. Барьер WoT применяется только к ленте
|
||||
реле Morpheus.
|
||||
- **Защита от сибилов** — создание фейковых аккаунтов для подписки на
|
||||
себя возможно, но затратно в масштабе (каждому фейку самому нужно N
|
||||
реальных подписчиков). Рекурсия делает сибил-атаки экспоненциально
|
||||
сложнее.
|
||||
- **Потеря подписчиков** — если кто-то отписывается и количество падает
|
||||
ниже N, существующие события остаются на реле, но новые отклоняются
|
||||
до восстановления числа подписчиков.
|
||||
|
||||
## Заметки по реализации
|
||||
|
||||
- Реле поддерживает материализованное представление графа подписок
|
||||
(NIP-02, kind:3 события)
|
||||
- При каждом входящем событии проверяется количество входящих подписок
|
||||
автора относительно порога
|
||||
- Подсчёт обновляется в реальном времени при публикации списков
|
||||
контактов NIP-02
|
||||
- Начальное множество (вручную разрешённые pubkey) настраивается при
|
||||
запуске реле
|
||||
Reference in New Issue
Block a user