docs: yield/intent routing integration concept
This commit is contained in:
506
YIELD_INTEGRATION_CONCEPT.md
Normal file
506
YIELD_INTEGRATION_CONCEPT.md
Normal file
@ -0,0 +1,506 @@
|
||||
# Yield / Intent Routing – Integrations-Konzept
|
||||
|
||||
**Ziel:** Domains von "toten Assets" zu "Yield-Generatoren" machen.
|
||||
**Kern-Mechanismus:** User verbindet Domain → Pounce erkennt Intent → Routing zu Affiliate-Partnern → Passive Einnahmen.
|
||||
|
||||
---
|
||||
|
||||
## 1. Public Pages (nicht eingeloggt)
|
||||
|
||||
### 1.1 Landing Page – 4. Pillar hinzufügen
|
||||
|
||||
Aktuell: **DISCOVER → TRACK → TRADE**
|
||||
|
||||
Neu: **DISCOVER → TRACK → TRADE → YIELD**
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ │
|
||||
│ YIELD │
|
||||
│ "Let your domains work for you." │
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||||
│ │ 🔌 Connect Point DNS to ns.pounce.io │ │
|
||||
│ │ 🧠 Analyze We detect: "kredit.ch" → Loan Intent │ │
|
||||
│ │ 💰 Earn Affiliate routing → CHF 25/lead │ │
|
||||
│ └─────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ "Your domains become autonomous agents." │
|
||||
│ │
|
||||
│ [Activate My Domains →] │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Teaser-Statistiken (für Trust):**
|
||||
- "CHF 45'000+ generated this month"
|
||||
- "2'400+ domains earning passively"
|
||||
- "Avg. CHF 18.50/domain/month"
|
||||
|
||||
### 1.2 Neue Public Page: `/yield`
|
||||
|
||||
Eine eigene Landingpage für das Yield-Feature:
|
||||
|
||||
| Section | Inhalt |
|
||||
|---------|--------|
|
||||
| **Hero** | "Dead Domains? Make them work." + Animated revenue counter |
|
||||
| **How it works** | 3-Step Animation: Connect → Analyze → Earn |
|
||||
| **Use Cases** | Branchen-spezifische Beispiele (zahnarzt.ch, kredit.de, hotel-x.ch) |
|
||||
| **Revenue Calculator** | "Gib deine Domain ein → geschätzter monatlicher Ertrag" |
|
||||
| **Trust Signals** | Partner-Logos (Awin, PartnerStack, etc.), Testimonials |
|
||||
| **CTA** | "Start Earning" → Login/Register |
|
||||
|
||||
---
|
||||
|
||||
## 2. Terminal (eingeloggt)
|
||||
|
||||
### 2.1 Sidebar-Erweiterung
|
||||
|
||||
**Neue Struktur der Sidebar:**
|
||||
|
||||
```
|
||||
DISCOVER
|
||||
├── MARKET (Auktionen)
|
||||
└── INTEL (TLD Pricing)
|
||||
|
||||
MANAGE
|
||||
├── RADAR (Dashboard)
|
||||
├── WATCHLIST (Monitoring)
|
||||
├── SNIPER (Alerts)
|
||||
├── FOR SALE (Listings)
|
||||
└── YIELD ✨ ← NEU
|
||||
|
||||
SETTINGS
|
||||
```
|
||||
|
||||
### 2.2 Neue Seite: `/terminal/yield`
|
||||
|
||||
**Layout:**
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────────────┐
|
||||
│ YIELD [?] Help │
|
||||
├──────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
|
||||
│ │ Active │ │ Monthly │ │ Pending │ │ Total │ │
|
||||
│ │ Domains │ │ Revenue │ │ Payout │ │ Earned │ │
|
||||
│ │ 12 │ │ CHF 156 │ │ CHF 89 │ │ CHF 1'245 │ │
|
||||
│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
|
||||
│ │
|
||||
├──────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 🔍 Search domains... [+ Activate Domain] │
|
||||
│ │
|
||||
├──────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ Domain │ Status │ Intent │ Route │ Yield │ │
|
||||
│ ├──────────────────────────────────────────────────────────────────┤ │
|
||||
│ │ zahnarzt-zh.ch │ 🟢 Active │ 🏥 Medical │ Comparis │ CHF 45 │ │
|
||||
│ │ crm-tool.io │ 🟢 Active │ 💻 SaaS │ HubSpot │ $ 23 │ │
|
||||
│ │ hotel-davos.ch │ 🟢 Active │ 🏨 Travel │ Booking │ CHF 67 │ │
|
||||
│ │ mein-blog.de │ ⚪ Idle │ ❓ Unknown │ — │ — │ │
|
||||
│ │ kredit-ch.com │ 🟡 Pending│ 💰 Finance │ Analyzing │ — │ │
|
||||
│ └──────────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
└──────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 2.3 Domain Aktivieren – Modal/Wizard
|
||||
|
||||
**Schritt 1: Domain eingeben**
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ Activate Domain for Yield │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Enter your domain: │
|
||||
│ ┌─────────────────────────────────────────┐ │
|
||||
│ │ zahnarzt-zuerich.ch │ │
|
||||
│ └─────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ [Continue →] │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Schritt 2: Intent-Erkennung (automatisch)**
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ Intent Detected │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Domain: zahnarzt-zuerich.ch │
|
||||
│ │
|
||||
│ 🧠 Detected Intent: │
|
||||
│ ┌─────────────────────────────────────────┐ │
|
||||
│ │ 🏥 MEDICAL / DENTAL │ │
|
||||
│ │ │ │
|
||||
│ │ Keywords: zahnarzt, zuerich │ │
|
||||
│ │ Confidence: 94% │ │
|
||||
│ └─────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ 💰 Estimated Revenue: CHF 15-45/month │
|
||||
│ │
|
||||
│ Recommended Partners: │
|
||||
│ • Comparis (Dental Comparison) │
|
||||
│ • Doctolib (Appointment Booking) │
|
||||
│ │
|
||||
│ [Continue →] │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Schritt 3: DNS Setup**
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ Connect Your Domain │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Change your nameservers to: │
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────┐ │
|
||||
│ │ ns1.pounce.io [📋] │ │
|
||||
│ │ ns2.pounce.io [📋] │ │
|
||||
│ └─────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ⏳ We're checking your DNS... │
|
||||
│ │
|
||||
│ Status: Waiting for propagation (~10 min) │
|
||||
│ │
|
||||
│ [I've updated my nameservers] │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Schritt 4: Aktiviert**
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ ✅ Domain Activated! │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ zahnarzt-zuerich.ch is now earning. │
|
||||
│ │
|
||||
│ 🏥 Intent: Medical/Dental │
|
||||
│ ➔ Route: Comparis Dental │
|
||||
│ 💰 Est. Yield: CHF 15-45/month │
|
||||
│ │
|
||||
│ What happens now: │
|
||||
│ • We host a minimal landing page │
|
||||
│ • Visitors are routed to partners │
|
||||
│ • You earn affiliate commissions │
|
||||
│ • Payouts monthly (min. CHF 50) │
|
||||
│ │
|
||||
│ [View My Yield Dashboard] │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 2.4 Portfolio-Tab Integration (Alternative)
|
||||
|
||||
Statt einer separaten Seite kann "Yield" auch als **Tab in der Watchlist** integriert werden:
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────────────────────┐
|
||||
│ [Watching] [My Portfolio] [Yield] ✨ │
|
||||
└────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Vorteil:** Weniger Navigation, alles an einem Ort.
|
||||
**Nachteil:** Watchlist wird komplexer.
|
||||
|
||||
**Empfehlung:** Starte mit separater `/terminal/yield` Seite, kann später in Portfolio integriert werden.
|
||||
|
||||
---
|
||||
|
||||
## 3. Backend-Architektur (High-Level)
|
||||
|
||||
### 3.1 Neue Models
|
||||
|
||||
```python
|
||||
# backend/app/models/yield_domain.py
|
||||
|
||||
class YieldDomain(Base):
|
||||
"""Domain activated for yield/intent routing."""
|
||||
__tablename__ = "yield_domains"
|
||||
|
||||
id: int
|
||||
user_id: int # FK → users
|
||||
domain: str # "zahnarzt-zuerich.ch"
|
||||
|
||||
# Intent
|
||||
detected_intent: str # "medical_dental"
|
||||
intent_confidence: float # 0.94
|
||||
intent_keywords: str # JSON: ["zahnarzt", "zuerich"]
|
||||
|
||||
# Routing
|
||||
active_route: str # "comparis_dental"
|
||||
partner_id: int # FK → affiliate_partners
|
||||
|
||||
# Status
|
||||
status: str # "pending", "active", "paused", "inactive"
|
||||
dns_verified: bool
|
||||
activated_at: datetime
|
||||
|
||||
# Revenue
|
||||
total_clicks: int
|
||||
total_conversions: int
|
||||
total_revenue: Decimal
|
||||
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
|
||||
class YieldTransaction(Base):
|
||||
"""Revenue events from affiliate partners."""
|
||||
__tablename__ = "yield_transactions"
|
||||
|
||||
id: int
|
||||
yield_domain_id: int # FK
|
||||
|
||||
event_type: str # "click", "lead", "sale"
|
||||
partner_id: int
|
||||
amount: Decimal
|
||||
currency: str
|
||||
|
||||
# Attribution
|
||||
referrer: str
|
||||
user_agent: str
|
||||
geo_country: str
|
||||
|
||||
# Status
|
||||
status: str # "pending", "confirmed", "paid", "rejected"
|
||||
confirmed_at: datetime
|
||||
paid_at: datetime
|
||||
|
||||
created_at: datetime
|
||||
|
||||
|
||||
class AffiliatePartner(Base):
|
||||
"""Affiliate network/partner configuration."""
|
||||
__tablename__ = "affiliate_partners"
|
||||
|
||||
id: int
|
||||
name: str # "Comparis Dental"
|
||||
network: str # "awin", "partnerstack", "direct"
|
||||
|
||||
# Matching
|
||||
intent_categories: str # JSON: ["medical_dental", "medical_general"]
|
||||
geo_countries: str # JSON: ["CH", "DE", "AT"]
|
||||
|
||||
# Payout
|
||||
payout_type: str # "cpc", "cpl", "cps"
|
||||
payout_amount: Decimal
|
||||
payout_currency: str
|
||||
|
||||
# Integration
|
||||
tracking_url_template: str
|
||||
api_endpoint: str
|
||||
api_key_encrypted: str
|
||||
|
||||
is_active: bool
|
||||
created_at: datetime
|
||||
```
|
||||
|
||||
### 3.2 Neue API Endpoints
|
||||
|
||||
```python
|
||||
# backend/app/api/yield.py
|
||||
|
||||
@router.get("/domains")
|
||||
# Liste alle Yield-Domains des Users
|
||||
|
||||
@router.post("/domains/activate")
|
||||
# Neue Domain aktivieren (Step 1-4 Wizard)
|
||||
|
||||
@router.get("/domains/{domain}/intent")
|
||||
# Intent-Detection für eine Domain
|
||||
|
||||
@router.get("/domains/{domain}/verify-dns")
|
||||
# DNS-Verifizierung prüfen
|
||||
|
||||
@router.put("/domains/{domain}/pause")
|
||||
# Routing pausieren
|
||||
|
||||
@router.get("/stats")
|
||||
# Gesamtstatistiken (Revenue, Clicks, etc.)
|
||||
|
||||
@router.get("/transactions")
|
||||
# Transaktions-Historie
|
||||
|
||||
@router.get("/payouts")
|
||||
# Payout-Historie
|
||||
```
|
||||
|
||||
### 3.3 Intent-Detection Service
|
||||
|
||||
```python
|
||||
# backend/app/services/intent_detector.py
|
||||
|
||||
class IntentDetector:
|
||||
"""Erkennt den Intent einer Domain basierend auf Name und TLD."""
|
||||
|
||||
INTENT_CATEGORIES = {
|
||||
"medical_dental": {
|
||||
"keywords": ["zahnarzt", "dentist", "dental", "zahn"],
|
||||
"partners": ["comparis_dental", "doctolib"],
|
||||
"avg_cpl": 25.00
|
||||
},
|
||||
"travel_hotel": {
|
||||
"keywords": ["hotel", "ferien", "vacation", "resort"],
|
||||
"partners": ["booking", "hotels_com"],
|
||||
"avg_cpl": 15.00
|
||||
},
|
||||
"finance_loan": {
|
||||
"keywords": ["kredit", "loan", "finanz", "hypothek"],
|
||||
"partners": ["comparis_finance", "lendico"],
|
||||
"avg_cpl": 50.00
|
||||
},
|
||||
"saas_software": {
|
||||
"keywords": ["crm", "erp", "software", "tool", "app"],
|
||||
"partners": ["hubspot", "partnerstack"],
|
||||
"avg_cpl": 30.00
|
||||
},
|
||||
# ... weitere Kategorien
|
||||
}
|
||||
|
||||
def detect(self, domain: str) -> IntentResult:
|
||||
"""Analysiert Domain und gibt Intent zurück."""
|
||||
name = domain.rsplit('.', 1)[0].lower()
|
||||
# ... Matching-Logik
|
||||
```
|
||||
|
||||
### 3.4 DNS/Hosting Service
|
||||
|
||||
```python
|
||||
# backend/app/services/yield_dns.py
|
||||
|
||||
class YieldDNSService:
|
||||
"""Verwaltet DNS und Hosting für Yield-Domains."""
|
||||
|
||||
async def verify_nameservers(self, domain: str) -> bool:
|
||||
"""Prüft ob Domain auf ns1/ns2.pounce.io zeigt."""
|
||||
|
||||
async def provision_landing_page(self, domain: str, intent: str) -> str:
|
||||
"""Erstellt minimale Landing Page für Routing."""
|
||||
|
||||
async def get_tracking_url(self, domain: str, partner_id: int) -> str:
|
||||
"""Generiert Affiliate-Tracking-URL."""
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Phasen-Plan
|
||||
|
||||
### Phase 2.1: MVP (4-6 Wochen)
|
||||
|
||||
| Task | Prio | Aufwand |
|
||||
|------|------|---------|
|
||||
| Intent-Detection Engine (Keyword-basiert) | 🔴 | 1 Woche |
|
||||
| Yield-Domain Model + API | 🔴 | 1 Woche |
|
||||
| `/terminal/yield` UI (Basic) | 🔴 | 1 Woche |
|
||||
| DNS-Verifizierung | 🔴 | 3 Tage |
|
||||
| 1 Partner-Integration (z.B. Awin) | 🔴 | 1 Woche |
|
||||
| Landing Page Generator (Minimal) | 🟡 | 3 Tage |
|
||||
| Transaction Tracking | 🟡 | 3 Tage |
|
||||
|
||||
**Ergebnis:** User können Domains aktivieren, wir routen zu 1 Partner-Netzwerk.
|
||||
|
||||
### Phase 2.2: Erweiterung (4 Wochen)
|
||||
|
||||
| Task | Prio | Aufwand |
|
||||
|------|------|---------|
|
||||
| Weitere Partner (5-10) | 🔴 | 2 Wochen |
|
||||
| Payout-System | 🔴 | 1 Woche |
|
||||
| Public Landing `/yield` | 🟡 | 3 Tage |
|
||||
| Landing Page Customization | 🟡 | 3 Tage |
|
||||
| Revenue Analytics Dashboard | 🟡 | 3 Tage |
|
||||
|
||||
### Phase 2.3: Marktplatz-Integration
|
||||
|
||||
| Task | Prio | Aufwand |
|
||||
|------|------|---------|
|
||||
| "Yield-Generating Domains" Kategorie | 🟡 | 1 Woche |
|
||||
| Valuation basierend auf Yield (30x MRR) | 🟡 | 3 Tage |
|
||||
| Yield-History für Käufer sichtbar | 🟡 | 3 Tage |
|
||||
|
||||
---
|
||||
|
||||
## 5. Monetarisierung
|
||||
|
||||
### Revenue Split
|
||||
|
||||
| Party | Anteil |
|
||||
|-------|--------|
|
||||
| **Domain Owner** | 70% |
|
||||
| **Pounce** | 30% |
|
||||
|
||||
### Tier-Gating
|
||||
|
||||
| Tier | Yield-Domains | Payout Threshold |
|
||||
|------|---------------|------------------|
|
||||
| **Scout** | 0 (Feature locked) | — |
|
||||
| **Trader** | 5 | CHF 100 |
|
||||
| **Tycoon** | Unlimited | CHF 50 |
|
||||
|
||||
---
|
||||
|
||||
## 6. UX-Philosophie
|
||||
|
||||
### Prinzipien
|
||||
|
||||
1. **Zero Config:** User ändert nur Nameserver. Alles andere ist automatisch.
|
||||
2. **Transparent:** Klare Anzeige was passiert, welcher Partner, welche Einnahmen.
|
||||
3. **Instant Value:** Zeige geschätzten Revenue VOR Aktivierung.
|
||||
4. **Trust:** Partner-Logos, echte Zahlen, keine Versprechen.
|
||||
|
||||
### Sprache
|
||||
|
||||
- ❌ "Domain Parking" (klingt nach 2005)
|
||||
- ✅ "Domain Yield" / "Intent Routing"
|
||||
- ❌ "Passive Income" (scammy)
|
||||
- ✅ "Your domain works for you"
|
||||
|
||||
---
|
||||
|
||||
## 7. Technische Voraussetzungen
|
||||
|
||||
| Komponente | Benötigt | Status |
|
||||
|------------|----------|--------|
|
||||
| Eigene Nameserver (ns1/ns2.pounce.io) | ✅ | Neu |
|
||||
| DNS-Hosting (Cloudflare API oder ähnlich) | ✅ | Neu |
|
||||
| Landing Page CDN | ✅ | Neu |
|
||||
| Affiliate-Netzwerk Accounts | ✅ | Neu |
|
||||
| Payout-System (Stripe Connect?) | ✅ | Teilweise (Stripe existiert) |
|
||||
|
||||
---
|
||||
|
||||
## 8. Zusammenfassung
|
||||
|
||||
### Was ändert sich im UI?
|
||||
|
||||
| Bereich | Änderung |
|
||||
|---------|----------|
|
||||
| **Landing Page** | Neuer 4. Pillar "YIELD" + Link zu `/yield` |
|
||||
| **Public `/yield`** | Neue Landingpage mit Calculator |
|
||||
| **Terminal Sidebar** | Neuer Menüpunkt "YIELD" unter MANAGE |
|
||||
| **`/terminal/yield`** | Neue Seite: Domain-Liste, Stats, Activate-Wizard |
|
||||
| **Watchlist** | Optional: "Activate for Yield" Button bei eigenen Domains |
|
||||
|
||||
### Backend-Aufwand
|
||||
|
||||
- 3 neue Models
|
||||
- 1 neuer API Router
|
||||
- 2 neue Services (Intent, DNS)
|
||||
- Partner-Integrationen (Awin, PartnerStack, etc.)
|
||||
|
||||
### Priorität
|
||||
|
||||
**Starte mit `/terminal/yield` + Intent-Detection + 1 Partner.**
|
||||
Public Page und Marktplatz-Integration kommen später.
|
||||
|
||||
---
|
||||
|
||||
*"Domains werden keine toten Assets mehr. Sie werden autonome Agenten."*
|
||||
|
||||
Reference in New Issue
Block a user