diff --git a/DATA_INDEPENDENCE_REPORT.md b/DATA_INDEPENDENCE_REPORT.md new file mode 100644 index 0000000..a05c08d --- /dev/null +++ b/DATA_INDEPENDENCE_REPORT.md @@ -0,0 +1,247 @@ +# 🔒 Pounce Data Independence Report + +## Executive Summary + +**Status: 🟡 PARTIALLY INDEPENDENT** + +Pounce hat eine solide Basis für Unabhängigkeit, aber es gibt kritische Bereiche, die verbessert werden müssen, um als "Premium-Dienstleister" aufzutreten. + +--- + +## 📊 Aktuelle Datenquellen-Analyse + +### 1. TLD-Preise (TLD Intel) + +| Aspekt | Status | Details | +|--------|--------|---------| +| **Quelle** | Porkbun Public API | ✅ Keine API-Keys erforderlich | +| **Zuverlässigkeit** | 🟡 Mittel | API kann jederzeit geändert werden | +| **Abdeckung** | 896+ TLDs | ✅ Excellent | +| **Genauigkeit** | 100% | ✅ Offizielle Preise | +| **Unabhängigkeit** | ⚠️ Fragil | Abhängig von einem Registrar | + +**Risiko:** Wenn Porkbun seine API ändert oder blockt, fallen alle TLD-Preise weg. + +**Empfehlung:** Mehrere Registrare hinzufügen (Namecheap, Cloudflare, Google Domains Public Pricing). + +--- + +### 2. Domain-Auktionen (Acquire) + +| Aspekt | Status | Details | +|--------|--------|---------| +| **Quelle** | Web Scraping | 5 Plattformen | +| **Plattformen** | GoDaddy, Sedo, NameJet, DropCatch, ExpiredDomains | ✅ Diverse | +| **Zuverlässigkeit** | 🔴 Niedrig | Websites können Layouts jederzeit ändern | +| **Genauigkeit** | ⚠️ Variabel | Abhängig von Scraping-Qualität | +| **Rate Limiting** | ✅ Implementiert | 5-10 req/min pro Plattform | + +**Risiko:** +- Web-Scraping ist fragil - Layout-Änderungen brechen Scraper +- Plattformen können Scraping blocken (Captcha, IP-Bans) +- Keine rechtliche Grundlage für Daten-Nutzung + +**Aktueller Code-Zustand:** +```python +# backend/app/services/auction_scraper.py +# Zeilen 1-19 zeigen, dass ALLE Daten gescrapt werden +# Kein API-Zugriff, nur Web-Parsing +``` + +--- + +### 3. Domain-Verfügbarkeit (Track/Watchlist) + +| Aspekt | Status | Details | +|--------|--------|---------| +| **Methode 1** | RDAP (Modern) | ✅ Beste Methode | +| **Methode 2** | Custom RDAP (.ch, .li) | ✅ Speziell implementiert | +| **Methode 3** | WHOIS (Fallback) | ✅ Universal-Fallback | +| **Methode 4** | DNS Check | ✅ Schnellste Methode | +| **Unabhängigkeit** | ✅ 100% | Direkte Protokolle, keine APIs | + +**Dies ist der STÄRKSTE Teil der Architektur!** + +--- + +### 4. Domain-Valuation (Pounce Score) + +| Aspekt | Status | Details | +|--------|--------|---------| +| **Quelle** | Intern | ✅ Keine externen APIs | +| **Algorithmus** | Eigene Logik | TLD-Wert + Länge + Keywords | +| **Transparenz** | ✅ Vollständig | Code zeigt alle Faktoren | +| **Estibot/GoDaddy** | ❌ Nicht integriert | ✅ GUT - Unabhängig | + +**Aktueller Score-Algorithmus:** +```python +# backend/app/services/valuation.py +TLD_VALUES = { + "com": 1.0, # Baseline + "ai": 1.20, # Premium (AI-Boom) + "io": 0.75, # Startup-Favorit + "net": 0.65, # Klassiker + ... +} +``` + +--- + +## 🚀 Empfehlungen für 100% Premium-Unabhängigkeit + +### Priorität 1: Zone File Integration (KRITISCH) + +Die `analysis_2.md` beschreibt es perfekt: **Zone Files sind der Rohstoff**. + +**Was sind Zone Files?** +- Tägliche Listen ALLER registrierten Domains einer TLD +- Bereitgestellt von Registries (Verisign, SWITCH, etc.) +- Durch Vergleich von "gestern vs heute" = gelöschte/neue Domains + +**Umsetzung:** +```python +# Neuer Service: backend/app/services/zone_file_processor.py +class ZoneFileProcessor: + async def download_zone_file(self, tld: str) -> str: + """Download Zone File von CZDS oder Registry""" + pass + + async def compute_diff(self, yesterday: str, today: str) -> dict: + """Finde: added_domains, deleted_domains""" + pass + + async def filter_premium(self, domains: list) -> list: + """Wende Pounce-Filter an""" + # Keine Zahlen, max 12 Zeichen, Wörterbuch-Match + pass +``` + +**Zugang:** +- **.com/.net**: ICANN CZDS (Centralized Zone Data Service) - Kostenlos beantragen +- **.ch/.li**: SWITCH (nic.ch) - Open Data verfügbar +- **.de**: DENIC - Zone File Zugang beantragbar + +### Priorität 2: Multi-Registrar TLD-Preise + +Statt nur Porkbun, sollten wir Preise von mehreren Quellen sammeln: + +```python +# backend/app/services/tld_scraper/aggregator.py +self.scrapers = [ + PorkbunScraper(), # ✅ Bereits implementiert + NamecheapScraper(), # 📌 TODO: Public Pricing Page + CloudflareScraper(), # 📌 TODO: Public Pricing API + GandiScraper(), # 📌 TODO: Pricing Page +] +``` + +**Vorteil:** Preis-Vergleich über Registrare = echte "Intel" + +### Priorität 3: Auction-Daten Härtung + +**Option A: Offizieller API-Zugang** +- GoDaddy Affiliate-Programm für Auktions-API +- Sedo Partner-Programm +- → Kosten, aber zuverlässig + +**Option B: Robusteres Scraping** +- Playwright statt httpx (JavaScript-Rendering) +- Proxy-Rotation für IP-Diversität +- ML-basiertes HTML-Parsing (weniger Layout-abhängig) + +**Option C: User-Generated Data (Hybrid)** +- User können Auktionen melden +- Community-validiert +- Reduziert Scraping-Last + +--- + +## 📋 Implementierungs-Roadmap + +### Phase 1: Stabilisierung (Sofort) +- [x] Eigene Domain-Valuation (Pounce Score) +- [x] Multi-Methoden Domain-Check (RDAP/WHOIS/DNS) +- [ ] Zweiten TLD-Preis-Scraper hinzufügen (Namecheap) + +### Phase 2: Zone Files (2-4 Wochen) +- [ ] CZDS-Zugang beantragen (.com, .net) +- [ ] SWITCH Open Data integrieren (.ch, .li) +- [ ] Zone File Diff-Processor bauen +- [ ] "Daily Drop Gems" Feature launchen + +### Phase 3: Premium-Ausbau (1-2 Monate) +- [ ] GoDaddy Affiliate-API für Auktionen +- [ ] DNS-Change-Monitoring (Pre-Drop-Signale) +- [ ] HTTP-Health-Check für Watchlist-Domains + +--- + +## ✅ Was bereits EXZELLENT ist + +1. **Domain-Checker**: RDAP → WHOIS → DNS Fallback-Kette +2. **Valuation**: 100% intern, keine Estibot-Abhängigkeit +3. **Vanity Filter**: Eigener Spam-Erkennungs-Algorithmus +4. **TLD-Typisierung**: Automatische Klassifizierung + +--- + +## 🎯 Fazit + +Pounce hat die richtige Architektur für Unabhängigkeit. Die kritischsten Schritte sind: + +1. **Zone Files** = Unabhängige Datenquelle für "Drops" +2. **Multi-Registrar Preise** = Robustheit gegen API-Ausfälle +3. **Offizieller Auktions-Zugang** = Rechtlich sauber & zuverlässig + +Mit diesen Verbesserungen wird Pounce ein **echtes Premium-Tool**, das keine externen APIs braucht - sondern eigene, proprietäre Daten hat. + +--- + +## ⚠️ KRITISCHES PROBLEM: Sample-Daten vs. Echte Daten + +### Aktueller Zustand der Auktions-Daten: + +**Das Scraping ist implementiert ABER:** + +1. **ExpiredDomains.net**: Funktioniert, aber: + - Preise sind **geschätzt** (nicht echt): `estimated_price = base_prices.get(tld, 15)` + - Dies sind Registrierungspreise, KEINE Auktionspreise + +2. **GoDaddy/Sedo/NameJet/DropCatch**: Scraping existiert, aber: + - Websites haben Anti-Bot-Maßnahmen + - Layouts ändern sich regelmäßig + - **Aktuell werden oft Sample-Daten als Fallback verwendet** + +3. **In der Praxis zeigt die Seite oft:** + ```python + # backend/app/services/auction_scraper.py:689-780 + async def seed_sample_auctions(self, db: AsyncSession): + # DIESE DATEN SIND FAKE (Demo-Daten)! + sample_auctions = [ + {"domain": "techflow.io", "platform": "GoDaddy", "current_bid": 250, ...}, + ... + ] + ``` + +### 🚨 Für Premium-Qualität erforderlich: + +1. **Keine geschätzten Preise** - Nur echte Auktionspreise anzeigen +2. **Klare Kennzeichnung** - Wenn Daten unsicher sind, transparent kommunizieren +3. **Fallback-Strategie** - Wenn Scraping fehlschlägt, keine Fake-Daten zeigen + +### Empfohlene Änderungen: + +```python +# Statt geschätzter Preise: +"current_bid": float(estimated_price), # ❌ FALSCH + +# Besser: +"current_bid": None, # Kein Preis = keine falsche Info +"price_type": "registration_estimate", # Kennzeichnung +``` + +--- + +*Generiert am: 2024-12-10* +*Für: pounce.ch* +