1. Parallel Zone Downloads (3x faster)
- CZDS zones now download in parallel with semaphore
- Configurable max_concurrent (default: 3)
- Added timing logs for performance monitoring
2. Email Alerts for Ops
- New send_ops_alert() in email service
- Automatic alerts on zone sync failures
- Critical alerts on complete job crashes
- Severity levels: info, warning, error, critical
3. Admin Zone Sync Dashboard
- New "Zone Sync" tab in admin panel
- Real-time status for all TLDs
- Manual sync trigger buttons
- Shows drops today, total drops, last sync time
- Health status indicators (healthy/stale/never)
- API endpoint: GET /admin/zone-sync/status
- Disabled verify_drops scheduler job (caused RDAP rate limit bans)
- Zone files now saved without RDAP verification (zone diff is reliable)
- Added date-based zone file snapshots with 3-day retention
- Improved DropsTab UI with better status display:
- "In Transition" with countdown timer for dropping_soon
- "Available Now" with Buy button
- "Re-registered" for taken domains
- Track button for dropping_soon domains
- Added --shm-size=8g to backend container for multiprocessing
- Removed duplicate host cron job (scheduler handles everything)
- Changed drops verification from 4 hours to every 10 minutes
- Will remove taken domains much faster from drops list
- Includes clean rebuild to fix UI display issue
1. Deploy Pipeline v3.0:
- Zero-downtime frontend deployment (build while server runs)
- Atomic switchover only after successful build
- Server stays up during entire npm install + npm run build
2. Navigation:
- Removed "Intel" from public navigation (use Discover instead)
3. Drops Auto-Cleanup:
- New scheduler job every 4 hours to verify drops availability
- Automatically removes domains that have been re-registered
- Keeps drops list clean with only actually available domains
- Detect when domains become TAKEN (not just when they become available)
- Send email notifications for both transitions
- Add "Refresh All" button to watchlist page
- Auto-refresh available domains for Tycoon users
- Add bulk refresh endpoint for watchlist
- Add warning toast type for status change alerts
- Better logging for domain status changes
Previously, the realtime (10-min) check job would check ALL tiers including
Scout users, giving them free premium service. Now:
- daily: checks ALL tiers (baseline service)
- hourly: checks Trader + Tycoon only
- realtime: checks Tycoon only (premium feature)
- 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
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.'
Backend (Scheduler):
- Add check_domains_by_frequency() for tier-based scanning
- Scout: Daily checks (at configured hour)
- Trader: Hourly checks (every :00)
- Tycoon: 10-minute real-time checks
- Smart tier filtering to avoid duplicate checks
Frontend (Pricing):
- All feature text now white (text-foreground)
Frontend (Settings/Billing):
- Show current plan with visual stats (domains, interval, portfolio)
- Display check frequency in human-readable format
- Full plan comparison table
- Green checkmarks for active features
- Upgrade CTA for free users
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