fix: Scout tier restrictions - no listings, no sniper alerts
Some checks failed
CI / Frontend Lint & Type Check (push) Has been cancelled
CI / Frontend Build (push) Has been cancelled
CI / Backend Lint (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Docker Build (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
Deploy / Build & Push Images (push) Has been cancelled
Deploy / Deploy to Server (push) Has been cancelled
Deploy / Notify (push) Has been cancelled

Frontend:
- Scout: Listings and Sniper marked as unavailable
- Updated comparison table

Backend TIER_CONFIG:
- Scout: domain_limit=5, portfolio_limit=5, listing_limit=0, sniper_limit=0
- Trader: domain_limit=50, portfolio_limit=50
This commit is contained in:
2025-12-18 14:47:25 +01:00
parent 86bfcc0e36
commit dad97f951e
4 changed files with 18 additions and 18 deletions

View File

@ -37,12 +37,12 @@ TIER_CONFIG = {
"name": "Scout",
"price": 0,
"currency": "USD",
"domain_limit": 10, # Watchlist: 10 (was 5)
"portfolio_limit": 3, # Portfolio: 3 (was 0) - taste the feature
"listing_limit": 1, # Listings: 1 (was 0) - try selling
"sniper_limit": 2, # Sniper alerts
"domain_limit": 5, # Watchlist: 5
"portfolio_limit": 5, # Portfolio: 5
"listing_limit": 0, # Listings: 0 (Trader+ only)
"sniper_limit": 0, # Sniper alerts: 0 (Trader+ only)
"check_frequency": "daily",
"history_days": 7, # 7 days history (was 0)
"history_days": 7,
"features": {
"email_alerts": True,
"sms_alerts": False,
@ -63,10 +63,10 @@ TIER_CONFIG = {
"name": "Trader",
"price": 9,
"currency": "USD",
"domain_limit": 100, # Watchlist: 100 (was 50)
"portfolio_limit": 50, # Portfolio: 50 (was 25)
"listing_limit": 10, # Listings: 10 (was 5)
"sniper_limit": 10, # Sniper alerts
"domain_limit": 50, # Watchlist: 50
"portfolio_limit": 50, # Portfolio: 50
"listing_limit": 10, # Listings: 10
"sniper_limit": 10, # Sniper alerts: 10
"check_frequency": "hourly",
"history_days": 90,
"features": {
@ -81,7 +81,7 @@ TIER_CONFIG = {
"webhooks": False,
"bulk_tools": False,
"seo_metrics": False,
# Yield (DNS routing + landing) is Tycoon-only. Trader can preview ideas in VISION.
# Yield Preview only - can see landing page but not activate routing
"yield": False,
"daily_drop_digest": False,
}

View File

@ -23,8 +23,8 @@ const tiers = [
{ text: 'Alert Speed', highlight: false, available: true, sublabel: 'Daily' },
{ text: '5 Watchlist Domains', highlight: false, available: true },
{ text: '5 Portfolio Domains', highlight: false, available: true },
{ text: '1 Listing', highlight: false, available: true, sublabel: 'Try it' },
{ text: '2 Sniper Alerts', highlight: false, available: true },
{ text: 'Listings', highlight: false, available: false },
{ text: 'Sniper Alerts', highlight: false, available: false },
{ text: 'Pounce Score', highlight: false, available: true, sublabel: 'Basic' },
{ text: 'TLD Intel', highlight: false, available: true, sublabel: 'Public' },
],
@ -86,8 +86,8 @@ const comparisonFeatures = [
{ name: 'Alert Speed', scout: 'Daily', trader: 'Hourly', tycoon: 'Every 5 min' },
{ name: 'Watchlist', scout: '5 Domains', trader: '50 Domains', tycoon: 'Unlimited' },
{ name: 'Portfolio', scout: '5 Domains', trader: '50 Domains', tycoon: 'Unlimited' },
{ name: 'Listings', scout: '1 (Try it)', trader: '10 (0% Fee)', tycoon: 'Unlimited + Featured' },
{ name: 'Sniper Alerts', scout: '2', trader: '10', tycoon: '50' },
{ name: 'Listings', scout: '', trader: '10 (0% Fee)', tycoon: 'Unlimited + Featured' },
{ name: 'Sniper Alerts', scout: '', trader: '10', tycoon: '50' },
{ name: 'Valuation', scout: 'Basic Score', trader: 'Pounce Score', tycoon: 'Score + SEO' },
{ name: 'TLD Intel', scout: 'Public', trader: 'Renewal Prices', tycoon: 'Full History' },
{ name: 'Yield', scout: '—', trader: 'Preview', tycoon: 'Active Routing' },

View File

@ -75,8 +75,8 @@ export default function MyListingsPage() {
const [menuOpen, setMenuOpen] = useState(false)
const tier = subscription?.tier || 'scout'
const listingLimits: Record<string, number> = { scout: 1, trader: 10, tycoon: Infinity }
const maxListings = listingLimits[tier] || 1
const listingLimits: Record<string, number> = { scout: 0, trader: 10, tycoon: Infinity }
const maxListings = listingLimits[tier] || 0
const canAddMore = listings.length < maxListings
const isTycoon = tier === 'tycoon'
const isUnlimited = tier === 'tycoon'

View File

@ -82,8 +82,8 @@ export default function SniperAlertsPage() {
const [menuOpen, setMenuOpen] = useState(false)
const tier = subscription?.tier || 'scout'
const alertLimits: Record<string, number> = { scout: 2, trader: 10, tycoon: 50 }
const maxAlerts = alertLimits[tier] || 2
const alertLimits: Record<string, number> = { scout: 0, trader: 10, tycoon: 50 }
const maxAlerts = alertLimits[tier] || 0
// Limits match backend TIER_CONFIG.sniper_limit
const canAddMore = alerts.length < maxAlerts