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

64 KiB
Raw Blame History

🎯 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):

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

# 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:

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?

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

# 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

// 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

// 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"

// 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

# 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

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

# 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

# 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

# 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)

  • Pounce Score v2.0 implementieren → _calculate_pounce_score_v2() in auctions.py
  • Unified /auctions/feed API deployen → Live und funktional
  • Pounce Direct Listings im Feed integrieren → Kombiniert mit externen Auktionen
  • "💎 Pounce Direct" Badge und Highlighting → Visuelle Hierarchie implementiert
  • Filter-Presets im Frontend → "Pounce Only", "Verified", Preis-Filter
  • 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

# 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:

@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

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

// 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

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

  • Listing-System gebaut
  • DNS-Verifizierung funktioniert
  • Im Market Feed anzeigen ← NÄCHSTER SCHRITT
  • Visuelle Hierarchie (💎 Pounce vs 🏢 External)

Priorität 2: Datenqualität verbessern

  • 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