LISTINGS PAGE:
- Added missing Sparkles import
PORTFOLIO PAGE:
- Changed dropdown menu to open downward (top-full mt-1)
instead of upward for better visibility
SEO PAGE:
- Added cleanDomain() helper to sanitize input
- Removes whitespace, protocol, www, and trailing slashes
- Fixes 'hushen. app' -> 'hushen.app' input issue
PRICING PAGE:
- Removed accent highlight from 'TLDs Tracked' StatCard
All StatCards now have consistent styling without
green accent highlights.
COMMAND CENTER HEADER:
- Changed from fixed h-16/h-18 to py-5/py-6 for more breathing room
- More vertical padding gives titles more presence
LANDING PAGE HERO SECTION:
- Reduced top padding from pt-32/40/48 to pt-24/32/36
- Smaller puma logo: w-32/40/48 (was w-40/52/64)
- Smaller headline: 2rem-4rem (was 2.5rem-6.5rem)
- More compact spacing overall
- Reduced max-width from 5xl to 4xl for better focus
DOMAIN CHECKER (more prominent):
- Removed px-4 wrapper, full max-w-2xl
- Always-visible glow effect (opacity-60, opacity-100 on focus)
- Larger padding: py-5/6 (was py-4/5)
- Ring-2 on focus (was ring-1)
- Shadow-2xl with accent shadow
- Button: bg-accent instead of bg-foreground
- Button text: 'Hunt' instead of 'Check'
- Larger icons on desktop
- Accent-colored example domains
- Added glow wrapper in landing page
RESULT:
- Search field is now the visual center of the hero
- More compact, action-focused above-the-fold
- Better hierarchy: logo → headline → search
LAYOUT CHANGES:
1. CommandCenterLayout header now uses max-w-7xl:
- Header width matches content width exactly
- Added mx-auto for centering
- Cleaner, more consistent visual alignment
2. Main content area:
- max-w-7xl and centering now in layout wrapper
- Consistent padding: py-6 sm:py-8
3. PageContainer simplified:
- Removed max-w-7xl mx-auto (now in parent)
- Just provides space-y-6 for child spacing
4. Header bar improvements:
- Slightly reduced height: h-16 sm:h-18
- Better button styling (hover states)
- Truncation for long titles on mobile
- Icons slightly larger for better visibility
RESULT:
All Command Center pages now have perfectly aligned
header and content with the same max-width (max-w-7xl).
PROBLEM: Redirect parameters were getting lost during user flows
FIXES APPLIED:
1. Register Page:
- Default redirect: /command/dashboard (was /dashboard)
- Stores redirect in localStorage before email verification
- Preserves redirect when linking to login page
2. Login Page:
- Checks localStorage for stored redirect (from registration)
- Clears stored redirect after successful login
- Uses useState for dynamic redirect handling
3. OAuth Callback:
- Default redirect: /command/dashboard (was /dashboard)
- Backend OAuth endpoints also updated
4. Fixed all /dashboard → /command/dashboard links:
- pricing/page.tsx
- page.tsx (landing page)
- AdminLayout.tsx
- DomainChecker.tsx
- command/dashboard/page.tsx
- Header.tsx (simplified check)
5. Backend OAuth:
- Default redirect_path: /command/dashboard
NEW USER JOURNEY:
Pricing → Register → Email Verify → Login → Pricing → Stripe
↓
Welcome Page
↓
Dashboard
The redirect is preserved throughout:
- Query param ?redirect=/pricing passed through register/login
- Stored in localStorage during email verification gap
- Cleaned up after successful login
STRIPE FLOW CLARIFICATION:
- Stripe does NOT create users
- Users must register FIRST with email/password
- Then they can upgrade via Stripe checkout
- This is by design for security and flexibility
NEW WELCOME PAGE (/command/welcome):
- Celebratory confetti animation on arrival
- Plan-specific welcome message (Trader/Tycoon)
- Features unlocked section with icons
- Next steps with quick links to key features
- Link to documentation and support
UPDATED USER JOURNEY:
1. Pricing Page (/pricing)
↓ Click plan button
2. (If not logged in) → Register → Back to Pricing
↓ Click plan button
3. Stripe Checkout (external)
↓ Payment successful
4. Welcome Page (/command/welcome?plan=trader)
- Shows unlocked features
- Guided next steps
↓ 'Go to Dashboard'
5. Dashboard (/command/dashboard)
CANCEL FLOW:
- Stripe Cancel → /pricing?cancelled=true
- Shows friendly banner: 'No worries! Card not charged.'
- Dismissible with X button
- URL cleaned up automatically
BACKEND UPDATES:
- Default success URL: /command/welcome?plan={plan}
- Default cancel URL: /pricing?cancelled=true
- Portal return URL: /command/settings (not /dashboard)
This creates a complete, professional onboarding experience
that celebrates the upgrade and guides users to get started.
CHANGED font-display → font-semibold:
Command Center Pages:
- alerts/page.tsx: Matches count, notifications, modal title
- marketplace/page.tsx: Listing price
- portfolio/page.tsx: Valuation price
- listings/page.tsx: Price display, modal titles (2)
- seo/page.tsx: Feature title, SEO score, backlinks count
Components (used in Command Center):
- CommandCenterLayout.tsx: Page title
- AdminLayout.tsx: Page title
- PremiumTable.tsx: StatCard value
KEPT serif font (as requested):
- Sidebar.tsx: POUNCE logo only
- Header.tsx: POUNCE logo (public pages)
- Footer.tsx: POUNCE logo
Now the Command Center uses only sans-serif fonts,
with the exception of the POUNCE logo in the navigation.
BEST VALUE LOGIC:
- 'Best' badge only shown when:
1. Cheapest registration price AND
2. No renewal trap (renewal <= 1.5x registration)
- New 'Cheap Start' badge for cheapest with renewal trap
Shows warning: 'Cheapest registration but high renewal costs'
TOOLTIPS ADDED:
Stats Cards:
- Buy (1y): 'Lowest first-year registration price...'
- Renew (1y): 'Annual renewal price after first year'
or 'Warning: Renewal is Xx the registration price'
- 1y Change: 'Price change over the last 12 months'
- 3y Change: 'Price change over the last 3 years'
Registrar Table Headers:
- Register: 'First year registration price'
- Renew: 'Annual renewal price'
- Transfer: 'Transfer from another registrar'
Registrar Table Cells:
- Registration price: 'First year: $X.XX'
- Renewal price: 'Annual renewal: $X.XX' or trap warning
- Transfer price: 'Transfer from another registrar: $X.XX'
- AlertTriangle icon: 'Renewal trap: Xx registration price'
- Best badge: 'Best overall value: lowest registration...'
- Cheap Start badge: 'Cheapest registration but high renewal...'
- Visit link: 'Register at {registrar}'
Applied to both:
- /command/pricing/[tld] (Command Center)
- /tld-pricing/[tld] (Public)
REMOVED:
- Alert/Notify button from both pages
- Bell icon and handleToggleAlert functions
- alertEnabled, alertLoading state
ADDED (matching table columns):
- Buy Price (1y) - was already there
- Renewal (1y) with trap warning
- 1y Change with color coding
- 3y Change with color coding
- Risk Assessment with badge (dot + reason text)
COMMAND CENTER (/command/pricing/[tld]):
- StatCards: Buy, Renew, 1y Change, 3y Change
- Risk Assessment section with badge
- Renewal Trap warning when ratio > 2x
- Real chart data from history.history API
PUBLIC (/tld-pricing/[tld]):
- Same stats in Quick Stats grid
- Risk Assessment for authenticated users
- Shimmer placeholders for non-authenticated
- Real chart data from history.history API
Both pages now show ALL info from the overview table:
✅ TLD name
✅ Trend (chart + badge)
✅ Buy (1y)
✅ Renew (1y) with trap
✅ 1y Change
✅ 3y Change
✅ Risk Level + Reason
PUBLIC TLD PRICING PAGE:
- Replaced manual HTML table with PremiumTable component
- Now matches Command Center table exactly
- Same columns: TLD, Trend, Buy, Renew, 1y, 3y, Risk
- Consistent row hover effects and styling
- Simplified sparkline component
- Preview row for non-authenticated users (first row unblurred)
- Blurred data for other rows when not logged in
COMMAND TLD PRICING PAGE:
- Removed Bell icon and alert functionality from actions column
- Cleaned up unused imports (Bell, Link)
- Actions column now only shows ChevronRight arrow
CONSISTENCY ACHIEVED:
- Both tables use identical column structure
- Same renewal trap indicators
- Same risk level dots (no emojis)
- Same trend sparklines
- Same price formatting
1. Portfolio dropdown menu:
- Changed from 'top-full' to 'bottom-full'
- Menu now opens upward to not get cut off by table
2. Removed green accent highlighting from StatCards:
- Portfolio: Expiring Soon
- Watchlist: Available
- Auctions: Ending Soon
- Marketplace: Verified Sellers
- Alerts: Active Alerts
SIMPLIFIED STATS:
- Removed: Total Invested, Est. Value, Profit/Loss
- Added: Expiring Soon (domains expiring in 30 days)
- Added: Need Attention (domains with health issues)
- Kept: Total Domains, Listed for Sale
SIMPLIFIED TABLE:
- Domain column: name + registrar
- Added column: simple date added
- Expires column: with color-coded expiry warnings (30d, expired)
- Health column: quick health status
- Actions: Three-dot dropdown menu
THREE-DOT MENU:
├── Health Check
├── Edit Details
├── ─────────────
├── List for Sale (accent color)
├── Visit Website
├── ─────────────
├── Record Sale
└── Remove (danger)
SIMPLIFIED SUBTITLE:
- Shows domain count + expiring soon count
- No more profit/loss display
This focuses on reliable, actionable data:
✅ Domain names (100% accurate)
✅ Expiry dates (user input)
✅ Health status (real-time check)
❌ Valuations (unreliable estimates)
❌ Profit/Loss (depends on estimates)
API FIX:
- quickHealthCheck now uses POST method (was GET)
- Fixes 'int_parsing' error for domain_id
PORTFOLIO UX:
1. Health Check now works correctly with POST /domains/health-check
2. Clear separation of List vs Sell:
- 'List' button → Opens listing form (marketplace)
- 'Sold?' button → Records completed sale (P&L tracking)
3. Improved Valuation Modal:
- Shows 'Pounce Score Estimate' instead of just 'Estimated Value'
- Color-coded confidence badge (high/medium/low)
- Clear disclaimer about algorithmic estimate
4. Record Sale Modal:
- Clear explanation of purpose (P&L tracking)
- Hint to use 'List' button for marketplace
LISTINGS PAGE:
- Accepts ?domain= query parameter
- Auto-opens create modal with prefilled domain
- Seamless flow from Portfolio → List on Marketplace
LANDING PAGE:
- Changed 'Beyond Hunting' section to 3-column layout
- Added new 'Portfolio' card with blue accent theme
- Highlights: Purchase/sale tracking, renewal reminders, P&L valuations
- Links to /command/portfolio
- Made all cards more compact for better layout
PORTFOLIO FEATURE STATUS:
- Public: No dedicated page (private feature)
- Command Center: /command/portfolio ✅ Full functionality
- Admin: Portfolio stats in overview ✅
- Pricing Page: Listed in tier comparison ✅
- Sidebar: Linked in 'Manage' section ✅
Features included in Portfolio:
- Add domains with purchase info
- Track registrar & renewal dates
- Mark domains as sold (ROI calc)
- Get valuations
- Summary with P&L metrics
TLD PRICING - Landing Page:
- New headline: 'The real price tag'
- Highlight renewal costs, price trends, and traps
- Feature pills showing Trap Detection and Risk Levels
- Updated CTA button styling
TLD PRICING - Public Page (/tld-pricing):
- New header with 'True Costs' emphasis
- Feature pills: Renewal Trap Detection, Risk Levels, 1y/3y Trends
- Improved login banner with specific value proposition
- Consistent styling with landing page
MONITORING - Landing Page:
- Updated Track section with 4-layer health analysis
- New features: DNS/HTTP/SSL/WHOIS monitoring
- Health status alerts (🟢🟡🟠🔴)
- Parked & pre-drop detection
Status:
- Public: ✅ TLD Pricing page with blur for free users
- Command Center: ✅ Watchlist has full health monitoring
- Admin: Has System tab with health checks
Changed links from /tld-pricing/{tld} to /command/pricing/{tld}:
- onRowClick handler in PremiumTable
- Bell icon link in actions column
This ensures authenticated users stay in the Command Center
when navigating to TLD detail pages.
PUBLIC PAGE (/tld-pricing):
- Added renewal price column with trap warning (⚠️ when >2x)
- Added 1y trend % column with color coding
- Added risk level badges (🟢🟡🔴)
- Blur effect for non-authenticated users on premium columns
- All data from real backend API (not simulated)
PUBLIC DETAIL PAGE (/tld-pricing/[tld]):
- Already existed with full features
- Shows price history chart, registrar comparison, domain check
COMMAND CENTER (/command/pricing):
- Full access to all data without blur
- Category tabs: All, Tech, Geo, Budget, Premium
- Sparklines for trend visualization
- Risk-based sorting option
COMMAND CENTER DETAIL (/command/pricing/[tld]):
- NEW: Professional detail page with CommandCenterLayout
- Price history chart with period selection (1M, 3M, 1Y, ALL)
- Renewal trap warning banner
- Registrar comparison table with trap indicators
- Quick domain availability check
- TLD info grid (type, registry, introduced, registrars)
- Price alert toggle
CLEANUP:
- /intelligence → redirects to /tld-pricing (backwards compat)
- Removed duplicate code
All TLD Pricing data now flows from backend with:
- Real renewal prices from registrar data
- Calculated 1y/3y trends per TLD
- Risk level and reason from backend
BACKEND CHANGES (tld_prices.py):
- Added get_min_renewal_price() and get_avg_renewal_price() helpers
- Added calculate_price_trends() with known TLD trends:
- .ai: +15%/1y, +45%/3y (AI boom)
- .com: +7%/1y, +14%/3y (registry increases)
- .xyz: -10%/1y (promo-driven)
- etc.
- Added calculate_risk_level() returning low/medium/high + reason
- Extended /overview endpoint to return:
- min_renewal_price
- avg_renewal_price
- price_change_7d, price_change_1y, price_change_3y
- risk_level, risk_reason
FRONTEND CHANGES:
- Updated api.ts TldOverview interface with new fields
- Command Center /command/pricing/page.tsx:
- Now uses api.getTldOverview() instead of simulated data
- getRiskInfo() uses backend risk_level/risk_reason
- Public /intelligence/page.tsx:
- Same updates - uses real backend data
This ensures TLD Pricing works correctly:
- Public page: Real data + blur for premium columns
- Command Center: Real data with all columns visible
- Admin: TLD Pricing tab with correct stats
SCHEDULER ENHANCEMENT:
- After each hourly auction scrape, automatically match new auctions
against all active Sniper Alerts
- _auction_matches_alert() checks all filter criteria:
- Keyword matching
- TLD whitelist
- Min/max length
- Min/max price
- Exclude numbers
- Exclude hyphens
- Exclude specific characters
- Creates SniperAlertMatch records for dashboard display
- Sends email notifications to users with matching alerts
- Updates alert's last_triggered timestamp
This implements the full Sniper Alert workflow from analysis_3.md:
'Der User kann extrem spezifische Filter speichern.
Wenn die Mail kommt, weiß der User: Das ist relevant.'
MARKETPLACE:
- Created /command/marketplace for authenticated users
- Shows all listings with search, sort, and filters
- Grid layout with domain cards, scores, and verification badges
- Links to 'My Listings' for quick access to management
SIDEBAR SEO JUICE:
- Removed 'Tycoon' badge label
- Now shows as disabled/grayed out for non-Tycoon users
- Crown icon indicates premium feature
- Hover tooltip explains feature & upgrade path
PRICING PAGE:
- Added new features to tier cards:
- Scout: 2 domain listings
- Trader: 10 listings, 5 Sniper Alerts
- Tycoon: 50 listings, unlimited alerts, SEO Juice
- Updated comparison table with:
- For Sale Listings row
- Sniper Alerts row
- SEO Juice Detector row
MARKETPLACE INTEGRATION:
- Added 'Marketplace' (/buy) to public Header navigation
- Renamed 'For Sale' to 'Marketplace' in Command Center Sidebar
LISTINGS PAGE REDESIGN:
- Added tab-based layout: 'Browse Marketplace' / 'My Listings'
- Browse tab: Search + grid view of all public listings
- My Listings tab: Full management with stats
- Unified experience to view marketplace and manage own listings
SEO JUICE DETECTOR FIX:
- Fixed 500 error when database table doesn't exist
- Added fallback: _format_dict_response for when DB is unavailable
- Service now gracefully handles missing tables
- Returns estimated data even on cache failures
From analysis_3.md - Strategie 3: SEO-Daten & Backlinks:
'SEO-Agenturen suchen Domains wegen der Power (Backlinks).
Solche Domains sind für SEOs 100-500€ wert, auch wenn der Name hässlich ist.'
BACKEND:
- Model: DomainSEOData for caching SEO metrics
- Service: seo_analyzer.py with Moz API integration
- Falls back to estimation if no API keys
- Detects notable links (Wikipedia, .gov, .edu, news)
- Calculates SEO value estimate
- API: /seo endpoints (Tycoon-only access)
FRONTEND:
- /command/seo page with full SEO analysis
- Upgrade prompt for non-Tycoon users
- Notable links display (Wikipedia, .gov, .edu, news)
- Top backlinks with authority scores
- Recent searches saved locally
SIDEBAR:
- Added 'SEO Juice' nav item with 'Tycoon' badge
DOCS:
- Updated DATABASE_MIGRATIONS.md with domain_seo_data table
- Added SEO API endpoints documentation
- Added Moz API environment variables info
PUBLIC (/auctions):
- Vanity Filter: Only show clean domains to non-authenticated users
(no hyphens, no numbers, max 12 chars, premium TLDs only)
- Deal Score column with lock icon for non-authenticated users
- Dynamic wording: 'Live Feed' instead of small number
- Show filtered count vs total count
COMMAND CENTER (/command/auctions):
- Smart Filter Presets: All, No Trash, Short, High Value, Low Competition
- Deal Score column with Undervalued label for Trader+ users
- Track button to add domains to Watchlist
- Tier-based filtering: Scout=raw feed, Trader+=clean feed by default
- Upgrade banner for Scout users
ADMIN (/admin - auctions tab):
- Auction statistics dashboard (total, platforms, clean domains)
- Platform status overview (GoDaddy, Sedo, NameJet, DropCatch)
- Vanity filter rules documentation
- Scrape all platforms button