'use client'
import { useEffect, useState, useRef } from 'react'
import Image from 'next/image'
import { Header } from '@/components/Header'
import { Footer } from '@/components/Footer'
import { DomainChecker } from '@/components/DomainChecker'
import { useStore } from '@/lib/store'
import { api } from '@/lib/api'
import {
Eye,
Bell,
Clock,
Shield,
ArrowRight,
TrendingUp,
TrendingDown,
Minus,
ChevronRight,
Zap,
BarChart3,
Globe,
Check,
Search,
Target,
Gavel,
Sparkles,
Activity,
LineChart,
Lock,
Filter,
Crosshair,
Tag,
AlertTriangle,
Briefcase,
} from 'lucide-react'
import Link from 'next/link'
import clsx from 'clsx'
interface TrendingTld {
tld: string
reason: string
current_price: number
price_change: number
}
interface HotAuction {
domain: string
current_bid: number
time_remaining: string
platform: string
}
// Shimmer for loading states
function Shimmer({ className }: { className?: string }) {
return (
)
}
// Animated counter
function AnimatedNumber({ value, suffix = '' }: { value: number, suffix?: string }) {
const [count, setCount] = useState(0)
useEffect(() => {
const duration = 2000
const steps = 60
const increment = value / steps
let current = 0
const timer = setInterval(() => {
current += increment
if (current >= value) {
setCount(value)
clearInterval(timer)
} else {
setCount(Math.floor(current))
}
}, duration / steps)
return () => clearInterval(timer)
}, [value])
return <>{count.toLocaleString()}{suffix}>
}
// Live Market Ticker
function MarketTicker({ auctions }: { auctions: HotAuction[] }) {
const tickerRef = useRef(null)
// Duplicate items for seamless loop
const items = [...auctions, ...auctions]
if (auctions.length === 0) return null
return (
{items.map((auction, i) => (
{auction.domain}
${auction.current_bid}
{auction.time_remaining}
{auction.platform}
))}
)
}
export default function HomePage() {
const { checkAuth, isLoading, isAuthenticated } = useStore()
const [trendingTlds, setTrendingTlds] = useState([])
const [hotAuctions, setHotAuctions] = useState([])
const [loadingTlds, setLoadingTlds] = useState(true)
const [loadingAuctions, setLoadingAuctions] = useState(true)
useEffect(() => {
checkAuth()
fetchData()
}, [checkAuth])
const fetchData = async () => {
try {
const [trending, auctions] = await Promise.all([
api.getTrendingTlds(),
api.getHotAuctions(8).catch(() => [])
])
setTrendingTlds(trending.trending.slice(0, 4))
setHotAuctions(auctions.slice(0, 8))
} catch (error) {
console.error('Failed to fetch data:', error)
} finally {
setLoadingTlds(false)
setLoadingAuctions(false)
}
}
if (isLoading) {
return (
)
}
const getTrendIcon = (priceChange: number) => {
if (priceChange > 0) return
if (priceChange < 0) return
return
}
return (
{/* Background Effects */}
{/* Hero Section - "Bloomberg meets Apple" */}
{/* Puma Logo */}
{/* Main Headline - kompakter */}
The market never sleeps.
You should.
{/* Subheadline - kompakter */}
We scan. We watch. We alert.{' '}
You pounce.
{/* Tagline */}
Don't guess. Know.
{/* Domain Checker - PROMINENT */}
{/* Glow effect behind search */}
{/* Trust Indicators */}
Live Auctions
Instant Alerts
Price Intel
{/* Live Market Ticker */}
{!loadingAuctions && hotAuctions.length > 0 && (
)}
{/* Three Pillars: DISCOVER, TRACK, ACQUIRE */}
{/* Section Header */}
Your Command Center
Three moves to dominate.
{/* Pillars */}
{/* DISCOVER */}
Discover
Instant domain intel. Not just "taken" — but why,
when it expires, and
smarter alternatives.
-
Real-time availability across 886+ TLDs
-
Expiry dates & WHOIS data
-
AI-powered alternatives
{/* TRACK */}
{/* Popular badge */}
Most Popular
Track
Your private watchlist with 4-layer health analysis.
Know the second it weakens.
-
DNS, HTTP, SSL, WHOIS monitoring
-
Real-time health status alerts
-
Parked & pre-drop detection
{/* ACQUIRE */}
Acquire
All auctions. One place. Filtered.
Valued.
Ready to strike.
-
GoDaddy, Sedo, NameJet, DropCatch
-
No-spam smart filters
-
Deal score & valuation
{/* Transition Element */}
{/* Beyond Hunting: Sell & Alert */}
{/* Subtle background pattern */}
{/* Section Header - Left aligned for flow */}
Buy. Sell. Get alerted.
Pounce isn't just for finding domains. It's your complete domain business platform.
{/* For Sale Marketplace */}
Create "For Sale" pages with DNS verification. Buyers contact you directly.
-
Verified Owner badge
-
Pounce Score valuation
-
Secure contact form
Browse
{/* Sniper Alerts */}
Sniper Alerts
Hyper-Personalized
Custom filters that notify you when matching domains appear.
-
TLD, length, price filters
-
Email & SMS alerts
-
Real-time matching
Set Up
{/* Portfolio Health */}
Portfolio
Domain Insurance
Monitor your domains 24/7. SSL, renewals, uptime & P&L tracking.
-
Expiry reminders
-
Uptime monitoring
-
Valuation & P&L
Manage
{/* Transition to TLDs */}
{/* Trending TLDs Section */}
{/* Section Header */}
TLD Pricing
The real price tag.
Don't fall for $0.99 promos. We show renewal costs, price trends, and renewal traps across 886+ TLDs.
Trap Detection
Risk Levels
Explore TLD Pricing
{/* TLD Cards */}
{loadingTlds ? (
{[...Array(4)].map((_, i) => (
))}
) : (
{trendingTlds.map((item, index) => (
.{item.tld}
0
? "text-orange-400 bg-orange-400/10"
: (item.price_change ?? 0) < 0
? "text-accent bg-accent/10"
: "text-foreground-muted bg-foreground/5"
)}>
{getTrendIcon(item.price_change ?? 0)}
{(item.price_change ?? 0) > 0 ? '+' : ''}{(item.price_change ?? 0).toFixed(1)}%
{item.reason}
{isAuthenticated ? (
${(item.current_price ?? 0).toFixed(2)}/yr
) : (
Sign in to view
)}
))}
)}
{/* Social Proof / Stats Section */}
{/* Pricing CTA Section */}
Pricing
Simple. Transparent. Powerful.
Start free. Scale when you're ready.
{/* Quick Plans */}
{/* Free Plan */}
-
5 domains watched
-
Daily status checks
-
Market overview
{/* Pro Plan */}
Popular
-
100 domains watched
-
Priority alerts
-
Full auction access
Compare All Plans
{isAuthenticated ? "Go to Dashboard" : "Start Free"}
{/* Final CTA */}
Join the hunters.
Ready to pounce?
Track your first domain in under a minute. Free forever, no credit card.
{isAuthenticated ? "Go to Dashboard" : "Start Hunting — It's Free"}
{!isAuthenticated && (
Free forever • No credit card • 5 domains included
)}
{/* Ticker Animation Keyframes */}
)
}