diff --git a/frontend/src/app/admin/page.tsx b/frontend/src/app/admin/page.tsx index fffaf1d..3a6040b 100644 --- a/frontend/src/app/admin/page.tsx +++ b/frontend/src/app/admin/page.tsx @@ -162,7 +162,7 @@ export default function AdminPage() { // Load data when tab changes useEffect(() => { if (!user?.is_admin) return - loadAdminData() + loadAdminData() }, [activeTab, user?.is_admin]) const toggleSidebar = () => { @@ -199,27 +199,27 @@ export default function AdminPage() { setNewsletter(nlData.subscribers) setNewsletterTotal(nlData.total) } else if (activeTab === 'system') { - const [healthData, schedulerData] = await Promise.all([ + const [healthData, schedulerData] = await Promise.all([ api.getSystemHealth().catch(() => null), api.getSchedulerStatus().catch(() => null), - ]) - setSystemHealth(healthData) - setSchedulerStatus(schedulerData) + ]) + setSystemHealth(healthData) + setSchedulerStatus(schedulerData) const backupData = await api.listDbBackups(20).catch(() => ({ backups: [] })) setBackups(backupData.backups || []) const opsHistory = await api.getOpsAlertsHistory(50).catch(() => ({ events: [] })) setOpsAlertsHistory(opsHistory.events || []) } else if (activeTab === 'activity') { const logData = await api.getActivityLog(50, 0).catch(() => ({ logs: [], total: 0 })) - setActivityLog(logData.logs) - setActivityLogTotal(logData.total) + setActivityLog(logData.logs) + setActivityLogTotal(logData.total) } else if (activeTab === 'blog') { const blogData = await api.getAdminBlogPosts(50, 0).catch(() => ({ posts: [], total: 0 })) - setBlogPosts(blogData.posts) - setBlogPostsTotal(blogData.total) + setBlogPosts(blogData.posts) + setBlogPostsTotal(blogData.total) } } catch (err) { - setError(err instanceof Error ? err.message : 'Failed to load admin data') + setError(err instanceof Error ? err.message : 'Failed to load admin data') } finally { setLoading(false) } @@ -569,9 +569,9 @@ export default function AdminPage() { {/* Page Content */}
{/* Messages */} - {error && ( + {error && (
- +

{error}

- u.id} - columns={[ - { - key: 'user', - header: 'User', - render: (u) => ( -
+ u.id} + columns={[ + { + key: 'user', + header: 'User', + render: (u) => ( +

{u.email}

{u.name || 'No name'}

-
- ), - }, - { - key: 'status', - header: 'Status', - hideOnMobile: true, - render: (u) => ( -
- {u.is_admin && Admin} - {u.is_verified && Verified} - {!u.is_active && Inactive} -
- ), - }, - { - key: 'tier', - header: 'Tier', - render: (u) => ( - - {u.subscription.tier_name} - - ), - }, - { - key: 'domains', - header: 'Domains', - hideOnMobile: true, +
+ ), + }, + { + key: 'status', + header: 'Status', + hideOnMobile: true, + render: (u) => ( +
+ {u.is_admin && Admin} + {u.is_verified && Verified} + {!u.is_active && Inactive} +
+ ), + }, + { + key: 'tier', + header: 'Tier', + render: (u) => ( + + {u.subscription.tier_name} + + ), + }, + { + key: 'domains', + header: 'Domains', + hideOnMobile: true, render: (u) => {u.domain_count}, - }, - { - key: 'actions', - header: 'Actions', - align: 'right', - render: (u) => ( -
- handleUpgradeUser(u.id, e.target.value)} className="px-2 py-1.5 bg-white/5 border border-white/10 text-white text-xs font-mono" - > - - - - - handleToggleAdmin(u.id, u.is_admin)} variant={u.is_admin ? 'accent' : 'default'} title={u.is_admin ? 'Remove admin' : 'Make admin'} /> - handleDeleteUser(u.id, u.email)} variant="danger" disabled={u.is_admin} title="Delete user" /> -
- ), - }, - ]} + > + + + + + handleToggleAdmin(u.id, u.is_admin)} variant={u.is_admin ? 'accent' : 'default'} title={u.is_admin ? 'Remove admin' : 'Make admin'} /> + handleDeleteUser(u.id, u.email)} variant="danger" disabled={u.is_admin} title="Delete user" /> + + ), + }, + ]} emptyIcon={} - emptyTitle="No users found" - /> + emptyTitle="No users found" + />

Showing {users.length} of {usersTotal} users

)} {/* Newsletter Tab */} {activeTab === 'newsletter' && ( -
+

{newsletterTotal} subscribers

- s.id} - columns={[ + s.id} + columns={[ { key: 'email', header: 'Email', render: (s) => {s.email} }, - { key: 'status', header: 'Status', render: (s) => {s.is_active ? 'Active' : 'Unsubscribed'} }, + { key: 'status', header: 'Status', render: (s) => {s.is_active ? 'Active' : 'Unsubscribed'} }, { key: 'subscribed', header: 'Subscribed', render: (s) => {new Date(s.subscribed_at).toLocaleDateString()} }, - ]} - /> + ]} + />
)} {/* System Tab */} {activeTab === 'system' && ( -
+

System Status

- {[ - { label: 'Database', ok: systemHealth?.database === 'healthy', text: systemHealth?.database || 'Unknown' }, - { label: 'Email (SMTP)', ok: systemHealth?.email_configured, text: systemHealth?.email_configured ? 'Configured' : 'Not configured' }, - { label: 'Stripe', ok: systemHealth?.stripe_configured, text: systemHealth?.stripe_configured ? 'Configured' : 'Not configured' }, - { label: 'Scheduler', ok: schedulerStatus?.scheduler_running, text: schedulerStatus?.scheduler_running ? 'Running' : 'Stopped' }, - ].map((item) => ( + {[ + { label: 'Database', ok: systemHealth?.database === 'healthy', text: systemHealth?.database || 'Unknown' }, + { label: 'Email (SMTP)', ok: systemHealth?.email_configured, text: systemHealth?.email_configured ? 'Configured' : 'Not configured' }, + { label: 'Stripe', ok: systemHealth?.stripe_configured, text: systemHealth?.stripe_configured ? 'Configured' : 'Not configured' }, + { label: 'Scheduler', ok: schedulerStatus?.scheduler_running, text: schedulerStatus?.scheduler_running ? 'Running' : 'Stopped' }, + ].map((item) => (
{item.label} - - {item.ok ? : } + + {item.ok ? : } {item.text} - -
- ))} -
+ +
+ ))}
+
-
+

Manual Triggers

@@ -869,15 +869,15 @@ export default function AdminPage() { {runningOpsAlerts ? 'Running...' : 'Run Ops Alerts'} + {scraping ? : } + {scraping ? 'Scraping...' : 'Scrape TLD Prices'} + -
-
+ {auctionScraping ? : } + {auctionScraping ? 'Scraping...' : 'Scrape Auctions'} + +
+
@@ -893,24 +893,24 @@ export default function AdminPage() {

{b.name}

{new Date(b.modified_at).toLocaleString()}

-
+
{Math.round((b.size_bytes || 0) / 1024 / 1024)} MB -
-
- ))} -
- )} - + ))} )} + + + + + )} {/* TLD Tab */} {activeTab === 'tld' && stats && ( -
-
+
+
@@ -919,18 +919,18 @@ export default function AdminPage() {

TLD Price Management

-
- + > + {scraping ? : } + {scraping ? 'Scraping...' : 'Scrape All Registrars'} + +
+
-
-
)} {/* Auctions Tab */} @@ -940,7 +940,7 @@ export default function AdminPage() { -
+

Auction Management

@@ -952,9 +952,9 @@ export default function AdminPage() { {auctionScraping ? : } {auctionScraping ? 'Scraping...' : 'Scrape All Platforms'} -
- - )} + + + )} {/* Activity Tab */} {activeTab === 'activity' && ( @@ -970,9 +970,9 @@ export default function AdminPage() { { key: 'time', header: 'Time', hideOnMobile: true, render: (l) => {new Date(l.created_at).toLocaleString()} }, ]} /> - )} - - )} + )} + + )}
diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index a698d3f..72418bd 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -9,30 +9,19 @@ import { useStore } from '@/lib/store' import { api } from '@/lib/api' import { ArrowRight, - ChevronRight, Zap, Globe, Check, - Search, Target, Gavel, Activity, Lock, - Crosshair, - Coins, - Layers, ArrowUpRight, ShieldCheck, - Network, - Share2, - Key, Shield, Radar, Scan, - Radio, - Cpu, Clock, - ExternalLink } from 'lucide-react' import Link from 'next/link' import clsx from 'clsx' @@ -175,8 +164,8 @@ export default function HomePage() { {/* Subline */}

- Transforming domains from static addresses into yield-bearing financial assets. - Scan. Acquire. Route. Profit. + High-density domain intelligence for investors and operators. + Scan. Track. Trade.

{/* Stats Grid - Mobile 2x2 */} @@ -251,40 +240,40 @@ export default function HomePage() {
- The Broken Model + The Problem

- 99% of portfolios are
bleeding cash. + The domain market is
high-noise.

-

Investors pay renewal fees for years, hoping for a "Unicorn" sale that never happens.

-

Traditional parking pays pennies. Marketplaces charge 20% fees. The system drains your capital.

+

Prices are fragmented across registrars and marketplaces. Most feeds are spam-heavy and hard to act on.

+

The real traps are hidden: renewal inflation, policy changes, and timing windows you miss while you sleep.

- The Pounce Protocol -

Asset Class V2.0

+ The Pounce Terminal +

High Density. Low Noise.

  • - Deep Recon - Zone file analysis reveals what's truly valuable. + Clean Market Feeds + Spam-filtered auctions and opportunities you can act on.
  • - +
    - Frictionless Liquidity - Instant settlement. 0% Commission. + Renewal & Pricing Intel + Spot renewal traps, registrar deltas, and TLD inflation.
  • - +
    - Automated Yield - Domains pay for their own renewals. + Watchlist Ops + Monitor domains, get alerts, and move fast.
@@ -304,14 +293,14 @@ export default function HomePage() {
Core Architecture

- The Lifecycle
- Engine. + The Terminal
+ Stack.

// INTELLIGENCE_LAYER_ACTIVE
// MARKET_PROTOCOL_READY
- // YIELD_GENERATION_STANDBY + // MONITORING_ONLINE

@@ -320,29 +309,29 @@ export default function HomePage() { {[ { module: '01', - title: 'Intelligence', - desc: '"Identify Targets." We scan 886+ TLDs to uncover pricing traps, trends, and opportunities.', + title: 'Discover', + desc: '"Identify Targets." Find drops, auctions, and pricing anomalies without digging through spam.', features: [ - { icon: Scan, title: 'Global Scan', desc: 'Zone file analysis' }, - { icon: Target, title: 'Valuation AI', desc: 'Instant fair-market value' }, + { icon: Radar, title: 'Clean Feed', desc: 'No-bullshit filtering' }, + { icon: Scan, title: 'TLD Intel', desc: 'Renewal & inflation signals' }, ], }, { module: '02', - title: 'Market', - desc: '"Secure the Asset." Direct access to liquidity with verified owners and 0% commission.', + title: 'Acquire', + desc: '"Secure the Asset." Execute fast: auctions, direct listings, and verified owners.', features: [ { icon: ShieldCheck, title: 'Verified Owners', desc: 'Mandatory DNS check' }, - { icon: Gavel, title: 'Direct Execution', desc: 'P2P transfers' }, + { icon: Gavel, title: 'Execution', desc: 'Auctions & direct deals' }, ], }, { module: '03', - title: 'Yield', - desc: '"Deploy the Asset." Transform idle domains into automated revenue generators.', + title: 'Track', + desc: '"Stay Ahead." Monitor domains and get alerted the second something changes.', features: [ - { icon: Layers, title: 'Intent Routing', desc: 'Traffic to partners' }, - { icon: Coins, title: 'Passive Income', desc: 'Monthly payouts' }, + { icon: Activity, title: 'Monitoring', desc: 'Health & change detection' }, + { icon: Zap, title: 'Alerts', desc: 'Fast notifications' }, ], }, ].map((pillar, i) => ( @@ -380,38 +369,6 @@ export default function HomePage() {
- {/* ═══════════════════════════════════════════════════════════════════════ */} - {/* INTENT ROUTING */} - {/* ═══════════════════════════════════════════════════════════════════════ */} -
-
-
-
- The Endgame -

Intent Routing™

-

- Our engine detects user intent and routes traffic directly to high-paying partners. -

-
- -
- {[ - { icon: Network, step: '1', title: 'Connect', desc: 'Point nameservers to ns.pounce.io' }, - { icon: Cpu, step: '2', title: 'Analyze', desc: 'We scan the semantic intent of your domain' }, - { icon: Share2, step: '3', title: 'Route', desc: 'Traffic is routed to vertical partners' }, - ].map((item, i) => ( -
-
- -
-

{item.step}. {item.title}

-

{item.desc}

-
- ))} -
-
-
- {/* ═══════════════════════════════════════════════════════════════════════ */} {/* MARKET DEEP DIVE */} {/* ═══════════════════════════════════════════════════════════════════════ */} diff --git a/frontend/src/app/pricing/page.tsx b/frontend/src/app/pricing/page.tsx index 443a393..728b921 100644 --- a/frontend/src/app/pricing/page.tsx +++ b/frontend/src/app/pricing/page.tsx @@ -26,7 +26,7 @@ const tiers = [ { text: 'TLD Intel', highlight: false, available: true, sublabel: 'Public' }, { text: 'Pounce Score', highlight: false, available: false }, { text: 'Marketplace', highlight: false, available: true, sublabel: 'Buy Only' }, - { text: 'Yield (Intent Routing)', highlight: false, available: false }, + { text: 'Yield (Beta)', highlight: false, available: false }, ], cta: 'Enter Terminal', highlighted: false, @@ -49,7 +49,7 @@ const tiers = [ { text: 'Pounce Score', highlight: true, available: true }, { text: '5 Listings', highlight: true, available: true, sublabel: '0% Fee' }, { text: 'Portfolio', highlight: true, available: true, sublabel: '25 Domains' }, - { text: 'Yield (Intent Routing)', highlight: true, available: true, sublabel: '70% Rev Share' }, + { text: 'Yield (Beta)', highlight: false, available: true, sublabel: 'Optional' }, ], cta: 'Upgrade to Trader', highlighted: true, @@ -62,7 +62,7 @@ const tiers = [ icon: Crown, price: '29', period: '/mo', - description: 'Full firepower. Priority routes.', + description: 'Full firepower. Priority alerts.', features: [ { text: 'Market Feed', highlight: true, available: true, sublabel: 'Priority' }, { text: 'Alert Speed', highlight: true, available: true, sublabel: '10 min' }, @@ -72,7 +72,7 @@ const tiers = [ { text: 'Score + SEO Data', highlight: true, available: true }, { text: '50 Listings', highlight: true, available: true, sublabel: 'Featured' }, { text: 'Unlimited Portfolio', highlight: true, available: true }, - { text: 'Yield (Intent Routing)', highlight: true, available: true, sublabel: 'Priority Routes' }, + { text: 'Yield (Beta)', highlight: false, available: true, sublabel: 'Optional' }, ], cta: 'Go Tycoon', highlighted: false, @@ -90,7 +90,7 @@ const comparisonFeatures = [ { name: 'Valuation', scout: 'Locked', trader: 'Pounce Score', tycoon: 'Score + SEO' }, { name: 'Marketplace', scout: 'Buy Only', trader: '5 Listings (0% Fee)', tycoon: '50 Featured' }, { name: 'Portfolio', scout: '—', trader: '25 Domains', tycoon: 'Unlimited' }, - { name: 'Yield (Intent Routing)', scout: '—', trader: '70% Rev Share', tycoon: 'Priority Routes' }, + { name: 'Yield (Beta)', scout: '—', trader: 'Optional', tycoon: 'Optional' }, ] const faqs = [ diff --git a/frontend/src/app/terminal/listing/page.tsx b/frontend/src/app/terminal/listing/page.tsx index 69137e3..30ecbce 100755 --- a/frontend/src/app/terminal/listing/page.tsx +++ b/frontend/src/app/terminal/listing/page.tsx @@ -459,30 +459,30 @@ function ListingRow({ return (
- {/* Mobile */} -
-
-
+ {/* Mobile */} +
+
+
{listing.is_verified ? : } -
+
- {listing.domain} + {listing.domain} {isTycoon && Featured}
-
- + {listing.status} -
+ )}>{listing.status} +
${listing.asking_price?.toLocaleString() || 'Make Offer'} - {listing.view_count} views · {listing.inquiry_count} leads -
+ {listing.view_count} views · {listing.inquiry_count} leads +
{isDraft && needsVerification && ( )} {isActive && ( - - View - + + View + )} {isActive && ( -
-
- - {/* Desktop */} + +
+
+ + {/* Desktop */}
-
+
{listing.is_verified ? : } -
-
- {listing.domain} - {isTycoon && Featured} +
+
+ {listing.domain} + {isTycoon && Featured} {!listing.is_verified && Unverified} -
-
-
${listing.asking_price?.toLocaleString() || '—'}
-
+
+
+
${listing.asking_price?.toLocaleString() || '—'}
+
{listing.status} -
-
{listing.view_count}
-
{listing.inquiry_count}
+ )}>{listing.status} +
+
{listing.view_count}
+
{listing.inquiry_count}
{isDraft && needsVerification && ( )} {isActive && ( - - - + + + )} {isActive && ( -
-
-
+ +
+ + ) } @@ -637,7 +637,7 @@ function MarkSoldModal({ listing, onClose, onDone }: { listing: Listing; onClose
Mark Sold

{listing.domain}

Close the deal and capture GMV (optional).

- + @@ -658,7 +658,7 @@ function MarkSoldModal({ listing, onClose, onDone }: { listing: Listing; onClose - +
@@ -877,7 +877,7 @@ function LeadsModal({ listing, onClose }: { listing: Listing; onClose: () => voi > {updatingId === inq.id ? : } Read - + )}
+ {closingId === inq.id && (
@@ -955,14 +955,14 @@ function LeadsModal({ listing, onClose }: { listing: Listing; onClose: () => voi > {updatingId === inq.id ? 'Closing…' : 'Confirm'} -
- + + )} + + ))} - ))} - - + )} {/* THREAD MODAL (nested) */} @@ -989,7 +989,7 @@ function LeadsModal({ listing, onClose }: { listing: Listing; onClose: () => voi {loadingThread ? (
-
+ ) : threadMessages.length === 0 ? (
No messages yet.
) : ( @@ -1004,7 +1004,7 @@ function LeadsModal({ listing, onClose }: { listing: Listing; onClose: () => voi
{m.sender_user_id === user?.id ? 'You' : 'Buyer'} {new Date(m.created_at).toLocaleString('en-US')} -
+
{m.body}
)) @@ -1162,7 +1162,7 @@ function CreateListingWizard({ onClose, onSuccess, prefillDomain }: {
New Listing -
+
{/* Step Indicators */}
@@ -1199,12 +1199,12 @@ function CreateListingWizard({ onClose, onSuccess, prefillDomain }: {

Step 1 of 3: Set your domain and price

-
+
{loadingDomains ? (
-
+
) : portfolioDomains.length === 0 ? (
@@ -1230,7 +1230,7 @@ function CreateListingWizard({ onClose, onSuccess, prefillDomain }: {

-
+
-
+
{priceType === 'fixed' && ( @@ -1272,8 +1272,8 @@ function CreateListingWizard({ onClose, onSuccess, prefillDomain }: { className="w-full py-3 bg-accent text-black text-xs font-bold uppercase tracking-wider flex items-center justify-center gap-2 disabled:opacity-50 hover:bg-white transition-colors" > {loading ? : <>Next: Verify Ownership } - -
+ +
)} {/* STEP 2: DNS Verification */} diff --git a/frontend/src/app/terminal/portfolio/page.tsx b/frontend/src/app/terminal/portfolio/page.tsx index 70eabea..a766267 100755 --- a/frontend/src/app/terminal/portfolio/page.tsx +++ b/frontend/src/app/terminal/portfolio/page.tsx @@ -188,7 +188,7 @@ function EditModal({ setSaving(false) } } - + return (
Edit Domain -
+

{domain.domain}

- + @@ -363,8 +363,8 @@ function EditModal({ className="w-full px-3 py-2 bg-white/5 border border-white/10 text-white text-sm font-mono focus:border-accent/50 focus:outline-none" /> - - )} + + )} {/* Actions */} @@ -781,7 +781,7 @@ export default function PortfolioPage() { setHealthByDomain(prev => ({ ...prev, [key]: report })) } catch { // Silently fail for individual domains - } finally { + } finally { setCheckingHealth(prev => { const next = new Set(prev) next.delete(key) @@ -1077,8 +1077,8 @@ export default function PortfolioPage() { Add - - + + {/* Tab Bar - Scrollable */}
@@ -1124,18 +1124,18 @@ export default function PortfolioPage() {
Portfolio Manager -
+

My Portfolio

Track your domain investments. Add purchase details, monitor values, verify ownership, and list for sale. -

-
- +

+
+ {/* TABS - Directly under subtitle */}
- +
- - + +
{formatCurrency(summary?.total_invested || 0)}
Invested
-
+
{formatCurrency(summary?.total_value || 0)}
Value
@@ -1247,7 +1247,7 @@ export default function PortfolioPage() { > Refresh -
+ ) : ( <> {/* Summary Cards */} @@ -1256,7 +1256,7 @@ export default function PortfolioPage() {
Next 30 Days -
+
${Math.round(cfoData.upcoming_30d_total_usd)}
{cfoData.upcoming_30d_rows.length} renewals due
@@ -1299,8 +1299,8 @@ export default function PortfolioPage() { ))} - - )} + + )} {/* Burn Rate Timeline */} @@ -1315,7 +1315,7 @@ export default function PortfolioPage() {
- If a renewal cost is missing, fill it in on the domain in Assets → Edit.
- "Set to Drop" is a local flag — you still need to disable auto-renew at your registrar.
- Want to cover costs? Activate Yield only for DNS‑verified domains.
- + )} @@ -1325,23 +1325,23 @@ export default function PortfolioPage() { {/* ASSETS TAB (Domain List) */} {activeTab === 'assets' && ( <> - {loading ? ( -
+ {loading ? ( +
-
+
) : !filteredDomains.length ? (

No domains found

Add your first domain to start tracking

- -
- ) : ( + + + ) : (
{/* Desktop Table Header */}
@@ -1386,12 +1386,12 @@ export default function PortfolioPage() {
{/* Domain */}
-
+ )}> {domain.is_sold ? : } -
+
{domain.domain}
@@ -1404,7 +1404,7 @@ export default function PortfolioPage() { Verify )} -
+
@@ -1422,18 +1422,18 @@ export default function PortfolioPage() { +{tags.length - 2} )}
- )} - + )} + {/* Purchased */}
{formatShortDate(domain.purchase_date)}
{formatCurrency(domain.purchase_price)}
-
+ {/* Expires */}
- {domain.is_sold ? ( + {domain.is_sold ? (
Sold
) : ( <> @@ -1445,7 +1445,7 @@ export default function PortfolioPage() {
{formatShortDate(domain.renewal_date)}
- )} + )} {/* Value */} @@ -1457,7 +1457,7 @@ export default function PortfolioPage() {
{formatROI(domain.roi)} -
+
{/* Yield */} @@ -1502,7 +1502,7 @@ export default function PortfolioPage() { > - )} + )} - + {/* MOBILE ROW */}
@@ -1527,7 +1527,7 @@ export default function PortfolioPage() { domain.is_sold ? "bg-white/[0.02] border-white/[0.06]" : "bg-accent/10 border-accent/20" )}> {domain.is_sold ? : } -
+
{domain.domain}
@@ -1535,16 +1535,16 @@ export default function PortfolioPage() { {domain.registrar} )} {renderStatusBadges(domain)} -
-
- + + +
{formatCurrency(domain.estimated_value)}
{formatROI(domain.roi)} -
-
- + + + {/* Quick info row */}
@@ -1557,42 +1557,42 @@ export default function PortfolioPage() { )}
- - - + + + {/* Expanded details */} {isExpanded && (
-
+
Purchased
{formatDate(domain.purchase_date)}
{formatCurrency(domain.purchase_price)}
-
-
+
+
Renewal
{formatDate(domain.renewal_date)}
{formatCurrency(domain.renewal_cost)}/yr
-
-
- +
+
+ {domain.notes && (
Notes
{domain.notes}
-
+ )} - + {/* Actions */}
{renderHealth(domain)} - + {!domain.is_dns_verified && !domain.is_sold && ( - -
- + + + )} ) })} - - )} + + )} )} @@ -1673,7 +1673,7 @@ export default function PortfolioPage() { Menu - + {/* NAVIGATION DRAWER */} @@ -1688,7 +1688,7 @@ export default function PortfolioPage() { - +
{drawerNavSections.map(section => (
@@ -1708,21 +1708,21 @@ export default function PortfolioPage() { {item.label} ))} -
+
))} - + {user && (
-
-
+
+
{user.email?.split('@')[0]}
{tierName}
-
-
+
+
Settings @@ -1776,7 +1776,7 @@ export default function PortfolioPage() {
Health Check

{selectedHealthDomain.domain}

- + ) })()} - - - )} + + + )} {toast && } diff --git a/frontend/src/components/Footer.tsx b/frontend/src/components/Footer.tsx index 2d1e492..7bbb8db 100644 --- a/frontend/src/components/Footer.tsx +++ b/frontend/src/components/Footer.tsx @@ -66,7 +66,7 @@ export function Footer() {

- Global domain intelligence for serious investors. Scan. Acquire. Route. Yield. + High-density domain intelligence for serious investors. Scan. Track. Trade.

{/* Newsletter - Hidden on Mobile */} @@ -144,7 +144,7 @@ export function Footer() { {[ { href: '/acquire', label: 'Acquire' }, { href: '/discover', label: 'Discover' }, - { href: '/yield', label: 'Yield' }, + { href: '/intelligence', label: 'Intel' }, { href: '/pricing', label: 'Pricing' }, ].map((link) => (
  • diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx index 4f4562a..cc593c9 100644 --- a/frontend/src/components/Header.tsx +++ b/frontend/src/components/Header.tsx @@ -35,7 +35,7 @@ export function Header() { const publicNavItems = [ { href: '/discover', label: 'Discover', icon: TrendingUp }, { href: '/acquire', label: 'Acquire', icon: Gavel }, - { href: '/yield', label: 'Yield', icon: Coins }, + { href: '/intelligence', label: 'Intel', icon: TrendingUp }, { href: '/pricing', label: 'Pricing', icon: CreditCard }, ]