pounce/MARKET_CONCEPT.md
yves.gugger 22cb9561ad fix: Data freshness - only show active auctions
CRITICAL FIXES:
- API: Added end_time > now() filter to all auction queries
- Scheduler: Cleanup expired auctions every 15 minutes
- Scheduler: Scrape auctions every 2 hours (was 1 hour)
- Scheduler: Sniper alert matching every 30 minutes

Affected endpoints:
- GET /auctions (search)
- GET /auctions/feed (unified)
- GET /auctions/hot
- GET /auctions/ending-soon (already had filter)

Updated MARKET_CONCEPT.md with:
- 3 pillars: Pounce Direct, Live Auctions, Drops Tomorrow
- Data freshness architecture
- Unicorn roadmap
2025-12-11 09:55:27 +01:00

348 lines
16 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:
1. **Pounce Direct** — User-Listings (unser USP, 0% Provision)
2. **Live Auktionen** — Externe Plattformen (GoDaddy, Sedo, etc.)
3. **Drops Tomorrow** — Domains bevor sie in Auktionen landen (Phase 3)
### Der Weg zum Unicorn (aus pounce_strategy.md)
> *"Der Weg zum Unicorn führt nicht über besseres Scraping, sondern über einzigartigen Content."*
**Aggregation kann jeder. Pounce Direct ist unser USP.**
---
## 🔧 KRITISCHE FIXES (Implementiert am 11.12.2025)
### Problem: Veraltete Daten wurden angezeigt
```
VORHER: Abgelaufene Auktionen wurden im Feed angezeigt
→ Schlechte User Experience
→ Vertrauensverlust
```
### Lösung: Multi-Layer Data Freshness
```python
# 1. API-Filter: Nur laufende Auktionen
query = select(DomainAuction).where(
and_(
DomainAuction.is_active == True,
DomainAuction.end_time > datetime.utcnow() # ← NEU!
)
)
# 2. Scheduler: Cleanup alle 15 Minuten
scheduler.add_job(
cleanup_expired_auctions,
CronTrigger(minute='*/15'), # Alle 15 Minuten
id="auction_cleanup"
)
# 3. Scraper: Alle 2 Stunden frische Daten
scheduler.add_job(
scrape_auctions,
CronTrigger(hour='*/2', minute=30), # Alle 2 Stunden
id="auction_scrape"
)
```
---
## 📊 Die 3 Säulen des Market
### Säule 1: POUNCE DIRECT (Unser USP!)
> *"Das sind die Domains, die es NUR bei Pounce gibt."*
```
┌─────────────────────────────────────────────────────────────────┐
│ 💎 POUNCE DIRECT │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Warum es genial ist: │
│ ───────────────────────────────────────────────────────────── │
│ ✓ Unique Content (nur bei uns!) │
│ ✓ 0% Provision (vs. 15-20% bei Sedo) │
│ ✓ DNS-Verifizierung = Trust │
│ ✓ Instant Buy (kein Bieten) │
│ ✓ SEO: Jedes Listing = eigene Landing Page │
│ │
│ Der Flow: │
│ ───────────────────────────────────────────────────────────── │
│ 1. User listet Domain (Trader/Tycoon Abo) │
│ 2. DNS-Verifizierung (TXT Record) │
│ 3. Listing erscheint im Market Feed │
│ 4. Käufer kontaktiert Verkäufer (nach Login) │
│ │
└─────────────────────────────────────────────────────────────────┘
```
**Status:** ⏳ 0 Listings — Muss aktiviert werden!
---
### Säule 2: LIVE AUKTIONEN (Content Filler)
> *"Zeige alle relevanten Auktionen von GoDaddy, Sedo, NameJet, etc."*
```
┌─────────────────────────────────────────────────────────────────┐
│ 🏢 LIVE AUKTIONEN │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Datenquellen: │
│ ───────────────────────────────────────────────────────────── │
│ 📦 Web Scraping (Hauptquelle) │
│ └─→ ExpiredDomains.net (~350 Domains) │
│ └─→ GoDaddy RSS │
│ └─→ Sedo Public │
│ └─→ NameJet Public │
│ └─→ DropCatch Public │
│ │
│ Data Freshness: │
│ ───────────────────────────────────────────────────────────── │
│ ⏱️ Scraping: Alle 2 Stunden │
│ 🧹 Cleanup: Alle 15 Minuten │
│ ✅ Filter: Nur end_time > now() │
│ │
│ Qualitätsfilter: │
│ ───────────────────────────────────────────────────────────── │
│ • Vanity Filter für Public (nur Premium-Domains) │
│ • Pounce Score (0-100) │
│ • TLD Filter (com, io, ai, etc.) │
│ │
└─────────────────────────────────────────────────────────────────┘
```
**Status:** ✅ ~361 aktive Auktionen
---
### Säule 3: DROPS TOMORROW (Tycoon Exclusive)
> *"Zeige Domains BEVOR sie in Auktionen landen."*
```
┌─────────────────────────────────────────────────────────────────┐
│ 🔮 DROPS TOMORROW — Phase 3 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Das Konzept: │
│ ───────────────────────────────────────────────────────────── │
│ 1. Zone Files von Verisign (.com/.net) beziehen │
│ 2. Tägliche Diff-Analyse (was war gestern da, ist heute weg) │
│ 3. Diese Domains droppen in 1-5 Tagen! │
│ 4. Pounce Algorithm filtert nur Premium-Domains │
│ │
│ Warum das ein MONOPOL schafft: │
│ ───────────────────────────────────────────────────────────── │
│ • ExpiredDomains zeigt ALLES (Spam-Hölle) │
│ • Pounce zeigt nur die TOP 100 (kuratiert) │
│ • = Zeitersparnis = Premium Feature = $29/Monat │
│ │
└─────────────────────────────────────────────────────────────────┘
```
**Status:** 🔜 Geplant (6-12 Monate)
---
## 🎨 UI/UX: Die Market Page
### Filter Bar
```
[✓] Hide Spam [○] Pounce Only [TLD ▾] [Price ▾] [Ending ▾]
```
### Die Master-Tabelle
| Spalte | Inhalt | Visualisierung |
|--------|--------|----------------|
| **Domain** | Name | Fettgedruckt. 💎 Icon für Pounce Direct |
| **Score** | Pounce Score | 0-100 (Grün > 80, Gelb 50-80, Rot < 50) |
| **Price** | Preis/Gebot | `$500` oder `$50 (Bid)` |
| **Status** | Zeit/Verfügbarkeit | `4h left` oder `Instant` |
| **Source** | Herkunft | 🏢 GoDaddy, 💎 Pounce |
| **Action** | Button | `[Bid ↗]` oder `[Buy Now]` |
### Visuelle Hierarchie
```
┌─────────────────────────────────────────────────────────────────┐
│ MARKET FEED │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 💎 POUNCE EXCLUSIVE — Verified Instant Buy │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ zurich-immo.ch $950 ⚡ Instant ✅ Verified [Buy] │ │
│ │ crypto-hub.io $2.5k ⚡ Instant ✅ Verified [Buy] │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ 🏢 LIVE AUCTIONS │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ techflow.io $250 ⏱️ 4h left GoDaddy [Bid ↗] │ │
│ │ datalab.com $1.2k ⏱️ 23h left Sedo [Bid ↗] │ │
│ │ nexus.ai $5k ⏱️ 2d left NameJet [Bid ↗] │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ 🔮 DROPS TOMORROW (Tycoon Only) │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 🔒 Upgrade to Tycoon to see domains dropping tomorrow │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
## 💰 Monetarisierung (aus pounce_pricing.md)
| Feature | Scout ($0) | Trader ($9) | Tycoon ($29) |
|---------|------------|-------------|--------------|
| **Market Feed** | 🌪 Vanity Filter | Clean | Clean + Priority |
| **Alert Speed** | 🐢 Daily | 🐇 Hourly | Real-Time (10m) |
| **Watchlist** | 5 Domains | 50 Domains | 500 Domains |
| **Sell Domains** | | 5 Listings | 50 + Featured |
| **Pounce Score** | Locked | Basic | + SEO Data |
| **Drops Tomorrow** | | | Exclusive |
---
## ⚙️ Technische Architektur
### Scheduler Jobs
```python
# Aktive Jobs (Scheduler)
# ─────────────────────────────────────────────────────────────────
# 1. Auction Scrape — Alle 2 Stunden
scheduler.add_job(scrape_auctions, CronTrigger(hour='*/2', minute=30))
# 2. Expired Cleanup — Alle 15 Minuten (KRITISCH!)
scheduler.add_job(cleanup_expired_auctions, CronTrigger(minute='*/15'))
# 3. Sniper Matching — Alle 30 Minuten
scheduler.add_job(match_sniper_alerts, CronTrigger(minute='*/30'))
# 4. TLD Prices — Täglich 03:00 UTC
scheduler.add_job(scrape_tld_prices, CronTrigger(hour=3))
```
### API Endpoints
```python
# Market Feed Endpoints
# ─────────────────────────────────────────────────────────────────
GET /api/v1/auctions/feed # Unified Feed (Pounce + External)
GET /api/v1/auctions # External Auctions only
GET /api/v1/auctions/ending-soon
GET /api/v1/auctions/hot
GET /api/v1/listings # Pounce Direct Listings
```
### Data Freshness Garantie
```python
# Jede Query filtert automatisch auf aktive Auktionen:
query = select(DomainAuction).where(
and_(
DomainAuction.is_active == True,
DomainAuction.end_time > datetime.utcnow() # ← IMMER!
)
)
```
---
## 📈 Roadmap
### ✅ ERLEDIGT (11. Dezember 2025)
- [x] Unified Feed API `/auctions/feed`
- [x] Pounce Score v2.0
- [x] Vanity Filter
- [x] Web Scraping (5 Plattformen)
- [x] **FIX: end_time Filter** (nur laufende Auktionen)
- [x] **FIX: Cleanup alle 15 Minuten**
- [x] **FIX: Scraper alle 2 Stunden**
- [x] Sniper Alerts
### 🎯 NÄCHSTE SCHRITTE (Diese Woche)
1. **Erste Pounce Direct Listings erstellen**
- Test-Domains zum Verifizieren des Flows
- USP aktivieren!
2. **Sedo API Credentials eingeben**
- Sedo.com Mein Sedo API-Zugang
- Partner ID + SignKey in `.env`
3. **Frontend: "Live" Indikator**
- Zeige wann Daten zuletzt aktualisiert wurden
### 🔮 PHASE 2-3 (6-12 Monate)
1. **Zone File Access beantragen**
- Verisign (.com/.net)
- "Drops Tomorrow" Feature
2. **Pounce Instant Exchange**
- Integrierter Escrow-Service
- 5% Gebühr
---
## 🚀 Der Unicorn-Pfad
```
Phase 1: INTELLIGENCE (Jetzt)
├── Pounce Direct aktivieren (Unique Content)
├── Clean Feed (aktuelle Daten, Spam-frei)
├── Trust aufbauen
└── 10.000 User, $1M ARR
Phase 2: LIQUIDITÄT (18-36 Monate)
├── Pounce Instant Exchange
├── Buy Now im Dashboard
├── 5% Gebühr
└── $10M ARR
Phase 3: FINANZIALISIERUNG (3-5 Jahre)
├── Fractional Ownership
├── Domain-Backed Lending
└── = FINTECH ($50-100M ARR)
Phase 4: IMPERIUM (5+ Jahre)
├── Enterprise Sentinel (B2B)
├── Fortune 500 Kunden
└── = $1 Mrd. Bewertung
```
---
## 💎 Das Fazit
**Aggregation ist Commodity. Pounce Direct ist der USP.**
Der Weg zum Unicorn:
1. Datenqualität (aktuelle, saubere Daten)
2. Unique Content (Pounce Direct aktivieren!)
3. 🔮 Datenhoheit (Zone Files)
> *"Don't guess. Know."*
>
> — Phase 1: Intelligence