- 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
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
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
- 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...
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