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
348 lines
16 KiB
Markdown
348 lines
16 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:
|
||
|
||
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
|