- 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
510 lines
20 KiB
Markdown
510 lines
20 KiB
Markdown
# 🎯 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
|