Files
app_umbrix/IMPLEMENTATION-SUMMARY.md
Umbrix Dev a0f5d69448 📊 Полный анализ системы тарифов с выбором локаций
- PRICING-LOCATION-ANALYSIS.md (45KB): технический анализ Marzban API
- IMPLEMENTATION-SUMMARY.md (12KB): краткая выжимка для разработки
- MINI_APP_ARCHITECTURE.md: обновленная архитектура

Ключевые решения:
 Скидки за период: -10% (3м), -15% (6м), -20% (год)
 Выбор локаций из реальных нод Marzban
 Мультишаговая воронка: тариф → период → локации → оплата
 Динамическое ценообразование отклонено
⏸️ Семейные планы отложены на V2.0 (требуют Device Monitor)
 Реферальная система уже работает

MVP план: 2 недели (20 часов)
- Week 1: Backend API (8h) - /api/nodes + /api/create-user updates
- Week 2: Frontend UI (12h) - мультишаговый /app/plans/page.tsx
2026-02-08 09:16:55 +03:00

307 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📋 Краткая выжимка: План реализации тарифов с локациями
**Дата**: 8 февраля 2026
**Статус**: ✅ Анализ завершен, готово к реализации
---
## 🎯 Цель
Реализовать систему покупки VPN с:
1. ✅ Выбором тарифа (Start/Plus/Max)
2. ✅ Выбором периода (1м/3м/6м/год) с показом скидок
3. ✅ Выбором локаций (нод) из Marzban
4. ✅ Оплатой через payment gateway
5. ✅ Автоматическим созданием пользователя с выбранными нодами
---
## 📊 Итоги анализа
### ✅ Что работает:
- Тарифы (Start/Plus/Max) - UI готов
- SetupWizard с выбором локаций - UI готов
- API создания пользователей - работает
- Реферальная система - полностью реализована (+7 дней за друга, +30 за milestone)
### ❌ Что НЕ работает:
- Выбор локаций не сохраняется в Marzban
- Нет скидок за период оплаты
- Нет связи между UI выбора локаций и реальными нодами
### ⚠️ Что отклонено:
- ❌ Динамическое ценообразование (премиум локации дороже)
- ⏸️ Семейные планы (отложены на V2.0, требуют Device Monitor Service)
---
## 🚀 MVP Roadmap (2 недели)
### Week 1: Backend API (8-10 часов)
```typescript
1. [3h] Создать /api/nodes
- Получить список нод из Marzban API
- Форматировать для фронтенда (id, name, country, ping)
- Фильтровать только connected ноды
2. [5h] Обновить /api/create-user
- Добавить параметры: period, locationIds
- Получить список inbounds для выбранных нод
- Создать пользователя с кастомными inbounds
- Добавить функцию getPlanConfig(planType, period) с расчетом скидок
```
### Week 2: Frontend UI (10-12 часов)
```typescript
3. [8h] Переработать /app/plans/page.tsx
- Шаг 1: Выбор тарифа (Start/Plus/Max)
- Шаг 2: Выбор периода (1м/3м/6м/год)
- Показать экономию: "💰 Экономия 297₽ при оплате на год"
- Шаг 3: Выбор локаций
- Загрузить из /api/nodes
- Ограничить по тарифу (Start=1, Plus=3, Max=все)
- Шаг 4: Кнопка "Оплатить"
4. [2h] Добавить компоненты
- PeriodSelector - карточки периодов со скидками
- LocationSelector - чекбоксы локаций с флагами
- PriceSummary - итоговая цена с экономией
5. [2h] Стилизация под Telegram Mini App
```
---
## 💰 Скидки за период
```
1 месяц: 0% (базовая цена)
3 месяца: -10% (экономия ~270₽ на Plus)
6 месяцев: -15% (экономия ~540₽ на Plus)
1 год: -20% (экономия ~720₽ на Plus)
```
**Примеры**:
- Plus (299₽/мес):
- 1 месяц: 299₽
- 3 месяца: 807₽ (вместо 897₽) → экономия 90₽
- 6 месяцев: 1523₽ (вместо 1794₽) → экономия 271₽
- 1 год: 2870₽ (вместо 3588₽) → экономия 718₽
---
## 🔧 Техническая реализация
### 1. API: GET /api/nodes
```typescript
// Возвращает список доступных локаций
{
"success": true,
"locations": [
{
"id": 1,
"name": "🇳🇱 Нидерланды",
"address": "193.168.175.128",
"ping": "15ms",
"country": "NL"
},
{
"id": 2,
"name": "🇺🇸 США",
"address": "194.113.210.187",
"ping": "120ms",
"country": "US"
}
]
}
```
### 2. API: POST /api/create-user (обновленный)
```typescript
// Принимает:
{
"planType": "plus",
"period": "3months",
"locationIds": [1, 2, 5], // NEW
"telegramId": 12345,
"telegramUsername": "john_doe"
}
// Логика:
1. Получить список нод по locationIds
2. Получить список inbounds для этих нод
3. Создать mapping:
{
vless: ["VLESS TCP Node1", "VLESS Reality Node2"],
vmess: ["VMess WS Node1"],
trojan: ["Trojan TCP Node1"]
}
4. Создать пользователя с этими inbounds
5. Рассчитать expire с учетом period:
- 1month: +30 дней
- 3months: +90 дней
- 6months: +180 дней
- 1year: +365 дней
```
### 3. Frontend: Мультишаговый выбор
```
┌─────────────────────────────────────┐
│ Шаг 1: Тариф │
│ ⭕ Start (1 локация) │
│ ⭕ Plus (3 локации) ← выбран │
│ ⭕ Max (все локации) │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Шаг 2: Период │
│ ⭕ 1 месяц - 299₽ │
│ ⭕ 3 месяца - 807₽ (экономия 90₽) │ ← выбран
│ ⭕ 6 мес - 1523₽ (экономия 271₽)│
│ ⭕ 1 год - 2870₽ (экономия 718₽)│
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Шаг 3: Локации (выберите 3) │
│ ☑ 🇳🇱 Нидерланды (15ms) │ ← выбран
│ ☐ 🇩🇪 Германия (20ms) │
│ ☑ 🇺🇸 США (120ms) │ ← выбран
│ ☐ 🇸🇬 Сингапур (180ms) │
│ ☑ 🇯🇵 Япония (160ms) │ ← выбран
│ ☐ 🇬🇧 UK (35ms) │
│ │
│ [Перейти к оплате 807₽ →] │
└─────────────────────────────────────┘
```
---
## 🎁 Реферальная система (уже работает!)
**Текущая реализация**:
```typescript
// Endpoints:
POST /api/referral/track // Записать реферала
GET /api/referral/stats // Получить статистику
// Бонусы:
+7 дней за каждого друга
+30 дней milestone за каждые 5 друзей
// Формула:
bonusDays = (referralCount * 7) + (Math.floor(referralCount / 5) * 30)
// Примеры:
1 друг: +7 дней
5 друзей: +65 дней (35 + 30 milestone)
10 друзей: +130 дней (70 + 60 milestone)
```
**Что можно улучшить в V1.1**:
- Визуальные badges (Bronze/Silver/Gold)
- Leaderboard на странице /referral
- Уведомления в Telegram при milestone
---
## 🚫 Семейные планы - Почему отложены?
**Проблема**: Marzban **НЕ имеет** встроенного механизма ограничения устройств.
**Что НЕ доступно**:
```json
// В UserCreate API нет:
{
"device_limit": 5, // ❌
"ip_limit": 5, // ❌
"max_connections": 5 // ❌
}
```
**Что есть**:
```json
{
"online_at": "2026-02-08T10:30:00Z", // ✅ Последняя активность
"sub_last_user_agent": "v2rayNG" // ✅ User agent
}
```
**Варианты решения**:
| Вариант | Точность | Сложность | Время |
|---------|----------|-----------|-------|
| 1. Мониторинг `online_at` | ❌ Низкая | Средняя | 8h |
| 2. IP-based мониторинг | ❌ Низкая | Низкая | 4h |
| 3. Xray патчи | ✅ Высокая | Очень высокая | 80h+ |
| 4. Sub-users (5 аккаунтов) | ✅ Высокая | Средняя | 12h |
| 5. **Без ограничений + ToS** | N/A | Нулевая | 0h |
| 6. **Log monitor (V2.0)** | ✅ Высокая | Высокая | 40h |
**Решение для MVP**: Отложить на V2.0, для MVP - полагаться на ToS и честность пользователей.
**Решение для V2.0**: Разработать Device Monitor Service с парсингом Xray логов в реальном времени.
---
## 📅 Timeline
### Неделя 1 (Backend):
- [ ] День 1-2: Создать /api/nodes (3 часа)
- [ ] День 3-5: Обновить /api/create-user с period + locationIds (5 часов)
### Неделя 2 (Frontend):
- [ ] День 1-3: Переработать /app/plans/page.tsx (8 часов)
- [ ] День 4: Компоненты PeriodSelector + LocationSelector (2 часа)
- [ ] День 5: Стилизация + тестирование (2 часа)
### Неделя 3-4 (Payment + Testing):
- [ ] Интеграция YooKassa/Stripe
- [ ] Webhook для обработки оплат
- [ ] E2E тесты полной воронки
- [ ] n8n bot updates
---
## 🎯 KPI успеха
**Метрики для отслеживания**:
1. Конверсия выбора периода:
- Сколько % выбирают 1м/3м/6м/год?
- Какой период дает наибольший LTV?
2. Выбор локаций:
- Топ-3 популярных локации
- Сколько % пользователей меняют дефолтный выбор?
3. Реферальная программа:
- % пользователей с рефералами
- Average referral count per user
- Impact на retention
4. Revenue:
- ARPU (Average Revenue Per User)
- LTV (Lifetime Value)
- Churn rate
---
## 📞 Следующие действия
1. ✅ Анализ завершен
2. ✅ Feedback учтен:
- ❌ Динамическое ценообразование отклонено
- ⏸️ Семейные планы отложены на V2.0
- ✅ Реферальная система работает
3.**Начать разработку MVP** (2 недели)
4. ⏳ Выбрать payment gateway (YooKassa?)
5. ⏳ Setup Telegram bot webhook для уведомлений
---
**Полная документация**: См. `PRICING-LOCATION-ANALYSIS.md` (1400+ строк детального анализа)
**Готов к старту!** 🚀