pounce/MARKET_CONCEPT.md
yves.gugger 6a6e2460d5 feat: Unified Market Feed API + Pounce Direct Integration
🚀 MARKET CONCEPT IMPLEMENTATION

Backend:
- Added /auctions/feed unified endpoint combining Pounce Direct + external auctions
- Implemented Pounce Score v2.0 with market signals (length, TLD, bids, age)
- Added vanity filter for premium domains (non-auth users)
- Integrated DomainListing model for Pounce Direct

Frontend:
- Refactored terminal/market page with Pounce Direct hierarchy
- Updated public auctions page with Pounce Exclusive section
- Added api.getMarketFeed() to API client
- Converted /market to redirect to /auctions

Documentation:
- Created MARKET_CONCEPT.md with full unicorn roadmap
- Created ZONE_FILE_ACCESS.md with Verisign access guide
- Updated todos and progress tracking

Cleanup:
- Deleted empty legacy folders (dashboard, portfolio, settings, watchlist, careers)
2025-12-11 08:59:50 +01:00

1416 lines
64 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🎯 POUNCE MARKET — Das Konzept für die Unicorn-Journey
---
# 📦 TEIL 1: BESTANDSAUFNAHME — Was haben wir?
## Übersicht: Code-Inventar
### ✅ BEHALTEN — Funktioniert gut, Vision-konform
| Komponente | Pfad | Status | Beschreibung |
|------------|------|--------|--------------|
| **Listings API** | `backend/app/api/listings.py` | ✅ Vollständig | Pounce Direct Marketplace mit DNS-Verifizierung |
| **Listing Model** | `backend/app/models/listing.py` | ✅ Vollständig | DomainListing, ListingInquiry, ListingView |
| **My Listings Page** | `frontend/src/app/terminal/listing/page.tsx` | ✅ Vollständig | Seller Dashboard mit Verification Wizard |
| **Public Marketplace** | `frontend/src/app/buy/page.tsx` | ✅ Vollständig | Öffentliche Browse-Seite für Listings |
| **Listing Detail** | `frontend/src/app/buy/[slug]/page.tsx` | ✅ Vollständig | Öffentliche Landing Page pro Listing |
| **Sniper Alerts API** | `backend/app/api/sniper_alerts.py` | ✅ Vollständig | Alert-Matching für Auktionen |
| **Sniper Alert Model** | `backend/app/models/sniper_alert.py` | ✅ Vollständig | SniperAlert, SniperAlertMatch |
| **Scheduler** | `backend/app/scheduler.py` | ✅ Vollständig | APScheduler mit Scraping, Alerts, Checks |
| **Valuation Service** | `backend/app/services/valuation.py` | ✅ Vollständig | Pounce Score Berechnung |
| **TLD Prices API** | `backend/app/api/tld_prices.py` | ✅ Vollständig | Intel/Pricing Feature |
| **TLD Scraper** | `backend/app/services/tld_scraper/` | ✅ Funktioniert | Porkbun + Aggregator |
| **Portfolio API** | `backend/app/api/portfolio.py` | ✅ Vollständig | Eigene Domains verwalten |
| **Domain Health** | `backend/app/services/domain_health.py` | ✅ Vollständig | 4-Layer Monitoring |
| **SEO Analyzer** | `backend/app/services/seo_analyzer.py` | ✅ Vollständig | Moz API Integration |
| **Email Service** | `backend/app/services/email_service.py` | ✅ Vollständig | Notifications |
| **Stripe Service** | `backend/app/services/stripe_service.py` | ✅ Vollständig | Subscriptions |
---
### ⚠️ ÜBERARBEITEN — Funktioniert, aber Optimierung nötig
| Komponente | Pfad | Problem | Lösung |
|------------|------|---------|--------|
| **Auction Scraper** | `backend/app/services/auction_scraper.py` | Scraping ist fragil, oft leer | API-First + Fallback-Logik |
| **Auctions API** | `backend/app/api/auctions.py` | Keine Pounce Direct Integration | Unified Feed erstellen |
| **Market Page** | `frontend/src/app/terminal/market/page.tsx` | Zeigt nur externe Auktionen | Pounce Direct integrieren |
| **Pounce Score** | In `market/page.tsx` | Zu simpel (nur Length+TLD) | Erweitern um Markt-Signale |
| **Public Auctions** | `frontend/src/app/auctions/page.tsx` | Kein Pounce Direct Highlight | Visuelle Hierarchie |
---
### ❌ ENTFERNEN / KONSOLIDIEREN — Redundant oder veraltet
| Komponente | Pfad | Grund | Aktion |
|------------|------|-------|--------|
| **Leere Ordner** | `frontend/src/app/dashboard/` | Leer (Legacy von /command) | Löschen |
| **Leere Ordner** | `frontend/src/app/portfolio/` | Leer (Legacy) | Löschen |
| **Leere Ordner** | `frontend/src/app/settings/` | Leer (Legacy) | Löschen |
| **Leere Ordner** | `frontend/src/app/watchlist/` | Leer (Legacy) | Löschen |
| **Leere Ordner** | `frontend/src/app/careers/` | Kein Inhalt | Löschen oder TODO |
| **Intelligence Redirect** | `frontend/src/app/intelligence/page.tsx` | Redirect zu /tld-pricing | Prüfen ob noch nötig |
| **Market Public** | `frontend/src/app/market/page.tsx` | Duplikat? Prüfen | Ggf. konsolidieren mit /auctions |
---
## Detaillierte Analyse pro Bereich
### 1. BACKEND: API Routes (`backend/app/api/`)
```
backend/app/api/
├── __init__.py ✅ Router-Registration
├── admin.py ✅ Admin Panel APIs
├── auctions.py ⚠️ Überarbeiten (Unified Feed)
├── auth.py ✅ Login/Register/JWT
├── blog.py ✅ Blog Feature
├── check.py ✅ Domain Availability Check
├── contact.py ✅ Kontaktformular
├── deps.py ✅ Dependencies
├── domains.py ✅ Watchlist
├── listings.py ✅ Pounce Direct Marketplace
├── oauth.py ✅ Google/GitHub OAuth
├── portfolio.py ✅ Portfolio Management
├── price_alerts.py ✅ TLD Price Alerts
├── seo.py ✅ SEO Juice (Tycoon)
├── sniper_alerts.py ✅ Auction Sniper Alerts
├── subscription.py ✅ Stripe Integration
├── tld_prices.py ✅ TLD Pricing Data
└── webhooks.py ✅ Stripe Webhooks
```
**Aktion:**
- `auctions.py`: Unified Feed Endpoint hinzufügen der Pounce Direct + External kombiniert
---
### 2. BACKEND: Services (`backend/app/services/`)
```
backend/app/services/
├── auction_scraper.py ⚠️ Fallback-Logik verbessern
├── auth.py ✅ Behalten
├── domain_checker.py ✅ Behalten
├── domain_health.py ✅ Behalten
├── email_service.py ✅ Behalten
├── price_tracker.py ✅ Behalten
├── seo_analyzer.py ✅ Behalten
├── stripe_service.py ✅ Behalten
├── valuation.py ⚠️ Pounce Score v2.0 integrieren
└── tld_scraper/
├── aggregator.py ✅ Behalten
├── base.py ✅ Behalten
├── porkbun.py ✅ Behalten
└── tld_list.py ✅ Behalten
```
**Aktionen:**
1. `auction_scraper.py`: Methode `scrape_with_fallback()` hinzufügen
2. `valuation.py`: Pounce Score v2.0 mit Market Signals
---
### 3. BACKEND: Models (`backend/app/models/`)
```
backend/app/models/
├── admin_log.py ✅ Behalten
├── auction.py ✅ DomainAuction, AuctionScrapeLog
├── blog.py ✅ Behalten
├── domain.py ✅ Domain, DomainCheck
├── listing.py ✅ DomainListing, ListingInquiry, ListingView
├── newsletter.py ✅ Behalten
├── portfolio.py ✅ PortfolioDomain
├── price_alert.py ✅ TLDPriceAlert
├── seo_data.py ✅ DomainSEOData
├── sniper_alert.py ✅ SniperAlert, SniperAlertMatch
├── subscription.py ✅ Subscription, tier config
├── tld_price.py ✅ TLDPrice, TLDInfo
└── user.py ✅ User
```
**Status:** Alle Models sind sauber und Vision-konform. Keine Änderungen nötig.
---
### 4. FRONTEND: Terminal (Authenticated) (`frontend/src/app/terminal/`)
```
frontend/src/app/terminal/
├── page.tsx ✅ Redirect zu /radar
├── radar/page.tsx ✅ Dashboard
├── market/page.tsx ⚠️ Pounce Direct integrieren!
├── intel/page.tsx ✅ TLD Overview
├── intel/[tld]/page.tsx ✅ TLD Detail
├── watchlist/page.tsx ✅ Domain Monitoring
├── listing/page.tsx ✅ My Listings (Seller Dashboard)
├── settings/page.tsx ✅ User Settings
└── welcome/page.tsx ✅ Onboarding
```
**Aktionen:**
1. `market/page.tsx`: Pounce Direct Listings im Feed anzeigen
2. `market/page.tsx`: Visuelle Hierarchie (💎 Pounce vs 🏢 External)
---
### 5. FRONTEND: Public Pages (`frontend/src/app/`)
```
frontend/src/app/
├── page.tsx ✅ Landing Page
├── auctions/page.tsx ⚠️ Pounce Direct hervorheben
├── buy/page.tsx ✅ Marketplace Browse
├── buy/[slug]/page.tsx ✅ Listing Detail
├── tld-pricing/ ✅ TLD Intel Public
├── pricing/page.tsx ✅ Subscription Tiers
├── blog/ ✅ Blog
├── login/page.tsx ✅ Auth
├── register/page.tsx ✅ Auth
└── ... ✅ Legal, Contact, etc.
```
**Aktionen:**
1. `auctions/page.tsx`: "💎 Pounce Direct" Listings prominent anzeigen
2. Konsolidieren: `/market/` mit `/auctions/` zusammenführen?
---
### 6. FRONTEND: API Client (`frontend/src/lib/api.ts`)
**Status:** ✅ Vollständig
Enthält alle nötigen Methoden:
- `getAuctions()` - Externe Auktionen
- `getMarketplaceListings()` - TODO: Backend anbinden (aktuell leere Liste)
**Aktion:**
- `getMarketplaceListings()` → Backend Endpoint `/listings` anbinden
---
## Zusammenfassung: Cleanup-Liste
### Sofort löschen (leere Ordner):
```bash
rm -rf frontend/src/app/dashboard/
rm -rf frontend/src/app/portfolio/
rm -rf frontend/src/app/settings/
rm -rf frontend/src/app/watchlist/
rm -rf frontend/src/app/careers/
```
### Konsolidieren:
- `/market/page.tsx` und `/auctions/page.tsx` → Eine Seite für Public Market
- `/intelligence/page.tsx` prüfen ob Redirect noch nötig
### Code-Änderungen:
1. **Market Page (Terminal)**: Pounce Direct + External in einem Feed
2. **Auctions Page (Public)**: Pounce Direct prominent
3. **API Client**: `getMarketplaceListings()` Backend anbinden
4. **Auctions API**: Unified Feed Endpoint
5. **Pounce Score**: v2.0 mit Market Signals
---
# 📊 TEIL 2: KONZEPT — Wohin entwickeln wir?
## Executive Summary
Die aktuelle Market-Page funktioniert technisch, aber sie ist noch nicht "Unicorn-ready".
Dieses Konzept transformiert sie von einem einfachen Auktions-Aggregator zur **zentralen Domain-Intelligence-Plattform**.
---
## 📊 IST-Analyse: Aktuelle Implementation
### Datenquellen (Backend)
```
┌─────────────────────────────────────────────────────────────────┐
│ CURRENT DATA FLOW │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ExpiredDomains.net ──┐ │
│ │ │
│ GoDaddy RSS Feed ────┼──→ Web Scraper ──→ PostgreSQL/SQLite │
│ │ (hourly) (domain_auctions) │
│ Sedo Public Search ──┤ │
│ │ │
│ NameJet Public ──────┤ │
│ │ │
│ DropCatch Public ────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
### Probleme mit dem aktuellen Setup
| Problem | Impact | Severity |
|---------|--------|----------|
| **Web-Scraping ist fragil** | Seiten ändern Layout → Scraper bricht | 🔴 Hoch |
| **Daten sind oft veraltet** | End-Zeiten stimmen nicht, Preise falsch | 🔴 Hoch |
| **Kein "Pounce Direct" Content** | Alles nur externe Daten, kein USP | 🔴 Hoch |
| **Rate-Limiting & Blocking** | Plattformen blockieren Scraper | 🟡 Mittel |
| **Keine echte Echtzeit-Daten** | Stündliches Scraping ist zu langsam | 🟡 Mittel |
| **Pounce Score ist simpel** | Nur Length + TLD, keine echten Signale | 🟡 Mittel |
---
## 🚀 SOLL-Konzept: Die Unicorn-Architektur
### Phase 1: Der "Clean Feed" (Jetzt 3 Monate)
**Ziel:** Die beste Auktions-Übersicht mit echtem Mehrwert.
#### 1.1 Daten-Strategie: Hybrid-Ansatz
```
┌─────────────────────────────────────────────────────────────────┐
│ NEW DATA ARCHITECTURE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ TIER 1: OFFIZIELLE APIs (zuverlässig, real-time) │
│ ──────────────────────────────────────────────────────────── │
│ • GoDaddy Partner API (wenn Partner-Account vorhanden) │
│ • Sedo Partner API (Affiliate-Programm) │
│ • DropCatch Public API │
│ │
│ TIER 2: WEB SCRAPING (Backup, validiert) │
│ ──────────────────────────────────────────────────────────── │
│ • ExpiredDomains.net (Deleted Domains) │
│ • NameJet Public (mit Fallback-Logik) │
│ │
│ TIER 3: POUNCE EXCLUSIVE (unser USP!) │
│ ──────────────────────────────────────────────────────────── │
│ • User-Listings ("Pounce Direct" / "For Sale") │
│ • DNS-verifizierte Eigentümer │
│ • Sofort-Kauf-Option │
│ │
└─────────────────────────────────────────────────────────────────┘
```
#### 1.2 Der "Clean Feed" Algorithmus
```python
# Spam-Filter v2.0 (Vanity Filter)
def is_premium_domain(domain: str) -> bool:
name = domain.rsplit('.', 1)[0]
tld = domain.rsplit('.', 1)[1]
# REGEL 1: Nur Premium-TLDs für Public
premium_tlds = ['com', 'io', 'ai', 'co', 'de', 'ch', 'net', 'org', 'app', 'dev']
if tld not in premium_tlds:
return False
# REGEL 2: Keine Spam-Muster
if len(name) > 12: # Kurz = Premium
return False
if name.count('-') > 0: # Keine Bindestriche
return False
if sum(c.isdigit() for c in name) > 1: # Max 1 Zahl
return False
if any(word in name.lower() for word in ['xxx', 'casino', 'loan', 'cheap']):
return False
# REGEL 3: Konsonanten-Check (kein "xkqzfgh.com")
consonants = 'bcdfghjklmnpqrstvwxyz'
max_consonant_streak = max(len(list(g)) for k, g in groupby(name, key=lambda c: c.lower() in consonants) if k)
if max_consonant_streak > 4:
return False
return True
```
#### 1.3 Pounce Score 2.0
Der aktuelle Score ist zu simpel. Hier ist die verbesserte Version:
```python
def calculate_pounce_score_v2(domain: str, auction_data: dict) -> int:
score = 50 # Baseline
name = domain.rsplit('.', 1)[0]
tld = domain.rsplit('.', 1)[1]
# ══════════════════════════════════════════════════════════════
# A) INTRINSIC VALUE (Domain selbst)
# ══════════════════════════════════════════════════════════════
# Länge (kurz = wertvoll)
length_scores = {1: 50, 2: 45, 3: 40, 4: 30, 5: 20, 6: 15, 7: 10}
score += length_scores.get(len(name), max(0, 15 - len(name)))
# TLD Premium
tld_scores = {'com': 20, 'ai': 25, 'io': 18, 'co': 12, 'de': 10, 'ch': 10}
score += tld_scores.get(tld, 0)
# Dictionary Word Bonus
common_words = ['tech', 'data', 'cloud', 'app', 'dev', 'net', 'hub', 'lab', 'pro']
if name.lower() in common_words or any(word in name.lower() for word in common_words):
score += 15
# ══════════════════════════════════════════════════════════════
# B) MARKET SIGNALS (Aktivität)
# ══════════════════════════════════════════════════════════════
# Bid Activity (mehr Bids = mehr Interesse)
bids = auction_data.get('num_bids', 0)
if bids >= 20: score += 15
elif bids >= 10: score += 10
elif bids >= 5: score += 5
# Time Pressure (endet bald = Opportunity)
hours_left = auction_data.get('hours_left', 999)
if hours_left < 1: score += 10 # HOT!
elif hours_left < 4: score += 5
# Price-to-Value Ratio
current_bid = auction_data.get('current_bid', 0)
estimated_value = estimate_base_value(name, tld)
if current_bid > 0 and estimated_value > current_bid * 1.5:
score += 15 # Unterbewertet!
# ══════════════════════════════════════════════════════════════
# C) PENALTIES (Abzüge)
# ══════════════════════════════════════════════════════════════
if '-' in name: score -= 30
if any(c.isdigit() for c in name) and len(name) > 3: score -= 20
if len(name) > 15: score -= 25
return max(0, min(100, score))
```
---
### Phase 2: Der "Pounce Direct" Marktplatz (3 6 Monate)
**Ziel:** Eigenes Inventar = Unique Content = USP
#### 2.1 Das Killer-Feature: "Pounce Direct"
```
┌─────────────────────────────────────────────────────────────────┐
│ POUNCE DIRECT INTEGRATION │
├─────────────────────────────────────────────────────────────────┤
│ │
│ MARKET FEED (Gemischt) │
│ ═══════════════════════════════════════════════════════════ │
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 💎 POUNCE DIRECT │ │
│ │ ───────────────────────────────────────────────────────── │ │
│ │ zurich-immo.ch $950 ⚡ INSTANT [BUY] │ │
│ │ ✅ Verified Owner │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 🏢 EXTERNAL AUCTION │ │
│ │ ───────────────────────────────────────────────────────── │ │
│ │ techflow.io $250 ⏱️ 6h left [BID ↗] │ │
│ │ via GoDaddy │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
#### 2.2 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 (weil 0% Provision) |
| **SEO Power** | Jede Listing = eigene Landing Page |
| **Trust Signal** | DNS-Verifizierung = Qualitätsgarantie |
#### 2.3 Der Flow für Verkäufer (aus `pounce_terminal.md`)
```
┌─────────────────────────────────────────────────────────────────┐
│ LISTING WIZARD │
├─────────────────────────────────────────────────────────────────┤
│ │
│ STEP 1: DOMAIN EINGEBEN │
│ ─────────────────────────────────────────────────────────── │
│ [________________________] zurich-immo.ch │
│ Preis: [$950] ○ Fixpreis ○ Verhandlungsbasis │
│ │
│ STEP 2: DNS VERIFICATION │
│ ─────────────────────────────────────────────────────────── │
│ Füge diesen TXT-Record zu deiner Domain hinzu: │
│ │
│ Name: _pounce-verify │
│ Value: pounce-verify-8a3f7b9c2e1d │
│ │
│ [🔄 VERIFY DNS] │
│ │
│ STEP 3: LIVE! │
│ ─────────────────────────────────────────────────────────── │
│ ✅ Domain verifiziert! │
│ Dein Listing ist jetzt im Market Feed sichtbar. │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
### Phase 3: Die Daten-Hoheit (6 12 Monate) 🏆
**Ziel:** Unabhängigkeit von externen Quellen. **EIGENE DATEN = EIGENES MONOPOL.**
> *"Pounce weiß Dinge, die GoDaddy dir verheimlicht."* — pounce_strategy.md
#### 3.1 Zone File Analysis — Der Unicorn-Treiber
**Was sind Zone Files?**
Zone Files sind die "Master-Listen" aller registrierten Domains pro TLD. Sie werden täglich von den Registries (Verisign, PIR, etc.) aktualisiert.
**Wer hat Zugang?**
- Jeder kann sich bei ICANN-akkreditierten Registries bewerben
- Verisign (.com/.net): https://www.verisign.com/en_US/channel-resources/domain-registry-products/zone-file/index.xhtml
- PIR (.org): Zone File Access Program
- Donuts (.xyz, .online, etc.): TLD Zone File Access
**Kosten:** $0 - $10,000/Jahr je nach TLD und Nutzung
```
┌─────────────────────────────────────────────────────────────────┐
│ ZONE FILE PIPELINE — Die Daten-Revolution │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ TIER 1: CRITICAL TLDs (Sofort beantragen) │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ Verisign → .com, .net ~160M + 13M Domains │ │
│ │ PIR → .org ~10M Domains │ │
│ │ Afilias → .info ~4M Domains │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ TIER 2: PREMIUM TLDs (Phase 2) │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ CentralNIC → .io, .co Premium für Startups │ │
│ │ Google → .app, .dev Tech-Domains │ │
│ │ Donuts → .xyz, .online Volumen │ │
│ │ SWITCH → .ch Schweizer Markt │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ POUNCE INTELLIGENCE ENGINE │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ 1. DAILY DOWNLOAD (4:00 UTC) │ │
│ │ └─→ ~500GB komprimierte Daten pro Tag │ │
│ │ │ │
│ │ 2. DIFF ANALYSIS │ │
│ │ └─→ Was ist NEU? Was ist WEG? │ │
│ │ │ │
│ │ 3. DROP PREDICTION │ │
│ │ └─→ Domains die aus Zone verschwinden = droppen │ │
│ │ │ │
│ │ 4. QUALITY SCORING (Pounce Algorithm) │ │
│ │ └─→ Nur Premium-Domains durchlassen │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ OUTPUT: EXKLUSIVE INTELLIGENCE │ │
│ ├─────────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ 🔮 "Drops Tomorrow" — Domains BEVOR sie in Auktionen │ │
│ │ 📈 "Trending Registrations" — Was wird gerade gehypt │ │
│ │ ⚠️ "Expiring Premium" — Hochwertige Domains am Ende │ │
│ │ 🔍 "Pattern Detection" — Welche Keywords explodieren │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
#### 3.2 Der Pounce Algorithm — "No-Bullshit" Filter
```python
# backend/app/services/zone_analyzer.py (NEU ZU BAUEN)
class ZoneFileAnalyzer:
"""
Analysiert Zone Files und findet Premium-Opportunities.
Input: Raw Zone File (Millionen von Domains)
Output: Gefilterte Premium-Liste (Hunderte)
"""
async def analyze_drops(self, yesterday: set, today: set) -> list:
"""
Findet Domains die aus der Zone verschwunden sind.
Diese Domains droppen in 1-5 Tagen (Redemption Period).
"""
dropped = yesterday - today # Set-Differenz
premium_drops = []
for domain in dropped:
score = self.calculate_pounce_score(domain)
# Nur Premium durchlassen
if score >= 70:
premium_drops.append({
"domain": domain,
"score": score,
"drop_date": self.estimate_drop_date(domain),
"estimated_value": self.estimate_value(domain),
})
return sorted(premium_drops, key=lambda x: x['score'], reverse=True)
def calculate_pounce_score(self, domain: str) -> int:
"""
Der Pounce Algorithm — Qualitätsfilter für Domains.
Faktoren:
- Länge (kurz = wertvoll)
- TLD (com > io > xyz)
- Keine Zahlen/Bindestriche
- Dictionary Word Bonus
- Historische Daten (wenn verfügbar)
"""
name = domain.rsplit('.', 1)[0]
tld = domain.rsplit('.', 1)[1]
score = 50 # Baseline
# Längen-Score
length_scores = {1: 50, 2: 45, 3: 40, 4: 30, 5: 20, 6: 15, 7: 10}
score += length_scores.get(len(name), max(0, 15 - len(name)))
# TLD Premium
tld_scores = {'com': 20, 'ai': 25, 'io': 18, 'co': 12, 'ch': 15, 'de': 10}
score += tld_scores.get(tld, 0)
# Penalties
if '-' in name: score -= 30
if any(c.isdigit() for c in name): score -= 20
if len(name) > 12: score -= 15
# Dictionary Word Bonus
if self.is_dictionary_word(name):
score += 25
return max(0, min(100, score))
```
#### 3.3 Der "Drops Tomorrow" Feed — Tycoon Exclusive
```
┌─────────────────────────────────────────────────────────────────┐
│ 🔮 DROPS TOMORROW — Tycoon Exclusive ($29/mo) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Diese Domains sind NICHT in Auktionen! │
│ Du kannst sie beim Registrar direkt registrieren. │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ Domain TLD Score Est. Value Drops In │
│ ───────────────────────────────────────────────────────────── │
│ pixel.com .com 95 $50,000 23h 45m │
│ swift.io .io 88 $8,000 23h 12m │
│ quantum.ai .ai 92 $25,000 22h 58m │
│ nexus.dev .dev 84 $4,500 22h 30m │
│ fusion.co .co 81 $3,200 21h 15m │
│ │
│ ───────────────────────────────────────────────────────────── │
│ │
│ 💡 Pro Tip: Setze bei deinem Registrar einen Backorder │
│ für diese Domains. Wer zuerst kommt... │
│ │
│ [🔔 Alert für "pixel.com" setzen] │
│ │
└─────────────────────────────────────────────────────────────────┘
```
#### 3.4 Warum das ein MONOPOL schafft
| Wettbewerber | Datenquelle | Problem |
|--------------|-------------|---------|
| **ExpiredDomains.net** | Zone Files | Zeigt ALLES (Spam-Hölle) |
| **GoDaddy Auctions** | Eigene Daten | Nur GoDaddy-Domains |
| **Sedo** | User-Listings | Überteuert, wenig Volumen |
| **Pounce** | Zone Files + **Algorithmus** | **Premium-gefiltert, clean** |
**Der Unterschied:**
- ExpiredDomains zeigt dir 100.000 Domains am Tag. Davon sind 99.990 Müll.
- Pounce zeigt dir 100 Premium-Domains. Alle sind es wert, angeschaut zu werden.
**Das verkauft Abos:**
> *"Ich zahle $29/Monat, weil Pounce mir 20 Stunden Recherche pro Woche spart."*
#### 3.5 Technische Umsetzung — Server-Anforderungen
```
┌─────────────────────────────────────────────────────────────────┐
│ ZONE FILE PROCESSING — Infrastructure │
├─────────────────────────────────────────────────────────────────┤
│ │
│ SERVER REQUIREMENTS: │
│ ──────────────────────────────────────────────────────────── │
│ • Storage: 2TB SSD (Zone Files sind ~500GB/Tag komprimiert) │
│ • RAM: 64GB+ (für effizientes Set-Diffing) │
│ • CPU: 16+ Cores (parallele Analyse) │
│ • Kosten: ~$300-500/Monat (Hetzner/OVH Dedicated) │
│ │
│ PROCESSING PIPELINE: │
│ ──────────────────────────────────────────────────────────── │
│ 04:00 UTC │ Zone File Download (FTP/HTTPS) │
│ 04:30 UTC │ Decompression & Parsing │
│ 05:00 UTC │ Diff Analysis (gestern vs heute) │
│ 05:30 UTC │ Quality Scoring (Pounce Algorithm) │
│ 06:00 UTC │ Database Update (PostgreSQL) │
│ 06:15 UTC │ Alert Matching (Sniper Alerts) │
│ 06:30 UTC │ User Notifications (Email/SMS) │
│ │
│ STORAGE STRATEGY: │
│ ──────────────────────────────────────────────────────────── │
│ • Nur Premium-Domains speichern (Score > 50) │
│ • 90 Tage History für Trend-Analyse │
│ • Ältere Daten archivieren (S3 Glacier) │
│ │
└─────────────────────────────────────────────────────────────────┘
```
#### 3.6 Phase 1 vs Phase 3 — Was zuerst?
| Phase | Datenquelle | Status |
|-------|-------------|--------|
| **Phase 1 (JETZT)** | Web Scraping + Pounce Direct | ✅ Implementiert |
| **Phase 3 (6-12 Mo)** | Zone Files | 🔜 Geplant |
**Warum warten?**
1. Zone File Access braucht Verträge mit Registries (1-3 Monate)
2. Infrastruktur-Investition (~$500/Monat Server)
3. Algorithmus muss getestet werden (False Positives vermeiden)
**Was wir JETZT tun:**
- Scraping + Pounce Direct perfektionieren
- User-Basis aufbauen (die Zone Files später monetarisiert)
- Algorithmus entwickeln (funktioniert auch ohne Zone Files)
---
## 💡 Konkrete Änderungen für die Market Page
### Frontend-Änderungen
#### 1. Visuelle Hierarchie verbessern
```tsx
// VORHER: Alle Items sehen gleich aus
<div className="grid">
{items.map(item => <AuctionCard />)}
</div>
// NACHHER: Pounce Direct hervorheben
<div className="space-y-3">
{/* Featured: Pounce Direct (wenn vorhanden) */}
{pounceDirectItems.length > 0 && (
<div className="bg-gradient-to-r from-emerald-500/10 to-transparent border border-emerald-500/20 rounded-xl p-1">
<div className="px-4 py-2 flex items-center gap-2 text-xs font-bold text-emerald-400 uppercase tracking-wider">
<Diamond className="w-3.5 h-3.5" />
Pounce Direct Verified Instant Buy
</div>
{pounceDirectItems.map(item => <PounceDirectCard />)}
</div>
)}
{/* Standard: External Auctions */}
<div className="space-y-2">
{externalItems.map(item => <AuctionCard />)}
</div>
</div>
```
#### 2. Filter-Presets für User-Journeys
```tsx
// Quick-Filter Buttons basierend auf User-Intent
const FILTER_PRESETS = {
'ending-soon': {
label: '⏱️ Ending Soon',
filter: { hours_left: { max: 4 } },
sort: 'time_asc'
},
'bargains': {
label: '💰 Under $100',
filter: { price: { max: 100 }, score: { min: 60 } },
sort: 'score_desc'
},
'premium': {
label: '👑 Premium Only',
filter: { score: { min: 80 }, tld: ['com', 'io', 'ai'] },
sort: 'price_desc'
},
'pounce-only': {
label: '💎 Pounce Direct',
filter: { source: 'pounce' },
sort: 'created_desc'
}
}
```
#### 3. "Opportunity Score" statt nur "Pounce Score"
```tsx
// Zeige WARUM ein Domain interessant ist
function OpportunityIndicators({ item }) {
const indicators = []
if (item.hoursLeft < 2) indicators.push({ icon: '🔥', label: 'Ending soon' })
if (item.numBids < 3) indicators.push({ icon: '📉', label: 'Low competition' })
if (item.valueRatio > 2) indicators.push({ icon: '💎', label: 'Undervalued' })
if (item.isPounce) indicators.push({ icon: '⚡', label: 'Instant buy' })
return (
<div className="flex gap-1">
{indicators.map(ind => (
<Tooltip content={ind.label}>
<span className="text-xs">{ind.icon}</span>
</Tooltip>
))}
</div>
)
}
```
### Backend-Änderungen
#### 1. Unified Feed API
```python
# NEUER ENDPOINT: /api/v1/market/feed
@router.get("/feed")
async def get_market_feed(
# Filter
source: Optional[str] = Query(None, enum=['all', 'pounce', 'external']),
score_min: int = Query(0, ge=0, le=100),
price_max: Optional[float] = None,
tld: Optional[List[str]] = Query(None),
ending_within: Optional[int] = Query(None, description="Hours"),
# Sort
sort_by: str = Query('score', enum=['score', 'price', 'time', 'bids']),
# Pagination
limit: int = Query(30, le=100),
offset: int = Query(0),
# Auth
current_user: Optional[User] = Depends(get_current_user_optional),
):
"""
Unified market feed combining:
- Pounce Direct listings (user-listed domains)
- External auctions (scraped from platforms)
For non-authenticated users:
- Apply vanity filter (premium domains only)
- Blur "Deal Score" (tease upgrade)
"""
items = []
# 1. Get Pounce Direct listings
pounce_listings = await get_published_listings(db)
for listing in pounce_listings:
items.append({
'type': 'pounce_direct',
'domain': listing.domain,
'price': listing.asking_price,
'source': 'Pounce',
'status': 'instant',
'verified': listing.verification_status == 'verified',
'url': f'/buy/{listing.slug}', # Internal!
})
# 2. Get external auctions
auctions = await get_active_auctions(db)
for auction in auctions:
# Apply vanity filter for non-auth users
if not current_user and not is_premium_domain(auction.domain):
continue
items.append({
'type': 'auction',
'domain': auction.domain,
'price': auction.current_bid,
'source': auction.platform,
'status': 'auction',
'time_left': format_time_remaining(auction.end_time),
'url': auction.affiliate_url, # External
})
# 3. Calculate scores
for item in items:
item['pounce_score'] = calculate_pounce_score_v2(
item['domain'],
item
)
# 4. Sort and paginate
items = sorted(items, key=lambda x: x['pounce_score'], reverse=True)
return {
'items': items[offset:offset+limit],
'total': len(items),
'filters_applied': {...},
}
```
#### 2. Scraper Verbesserungen
```python
class AuctionScraperService:
"""
IMPROVED: Resilient scraping with fallbacks
"""
async def scrape_with_fallback(self, platform: str, db: AsyncSession):
"""Try multiple methods to get data"""
methods = [
(f'_scrape_{platform.lower()}_api', 'API'), # Best: Official API
(f'_scrape_{platform.lower()}_rss', 'RSS'), # Good: RSS Feed
(f'_scrape_{platform.lower()}_html', 'HTML'), # Fallback: HTML Scrape
]
for method_name, method_type in methods:
method = getattr(self, method_name, None)
if not method:
continue
try:
result = await method(db)
if result['found'] > 0:
logger.info(f"{platform}: Got {result['found']} via {method_type}")
return result
except Exception as e:
logger.warning(f"{platform} {method_type} failed: {e}")
continue
# All methods failed
logger.error(f"{platform}: All scrape methods failed")
return {'found': 0, 'new': 0, 'updated': 0, 'error': 'All methods failed'}
```
---
## 📈 Metriken für den Erfolg
### KPIs für Phase 1
| Metrik | Ziel (3 Monate) | Messung |
|--------|-----------------|---------|
| **Daily Active Users (DAU)** | 500 | PostHog |
| **Conversion Rate (Free → Trader)** | 5% | Stripe |
| **Domains in Feed** | 1000+ | DB Query |
| **Avg. Session Duration** | > 3 min | PostHog |
| **Scrape Success Rate** | > 95% | Logs |
### KPIs für Phase 2
| Metrik | Ziel (6 Monate) | Messung |
|--------|-----------------|---------|
| **Pounce Direct Listings** | 100+ | DB Query |
| **First Sale via Pounce** | ✅ | Manual |
| **GMV (Gross Merchandise Value)** | $50,000 | Tracked |
| **Repeat Sellers** | 20% | DB Query |
---
## 🛠️ Technische Schulden abbauen
### Priorität 1: Scraper Stabilität
```python
# Problem: Scraper bricht bei HTML-Änderungen
# Lösung: Defensive Parsing mit Fallbacks
def parse_domain_from_row(row) -> Optional[str]:
"""Try multiple selectors to find domain"""
selectors = [
'a.domain-name',
'td.domain a',
'span[data-domain]',
'a[href*="domain"]',
]
for selector in selectors:
elem = row.select_one(selector)
if elem:
text = elem.get_text(strip=True)
if '.' in text and len(text) < 100:
return text.lower()
return None
```
### Priorität 2: Caching Layer
```python
# Problem: Jeder Request macht DB-Abfragen
# Lösung: Redis Cache für Feed-Daten
from redis import asyncio as aioredis
async def get_market_feed_cached(filters: dict) -> list:
cache_key = f"market:feed:{hash(str(filters))}"
# Try cache first
cached = await redis.get(cache_key)
if cached:
return json.loads(cached)
# Generate fresh data
data = await generate_market_feed(filters)
# Cache for 5 minutes
await redis.setex(cache_key, 300, json.dumps(data))
return data
```
### Priorität 3: Rate Limiting pro User
```python
# Problem: Power User könnten API überlasten
# Lösung: Tiered Rate Limits
RATE_LIMITS = {
'scout': '50/hour',
'trader': '200/hour',
'tycoon': '1000/hour',
}
```
---
## 🎯 Nächste Schritte
### ✅ ERLEDIGT (11. Dezember 2025)
- [x] Pounce Score v2.0 implementieren → `_calculate_pounce_score_v2()` in `auctions.py`
- [x] Unified `/auctions/feed` API deployen → Live und funktional
- [x] Pounce Direct Listings im Feed integrieren → Kombiniert mit externen Auktionen
- [x] "💎 Pounce Direct" Badge und Highlighting → Visuelle Hierarchie implementiert
- [x] Filter-Presets im Frontend → "Pounce Only", "Verified", Preis-Filter
- [x] Zone File Access Anleitung → `ZONE_FILE_ACCESS.md` erstellt
### Nächste Woche
- [ ] Erste Pounce Direct Listings erstellen (Testdaten)
- [ ] Scraper-Fallbacks implementieren
- [ ] Verisign Zone File Access beantragen
### Nächster Monat
- [ ] Opportunity Indicators im UI
- [ ] Redis Caching Layer
- [ ] PIR (.org) Zone File Access
---
## 💎 Fazit
Die Market Page ist das Herzstück von Pounce. Mit diesen Änderungen wird sie:
1. **Zuverlässiger** (Scraper-Fallbacks, Caching)
2. **Wertvoller** (Pounce Direct = Unique Content)
3. **Stickier** (bessere UX, personalisierte Filter)
4. **Skalierbarer** (Unicorn-ready Architektur)
Der Weg zum Unicorn führt über **Datenhoheit** und **einzigartigen Content**.
Pounce Direct ist der erste Schritt.
---
# 🔧 TEIL 3: AKTIONSPLAN — Was tun wir konkret?
## Phase A: Cleanup (Heute)
### 1. Leere Ordner löschen
```bash
# Diese Ordner sind leer und Legacy vom alten /command Routing
rm -rf frontend/src/app/dashboard/
rm -rf frontend/src/app/portfolio/
rm -rf frontend/src/app/settings/
rm -rf frontend/src/app/watchlist/
rm -rf frontend/src/app/careers/
```
### 2. Redundante Seiten prüfen
| Seite | Entscheidung |
|-------|--------------|
| `/market/page.tsx` | ❌ Entfernen → Redirect zu `/auctions` |
| `/intelligence/page.tsx` | ⚠️ Prüfen → Redirect zu `/tld-pricing` |
---
## Phase B: Pounce Direct Integration (Diese Woche)
### 1. Backend: Unified Market Feed API
**Datei:** `backend/app/api/auctions.py`
Neuer Endpoint hinzufügen:
```python
@router.get("/feed")
async def get_unified_market_feed(
source: str = Query("all", enum=["all", "pounce", "external"]),
# ... Filter
):
"""
Unified feed combining:
- Pounce Direct (user listings)
- External auctions (scraped)
"""
items = []
# 1. Pounce Direct Listings
if source in ["all", "pounce"]:
listings = await db.execute(
select(DomainListing)
.where(DomainListing.status == "active")
)
for listing in listings.scalars():
items.append({
"type": "pounce_direct",
"domain": listing.domain,
"price": listing.asking_price,
"source": "Pounce",
"status": "instant",
"verified": listing.is_verified,
"url": f"/buy/{listing.slug}",
})
# 2. External Auctions
if source in ["all", "external"]:
auctions = await db.execute(
select(DomainAuction)
.where(DomainAuction.is_active == True)
)
for auction in auctions.scalars():
items.append({
"type": "auction",
"domain": auction.domain,
"price": auction.current_bid,
"source": auction.platform,
"status": "auction",
"time_left": _format_time_remaining(auction.end_time),
"url": auction.affiliate_url,
})
return {"items": items, "total": len(items)}
```
### 2. Frontend: API Client erweitern
**Datei:** `frontend/src/lib/api.ts`
```typescript
async getMarketFeed(
source: 'all' | 'pounce' | 'external' = 'all',
filters?: {
keyword?: string
tld?: string
minPrice?: number
maxPrice?: number
}
) {
const params = new URLSearchParams({ source })
if (filters?.keyword) params.append('keyword', filters.keyword)
if (filters?.tld) params.append('tld', filters.tld)
if (filters?.minPrice) params.append('min_price', filters.minPrice.toString())
if (filters?.maxPrice) params.append('max_price', filters.maxPrice.toString())
return this.request<{
items: MarketItem[]
total: number
}>(`/auctions/feed?${params.toString()}`)
}
```
### 3. Frontend: Market Page updaten
**Datei:** `frontend/src/app/terminal/market/page.tsx`
Änderungen:
1. `api.getMarketFeed()` statt `api.getAuctions()` aufrufen
2. Pounce Direct Items visuell hervorheben
3. "Pounce Exclusive" Filter aktivieren
---
## Phase C: Public Page Alignment (Nächste Woche)
### 1. `/auctions/page.tsx` — Pounce Direct hervorheben
```tsx
// Gruppiere Items
const pounceItems = items.filter(i => i.type === 'pounce_direct')
const externalItems = items.filter(i => i.type === 'auction')
return (
<>
{/* Featured: Pounce Direct */}
{pounceItems.length > 0 && (
<section className="mb-8">
<h2 className="flex items-center gap-2 text-xl font-bold mb-4">
<Diamond className="text-emerald-400" />
Pounce Exclusive Verified Instant Buy
</h2>
<div className="grid gap-4">
{pounceItems.map(item => (
<PounceDirectCard key={item.domain} item={item} />
))}
</div>
</section>
)}
{/* Standard: External */}
<section>
<h2 className="text-xl font-bold mb-4">Active Auctions</h2>
<MarketTable items={externalItems} />
</section>
</>
)
```
### 2. Konsolidierung
| Aktion | Details |
|--------|---------|
| `/market/page.tsx` entfernen | Redirect zu `/auctions` |
| `/auctions/page.tsx` umbenennen | → "Market" in Navigation |
---
## Phase D: Score & Scraper Verbesserungen (Woche 2-3)
### 1. Pounce Score v2.0
**Datei:** `backend/app/services/valuation.py`
Erweitern um:
- Bid Activity Score
- Time Pressure Score
- Value Ratio Score
- Platform Trust Score
### 2. Scraper Fallbacks
**Datei:** `backend/app/services/auction_scraper.py`
```python
async def scrape_with_fallback(self, platform: str, db: AsyncSession):
methods = [
(f'_scrape_{platform.lower()}_api', 'API'),
(f'_scrape_{platform.lower()}_rss', 'RSS'),
(f'_scrape_{platform.lower()}_html', 'HTML'),
]
for method_name, method_type in methods:
method = getattr(self, method_name, None)
if not method:
continue
try:
result = await method(db)
if result['found'] > 0:
return result
except Exception as e:
logger.warning(f"{platform} {method_type} failed: {e}")
return {'found': 0, 'error': 'All methods failed'}
```
---
## Checkliste für den Clean Start
### Backend:
- [ ] Unified Feed Endpoint `/auctions/feed` erstellen
- [ ] Pounce Score v2.0 in `valuation.py` integrieren
- [ ] Scraper Fallback-Logik hinzufügen
### Frontend:
- [ ] Leere Ordner löschen
- [ ] `api.getMarketFeed()` implementieren
- [ ] Market Page: Pounce Direct Integration
- [ ] Auctions Page: Visuelle Hierarchie
- [ ] `/market/page.tsx` zu Redirect machen
### Testing:
- [ ] Listing erstellen → Erscheint im Market Feed?
- [ ] DNS Verification → Funktioniert?
- [ ] External Auctions → Werden geladen?
- [ ] Filter "Pounce Only" → Zeigt nur Listings?
---
## Visualisierung: Datenfluss
```
┌─────────────────────────────────────────────────────────────────┐
│ MARKET FEED │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ LISTINGS │ │ AUCTIONS │ │ SCHEDULER │ │
│ │ (Pounce) │ │ (External) │ │ (Scrape) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ │ │ │ │
│ └───────────────────┴───────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ /auctions/feed │ │
│ │ (Unified API) │ │
│ └────────┬─────────┘ │
│ │ │
│ ┌─────────────────┼─────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ TERMINAL │ │ PUBLIC │ │ ADMIN │ │
│ │ /market │ │ /auctions │ │ /admin │ │
│ └────────────┘ └────────────┘ └────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
---
---
# 🚀 TEIL 4: ROADMAP ZUM UNICORN
## Die 4 Phasen (aus pounce_strategy.md)
```
┌─────────────────────────────────────────────────────────────────┐
│ POUNCE UNICORN ROADMAP │
├─────────────────────────────────────────────────────────────────┤
│ │
│ PHASE 1: INTELLIGENCE (0-18 Monate) │
│ ═══════════════════════════════════════════════════════════ │
│ Ziel: 10.000 User, $1M ARR, Datenhoheit │
│ │
│ ✅ Pounce Terminal (Dashboard) │
│ ✅ TLD Pricing (Market Barometer) │
│ ✅ Auction Aggregator (Scraping) │
│ ✅ Watchlist/Monitoring │
│ ⏳ Pounce Direct (Marketplace) │
│ 🔜 Zone File Analyse │
│ │
│ Status: WIR SIND HIER ◄──────────────────────────────────── │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ PHASE 2: LIQUIDITÄT (18-36 Monate) │
│ ═══════════════════════════════════════════════════════════ │
│ Ziel: Den Transaktionsfluss übernehmen, $10M ARR │
│ │
│ 🔮 Pounce Instant Exchange (Escrow integriert) │
│ 🔮 "Buy Now" Buttons im Dashboard │
│ 🔮 5% Transaktionsgebühr (statt 15-20% bei Konkurrenz) │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ PHASE 3: FINANZIALISIERUNG (3-5 Jahre) │
│ ═══════════════════════════════════════════════════════════ │
│ Ziel: Domains als Asset-Klasse, $50-100M ARR │
│ │
│ 🔮 Fractional Ownership (Anteile an Premium-Domains) │
│ 🔮 Domain-Backed Lending (Kredit gegen Domain) │
│ 🔮 → Wir werden ein FINTECH │
│ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ PHASE 4: IMPERIUM (5+ Jahre) │
│ ═══════════════════════════════════════════════════════════ │
│ Ziel: $1 Mrd. Bewertung, "Too big to fail" │
│ │
│ 🔮 Pounce Enterprise Sentinel (B2B Brand Protection) │
│ 🔮 Fortune 500 Kunden (Apple, Tesla, etc.) │
│ 🔮 KI-gestützte Phishing-Takedowns │
│ │
└─────────────────────────────────────────────────────────────────┘
```
## Was WIR JETZT tun (Phase 1 perfektionieren)
### Priorität 1: Pounce Direct perfektionieren
- [x] Listing-System gebaut
- [x] DNS-Verifizierung funktioniert
- [ ] **Im Market Feed anzeigen** ← NÄCHSTER SCHRITT
- [ ] Visuelle Hierarchie (💎 Pounce vs 🏢 External)
### Priorität 2: Datenqualität verbessern
- [x] Scraping läuft
- [ ] Fallback-Logik für Scraper
- [ ] Pounce Score v2.0
### Priorität 3: Zone Files vorbereiten
- [ ] Verisign Zone File Access beantragen
- [ ] Algorithmus entwickeln (kann lokal getestet werden)
- [ ] Server-Infrastruktur planen
---
## Zusammenfassung: Der Weg zum Unicorn
```
HEUTE 6 MONATE 18+ MONATE
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ SCRAPING │ →→→ │ ZONE FILES │ →→→ │ FINTECH │
│ + POUNCE │ │ ANALYSIS │ │ BÖRSE │
│ DIRECT │ │ │ │ │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
│ │ │
"Content Filler" "Daten-Monopol" "Asset-Klasse"
Seite wirkt lebendig Exklusive Intel Domains = Aktien
```
---
## 💎 Das Mantra
> **"Don't guess. Know."**
>
> Phase 1: Intelligence
>
> **"Don't just buy. Invest."**
>
> Phase 3: Asset Class
Der Weg zum Unicorn führt über **Datenhoheit** und **einzigartigen Content**.
1. **Heute:** Pounce Direct (User-Listings) = Unique Content
2. **Morgen:** Zone Files = Exklusive Intelligence
3. **Übermorgen:** Fintech = Milliarden-Bewertung
---
**Bereit zum Start?** 🚀
Sag mir, womit ich beginnen soll:
1. **Cleanup** — Leere Ordner löschen
2. **Backend** — Unified Feed API erstellen
3. **Frontend** — Market Page mit Pounce Direct