From 7578d78568f68cf89d2b3ddd31011f158b447738 Mon Sep 17 00:00:00 2001
From: "yves.gugger"
Date: Wed, 10 Dec 2025 14:51:49 +0100
Subject: [PATCH] refactor: Remove emojis + Add Portfolio to Landing Page
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
EMOJI REMOVAL:
- Replaced 🟢🟡🔴 emojis with CSS circles (bg-accent, bg-amber-400, bg-red-400)
- Updated TLD Pricing pages (public + command)
- Updated Landing Page feature pills
- Updated Admin panel feature checklist
PORTFOLIO FEATURE:
- Added 'Portfolio Health' section to Landing Page under 'Beyond Hunting'
- Highlights: SSL Monitor, Expiry Alerts, Valuation, P&L Tracking
- Links to /command/portfolio
- Uses 'Your Domain Insurance' tagline
Portfolio Status:
- Public Page: N/A (personal feature, no public page needed)
- Command Center: ✅ Fully implemented with Add/Edit/Sell/Valuation
- Admin Panel: ✅ Stats visible in Overview
- Landing Page: ✅ Now advertised in 'Beyond Hunting' section
---
frontend/src/app/admin/page.tsx | 96 +++++-----
frontend/src/app/auctions/page.tsx | 178 +++++++++----------
frontend/src/app/command/auctions/page.tsx | 18 +-
frontend/src/app/command/pricing/page.tsx | 9 +-
frontend/src/app/page.tsx | 195 ++++++++++++---------
frontend/src/app/tld-pricing/page.tsx | 33 ++--
frontend/src/components/Sidebar.tsx | 44 ++---
7 files changed, 307 insertions(+), 266 deletions(-)
diff --git a/frontend/src/app/admin/page.tsx b/frontend/src/app/admin/page.tsx
index d5f13c8..0ff6eac 100644
--- a/frontend/src/app/admin/page.tsx
+++ b/frontend/src/app/admin/page.tsx
@@ -447,11 +447,11 @@ export default function AdminPage() {
{item.ok ? : }
{item.text}
-
+
))}
-
-
+
+
@@ -473,8 +473,8 @@ export default function AdminPage() {
{auctionScraping ? : }
{auctionScraping ? 'Scraping...' : 'Scrape Auctions'}
-
-
+
+
{schedulerStatus && (
@@ -484,24 +484,24 @@ export default function AdminPage() {
{job.name}
{job.trigger}
-
+
))}
-
-
+
+
)}
)}
- {/* Auctions Tab */}
- {activeTab === 'auctions' && (
+ {/* Auctions Tab */}
+ {activeTab === 'auctions' && (
{/* Auction Stats */}
Total Auctions
{stats?.auctions.toLocaleString() || 0}
-
+
Platforms
4
@@ -521,33 +521,33 @@ export default function AdminPage() {
? 'Recently'
: 'Unknown'}
-
-
+
+
{/* Auction Scraping Actions */}
Auction Management
-
+ >
{auctionScraping ? : }
{auctionScraping ? 'Scraping...' : 'Scrape All Platforms'}
Export Auctions
-
+
+
-
{/* Platform Status */}
Platform Status
- {['GoDaddy', 'Sedo', 'NameJet', 'DropCatch'].map((platform) => (
+ {['GoDaddy', 'Sedo', 'NameJet', 'DropCatch'].map((platform) => (
@@ -558,11 +558,11 @@ export default function AdminPage() {
Active
-
-
- ))}
+
+
+ ))}
+
-
{/* Vanity Filter Info */}
@@ -580,12 +580,12 @@ export default function AdminPage() {
{item.rule}
{item.desc}
+
+ ))}
- ))}
-
-
-
- )}
+
+
+ )}
{/* Alerts Tab */}
{activeTab === 'alerts' && (
@@ -627,11 +627,11 @@ export default function AdminPage() {
Unique TLDs
{stats?.tld_data?.unique_tlds?.toLocaleString() || 0}
-
+
Price Records
{stats?.tld_data?.price_records?.toLocaleString() || 0}
-
+
Active Price Alerts
{stats?.price_alerts || 0}
@@ -640,27 +640,27 @@ export default function AdminPage() {
Renewal Traps
~40%
Have >2x renewal
-
+
{/* TLD Scraping Actions */}
TLD Price Management
-
{scraping ? : }
{scraping ? 'Scraping...' : 'Scrape All Registrars'}
-
+
Export Price Data
-
-
-
+
+
+
{/* New Features from analysis_4.md */}
@@ -672,7 +672,7 @@ export default function AdminPage() {
{[
{ feature: 'Renewal Trap Detection', status: '✅', desc: 'Warns when renewal >2x registration' },
{ feature: '1y/3y Trend Tracking', status: '✅', desc: 'Shows price changes over time' },
- { feature: 'Risk Level Badges', status: '✅', desc: '🟢 Low, 🟡 Medium, 🔴 High' },
+ { feature: 'Risk Level Badges', status: '✅', desc: 'Low, Medium, High indicators' },
{ feature: 'Category Tabs', status: '✅', desc: 'Tech, Geo, Budget, Premium' },
{ feature: 'Sparkline Charts', status: '✅', desc: 'Visual trend indicators' },
{ feature: 'Blur for Free Users', status: '✅', desc: 'First 5 rows visible' },
@@ -681,11 +681,11 @@ export default function AdminPage() {
{item.status}
{item.feature}
-
+
{item.desc}
))}
-
+
{/* Data Sources */}
@@ -697,19 +697,19 @@ export default function AdminPage() {
{registrar}
-
+
Active
-
-
- ))}
-
-
- )}
+
+ ))}
+
+
+
+ )}
{activeTab === 'blog' && (
diff --git a/frontend/src/app/auctions/page.tsx b/frontend/src/app/auctions/page.tsx
index ff42f74..543e062 100644
--- a/frontend/src/app/auctions/page.tsx
+++ b/frontend/src/app/auctions/page.tsx
@@ -311,7 +311,7 @@ export default function AuctionsPage() {
target="_blank"
rel="noopener noreferrer"
className="p-4 sm:p-5 bg-background-secondary/50 border border-border rounded-xl hover:border-border-hover hover:bg-background-secondary transition-all duration-300 text-left group"
- >
+ >
{auction.domain}
@@ -410,51 +410,51 @@ export default function AuctionsPage() {
)}>{tab.count}
))}
-
+
{/* Auctions Table */}
-
-
-
-
-
-
-
+
+
+
+
+
+ handleSort('domain')}
- className="flex items-center gap-2 text-ui-sm text-foreground-subtle font-medium hover:text-foreground transition-colors"
- >
- Domain
+ className="flex items-center gap-2 text-ui-sm text-foreground-subtle font-medium hover:text-foreground transition-colors"
+ >
+ Domain
-
-
-
- Platform
-
-
-
+
+
+ Platform
+
+
+ handleSort('bid')}
- className="flex items-center gap-2 ml-auto text-ui-sm text-foreground-subtle font-medium hover:text-foreground transition-colors"
- >
+ className="flex items-center gap-2 ml-auto text-ui-sm text-foreground-subtle font-medium hover:text-foreground transition-colors"
+ >
Current Bid
-
-
+
+
Deal Score
{!isAuthenticated && }
-
- handleSort('bids')}
- className="flex items-center gap-2 ml-auto text-ui-sm text-foreground-subtle font-medium hover:text-foreground transition-colors"
- >
- Bids
+
+ handleSort('bids')}
+ className="flex items-center gap-2 ml-auto text-ui-sm text-foreground-subtle font-medium hover:text-foreground transition-colors"
+ >
+ Bids
-
-
-
+
+
+
handleSort('ending')}
className="flex items-center gap-2 ml-auto text-ui-sm text-foreground-subtle font-medium hover:text-foreground transition-colors"
@@ -462,11 +462,11 @@ export default function AuctionsPage() {
Time Left
-
-
-
-
-
+
+
+
+
+
{loading ? (
// Loading skeleton
Array.from({ length: 10 }).map((_, idx) => (
@@ -484,45 +484,45 @@ export default function AuctionsPage() {
{searchQuery ? `No auctions found matching "${searchQuery}"` : 'No auctions found'}
-
-
- ) : (
+
+
+ ) : (
sortedAuctions.map((auction) => (
-
-
+ className="hover:bg-background-secondary/50 transition-colors group"
+ >
+
-
-
+
+
+
+
- {auction.age_years && (
+ {auction.age_years && (
{auction.age_years}y
-
- )}
-
-
-
+
+ )}
+
+
+
- {formatCurrency(auction.current_bid)}
-
- {auction.buy_now_price && (
+ {formatCurrency(auction.current_bid)}
+
+ {auction.buy_now_price && (
Buy: {formatCurrency(auction.buy_now_price)}
)}
@@ -552,40 +552,40 @@ export default function AuctionsPage() {
>
- )}
-
-
+ )}
+
+
= 20 ? "text-accent" : auction.num_bids >= 10 ? "text-amber-400" : "text-foreground-muted"
)}>
- {auction.num_bids}
- {auction.num_bids >= 20 && }
-
-
-
+ {auction.num_bids}
+ {auction.num_bids >= 20 && }
+
+
+
- {auction.time_remaining}
-
-
+ {auction.time_remaining}
+
+
-
- Bid
+ >
+ Bid
-
-
-
+
+
+
))
- )}
-
-
+ )}
+
+
+
-
{/* Stats */}
{!loading && (
diff --git a/frontend/src/app/command/auctions/page.tsx b/frontend/src/app/command/auctions/page.tsx
index acb4905..d154d66 100644
--- a/frontend/src/app/command/auctions/page.tsx
+++ b/frontend/src/app/command/auctions/page.tsx
@@ -658,15 +658,15 @@ export default function AuctionsPage() {
)}
{/* Bid Button */}
-
- Bid
-
+
+ Bid
+
),
},
diff --git a/frontend/src/app/command/pricing/page.tsx b/frontend/src/app/command/pricing/page.tsx
index 800d4f0..f0524ae 100755
--- a/frontend/src/app/command/pricing/page.tsx
+++ b/frontend/src/app/command/pricing/page.tsx
@@ -201,9 +201,12 @@ export default function TLDPricingPage() {
level === 'medium' && "bg-amber-500/10 text-amber-400",
level === 'low' && "bg-accent/10 text-accent"
)}>
- {level === 'high' && '🔴'}
- {level === 'medium' && '🟡'}
- {level === 'low' && '🟢'}
+
{reason}
)
diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx
index 6108322..65bba52 100644
--- a/frontend/src/app/page.tsx
+++ b/frontend/src/app/page.tsx
@@ -31,9 +31,8 @@ import {
Filter,
Crosshair,
Tag,
+ AlertTriangle,
Briefcase,
- DollarSign,
- Calendar,
} from 'lucide-react'
import Link from 'next/link'
import clsx from 'clsx'
@@ -329,7 +328,7 @@ export default function HomePage() {
- 🟢🟡🟠🔴 Health status alerts
+ Real-time health status alerts
@@ -404,140 +403,162 @@ export default function HomePage() {
-
+
{/* For Sale Marketplace */}
-
{/* Corner accent */}
-
+
-
-
-
+
+
+
-
Marketplace
-
Buy & Sell
+
Sell Your Domains
+
Marketplace
-
- Create "For Sale" pages with one click.
- DNS verification proves ownership.
+
+ Create professional "For Sale" landing pages with one click.
+ DNS verification proves ownership.
+ Buyers contact you directly through Pounce.
-
-
-
+
+
+
+
+
Verified Owner badge
-
-
+
+
+
+
Pounce Score valuation
-
-
+
+
+
+
Secure contact form
Browse Marketplace
-
+
{/* Sniper Alerts */}
-
{/* Decorative element */}
-
-
-
+
+
+
-
Sniper Alerts
-
Hyper-Personalized
+
Sniper Alerts
+
Hyper-Personalized
-
+
Ultra-specific filters that notify you exactly when matching domains appear.
+ "4-letter .com under $500 without numbers" — we've got you.
-
-
-
- Custom TLD, length, price
+
+
+
+
+
+ Custom TLD, length, price filters
-
-
+
+
+
+
Email & SMS alerts
-
-
- Real-time matching
+
+
+
+
+ Real-time auction matching
Set Up Alerts
-
+
+
- {/* Portfolio Management */}
-
- {/* Corner accent */}
-
-
-
-
-
-
-
-
-
Portfolio
-
Asset Tracking
+ {/* Portfolio Management - Full Width Below */}
+
+
+
+
+
+
+
+
+
+
Portfolio Health
+
Your Domain Insurance
+
+
+ Import your domains and let Pounce monitor them 24/7.
+ SSL expiry ,
+ renewal reminders ,
+ uptime checks , and
+ P&L tracking — all in one place.
+ Never miss a renewal again.
+
+
+
+
+
+
+ SSL Monitor
+
+
+
+ Expiry Alerts
+
+
+
+ Valuation
+
+
+
+ Manage Portfolio
+
+
-
- Track your domains, costs, and ROI. Never miss a renewal . Your domain business, organized.
-
-
-
-
- Purchase & sale tracking
-
-
-
- Renewal reminders
-
-
-
- P&L & valuations
-
-
-
- Manage Portfolio
-
-
@@ -563,8 +584,18 @@ export default function HomePage() {
Don't fall for $0.99 promos. We show renewal costs, price trends, and renewal traps across 886+ TLDs.
-
⚠️ Trap Detection
-
🟢🟡🔴 Risk Levels
+
+
+ Trap Detection
+
+
+
+
+
+
+
+ Risk Levels
+
Renewal Trap Detection
-
🟢🟡🔴
+
+
+
+
+
Risk Levels
@@ -321,21 +325,21 @@ export default function TldPricingPage() {
-
-
+
+
Stop overpaying. Know the true costs.
Unlock renewal traps, 1y/3y trends, and risk analysis for {pagination.total}+ TLDs.
-
-
+
-
+
+ >
Start Free
-
+
)}
@@ -587,12 +591,15 @@ export default function TldPricingPage() {
tld.risk_level === 'medium' && "bg-amber-500/10 text-amber-400",
tld.risk_level === 'low' && "bg-accent/10 text-accent"
)}>
- {tld.risk_level === 'high' && '🔴'}
- {tld.risk_level === 'medium' && '🟡'}
- {tld.risk_level === 'low' && '🟢'}
+
) : (
-
🟢
+
)}
diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx
index 720cf2c..cb8e9d7 100755
--- a/frontend/src/components/Sidebar.tsx
+++ b/frontend/src/components/Sidebar.tsx
@@ -206,42 +206,42 @@ export function Sidebar({ collapsed: controlledCollapsed, onCollapsedChange }: S
{discoverItems.map((item) => (
-
setMobileOpen(false)}
- className={clsx(
+
setMobileOpen(false)}
+ className={clsx(
"group relative flex items-center gap-3 px-3 py-3 rounded-xl transition-all duration-300",
- isActive(item.href)
+ isActive(item.href)
? "bg-gradient-to-r from-accent/20 to-accent/5 text-foreground border border-accent/20 shadow-[0_0_20px_-5px_rgba(16,185,129,0.2)]"
: "text-foreground-muted hover:text-foreground hover:bg-foreground/5 border border-transparent"
- )}
- title={collapsed ? item.label : undefined}
- >
+ )}
+ title={collapsed ? item.label : undefined}
+ >
{isActive(item.href) && (
)}
-
-
+
-
- {!collapsed && (
-
- {item.label}
-
- )}
+
+ {!collapsed && (
+
+ {item.label}
+
+ )}
{!isActive(item.href) && (
)}
-
- ))}
+
+ ))}