- 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
8.0 KiB
8.0 KiB
🚀 Umbrix Mini App - Полная Архитектура (PRO LEVEL)
Принципы (Best Practices):
- Telegram Bot = Минимум - только /start → Open WebApp
- Mini App = Все - вся логика, UI, воронка продаж
- No localStorage - только API + MariaDB
- 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
// Multi-step onboarding (Welcome → Language → Plan → Create)
// Uses Telegram.WebApp.BackButton, .MainButton
// Stores state in React (NOT localStorage)
2. PlanCard.tsx
// Карточка тарифа с ценой, features, "Выбрать" кнопкой
// Props: { plan, price, features[], selected, onClick }
// Design: Telegram-style card (rounded, shadow, accent color)
3. SubscriptionStatus.tsx
// Badge: "✅ Активна до 15.03.2026" / "⚠️ Истекла" / "🎁 Trial (7 дней)"
// Color-coded: green/red/blue
// Props: { status, expiryDate, daysRemaining }
4. ReferralProgress.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):
// 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 (СЕЙЧАС)
- ✅ Упростить n8n workflow (DONE)
- Create OnboardingFlow.tsx (Welcome → Language → Plan → Create)
- Update app/page.tsx (detect new vs existing user)
- Create app/dashboard/page.tsx (show subscription status)
- Create PlanCard.tsx component
Phase 2: Referral Integration
- Update OnboardingFlow to accept ?ref=USERNAME
- Pass referrerId to /api/create-user
- Add ReferralProgress.tsx to dashboard
- Test full referral flow
Phase 3: Payment
- Add /api/plans endpoint
- Add /api/create-payment endpoint
- Integrate payment gateway (crypto)
- Add webhook for payment confirmation
Phase 4: Polish
- Telegram WebApp SDK integration (BackButton, MainButton, theme)
- i18n (RU/EN/UZ)
- Error handling + loading states
- 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
- Telegram WebApp SDK: используй
Telegram.WebApp.MainButtonдля кнопок действий - No localStorage: только API, чтобы работало на всех устройствах
- Gamification: показывай прогресс реферальной программы (мотивация!)
- Mobile-first: Mini App всегда открывается на мобильном
- Fast loading: минимизируй API calls, cache в React state
- Error handling: graceful fallback если нет Telegram.WebApp
- i18n ready: структура для перевода на другие языки
🚀 Next Steps
Создам полную структуру Mini App с учетом этой архитектуры!