Files
app_umbrix/MINI_APP_ARCHITECTURE.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

224 lines
8.0 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.
# 🚀 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 с учетом этой архитектуры!