SCHEDULER DOCUMENTATION:
- Built-in APScheduler runs automatically with backend
- 4 scheduled jobs: Domain check, TLD scrape, Auctions, Price alerts
- Optional external cron commands for production
- PM2 recommended setup for production
- Summary table of all cron jobs
- Added rewrites() in next.config.js to proxy /api/v1/* to backend
- Works regardless of whether Nginx is in front or external proxy goes directly to Next.js
- Disabled standalone output for non-Docker deployments
- Made Auction.valuation optional (API doesn't always return it)
- Fixed domain.notify to domain.notify_on_available in dashboard
- Changed api.request from private to protected for inheritance
README UPDATES:
- Added Quick Start section at the top with 2-command startup
- Documented common console warnings (SES, PostHog, CSS prefixes)
- Explained what errors actually need fixing
- Three startup options: Two terminals, start.sh, PM2
- Step-by-step manual setup with verification
- Application URLs table
IMPORTANT: Backend must be running for CORS errors to disappear!
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
TypeScript Fixes:
- Cleared TypeScript cache to resolve @types/node conflicts
- Reinstalled node_modules with fresh package-lock.json
- Removed duplicate type definitions from cache
Navigation Improvements:
- Logo uses Playfair Display font (same as titles)
- Consistent font-display class for 'pounce' wordmark
- Perfect vertical centering using flex + h-9 for all nav items
- Removed unused Image import
- Unified button/link heights (36px/h-9) for visual consistency
- Improved hover states with consistent sizing
Favicon:
- Generated favicon.ico (32x32) from pounce-puma.png
- Created favicon-16x16.png and favicon-32x32.png
- Created apple-touch-icon.png (180x180)
- Created android-chrome-192x192.png and android-chrome-512x512.png
- Updated layout.tsx to reference new favicon files
- Updated site.webmanifest to use new Android icons
Landing Page Logo:
- Reduced puma logo size on hero section
- Mobile: w-32 (128px)
- Tablet: w-40 (160px)
- Desktop: w-48 (192px)
- Reduced glow effect for more elegant appearance
Settings Page:
- Horizontal scrollable tabs on mobile (< lg breakpoint)
- Vertical sidebar on desktop (lg+)
- Hide plan info card on mobile (visible in billing tab)
Header:
- Added Settings link in mobile menu for authenticated users
Global CSS:
- Added scrollbar-hide utility class
- Added smooth scrolling for touch devices
- Added touch-pan-x for horizontal scroll areas
- Removed tap highlight on mobile
- select-none utility class
Dashboard Improvements:
- Portfolio: Sell Domain Modal mit Profit-Vorschau
- Portfolio: Edit Domain Modal für alle Felder
- Watchlist: Notification Toggle Button (Bell Icon)
- Neue Handler-Funktionen für alle Aktionen
New Pages:
- /settings - Profile, Notifications, Billing, Security
- /blog/[slug] - Blog Detail Page mit Share-Buttons
- /unsubscribe - Newsletter Unsubscribe Seite
Navigation Updates:
- Settings Icon im Header für eingeloggte User
- Unsubscribe Link im Footer (Legal Section)
API Additions:
- updateDomainNotify() für Watchlist-Benachrichtigungen
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
ROOT CAUSE:
- Overview API prioritized database data (only Porkbun prices)
- Compare API prioritized static data (5+ registrars)
- This caused price mismatches between Overview table and Detail page
SOLUTION:
- Changed Overview API to prioritize static data for TLDs with rich
multi-registrar pricing (like Compare API does)
- Database data now used only for TLDs NOT in static data
- This ensures all APIs return identical prices for same TLDs
VERIFICATION:
- .com: Overview=$10.75, Compare=$10.75 ✓
- .io: Overview=$32.33, Compare=$32.33 ✓
- .ai: Overview=$71.63, Compare=$71.63 ✓
- .xyz: Overview=$6.86, Compare=$6.86 ✓
DATA FLOW (now consistent):
1. Static TLDs (18): Use rich multi-registrar data
2. DB-only TLDs (869): Use Porkbun scraped data
3. Total: 887 TLDs with consistent pricing
PROBLEM:
- TLD prices in overview table differed from detail page
- Detail page was recalculating prices instead of using API data
SOLUTION:
1. Updated Frontend API types to include all backend fields:
- getTldCompare: Added type, description, registry, introduced,
cheapest_registrar, cheapest_price, price_range
- getTldHistory: Added type, description, registry, trend,
trend_reason, source
2. Fixed TLD Detail Page:
- Now uses price_range from Compare API directly
- Removed manual price recalculation
- Uses trend/trend_reason from History API
- All values now match Overview table exactly
RESULT:
- Prices are now 100% consistent:
- Overview table shows avg_registration_price from /overview API
- Detail page shows pricing.avg from /compare API (same values)
- Trending cards show current_price from /trending API (same values)
- All calculated using get_avg_price() in backend
MAJOR FEATURES:
- New pricing tiers: Scout (Free), Trader (€19/mo), Tycoon (€49/mo)
- Portfolio management: Track owned domains with purchase price, value, ROI
- Domain valuation engine: Algorithmic estimates based on length, TLD, keywords, brandability
- Dashboard tabs: Watchlist + Portfolio views
- Valuation modal: Score breakdown with confidence level
BACKEND:
- New models: PortfolioDomain, DomainValuation
- New API routes: /portfolio/* with full CRUD
- Valuation service with multi-factor algorithm
- Database migration for portfolio tables
FRONTEND:
- Updated pricing page with comparison table and billing toggle
- Dashboard with Watchlist/Portfolio tabs
- Portfolio summary stats: Total value, invested, unrealized P/L, ROI
- Add portfolio domain modal with all fields
- Domain valuation modal with score visualization
- Updated landing page with new tier pricing
- Hero section with large puma logo
DESIGN:
- Consistent minimalist dark theme
- Responsive on all devices
- Professional animations and transitions
- Added pounce-puma.png to /public
- Placed logo prominently above hero headline
- Responsive sizing: 192px → 384px (mobile → desktop)
- Added glow effect: drop-shadow with accent color
- Removed tagline badge to make room for logo
- Adjusted hero padding for better balance
Logo dimensions:
- Header: 128px (mobile) / 160px (desktop) width, auto height
- Footer: 112px width, auto height
- Login/Register: 112px width, auto height
- Header height reduced to 64px/80px to match
Logo now has landscape orientation with ~10rem width
New sizes:
- Header: 80px (mobile) → 96px (desktop) [was 48-56px]
- Header height: Increased to 80px/96px to accommodate logo
- Footer: 64px [was 48px]
- Login/Register: 80px [was 64px]
Logo is now prominently displayed
New sizes:
- Header: 48px (mobile) → 56px (desktop) [was 32-36px]
- Footer: 48px [was 40px]
- Login/Register: 64px [was 48px]
Logo is now much more prominent and visible
Changes:
- Added pounce-logo.png to /public
- Updated Header.tsx: Replaced text logo with Image component
- Updated Footer.tsx: Replaced text logo with Image component
- Updated login/page.tsx: Replaced text logo with Image component
- Updated register/page.tsx: Replaced text logo with Image component
Logo sizing:
- Header: 32px (mobile) / 36px (desktop)
- Footer: 40px
- Login/Register: 48px
All logos use Next.js Image component for optimization
Added professional pages for all footer links:
Company Pages:
- /about - Mission, values, stats, features
- /blog - Featured post, grid layout, newsletter CTA
- /contact - Contact form, FAQ, company info
- /careers - Open positions, benefits, values
Legal Pages:
- /privacy - Full privacy policy with sections
- /terms - Terms of service
- /cookies - Cookie types table, management info
- /imprint - Company registration, contacts, disclaimer
All pages follow consistent design:
- Same Header/Footer components
- Unified typography and spacing
- Ambient glow effects
- Animated sections
- Mobile responsive
Fixes:
- Chart hover dot now uses DOM element instead of SVG circle (no more squished dots)
- Chart hover line uses proper stroke-dasharray
- Tooltip positioning improved
New Components:
- Shimmer.tsx: Unified shimmer component for loading/locked states
- 404 Page: Professional not-found page with navigation options
Consistency improvements identified for future:
- All pages now use consistent Header/Footer
- Trend colors standardized (orange=up, green=down)
- Typography system follows design tokens
Major improvements:
- Elegant thin-line SVG chart with smooth bezier curves
- Gradient area fill with subtle glow effect
- Hover tooltips with price/date on chart
- Shimmer effects for unauthenticated users (no data visible)
- 'Enable Price Alert' toggle for authenticated users
- Domain search results styled like landing page
- Result card shows availability, registrar, expiration
- Refined typography with uppercase labels
- Better spacing and visual hierarchy
- Registrar table hidden for non-authenticated users
- Quick stats hidden for non-authenticated users
- Related TLDs show shimmer for prices when logged out
- Hero section with prominent pricing and quick registration link
- Interactive line chart with 1M/3M/1Y/ALL time period selection
- Integrated domain search directly on TLD page
- Smart registrar comparison table with external links
- Savings calculator showing cost savings vs most expensive registrar
- Renewal price warning indicator (⚠️) for high renewal fees
- Related TLDs section with smart suggestions
- Price alert modal for email notifications
- Responsive design for all screen sizes
- Loading skeletons and error states
- Backend: Support DB-only TLDs in /{tld}, /{tld}/compare endpoints
- Backend: Generate simulated history for 12-month trend charts
- Frontend: Fix edge cases (empty prices array)
- Frontend: Use API data for trend/registry/description
- Frontend: Request 365 days history for better trends
- Add search functionality (filter TLDs by name)
- Add pagination (25 per page with page navigation)
- Sort by popularity (Top TLDs first: com, net, org, de, uk...)
- Show all info for authenticated users
- Backend: offset/limit params, search filter, popularity ranking
TLD order: com > net > org > de > uk > io > ai > app...
- export_tld_prices.py: Export DB prices to JSON
- import_tld_prices.py: Import prices from JSON
- seed_tld_prices.py: Initial scrape from Porkbun API
- tld_prices_export.json: Current price data (886 TLDs)
Usage:
python scripts/seed_tld_prices.py # Initial scrape
python scripts/export_tld_prices.py # Backup to JSON
python scripts/import_tld_prices.py # Restore from JSON
Major changes:
- Add TLD price scraper with Porkbun API (886+ TLDs, no API key needed)
- Fix .ch domain checker using rdap.nic.ch custom RDAP
- Integrate database for TLD price history tracking
- Add admin endpoints for manual scrape and stats
- Extend scheduler with daily TLD price scrape job (03:00 UTC)
- Update API to use DB data with static fallback
- Update README with complete documentation
New files:
- backend/app/services/tld_scraper/ (scraper package)
- TLD_TRACKING_PLAN.md (implementation plan)
API changes:
- POST /admin/scrape-tld-prices - trigger manual scrape
- GET /admin/tld-prices/stats - database statistics
- GET /tld-prices/overview now uses DB data
- Added Footer component to all pages (home, dashboard, TLD pages)
- Changed max-width from 6xl to 7xl for consistent layout
- Enhanced mini-charts with gradients, area fills, and data points
- Better visual hierarchy and spacing
- Consistent design across all pages