- 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
224 lines
8.0 KiB
Markdown
224 lines
8.0 KiB
Markdown
# 🚀 Umbrix Mini App - Полная Архитектура (PRO LEVEL)
|
||
|
||
## Принципы (Best Practices):
|
||
1. **Telegram Bot = Минимум** - только /start → Open WebApp
|
||
2. **Mini App = Все** - вся логика, UI, воронка продаж
|
||
3. **No localStorage** - только API + MariaDB
|
||
4. **Telegram WebApp SDK** - интеграция с Telegram UI
|
||
|
||
---
|
||
|
||
## 📱 **User Journey (Воронка Продаж)**
|
||
|
||
### **Scenario 1: Новый пользователь БЕЗ реферала**
|
||
```
|
||
1. User clicks: https://t.me/Dorod_vps_bot
|
||
2. Bot sends: "👋 Привет! 🚀 Открыть Umbrix" → WebApp button
|
||
3. User opens: https://app.umbrix.net
|
||
4. Mini App shows: Onboarding Flow
|
||
├── Welcome Screen (Telegram.WebApp.initData)
|
||
├── Language Selection (RU/EN/UZ)
|
||
├── Plan Selection (Shared/Dedicated/Premium)
|
||
└── Create Account Button
|
||
5. Account created → Dashboard
|
||
6. Dashboard shows:
|
||
├── Subscription Status (Active / Expired / Trial)
|
||
├── QR Code + Links
|
||
├── Referral Button → Copy link
|
||
├── Help Button
|
||
└── Settings Button
|
||
```
|
||
|
||
### **Scenario 2: Новый пользователь С рефералом**
|
||
```
|
||
1. User clicks: https://t.me/Dorod_vps_bot?start=ref_john_doe
|
||
2. Bot extracts: referrerId = "john_doe"
|
||
3. Bot opens: https://app.umbrix.net?ref=john_doe
|
||
4. Mini App shows: "🎁 Вы перешли по ссылке от john_doe! +7 дней бесплатно"
|
||
5. Onboarding Flow (same as above)
|
||
6. On Account Create:
|
||
├── POST /api/create-user (with referrerId)
|
||
├── POST /api/referral/track (award +7 days to john_doe)
|
||
└── Both get bonuses
|
||
7. Dashboard → показывает trial статус + bonus days
|
||
```
|
||
|
||
### **Scenario 3: Существующий пользователь (возврат)**
|
||
```
|
||
1. User opens: https://t.me/Dorod_vps_bot → WebApp
|
||
2. Mini App detects: Telegram.WebApp.initDataUnsafe.user.id
|
||
3. API Check: GET /api/user-subscription?telegramId=12345
|
||
4. Response: { hasSubscription: true, token: "...", status: "active" }
|
||
5. Mini App redirects: /dashboard (skip onboarding)
|
||
6. Dashboard shows:
|
||
├── Subscription details
|
||
├── Days remaining: "23 дня осталось"
|
||
├── QR Code + Links
|
||
└── Referral stats: "3 друга, +21 день заработано"
|
||
```
|
||
|
||
### **Scenario 4: Пользователь с истекшей подпиской**
|
||
```
|
||
1. API Check: { hasSubscription: true, status: "expired" }
|
||
2. Dashboard shows:
|
||
├── ⚠️ "Подписка истекла 5 дней назад"
|
||
├── "Пригласите 2 друзей для продления" (gamification)
|
||
├── "Или оплатите" → Payment Button
|
||
└── Referral progress bar: [■■■□□] 3/5 friends
|
||
```
|
||
|
||
---
|
||
|
||
## 🗂️ **Структура файлов Mini App**
|
||
|
||
```
|
||
/app
|
||
├── page.tsx # 🏠 Landing / Onboarding (если новый user)
|
||
├── dashboard/
|
||
│ └── page.tsx # 📊 Dashboard (если есть подписка)
|
||
├── plans/
|
||
│ └── page.tsx # 💎 Plan Selection (выбор тарифа)
|
||
├── referral/
|
||
│ └── page.tsx # 🎁 Referral Stats (уже есть!)
|
||
├── help/
|
||
│ └── page.tsx # ❓ Help / FAQ (уже есть!)
|
||
├── setup/
|
||
│ └── page.tsx # 🔧 Setup Wizard (инструкции по настройке)
|
||
└── subscription/
|
||
└── [token]/
|
||
└── page.tsx # 📲 Subscription Details (QR код, ссылки)
|
||
|
||
/components
|
||
├── OnboardingFlow.tsx # 🎬 Onboarding steps (language, plan, create)
|
||
├── PlanCard.tsx # 💳 Plan card (Shared/Dedicated/Premium)
|
||
├── SubscriptionStatus.tsx # ✅ Status badge (Active/Expired/Trial)
|
||
├── ReferralProgress.tsx # 📈 Progress bar (3/5 friends)
|
||
├── QRCodeModal.tsx # ✅ Уже есть
|
||
├── ReferralModal.tsx # ✅ Уже есть
|
||
└── SetupWizard.tsx # ✅ Уже есть
|
||
|
||
/lib
|
||
├── telegram-webapp.ts # 🔌 Telegram WebApp SDK wrapper
|
||
├── marzban-api.ts # ✅ Уже есть
|
||
└── constants.ts # ✅ Уже есть
|
||
```
|
||
|
||
---
|
||
|
||
## 🎨 **UI Components (Telegram WebApp Style)**
|
||
|
||
### **1. OnboardingFlow.tsx**
|
||
```tsx
|
||
// Multi-step onboarding (Welcome → Language → Plan → Create)
|
||
// Uses Telegram.WebApp.BackButton, .MainButton
|
||
// Stores state in React (NOT localStorage)
|
||
```
|
||
|
||
### **2. PlanCard.tsx**
|
||
```tsx
|
||
// Карточка тарифа с ценой, features, "Выбрать" кнопкой
|
||
// Props: { plan, price, features[], selected, onClick }
|
||
// Design: Telegram-style card (rounded, shadow, accent color)
|
||
```
|
||
|
||
### **3. SubscriptionStatus.tsx**
|
||
```tsx
|
||
// Badge: "✅ Активна до 15.03.2026" / "⚠️ Истекла" / "🎁 Trial (7 дней)"
|
||
// Color-coded: green/red/blue
|
||
// Props: { status, expiryDate, daysRemaining }
|
||
```
|
||
|
||
### **4. ReferralProgress.tsx**
|
||
```tsx
|
||
// Progress bar: [■■■□□] 3/5 friends → +30 days bonus!
|
||
// Shows: current referrals, next milestone, bonus amount
|
||
// Props: { referralCount, bonusDays }
|
||
```
|
||
|
||
---
|
||
|
||
## 🔄 **API Endpoints (уже есть + новые)**
|
||
|
||
### **Existing:**
|
||
- ✅ POST /api/create-user
|
||
- ✅ GET /api/user-subscription
|
||
- ✅ POST /api/referral/track
|
||
- ✅ GET /api/referral/stats
|
||
|
||
### **New (to add):**
|
||
```typescript
|
||
// Check if user exists by Telegram ID
|
||
GET /api/user-check?telegramId=12345
|
||
Response: { exists: boolean, username?: string, status?: string }
|
||
|
||
// Get plan details
|
||
GET /api/plans
|
||
Response: { plans: [{ id, name, price, features[] }] }
|
||
|
||
// Create payment link
|
||
POST /api/create-payment
|
||
Body: { username, plan, amount }
|
||
Response: { paymentUrl: string, orderId: string }
|
||
```
|
||
|
||
---
|
||
|
||
## 📋 **Implementation Priority**
|
||
|
||
### **Phase 1: Core Flow (СЕЙЧАС)**
|
||
1. ✅ Упростить n8n workflow (DONE)
|
||
2. Create OnboardingFlow.tsx (Welcome → Language → Plan → Create)
|
||
3. Update app/page.tsx (detect new vs existing user)
|
||
4. Create app/dashboard/page.tsx (show subscription status)
|
||
5. Create PlanCard.tsx component
|
||
|
||
### **Phase 2: Referral Integration**
|
||
6. Update OnboardingFlow to accept ?ref=USERNAME
|
||
7. Pass referrerId to /api/create-user
|
||
8. Add ReferralProgress.tsx to dashboard
|
||
9. Test full referral flow
|
||
|
||
### **Phase 3: Payment**
|
||
10. Add /api/plans endpoint
|
||
11. Add /api/create-payment endpoint
|
||
12. Integrate payment gateway (crypto)
|
||
13. Add webhook for payment confirmation
|
||
|
||
### **Phase 4: Polish**
|
||
14. Telegram WebApp SDK integration (BackButton, MainButton, theme)
|
||
15. i18n (RU/EN/UZ)
|
||
16. Error handling + loading states
|
||
17. Analytics (track conversions)
|
||
|
||
---
|
||
|
||
## 🎯 **Key Differences from Current Code**
|
||
|
||
| Current | New (PRO) |
|
||
|---------|-----------|
|
||
| Bot имеет 3 команды + кнопки | Bot только /start → WebApp |
|
||
| Нет onboarding flow | Full onboarding в Mini App |
|
||
| localStorage для данных | API + MariaDB only |
|
||
| Нет gamification | Referral progress bar |
|
||
| Нет выбора плана в UI | Plan selection screen |
|
||
| Нет payment flow | Integrated payment |
|
||
| Нет Telegram theme | Uses Telegram.WebApp.themeParams |
|
||
|
||
---
|
||
|
||
## 💡 **Pro Tips**
|
||
|
||
1. **Telegram WebApp SDK**: используй `Telegram.WebApp.MainButton` для кнопок действий
|
||
2. **No localStorage**: только API, чтобы работало на всех устройствах
|
||
3. **Gamification**: показывай прогресс реферальной программы (мотивация!)
|
||
4. **Mobile-first**: Mini App всегда открывается на мобильном
|
||
5. **Fast loading**: минимизируй API calls, cache в React state
|
||
6. **Error handling**: graceful fallback если нет Telegram.WebApp
|
||
7. **i18n ready**: структура для перевода на другие языки
|
||
|
||
---
|
||
|
||
## 🚀 **Next Steps**
|
||
|
||
Создам полную структуру Mini App с учетом этой архитектуры!
|