Initial commit: проект документации YARU

This commit is contained in:
2026-03-01 17:32:45 +03:00
commit 243b5caf7e
860 changed files with 13239 additions and 0 deletions
+80
View File
@@ -0,0 +1,80 @@
# Документация проекта YARU
**Yet Another Russian Uncompleted...** — федеративная социальная сеть на базе ActivityPub
---
## 📁 Разделы документации
| Раздел | Описание | Статус |
|--------|----------|--------|
| [Backend](backend/README.md) | FastAPI, PostgreSQL, ActivityPub, экспорт данных | ✅ Заполнен |
| [Frontend](frontend/README.md) | Svelte, компоненты, редактор, real-time | ✅ Заполнен |
| [Marketing](marketing/README.md) | Позиционирование, аудитория, конкуренты, брендинг | ✅ Заполнен |
| [Design](design/README.md) | Логотип, цвета, типографика, компоненты | 📝 Требует утверждения |
| [API](api/README.md) | REST + ActivityPub спецификации | ✅ Заполнен |
| [Deployment](deployment/README.md) | Docker, CI/CD, мониторинг, бэкапы | ✅ Заполнен |
---
## 🎯 О проекте
YARU — это попытка создать альтернативу Mastodon со следующими особенностями:
- ✅ **Без ограничений на длину поста** — пишите статьи, а не твиты
- ✅ **Экспорт данных** — ваш контент всегда принадлежит вам (Markdown + медиа)
- ✅ **Fediverse совместимость** — полная совместимость с Mastodon
- ✅ **Карма** — качественная оценка контента вместо лайков
- ✅ **Сменяемая концепция** — название адаптируется под контекст
### Стек технологий
| Компонент | Технология |
|-----------|------------|
| Бэкенд | Python 3.11+ + FastAPI |
| Фронтенд | Svelte 4+ + TypeScript |
| База данных | PostgreSQL 15+ (основная + кэш + очереди) |
| Протокол | ActivityPub (Fediverse) |
| Редактор | Временное решение (Chronicle в разработке) |
---
## 📋 MVP функционал
1. **Лента** — домашняя и публичная
2. **Профили** — создание, редактирование, аватар
3. **Посты** — создание, редактирование, удаление (без ограничения длины)
4. **Подписки** — follow/unfollow, список подписчиков
5. **Карма** — начисление/списание, защита от накрутки
6. **Экспорт** — выгрузка всего контента в Markdown + медиа
---
## 🔍 Вопросы для обсуждения
### Критичные для начала разработки
1. **ActivityPub совместимость** — обсуждение полной совместимости с Mastodon (обратная связь?)
2. **Дизайн** — кто делает макеты, есть ли предпочтения по цветам/стилю?
3. **Хостинг** — где размещать (Timeweb, Selectel, Hetzner, свой сервер)?
4. **Домен** — использовать yaru.nixg.ru или купить отдельный (yaru.ru, yaru.social)?
5. **Редактор** — какой WYSIWYG выбрать для MVP (TipTap, Quill, Markdown textarea)?
### Технические детали
- Нужен ли SSR (SvelteKit) или достаточно SPA?
- Как хранить медиа: локально, S3, или оба варианта?
- Требуется ли модерация контента (админ-панель)?
- Нужна ли программа раннего доступа?
---
## 📞 Контакты и ресурсы
- **Репозиторий**: `yaru.nixg.ru`
- **Редактор**: [chronicle.nixg.ru](https://chronicle.nixg.ru)
- **Документация для разработчиков**: см. разделы выше
---
*Последнее обновление: 2026-03-01*
+188
View File
@@ -0,0 +1,188 @@
# API документация
## REST API
### Базовый URL
```
GET/POST /api/v1/...
```
### Endpoints
#### Аутентификация
| Метод | Endpoint | Описание |
|-------|----------|----------|
| POST | `/oauth/token` | Получение JWT токена |
| POST | `/api/v1/accounts` | Регистрация |
| GET | `/api/v1/accounts/verify_credentials` | Текущий пользователь |
#### Посты
| Метод | Endpoint | Описание |
|-------|----------|----------|
| GET | `/api/v1/statuses/:id` | Получить пост |
| POST | `/api/v1/statuses` | Создать пост |
| DELETE | `/api/v1/statuses/:id` | Удалить пост |
| POST | `/api/v1/statuses/:id/like` | Лайк |
| POST | `/api/v1/statuses/:id/reblog` | Репост |
#### Ленты
| Метод | Endpoint | Описание |
|-------|----------|----------|
| GET | `/api/v1/timelines/home` | Домашняя лента |
| GET | `/api/v1/timelines/public` | Публичная лента |
| GET | `/api/v1/accounts/:id/statuses` | Посты пользователя |
#### Подписки
| Метод | Endpoint | Описание |
|-------|----------|----------|
| GET | `/api/v1/accounts/:id/followers` | Подписчики |
| GET | `/api/v1/accounts/:id/following` | Подписки |
| POST | `/api/v1/accounts/:id/follow` | Подписаться |
| POST | `/api/v1/accounts/:id/unfollow` | Отписаться |
#### Карма
| Метод | Endpoint | Описание |
|-------|----------|----------|
| GET | `/api/v1/accounts/:id/karma` | Карма пользователя |
| GET | `/api/v1/karma/history` | История кармы (текущий пользователь) |
#### Экспорт
| Метод | Endpoint | Описание |
|-------|----------|----------|
| POST | `/api/v1/export` | Запрос экспорта данных |
| GET | `/api/v1/export/:job_id` | Статус экспорта |
| GET | `/api/v1/export/:job_id/download` | Скачивание архива |
---
## ActivityPub API
### WebFinger
```
GET /.well-known/webfinger?resource=acct:{username}@{domain}
```
**Ответ**:
```json
{
"subject": "acct:username@yaru.nixg.ru",
"links": [
{
"rel": "self",
"type": "application/activity+json",
"href": "https://yaru.nixg.ru/users/username"
}
]
}
```
### Actor (Профиль пользователя)
```
GET /users/{username}
```
**Ответ** (ActivityPub Actor):
```json
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://w3id.org/security/v1"
],
"id": "https://yaru.nixg.ru/users/username",
"type": "Person",
"preferredUsername": "username",
"name": "Display Name",
"summary": "<p>Bio text</p>",
"inbox": "https://yaru.nixg.ru/users/username/inbox",
"outbox": "https://yaru.nixg.ru/users/username/outbox",
"followers": "https://yaru.nixg.ru/users/username/followers",
"following": "https://yaru.nixg.ru/users/username/following",
"publicKey": {
"id": "https://yaru.nixg.ru/users/username#main-key",
"owner": "https://yaru.nixg.ru/users/username",
"publicKeyPem": "-----BEGIN PUBLIC KEY-----..."
}
}
```
### Inbox (Входящие активности)
```
POST /users/{username}/inbox
```
**Принимаемые активности**:
- `Follow` — запрос подписки
- `Undo` — отмена подписки/лайка
- `Create` — новый пост (от подписчиков)
- `Like` — лайк поста
- `Announce` — репост
### Outbox (Исходящие активности)
```
GET /users/{username}/outbox
```
**Ответ**:
```json
{
"@context": "https://www.w3.org/ns/activitystreams",
"id": "https://yaru.nixg.ru/users/username/outbox",
"type": "OrderedCollection",
"totalItems": 42,
"orderedItems": [
{
"id": "https://yaru.nixg.ru/statuses/123/activity",
"type": "Create",
"actor": "https://yaru.nixg.ru/users/username",
"object": { ... }
}
]
}
```
---
## Формат ошибок
```json
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Поле 'content' не может быть пустым",
"details": {
"field": "content",
"reason": "required"
}
}
}
```
### Коды ошибок
| Код | HTTP статус | Описание |
|-----|-------------|----------|
| `VALIDATION_ERROR` | 400 | Ошибка валидации |
| `UNAUTHORIZED` | 401 | Не авторизован |
| `FORBIDDEN` | 403 | Нет доступа |
| `NOT_FOUND` | 404 | Ресурс не найден |
| `RATE_LIMITED` | 429 | Превышен лимит |
| `INTERNAL_ERROR` | 500 | Внутренняя ошибка |
---
## Rate Limiting
| Endpoint | Лимит | Окно |
|----------|-------|------|
| `/api/v1/statuses` | 10 запросов | 1 минута |
| `/api/v1/timelines/*` | 60 запросов | 1 минута |
| `/oauth/token` | 5 запросов | 1 минута |
| `/api/v1/export` | 1 запрос | 1 час |
---
## Вопросы для обсуждения
- [ ] Нужна ли пагинация через cursor или offset?
- [ ] Требуется ли версионирование API (`/api/v2/...`)?
- [ ] Какие поля включать в ответ при ошибке?
- [ ] Нужна ли поддержка GraphQL для сложных запросов?
+130
View File
@@ -0,0 +1,130 @@
# Backend документация
## Стек технологий
| Компонент | Технология | Примечание |
|-----------|------------|------------|
| Язык | Python 3.11+ | |
| Фреймворк | FastAPI | Асинхронный, автодокументация |
| База данных | PostgreSQL 15+ | Основная БД |
| Кэш | PostgreSQL + pg_redis | Или Redis через extension |
| Очереди | PostgreSQL + pgqueue | Или Celery + Redis |
| ORM | SQLAlchemy 2.0 + Async | Асинхронная работа |
---
## Архитектура сервера
```
┌─────────────────────────────────────────────────────────┐
│ FastAPI App │
├─────────────┬─────────────┬─────────────┬───────────────┤
│ REST API │ ActivityPub │ Auth API │ Export API │
│ (лента, │ (inbox, │ (OAuth2, │ (markdown, │
│ профили) │ outbox) │ JWT) │ медиа) │
└─────────────┴─────────────┴─────────────┴───────────────┘
│
┌─────────▼──────────┐
│ PostgreSQL │
│ ───────────────── │
│ • pg_redis (кэш) │
│ • pgqueue (очереди)│
│ • pg_trgm (поиск) │
└────────────────────┘
```
---
## Требования к бэкенду
### 1. ActivityPub реализация
- [ ] **Inbox** — приём активностей от других серверов
- [ ] **Outbox** — отправка активностей подписчикам
- [ ] **WebFinger** — обнаружение пользователей по @username@domain
- [ ] **Actor** — профиль пользователя в формате ActivityPub
- [ ] **Follow/Unfollow** — подписки между серверами
- [ ] **Create/Update/Delete** — посты и их редактирование
- [ ] **Like/Announce** — лайки и репосты
- [ ] **Mastodon совместимость** — тестирование с mastodon.social
### 2. REST API
- [ ] `/api/v1/accounts` — управление профилем
- [ ] `/api/v1/statuses` — создание/чтение постов
- [ ] `/api/v1/timelines/home` — домашняя лента
- [ ] `/api/v1/timelines/public` — публичная лента
- [ ] `/api/v1/follows` — подписки
- [ ] `/api/v1/karma` — карма пользователя
### 3. База данных (PostgreSQL)
#### Основные таблицы:
- `users` — пользователи (id, username, domain, display_name, bio, karma)
- `posts` — посты (id, user_id, content, content_type, created_at)
- `follows` — подписки (follower_id, following_id, created_at)
- `likes` — лайки (user_id, post_id, created_at)
- `media` — медиафайлы (id, user_id, filename, mime_type, size)
- `activities` — ActivityPub активности (id, type, actor, object, timestamp)
#### PostgreSQL расширения:
- `pg_trgm` — полнотекстовый поиск по постам
- `pg_redis` — кэширование лент
- `pgqueue` — фоновые задачи (отправка активностей)
### 4. Экспорт контента
**Требование**: Пользователь может экспортировать весь свой контент в виде:
```
export_username_2026-03-01/
├── profile.md # Информация о профиле
├── posts/
│ ├── 2026-03-01_post-123.md
│ ├── 2026-03-02_post-124.md
│ └── ...
├── media/
│ ├── image-001.png
│ ├── image-002.jpg
│ └── ...
└── manifest.json # Структура экспорта
```
- [ ] Формат постов — Markdown с frontmatter (дата, теги, карма)
- [ ] Медиа — оригинальные файлы с переименованием
- [ ] Manifest — JSON со списком всех файлов и метаданными
- [ ] API endpoint: `GET /api/v1/export/@username`
### 5. Аутентификация
- [ ] OAuth2 + JWT токены
- [ ] Поддержка Application Passwords для клиентов
- [ ] Сессии с возможностью отзыва
### 6. Карма
- [ ] Механизм начисления/списания кармы
- [ ] Защита от накрутки (лимиты, анти-спам)
- [ ] История изменений кармы
---
## План разработки бэкенда
1. [ ] Настройка проекта FastAPI + SQLAlchemy
2. [ ] Модели базы данных (users, posts, follows, likes)
3. [ ] REST API (CRUD для постов, профили)
4. [ ] ActivityPub базовая реализация (Actor, Outbox)
5. [ ] ActivityPub полная реализация (Inbox, Federation)
6. [ ] Экспорт контента (Markdown + медиа)
7. [ ] Система кармы
8. [ ] Тестирование совместимости с Mastodon
---
## Вопросы для обсуждения
- [ ] Нужно ли поддерживать совместимость с другими Fediverse-серверами (Pleroma, Pixelfed)?
- [ ] Требуется ли rate limiting на API? Какие лимиты?
- [ ] Как хранить медиа: локально, S3, или оба варианта?
- [ ] Нужна ли модерация контента (админ-панель)?
+205
View File
@@ -0,0 +1,205 @@
# Деплой и инфраструктура
## Архитектура развёртывания
```
┌─────────────────┐
│ Nginx/Traefik │
│ (reverse proxy)│
└────────┬────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌────────▼───────┐ ┌───▼────────┐ ┌───▼────────┐
│ FastAPI App │ │ FastAPI │ │ PostgreSQL│
│ (instance 1) │ │ (instance 2)│ │ + pgqueue │
└────────────────┘ └────────────┘ └────────────┘
```
---
## Docker контейнеризация
### Структура проекта
```
yaru.nixg.ru/
├── docker-compose.yml # Основной compose для разработки
├── docker-compose.prod.yml # Production конфигурация
├── Dockerfile # Образ приложения
└── docker/
├── nginx/
└── postgres/
```
### docker-compose.yml (разработка)
```yaml
version: '3.8'
services:
db:
image: postgres:15
environment:
POSTGRES_DB: yaru
POSTGRES_USER: yaru
POSTGRES_PASSWORD: yaru_dev
volumes:
- postgres_data:/var/lib/postgresql/data
app:
build: .
command: uvicorn main:app --reload --host 0.0.0.0
volumes:
- .:/app
environment:
DATABASE_URL: postgresql://yaru:yaru_dev@db/yaru
depends_on:
- db
nginx:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./docker/nginx/dev.conf:/etc/nginx/nginx.conf
volumes:
postgres_data:
```
---
## Production развёртывание
### Требования
- [ ] VPS с Ubuntu 22.04+ (минимум 2GB RAM, 2 CPU)
- [ ] Домен с настроенным DNS
- [ ] SSL сертификат (Let's Encrypt)
### Переменные окружения (production)
```bash
# База данных
DATABASE_URL=postgresql://yaru:***@localhost/yaru_prod
DATABASE_POOL_SIZE=20
# Безопасность
SECRET_KEY=***
JWT_EXPIRE_HOURS=24
# Файлы
MEDIA_ROOT=/var/yaru/media
MAX_UPLOAD_SIZE=50MB
# Fediverse
SERVER_DOMAIN=yaru.nixg.ru
SERVER_NAME=YARU
# Логирование
LOG_LEVEL=INFO
```
---
## CI/CD пайплайн
### GitHub Actions (пример)
```yaml
name: Deploy
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run tests
run: pytest
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- name: Deploy to VPS
run: |
ssh user@server "cd /var/yaru && docker-compose pull && docker-compose up -d"
```
---
## Мониторинг и логирование
### Логи
- [ ] Access logs (Nginx)
- [ ] Application logs (FastAPI → JSON format)
- [ ] Database logs (PostgreSQL slow queries)
### Метрики для мониторинга
- [ ] Response time (p50, p95, p99)
- [ ] Error rate
- [ ] Active users
- [ ] Posts per hour
- [ ] Federation activities
### Инструменты
- [ ] Prometheus + Grafana (метрики)
- [ ] Loki (логи)
- [ ] Uptime Kuma (доступность)
---
## Резервное копирование
### Что备份ровать
- [ ] PostgreSQL дамп (ежедневно)
- [ ] Медиафайлы (ежедневно)
- [ ] Конфигурационные файлы
### Стратегия
```bash
# Ежедневный бэкап БД
pg_dump -U yaru yaru > /backups/yaru_$(date +%Y%m%d).sql
# Синхронизация медиа
rsync -av /var/yaru/media /backups/media/
# Хранение: 7 дней локально, 30 дней в облаке
```
---
## Масштабирование
### Горизонтальное
- [ ] Несколько инстансов FastAPI за load balancer
- [ ] PostgreSQL репликация (read replicas)
- [ ] CDN для статики и медиа
### Оптимизация
- [ ] Кэширование лент в Redis
- [ ] Индексы PostgreSQL для частых запросов
- [ ] Фоновая отправка ActivityPub через очереди
---
## Чеклист деплоя
- [ ] Купить домен, настроить DNS
- [ ] Подготовить VPS (Ubuntu, firewall, SSH keys)
- [ ] Установить Docker + Docker Compose
- [ ] Настроить Nginx + SSL (Let's Encrypt)
- [ ] Развернуть PostgreSQL
- [ ] Запустить FastAPI приложение
- [ ] Настроить бэкапы
- [ ] Настроить мониторинг
- [ ] Протестировать ActivityPub federation
---
## Вопросы для обсуждения
- [ ] Какой хостинг выбрать (Timeweb, Selectel, Hetzner, DigitalOcean)?
- [ ] Нужен ли отдельный сервер для БД или всё на одном VPS?
- [ ] Использовать ли managed PostgreSQL или свой инстанс?
- [ ] Требуется ли CDN для медиа (Cloudflare, BunnyCDN)?
+129
View File
@@ -0,0 +1,129 @@
# Дизайн документация
## План раздела
- [ ] Логотип и фирменный стиль
- [ ] Цветовая палитра
- [ ] Типографика
- [ ] Дизайн-система компонентов
- [ ] Макеты основных страниц
- [ ] Анимации и переходы
---
## Логотип
### Концепция
- **Минимализм** — простой запоминающийся символ
- **Адаптивность** — работает с разными подзаголовками
- **Fediverse связь** — визуальная ассоциация с федеративными сетями
### Варианты
- [ ] Основной логотип (цветной)
- [ ] Монохромная версия
- [ ] Иконка для favicon/app
- [ ] Версия с подзаголовком (YARU Service/Revolution/Blog/Fediverse)
---
## Цветовая палитра
### Основная (требует утверждения)
| Цвет | HEX | Использование |
|------|-----|---------------|
| Primary | `# TBD` | Кнопки, ссылки, акценты |
| Secondary | `# TBD` | Вторичные элементы |
| Background | `# TBD` | Фон приложения |
| Surface | `# TBD` | Карточки, панели |
| Text Primary | `# TBD` | Основной текст |
| Text Secondary | `# TBD` | Вторичный текст |
| Success | `# TBD` | Положительные действия |
| Error | `# TBD` | Ошибки |
| Warning | `# TBD` | Предупреждения |
### Тёмная тема
- [ ] Определить цвета для тёмной темы
- [ ] Автоматическое переключение по системным настройкам
---
## Типографика
### Шрифты (требует выбора)
- [ ] Основной шрифт: **TBD** (Inter, Roboto, Open Sans?)
- [ ] Моноширинный: **TBD** (Fira Code, JetBrains Mono?)
- [ ] Поддержка кириллицы
### Иерархия
```
H1 — Заголовки страниц (32px)
H2 — Разделы (24px)
H3 — Подразделы (20px)
Body — Основной текст (16px)
Small — Вторичный текст (14px)
```
---
## Компоненты дизайн-системы
### Базовые компоненты
- [ ] Button (primary, secondary, outline, ghost)
- [ ] Input (text, textarea, password)
- [ ] Card (пост, профиль)
- [ ] Avatar (пользователь)
- [ ] Badge (теги, статусы)
- [ ] Modal (диалоги)
- [ ] Toast (уведомления)
- [ ] Spinner (загрузка)
- [ ] Dropdown (меню)
### Специфичные компоненты
- [ ] PostCard (пост с контентом, медиа, кармой)
- [ ] KarmaCounter (отображение кармы)
- [ ] FollowButton (подписка/отписка)
- [ ] Timeline (лента постов)
- [ ] Composer (создание поста)
---
## Макеты страниц
### Требуемые макеты
- [ ] Главная страница (лента)
- [ ] Профиль пользователя
- [ ] Создание поста
- [ ] Настройки
- [ ] Страница поста (детальный просмотр)
- [ ] Подписки/подписчики
- [ ] Поиск
- [ ] Landing page (для неавторизованных)
### Формат макетов
- [ ] Figma (предпочтительно)
- [ ] Или экспорты в PNG/SVG
- [ ] Mobile + Desktop версии
---
## Анимации и переходы
### Микроанимации
- [ ] Hover эффекты на кнопках
- [ ] Плавное появление постов в ленте
- [ ] Анимация лайка/репоста
- [ ] Индикатор загрузки
### Переходы между страницами
- [ ] Fade-in/fade-out
- [ ] Slide переходы для mobile
---
## Вопросы для обсуждения
- [ ] Есть ли предпочтения по цветовой схеме (тёплая/холодная)?
- [ ] Нужен ли готовый UI kit (Material, Chakra) или кастомный дизайн?
- [ ] Кто будет делать макеты (самостоятельно или заказывать)?
- [ ] Требуется ли brandbook документ?
+94
View File
@@ -0,0 +1,94 @@
# Frontend документация
## Стек технологий
| Компонент | Технология | Примечание |
|-----------|------------|------------|
| Фреймворк | Svelte 4+ | Проверка достаточности возможностей |
| Язык | TypeScript | Строгая типизация |
| Сборщик | Vite | Быстрая разработка |
| Стили | SCSS + CSS Modules | Или Tailwind CSS |
| Состояние | Svelte Stores | Или Zustand-like решение |
| Роутинг | SvelteKit | Если нужен SSR |
---
## Требования к фронтенду
### 1. Основные страницы
- [ ] **Лента (Home)** — посты подписок, бесконечный скролл
- [ ] **Публичная лента** — все посты сервера
- [ ] **Профиль пользователя** — аватар, био, карма, посты
- [ ] **Создание поста** — текстовый редактор + загрузка медиа
- [ ] **Пост (детальный просмотр)** — комментарии, лайки, репосты
- [ ] **Подписки/Подписчики** — списки пользователей
- [ ] **Настройки** — профиль, безопасность, экспорт данных
### 2. Компоненты интерфейса
- [ ] `PostCard` — отображение поста (текст, медиа, карма)
- [ ] `UserProfile` — карточка пользователя
- [ ] `Composer` — форма создания поста
- [ ] `Timeline` — лента постов с пагинацией
- [ ] `MediaGallery` — галерея изображений/видео
- [ ] `KarmaDisplay` — отображение кармы
- [ ] `FollowButton` — кнопка подписки/отписки
### 3. Интеграция с редактором
**Временно**: Используем готовые решения:
- [ ] TipTap — расширяемый WYSIWYG редактор
- [ ] Quill — простой редактор с Markdown поддержкой
- [ ] Markdown textarea — резервный вариант
**В будущем**: Интеграция с Chronicle.nixg.ru
### 4. Управление состоянием
- [ ] Глобальное состояние: текущий пользователь, настройки
- [ ] Кэш постов: оптимистичное обновление UI
- [ ] Real-time обновления: WebSocket для новых постов
### 5. Адаптивный дизайн
- [ ] Mobile first подход
- [ ] Поддержка тёмной темы
- [ ] PWA возможности (оффлайн режим, push уведомления)
### 6. Экспорт данных (UI)
- [ ] Кнопка "Экспортировать мои данные" в настройках
- [ ] Прогресс-бар экспорта
- [ ] Скачивание ZIP архива с контентом
---
## Вопросы для проверки Svelte
- [ ] Хватит ли Svelte Stores для сложного состояния (лента + real-time)?
- [ ] Нужен ли SSR через SvelteKit для SEO?
- [ ] Поддержка WebSocket в Svelte (для live обновлений)?
- [ ] Производительность при большом количестве постов в ленте?
---
## План разработки фронтенда
1. [ ] Настройка Svelte + Vite + TypeScript
2. [ ] Базовая структура проекта (роуты, layout)
3. [ ] Компоненты: PostCard, UserProfile, Timeline
4. [ ] Интеграция с REST API бэкенда
5. [ ] Страница создания поста (редактор + медиа)
6. [ ] Real-time обновления (WebSocket)
7. [ ] Экспорт данных (UI + download)
8. [ ] Адаптивность + тёмная тема
---
## Вопросы для обсуждения
- [ ] Нужен ли SSR (SvelteKit) или достаточно SPA?
- [ ] Какой редактор выбрать для MVP (TipTap/Quill/Markdown)?
- [ ] Требуется ли поддержка PWA (оффлайн, push)?
- [ ] Нужна ли локализация интерфейса (только русский или мультиязычность)?
+110
View File
@@ -0,0 +1,110 @@
# Маркетинговая документация
## Позиционирование проекта
**YARU** — Yet Another Russian Uncompleted...
*Федеративная социальная сеть для тех, кому есть что сказать*
### УТП (Уникальное Торговое Предложение)
1. **Без ограничений на длину** — пишите статьи, а не твиты
2. **Экспорт данных** — ваш контент всегда принадлежит вам
3. **Fediverse совместимость** — общайтесь с пользователями Mastodon
4. **Карма вместо лайков** — качественная оценка контента
5. **Русскоязычное сообщество** — локальная аудитория
---
## Целевая аудитория
| Сегмент | Описание | Потребности |
|---------|----------|-------------|
| Блогеры | Авторы длинных постов | Удобный редактор, форматирование |
| Мигранты из Twitter | Ищут альтернативу | Fediverse совместимость |
| Технические писатели | Документация, статьи | Markdown, экспорт |
| Приватные пользователи | Закрытые сообщества | Контроль аудитории |
---
## Анализ конкурентов
### Mastodon
| Плюсы | Минусы |
|-------|--------|
| Большая аудитория | Ограничение 500 символов |
| Fediverse совместимость | Нет экспорта данных |
| Открытый код | Сложный интерфейс для новичков |
### Threads (Meta)
| Плюсы | Минусы |
|-------|--------|
| Простота | Закрытая экосистема |
| Интеграция с Instagram | Нет федерации |
| | Проблемы с приватностью |
### Bluesky
| Плюсы | Минусы |
|-------|--------|
| AT Protocol | Только английский язык |
| Без ограничений | Закрытый доступ (invite) |
| | Нет Fediverse совместимости |
---
## Сменяемая концепция названия
**YARU** — базовое название с динамическим подзаголовком:
- **YARU Service** — акцент на сервис для пользователей
- **YARU Revolution** — революция в социальных сетях
- **YARU Blog** — платформа для блогинга
- **YARU Fediverse** — часть федеративной сети
*Реализация*: Подзаголовок меняется в заголовке сайта и мета-тегах.
---
## Стратегия продвижения
### Этап 1: Pre-launch
- [ ] Создать landing page с описанием проекта
- [ ] Собрать email ранних пользователей
- [ ] Публикация в тематических Telegram-каналах
### Этап 2: Launch
- [ ] Открыть регистрацию для первых 1000 пользователей
- [ ] Публикация на Habr, VC.ru
- [ ] Участие в Fediverse сообществах
### Этап 3: Growth
- [ ] Реферальная программа
- [ ] Интеграции с другими сервисами
- [ ] Партнёрства с блогерами
---
## Брендинг
### Название
- **Основное**: YARU
- **Расшифровка**: Yet Another Russian Uncompleted...
- **Домен**: yaru.nixg.ru (рабочий)
### Логотип
- [ ] Простой, запоминающийся символ
- [ ] Адаптация под сменяемые подзаголовки
- [ ] Версии: светлая/тёмная, цветная/монохром
### Цветовая схема
- [ ] Основной цвет: ( TBD )
- [ ] Акцентные цвета: ( TBD )
- [ ] Тёмная тема: ( TBD )
---
## Вопросы для обсуждения
- [ ] Нужно ли регистрировать отдельный домен (yaru.ru, yaru.social)?
- [ ] Какой подзаголовок использовать для запуска?
- [ ] Требуется ли программа раннего доступа?
- [ ] Как работать с модерацией контента (правила сообщества)?