Add Data Independence Report with premium service analysis
- Comprehensive analysis of all data sources - Identified: TLD prices depend on Porkbun API (fragile) - Identified: Auction data uses sample fallbacks (not premium) - Identified: Domain checker is 100% independent (RDAP/WHOIS/DNS) - Identified: Valuation is 100% internal (no Estibot) - Recommendations for Zone File integration - Roadmap for true data independence
This commit is contained in:
247
DATA_INDEPENDENCE_REPORT.md
Normal file
247
DATA_INDEPENDENCE_REPORT.md
Normal file
@ -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*
|
||||
|
||||
Reference in New Issue
Block a user