Fix brandables API NameError, switch Trend Surfer to a working Google Trends RSS endpoint, and harden the HUNT UI against failed requests. Also add sharp for Next.js standalone image optimization and remove PostHog script crossOrigin to reduce CORS breakage.
Backend:
- Add yield_webhooks.py for partner callbacks (generic, Awin, batch import)
- Add yield_routing.py for domain traffic routing with landing pages
- Add DB migrations for yield table indexes
- Add seed script with 30+ Swiss/German affiliate partners
- Register all new routers in API
Frontend:
- Add public /yield landing page with live analyzer demo
- Add Yield to header navigation
Documentation:
- Complete YIELD_SETUP.md with setup guide, API reference, and troubleshooting
- Run auction cleanup every 5 minutes and treat end_time <= now as ended
- Add admin endpoints to upload/inspect Playwright cookies (free alternative to paid proxies)
- Add client-side guardrail to never render ended auctions in Terminal Market
- Clamp end_time on updates to prevent drift from rounded time-left sources (e.g. Sav)
- Use a single request 'now' for time_remaining formatting across endpoints
- Avoid 'Ended' flicker caused by processing delays
- Treat Park.io close_date as America/New_York (configurable) and convert to UTC
- Ensure /stats, /scrape-status, /opportunities only count not-ended auctions
- Make NameJet Playwright scraper strict: requires real end_time + price
- Add Playwright proxy pool support (SCRAPER_PLAYWRIGHT_PROXY_POOL)
- Simplify protected scraping to NameJet only
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.
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
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
- Fix Command Center loading on mobile (add mobile sidebar menu)
- Rename 'Market' to 'Auctions' in navigation (clearer naming)
- Add Vanity Filter for public auctions (hide spam domains)
- Premium TLDs only for public (.com, .io, .ai, etc.)
- Max 15 chars, max 1 hyphen, max 2 digits
- No random consonant strings
- Improve pricing page differentiation
- Highlight 'Smart spam filter' for Trader
- Show 'Curated list' vs 'Raw feed'
- Add sublabels for key features
- Add background effects to Command Center
- Improve responsive design
- Add delete user functionality with cascade deletion of all user data
- Fix OAuth URLs to include /api/v1 path
- Fix token storage key consistency in OAuth callback
- Update user model to cascade delete price alerts
- Improve email templates with minimalist design
- Add confirmation dialog for user deletion
- Prevent deletion of admin users
Admin Panel:
- User Detail Modal with full profile info
- Bulk tier upgrade for multiple users
- User export to CSV
- Price Alerts overview tab
- Domain Health Check trigger
- Email Test functionality
- Scheduler Status with job info and last runs
- Activity Log for admin actions
- Blog management tab with CRUD
Blog System:
- BlogPost model with full content management
- Public API: list, featured, categories, single post
- Admin API: create, update, delete, publish/unpublish
- Frontend blog listing page with categories
- Frontend blog detail page with styling
- View count tracking
OAuth:
- Google OAuth integration
- GitHub OAuth integration
- OAuth callback handling
- Provider selection on login/register
Other improvements:
- Domain checker with check_all_domains function
- Admin activity logging
- Breadcrumbs component
- Toast notification component
- Various UI/UX improvements
DASHBOARD REDESIGN (Award-winning UI):
- New hero section with gradient icon and tier badge
- Modern stats grid with gradient backgrounds
- Redesigned domain cards with improved spacing
- Better visual hierarchy and typography
- Smooth animations and transitions
- Quick links section at bottom
- Redesigned all modals with rounded corners
- Better color system for ROI indicators
- Improved mobile responsiveness
API FIX:
- Fixed PATCH /domains/{id}/notify endpoint
- Now accepts body with 'notify' field instead of query param
- Resolves 422 Unprocessable Entity error
UI IMPROVEMENTS:
- Added BellOff icon for disabled notifications
- Better loading states with descriptive text
- Improved empty states with larger icons
- Gradient backgrounds for positive/negative values
- Better button hover states
BACKEND FIX:
- Added CurrentUserOptional alias to deps.py for backward compatibility
TONE OF VOICE UPDATES:
- Auctions: 'Live Auctions. One Feed. Strike first.'
- Careers: 'Build tools. For hunters.'
- Blog: 'The Hunt Report' - Market intel for hunters
- Settings: 'Your account. Your rules.'
- Forgot Password: Cleaner, direct copy
- guggeryves@hotmail.com automatically gets admin rights on registration
- Changed navigation logo from 'pounce' to 'POUNCE' (uppercase)
- Adjusted letter-spacing for better visual appearance
Backend:
- Add Stripe API endpoints (checkout, portal, webhook) in subscription.py
- Add password reset (forgot-password, reset-password) in auth.py
- Add email verification endpoints
- Add rate limiting with slowapi
- Add contact form and newsletter API (contact.py)
- Add webhook endpoint for Stripe (webhooks.py)
- Add NewsletterSubscriber model
- Extend User model with password reset and email verification tokens
- Extend email_service with new templates (password reset, verification, contact, newsletter)
- Update env.example with all new environment variables
Frontend:
- Add /forgot-password page
- Add /reset-password page with token handling
- Add /verify-email page with auto-verification
- Add forgot password link to login page
- Connect contact form to API
- Add API methods for all new endpoints
Documentation:
- Update README with new API endpoints
- Update environment variables documentation
- Update pages overview