# 🔒 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.

---

## ✅ GELÖST: Keine Sample-/Fake-Daten im Auction Feed

### Neuer Zustand der Auktions-Daten (Stand: 2025-12)

**Das Scraping liefert jetzt ausschließlich echte Auktionsdaten** (keine Schätzpreise, kein Random-Fallback, kein Seed/Demo):

1. **GoDaddy / Namecheap / Sedo** (robust, ohne Cloudflare-Probleme):
   - Ingestion über die ExpiredDomains-Provider-Seiten mit **Price / Bids / Endtime**
   - Vorteil: Wir müssen die Cloudflare-geschützten Provider nicht direkt scrapen, bekommen aber echte Live-Daten.

2. **Park.io**
   - Scraping der öffentlichen Auktionstabelle (inkl. **Price / Bids / Close Date**)

3. **Sav**
   - Scraping des Tabellen-Endpoints `load_domains_ajax/*` (inkl. **Price / Bids / Time left** → deterministische `end_time` Ableitung)

4. **Dynadot**
   - Hidden JSON API (Frontend-API) mit echten Preis- und Endzeit-Feldern

### Datenqualitäts-Regeln

- **`current_bid > 0` und `end_time` müssen vorhanden sein**, sonst wird der Datensatz verworfen.
- Es gibt **keinen** `/api/v1/auctions/seed` Endpunkt mehr und **keine** Seed-/Demo-Skripte.

---

*Generiert am: 2024-12-10*
*Für: pounce.ch*

