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
- Created reusable Footer component with social links
- Replaced mock data with real API calls for TLD history
- Added Trending TLDs section at top of pricing page
- Mini-charts now display actual 12-month price history
- Improved data authenticity throughout TLD pricing page