pounce/MARKET_CONCEPT.md
yves.gugger e9f06d1cbf feat: DropCatch & Sedo API Clients + MARKET_CONCEPT v2
- DropCatch API Client mit OAuth2 Authentifizierung
- Sedo API Client (bereit für Credentials)
- Tier 1 APIs → Tier 2 Scraping Fallback-Logik
- Admin Endpoints: /test-apis, /trigger-scrape, /scrape-status
- MARKET_CONCEPT.md komplett überarbeitet:
  - Realistische Bestandsaufnahme
  - 3-Säulen-Konzept (Auktionen, Pounce Direct, Drops)
  - API-Realität dokumentiert (DropCatch = nur eigene Aktivitäten)
  - Roadmap und nächste Schritte
2025-12-11 09:36:32 +01:00

510 lines
20 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🎯 POUNCE MARKET — Das Herzstück der Plattform
> **Letzte Aktualisierung:** 11. Dezember 2025
---
## 📋 Executive Summary
Die **Market Page** ist das Herzstück von Pounce. Hier fließen alle Datenquellen zusammen und werden dem User als **"Clean Feed"** präsentiert.
### Vision (aus pounce_terminal.md)
> *"Die Market Page zeigt alle Domains die entweder:*
> 1. *Zu Verkauf stehen (Auktionen)*
> 2. *Bald frei werden (Drops)*
> 3. *Über Pounce direkt angeboten werden (Pounce Direct)"*
### Aktueller Stand: Phase 1 — Intelligence
```
┌─────────────────────────────────────────────────────────────────┐
│ POUNCE MARKET — Aktueller Datenfluss │
├─────────────────────────────────────────────────────────────────┤
│ │
│ DATENQUELLEN: │
│ ───────────────────────────────────────────────────────────── │
│ │
│ 📦 WEB SCRAPING (Hauptquelle) │
│ └─→ ExpiredDomains.net (325 Auktionen) ✅ │
│ └─→ GoDaddy RSS Feed (10 Auktionen) ✅ │
│ └─→ Sedo Public (7 Auktionen) ✅ │
│ └─→ NameJet Public (6 Auktionen) ✅ │
│ └─→ DropCatch Public (7 Auktionen) ✅ │
│ │
│ 🔌 OFFIZIELLE APIs (Konfiguriert) │
│ └─→ DropCatch Partner API ⚠️ (Nur eigene Aktivitäten) │
│ └─→ Sedo Partner API ⏳ (Credentials fehlen) │
│ │
│ 💎 POUNCE DIRECT (User-Listings) │
│ └─→ DNS-verifizierte Verkaufsangebote ❌ (0 Listings) │
│ │
│ 🔮 ZONE FILES (Phase 3 — Zukunft) │
│ └─→ Verisign .com/.net 🔜 │
│ └─→ PIR .org 🔜 │
│ │
│ ───────────────────────────────────────────────────────────── │
│ TOTAL: 355 Domains im Feed | 0 Pounce Direct │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## 📊 TEIL 1: Bestandsaufnahme — Was haben wir?
### A. Backend-Komponenten ✅
| Komponente | Status | Beschreibung |
|------------|--------|--------------|
| **Unified Feed API** `/auctions/feed` | ✅ Live | Kombiniert Pounce Direct + External |
| **Pounce Score v2.0** | ✅ Live | Length, TLD, Bids, Time Pressure |
| **Vanity Filter** | ✅ Live | Premium-Domains für Public Users |
| **Auction Scraper** | ✅ Läuft | 5 Plattformen, Scheduler aktiv |
| **Listings API** | ✅ Fertig | DNS-Verifizierung, Inquiry-System |
| **Sniper Alerts** | ✅ Fertig | Keyword-Matching, Notifications |
### B. Frontend-Komponenten ✅
| Seite | Status | Beschreibung |
|-------|--------|--------------|
| `/terminal/market` | ✅ Live | Vollständiger Market Feed für Auth Users |
| `/auctions` | ✅ Live | Public Market mit Vanity Filter |
| `/buy` | ✅ Live | Pounce Direct Marketplace Browse |
| `/buy/[slug]` | ✅ Live | Listing-Detailseite |
| `/terminal/listing` | ✅ Live | Seller Dashboard |
### C. Datenquellen — Realitätscheck
#### Offizielle APIs — Die Ernüchterung
**DropCatch API:**
```
Status: ✅ Authentifiziert
Problem: Zeigt nur EIGENE Aktivitäten (Bids, Backorders)
NICHT das öffentliche Auktionsinventar
Nutzen: User-Integration (verbinde dein DropCatch-Konto)
```
**Sedo API:**
```
Status: ⏳ Client bereit, Credentials fehlen
Wo finden: Sedo.com → Mein Sedo → API-Zugang
Benötigt: Partner ID + SignKey
```
#### Web Scraping — Unsere Hauptquelle
```python
# Aktuelle Scraper-Architektur
TIER_1_APIS = [
("DropCatch", _fetch_dropcatch_api), # Für eigene Aktivitäten
("Sedo", _fetch_sedo_api), # Wenn konfiguriert
]
TIER_2_SCRAPING = [
("ExpiredDomains", _scrape_expireddomains), # 325 Domains
("GoDaddy", _scrape_godaddy_rss), # 10 Domains
("Sedo", _scrape_sedo_public), # 7 Domains (Fallback)
("NameJet", _scrape_namejet_public), # 6 Domains
("DropCatch", _scrape_dropcatch_public), # 7 Domains (Fallback)
]
```
---
## 🎯 TEIL 2: Das Konzept — Die 3 Säulen des Market
### Säule 1: AUKTIONEN (Externe Plattformen)
> *"Zeige alle relevanten Auktionen von GoDaddy, Sedo, NameJet, etc."*
**Datenquellen:**
- Web Scraping (primär)
- Partner APIs (wenn verfügbar)
**Filter-Strategie:**
```python
# Vanity Filter für Public Users (aus pounce_features.md)
def is_premium_domain(domain: str) -> bool:
name, tld = domain.rsplit('.', 1)
# Premium TLDs only
if tld not in ['com', 'io', 'ai', 'co', 'ch', 'de', 'net', 'org', 'app', 'dev']:
return False
# Keine Spam-Muster
if len(name) > 12: return False
if '-' in name: return False
if sum(c.isdigit() for c in name) > 1: return False
return True
```
**UI-Darstellung:**
| Domain | Source | Price | Status | Action |
|--------|--------|-------|--------|--------|
| **crypto-bank.io** | 🏢 GoDaddy | $2,500 | ⏱️ 2h left | [Bid ↗] |
| **meta-shop.com** | 🏢 Sedo | $5,000 | 🤝 Offer | [View ↗] |
---
### Säule 2: POUNCE DIRECT (User-Listings)
> *"Das sind die Domains, die es NUR bei Pounce gibt. Unser USP."*
**Das Konzept (aus pounce_terminal.md):**
```
┌─────────────────────────────────────────────────────────────────┐
│ POUNCE DIRECT — Der Listing-Wizard │
├─────────────────────────────────────────────────────────────────┤
│ │
│ STEP 1: DOMAIN EINGEBEN │
│ ─────────────────────────────────────────────────────────── │
│ Domain: [zurich-immo.ch___________] │
│ Preis: [$950_______] ○ Fixpreis ● Verhandlungsbasis │
│ │
│ STEP 2: DNS VERIFICATION (Trust-Check) │
│ ─────────────────────────────────────────────────────────── │
│ Füge diesen TXT-Record bei deinem Registrar hinzu: │
│ │
│ Name: _pounce-verify │
│ Value: pounce-verify-8a3f7b9c2e1d │
│ │
│ [🔄 VERIFY DNS] │
│ │
│ STEP 3: LIVE! │
│ ─────────────────────────────────────────────────────────── │
│ ✅ Domain verifiziert! │
│ Dein Listing erscheint jetzt im Market Feed. │
│ │
└─────────────────────────────────────────────────────────────────┘
```
**Warum das genial ist:**
| Vorteil | Erklärung |
|---------|-----------|
| **Unique Content** | Domains, die es NUR bei Pounce gibt |
| **Höhere Conversion** | "Instant Buy" statt "Bid on external site" |
| **Vendor Lock-in** | Verkäufer listen bei uns (0% Provision!) |
| **SEO Power** | Jede Listing = eigene Landing Page |
| **Trust Signal** | DNS-Verifizierung = Qualitätsgarantie |
**UI-Darstellung:**
| Domain | Source | Price | Status | Action |
|--------|--------|-------|--------|--------|
| **zurich-immo.ch** | 💎 **Pounce** | **$950** | ⚡ **Instant** | **[Buy Now]** |
---
### Säule 3: DROPS (Domains die bald frei werden)
> *"Zeige Domains BEVOR sie in Auktionen landen."*
**Phase 1 (Jetzt): Deleted Domains via Scraping**
```
ExpiredDomains.net → Deleted Domains Liste → Pounce Filter → Feed
```
**Phase 3 (Zukunft): Zone File Analysis**
```
┌─────────────────────────────────────────────────────────────────┐
│ ZONE FILE PIPELINE — Die Unicorn-Strategie │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. DAILY DOWNLOAD (4:00 UTC) │
│ └─→ Zone Files von Verisign, PIR, etc. │
│ │
│ 2. DIFF ANALYSIS │
│ └─→ Was war gestern da, ist heute weg? │
│ └─→ Diese Domains DROPPEN in 1-5 Tagen! │
│ │
│ 3. POUNCE ALGORITHM │
│ └─→ Nur Premium-Domains durchlassen (Score > 70) │
│ │
│ 4. OUTPUT: "Drops Tomorrow" (Tycoon Exclusive) │
│ └─→ Domains BEVOR sie in Auktionen erscheinen │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## 🔧 TEIL 3: Technische Architektur
### Der Unified Feed API Endpoint
```python
# backend/app/api/auctions.py
@router.get("/feed")
async def get_market_feed(
source: str = Query("all", enum=["all", "pounce", "external"]),
keyword: Optional[str] = None,
tld: Optional[str] = None,
min_price: Optional[float] = None,
max_price: Optional[float] = None,
min_score: int = Query(0, ge=0, le=100),
ending_within: Optional[int] = None, # Stunden
verified_only: bool = False,
sort_by: str = Query("score", enum=["score", "price_asc", "price_desc", "time", "newest"]),
limit: int = Query(50, le=200),
offset: int = Query(0),
current_user: Optional[User] = Depends(get_current_user_optional),
):
"""
🚀 UNIFIED MARKET FEED — Das Herz von Pounce
Kombiniert:
- 💎 Pounce Direct: DNS-verifizierte User-Listings (Instant Buy)
- 🏢 External Auctions: Scraped von GoDaddy, Sedo, etc.
- 🔮 Drops: Domains die bald frei werden (Phase 3)
Für nicht-authentifizierte User:
- Vanity Filter aktiv (nur Premium-Domains)
- Pounce Score sichtbar, aber limited Details
Für authentifizierte User (Trader/Tycoon):
- Vollzugriff auf alle Domains
- Advanced Filtering
- Valuation Data
"""
```
### Pounce Score v2.0
```python
def calculate_pounce_score_v2(domain: str, auction_data: dict) -> int:
"""
Der Pounce Score — Qualitäts- und Opportunity-Bewertung
A) INTRINSIC VALUE (Domain selbst)
- Länge (kurz = wertvoll)
- TLD Premium (com > io > xyz)
- Dictionary Word Bonus
B) MARKET SIGNALS (Aktivität)
- Bid Activity (mehr Bids = mehr Interesse)
- Time Pressure (endet bald = Opportunity)
- Price-to-Value Ratio (unterbewertet = 🔥)
C) PENALTIES
- Bindestriche (-30)
- Zahlen wenn >3 Zeichen (-20)
- Zu lang >15 Zeichen (-25)
"""
score = 50 # Baseline
name = domain.rsplit('.', 1)[0]
tld = domain.rsplit('.', 1)[1]
# Länge
if len(name) <= 3: score += 30
elif len(name) == 4: score += 25
elif len(name) == 5: score += 20
elif len(name) <= 7: score += 10
# TLD
tld_scores = {'com': 20, 'ai': 25, 'io': 18, 'co': 12, 'ch': 15}
score += tld_scores.get(tld, 0)
# Market Signals
bids = auction_data.get('num_bids', 0)
if bids >= 20: score += 15
elif bids >= 10: score += 10
elif bids >= 5: score += 5
# Penalties
if '-' in name: score -= 30
if any(c.isdigit() for c in name) and len(name) > 3: score -= 20
return max(0, min(100, score))
```
---
## 📈 TEIL 4: Roadmap
### ✅ ERLEDIGT (Stand: 11. Dezember 2025)
- [x] Unified Feed API `/auctions/feed`
- [x] Pounce Score v2.0 mit Market Signals
- [x] Vanity Filter für Public Users
- [x] Pounce Direct Listing-System (DNS-Verifizierung)
- [x] Sniper Alerts mit Keyword-Matching
- [x] Web Scraping für 5 Plattformen
- [x] DropCatch API Client (für User-Integration)
- [x] Sedo API Client (bereit für Credentials)
### 🎯 NÄCHSTE SCHRITTE (Diese Woche)
1. **Sedo API Credentials eingeben**
- Sedo.com → Mein Sedo → API-Zugang
- Partner ID + SignKey in `.env`
2. **Erste Pounce Direct Listings erstellen**
- Test-Domains zum Verifizieren des Flows
- Zeigt "Unique Content" im Feed
3. **Scraper-Stabilität verbessern**
- Fallback-Logik testen
- Error-Handling optimieren
### 🔮 PHASE 3 (6-12 Monate)
1. **Zone File Access beantragen**
- Verisign (.com/.net)
- PIR (.org)
- Kosten: $0-$10,000/Jahr
2. **"Drops Tomorrow" Feature**
- Zone File Diff-Analyse
- Tycoon Exclusive ($29/mo)
3. **Pounce Instant Exchange**
- Integrierter Escrow-Service
- 5% Gebühr (statt 15-20% bei Konkurrenz)
---
## 🎨 TEIL 5: UI/UX Design
### Die Master-Tabelle (aus pounce_terminal.md)
| Spalte | Inhalt | Visualisierung |
|--------|--------|----------------|
| **Domain** | Name der Domain | Fettgedruckt. Bei "Pounce Direct" → 💎 Icon |
| **Pounce Score** | Qualitäts-Algorithmus | 0-100 (Grün > 80, Gelb 50-80, Rot < 50) |
| **Price / Bid** | Preis oder aktuelles Gebot | `$500` oder `$50 (Bid)` |
| **Status / Time** | Countdown oder Verfügbarkeit | `4h left` oder `Instant` |
| **Source** | Herkunft | 🏢 GoDaddy, 💎 Pounce |
| **Action** | Der Button | `[Bid ↗]` oder `[Buy Now]` |
### Filter Bar
```
[Toggle] Hide Spam (Standard: AN)
[Toggle] Pounce Direct Only
[Dropdown] TLD: .com, .ai, .io, .ch
[Dropdown] Price: < $100, < $1k, High Roller
[Dropdown] Ending: 1h, 4h, 24h, 7d
```
### Visuelle Hierarchie
```tsx
// Pounce Direct Items werden prominent angezeigt
{pounceDirectItems.length > 0 && (
<section className="mb-6">
<div className="flex items-center gap-2 text-emerald-400 font-bold mb-3">
<Diamond className="w-4 h-4" />
Pounce Exclusive Verified Instant Buy
</div>
{pounceDirectItems.map(item => <PounceDirectCard />)}
</section>
)}
// External Auctions darunter
<section>
<h2>Active Auctions</h2>
{externalItems.map(item => <AuctionCard />)}
</section>
```
---
## 💰 TEIL 6: Monetarisierung
### Tier-basierte Features (aus pounce_pricing.md)
| Feature | Scout ($0) | Trader ($9) | Tycoon ($29) |
|---------|------------|-------------|--------------|
| **Market Feed** | 🌪 Raw (Vanity Filter) | Curated (Clean) | Curated + Priority |
| **Alert Speed** | 🐢 Daily | 🐇 Hourly | Real-Time (10m) |
| **Watchlist** | 5 Domains | 50 Domains | 500 Domains |
| **Sell Domains** | | 5 Listings | 50 Listings + Featured |
| **Pounce Score** | Locked | Basic | + SEO Data |
| **Drops Tomorrow** | | | Exclusive |
### Die "Conversion-Falle" (aus pounce_features.md)
Wenn ein nicht-eingeloggter User auf "Buy Now" bei einem Pounce Direct Listing klickt:
```
┌─────────────────────────────────────────────────────────────────┐
│ 🔒 Secure Transaction │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Du bist dabei, ein verifiziertes Direct-Listing anzusehen. │
│ │
│ Um den Verkäufer zu kontaktieren und Käuferschutz zu │
│ genießen, logge dich bitte ein. │
│ │
│ [Login] [Create Free Scout Account] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## 🔑 TEIL 7: Kritische Erkenntnisse
### API-Realität vs. Erwartung
| API | Erwartung | Realität |
|-----|-----------|----------|
| **DropCatch** | Alle öffentlichen Auktionen | Nur eigene Bids/Backorders |
| **Sedo** | TBD | Credentials fehlen noch |
**Konsequenz:**
- Web Scraping bleibt unsere **Hauptquelle** für öffentliche Daten
- APIs sind nützlich für **User-Integration** (verbinde dein DropCatch-Konto)
- **Zone Files** sind der langfristige Weg zur Datenhoheit
### Der echte USP: Pounce Direct
> *"Domains die es NUR bei Pounce gibt."*
Das ist der Schlüssel. Nicht die Aggregation (das kann jeder), sondern der **Unique Content** durch User-Listings.
**Priorität:** Erste Pounce Direct Listings aktivieren!
---
## 📋 Checkliste für den Launch
### Backend
- [x] Unified Feed API
- [x] Pounce Score v2.0
- [x] Vanity Filter
- [x] Scraper aktiv
- [ ] Sedo API Credentials eingeben
- [ ] Scheduler-Intervall optimieren
### Frontend
- [x] Terminal Market Page
- [x] Public Auctions Page
- [x] Pounce Direct Highlighting
- [x] Filter (Source, TLD, Price)
- [ ] "Hot Right Now" Section
- [ ] Better Empty States
### Content
- [ ] Erste 5 Test-Listings erstellen
- [ ] DNS-Verifizierung testen
- [ ] Listing-to-Feed Flow validieren
---
## 💎 Fazit
Die Market Page ist **funktional**, aber der wahre USP (Pounce Direct) ist noch nicht aktiviert.
**Die Reihenfolge:**
1. Aggregation funktioniert (Scraping)
2. Pounce Direct aktivieren (User-Listings)
3. 🔮 Zone Files für Datenhoheit (Phase 3)
> *"Der Weg zum Unicorn führt nicht über besseres Scraping, sondern über einzigartigen Content."*
>
> — pounce_strategy.md