feat: Complete Tone of Voice overhaul - The Hunter's Voice
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

🎯 BRAND VOICE: Swift, Sharp, Strategic, Confident

LANDING PAGE:
- Hero: 'Others wait. You pounce.'
- Features: Active, punchy descriptions
- Pricing: 'Pick your weapon.'
- CTAs: 'Hunt Free', 'Start Trading', 'Go Tycoon'

PRICING PAGE:
- Scout: 'Test the waters. Zero risk.'
- Trader: 'Hunt with precision.'
- Tycoon: 'Dominate the market.'

AUTH PAGES:
- Login: 'Back to the hunt.'
- Register: 'Join the hunt.'
- Benefits: 'Your hunting gear. Ready to go.'

EMAIL TEMPLATES:
- Domain Available: 'Time to pounce. [domain] just dropped'
- Price Alert: '.tld just moved.'
- Weekly Digest: 'Your week in domains.'
- Subscription: 'You're in. [Plan] unlocked.'

DASHBOARD:
- Title: 'Command Center'
- Empty State: 'No targets yet'

TLD PAGES:
- Headline: '886+ TLDs. Live Prices.'
- Section: 'Moving Now' instead of 'Trending'

CONTACT & ABOUT:
- About: 'Built for hunters. By hunters.'
- Mission: 'Level the playing field.'
- Contact: 'Let's Talk' - direct, confident

All text now follows the hunter metaphor with:
- Active verbs (Track, Hunt, Pounce, Grab)
- Urgency without panic
- Confident statements
- Data as proof
- Short, punchy sentences
This commit is contained in:
yves.gugger
2025-12-08 16:38:41 +01:00
parent df4d87a643
commit fde4f23663
10 changed files with 184 additions and 186 deletions

View File

@ -167,39 +167,39 @@ BASE_TEMPLATE = """
# Email Templates (content only, wrapped in BASE_TEMPLATE) # Email Templates (content only, wrapped in BASE_TEMPLATE)
TEMPLATES = { TEMPLATES = {
"domain_available": """ "domain_available": """
<h1>Domain Available!</h1> <h1>Time to pounce.</h1>
<p>Great news! A domain you're monitoring is now available for registration:</p> <p>A domain you're tracking just dropped:</p>
<div class="highlight">{{ domain }}</div> <div class="highlight">{{ domain }}</div>
<p>This domain was previously registered but has now expired or been deleted. Act fast before someone else registers it!</p> <p>It's available right now. Move fast—others are watching too.</p>
<a href="{{ register_url }}" class="cta">Register Now →</a> <a href="{{ register_url }}" class="cta">Grab It Now →</a>
<p style="margin-top: 24px; color: #888; font-size: 14px;"> <p style="margin-top: 24px; color: #888; font-size: 14px;">
You're receiving this because you're monitoring this domain on pounce. You're tracking this domain on POUNCE.
</p> </p>
""", """,
"price_alert": """ "price_alert": """
<h1>Price Alert: <span style="color: #00d4aa;">.{{ tld }}</span></h1> <h1>.{{ tld }} just moved.</h1>
<p style="font-size: 20px;"> <p style="font-size: 20px;">
{% if change_percent < 0 %} {% if change_percent < 0 %}
<span class="decrease">↓ Price dropped {{ change_percent|abs }}%</span> <span class="decrease">↓ Down {{ change_percent|abs }}%</span>
{% else %} {% else %}
<span class="increase">↑ Price increased {{ change_percent }}%</span> <span class="increase">↑ Up {{ change_percent }}%</span>
{% endif %} {% endif %}
</p> </p>
<div class="info-box"> <div class="info-box">
<p><strong>Old price:</strong> ${{ old_price }}</p> <p><strong>Was:</strong> ${{ old_price }}</p>
<p><strong>New price:</strong> ${{ new_price }}</p> <p><strong>Now:</strong> ${{ new_price }}</p>
<p><strong>Cheapest registrar:</strong> {{ registrar }}</p> <p><strong>Cheapest at:</strong> {{ registrar }}</p>
</div> </div>
<a href="{{ tld_url }}" class="cta">View Details →</a> <a href="{{ tld_url }}" class="cta">See Details →</a>
<p style="margin-top: 24px; color: #888; font-size: 14px;"> <p style="margin-top: 24px; color: #888; font-size: 14px;">
You're receiving this because you set a price alert for .{{ tld }} on pounce. You set an alert for .{{ tld }} on POUNCE.
</p> </p>
""", """,
"subscription_confirmed": """ "subscription_confirmed": """
<h1>Welcome to {{ plan_name }}!</h1> <h1>You're in. {{ plan_name }} unlocked.</h1>
<p>Your subscription is now active. Here's what you can do:</p> <p>Your hunting arsenal just upgraded:</p>
<div class="info-box"> <div class="info-box">
<ul> <ul>
{% for feature in features %} {% for feature in features %}
@ -207,18 +207,18 @@ TEMPLATES = {
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>
<a href="{{ dashboard_url }}" class="cta">Go to Dashboard →</a> <a href="{{ dashboard_url }}" class="cta">Start Hunting →</a>
<p style="margin-top: 24px; color: #888; font-size: 14px;"> <p style="margin-top: 24px; color: #888; font-size: 14px;">
Questions? Reply to this email or contact support@pounce.ch Questions? Just reply to this email.
</p> </p>
""", """,
"weekly_digest": """ "weekly_digest": """
<h1>Your Weekly Digest</h1> <h1>Your week in domains.</h1>
<p>Here's what happened with your monitored domains this week:</p> <p>Here's what moved while you were busy:</p>
<div class="stat"> <div class="stat">
<span>Domains Monitored</span> <span>Domains Tracked</span>
<span class="stat-value">{{ total_domains }}</span> <span class="stat-value">{{ total_domains }}</span>
</div> </div>
<div class="stat"> <div class="stat">
@ -226,12 +226,12 @@ TEMPLATES = {
<span class="stat-value">{{ status_changes }}</span> <span class="stat-value">{{ status_changes }}</span>
</div> </div>
<div class="stat"> <div class="stat">
<span>Price Alerts</span> <span>Price Moves</span>
<span class="stat-value">{{ price_alerts }}</span> <span class="stat-value">{{ price_alerts }}</span>
</div> </div>
{% if available_domains %} {% if available_domains %}
<h2>Domains Now Available</h2> <h2>Dropped This Week</h2>
<div class="info-box"> <div class="info-box">
{% for domain in available_domains %} {% for domain in available_domains %}
<p class="highlight" style="margin: 8px 0;">{{ domain }}</p> <p class="highlight" style="margin: 8px 0;">{{ domain }}</p>
@ -243,38 +243,37 @@ TEMPLATES = {
""", """,
"password_reset": """ "password_reset": """
<h1>Reset Your Password</h1> <h1>Reset your password.</h1>
<p>Hi {{ user_name }},</p> <p>Hey {{ user_name }},</p>
<p>We received a request to reset your password. Click the button below to set a new password:</p> <p>Someone requested a password reset. If that was you, click below:</p>
<a href="{{ reset_url }}" class="cta">Reset Password →</a> <a href="{{ reset_url }}" class="cta">Reset Password →</a>
<p style="margin-top: 24px;">Or copy and paste this link into your browser:</p> <p style="margin-top: 24px;">Or copy this link:</p>
<code style="word-break: break-all;">{{ reset_url }}</code> <code style="word-break: break-all;">{{ reset_url }}</code>
<div class="info-box" style="margin-top: 24px;"> <div class="info-box" style="margin-top: 24px;">
<p class="warning" style="margin: 0;">⚠️ This link expires in 1 hour.</p> <p class="warning" style="margin: 0;">Link expires in 1 hour.</p>
</div> </div>
<p style="margin-top: 24px; color: #888; font-size: 14px;"> <p style="margin-top: 24px; color: #888; font-size: 14px;">
If you didn't request a password reset, you can safely ignore this email. Didn't request this? Ignore it. Nothing changes.
Your password won't be changed.
</p> </p>
""", """,
"email_verification": """ "email_verification": """
<h1>Verify Your Email</h1> <h1>One click to start hunting.</h1>
<p>Hi {{ user_name }},</p> <p>Hey {{ user_name }},</p>
<p>Welcome to pounce! Please verify your email address to activate your account:</p> <p>Welcome to POUNCE. Verify your email to activate your account:</p>
<a href="{{ verification_url }}" class="cta">Verify Email →</a> <a href="{{ verification_url }}" class="cta">Verify & Start →</a>
<p style="margin-top: 24px;">Or copy and paste this link into your browser:</p> <p style="margin-top: 24px;">Or copy this link:</p>
<code style="word-break: break-all;">{{ verification_url }}</code> <code style="word-break: break-all;">{{ verification_url }}</code>
<div class="info-box" style="margin-top: 24px;"> <div class="info-box" style="margin-top: 24px;">
<p style="margin: 0;">This link expires in 24 hours.</p> <p style="margin: 0;">Link expires in 24 hours.</p>
</div> </div>
<p style="margin-top: 24px; color: #888; font-size: 14px;"> <p style="margin-top: 24px; color: #888; font-size: 14px;">
If you didn't create an account on pounce, you can safely ignore this email. Didn't sign up? Just ignore this.
</p> </p>
""", """,
"contact_form": """ "contact_form": """
<h1>New Contact Form Submission</h1> <h1>New message from the wild.</h1>
<div class="info-box"> <div class="info-box">
<p><strong>From:</strong> {{ name }} &lt;{{ email }}&gt;</p> <p><strong>From:</strong> {{ name }} &lt;{{ email }}&gt;</p>
<p><strong>Subject:</strong> {{ subject }}</p> <p><strong>Subject:</strong> {{ subject }}</p>
@ -285,39 +284,39 @@ TEMPLATES = {
<p style="white-space: pre-wrap;">{{ message }}</p> <p style="white-space: pre-wrap;">{{ message }}</p>
</div> </div>
<p style="margin-top: 24px;"> <p style="margin-top: 24px;">
<a href="mailto:{{ email }}" class="cta">Reply to {{ name }} →</a> <a href="mailto:{{ email }}" class="cta">Reply →</a>
</p> </p>
""", """,
"contact_confirmation": """ "contact_confirmation": """
<h1>We've Received Your Message</h1> <h1>Got it.</h1>
<p>Hi {{ name }},</p> <p>Hey {{ name }},</p>
<p>Thank you for contacting pounce! We've received your message and will get back to you as soon as possible.</p> <p>Your message landed. We'll get back to you soon.</p>
<div class="info-box"> <div class="info-box">
<p><strong>Subject:</strong> {{ subject }}</p> <p><strong>Subject:</strong> {{ subject }}</p>
<p><strong>Your message:</strong></p> <p><strong>Your message:</strong></p>
<p style="white-space: pre-wrap; color: #888;">{{ message }}</p> <p style="white-space: pre-wrap; color: #888;">{{ message }}</p>
</div> </div>
<p>We typically respond within 24-48 hours during business days.</p> <p>Expect a reply within 24-48 hours.</p>
<a href="https://pounce.ch" class="secondary-cta">Back to pounce →</a> <a href="https://pounce.ch" class="secondary-cta">Back to POUNCE →</a>
""", """,
"newsletter_welcome": """ "newsletter_welcome": """
<h1>Welcome to pounce Insights!</h1> <h1>You're on the list.</h1>
<p>Hi there,</p> <p>Welcome to POUNCE Insights.</p>
<p>You're now subscribed to our newsletter. Here's what you can expect:</p> <p>Here's what you'll get:</p>
<div class="info-box"> <div class="info-box">
<ul> <ul>
<li>TLD market trends and analysis</li> <li>TLD market moves & analysis</li>
<li>Domain investing tips and strategies</li> <li>Domain investing strategies</li>
<li>New feature announcements</li> <li>New feature drops</li>
<li>Exclusive deals and discounts</li> <li>Exclusive deals</li>
</ul> </ul>
</div> </div>
<p>We typically send 1-2 emails per month. No spam, ever.</p> <p>1-2 emails per month. No spam. Ever.</p>
<a href="https://pounce.ch" class="cta">Explore pounce →</a> <a href="https://pounce.ch" class="cta">Start Exploring →</a>
<p style="margin-top: 24px; color: #888; font-size: 14px;"> <p style="margin-top: 24px; color: #888; font-size: 14px;">
You can unsubscribe at any time by clicking the link at the bottom of any email. Unsubscribe anytime with one click.
</p> </p>
""", """,
} }
@ -437,9 +436,9 @@ class EmailService:
return await EmailService.send_email( return await EmailService.send_email(
to_email=to_email, to_email=to_email,
subject=f"🎉 Domain Available: {domain}", subject=f"🐆 POUNCE NOW: {domain} just dropped",
html_content=html, html_content=html,
text_content=f"Great news! {domain} is now available for registration. Visit {register_url} to register.", text_content=f"{domain} is available! Grab it now: {register_url}",
) )
@staticmethod @staticmethod
@ -463,12 +462,12 @@ class EmailService:
tld_url=f"https://pounce.ch/tld-pricing/{tld}", tld_url=f"https://pounce.ch/tld-pricing/{tld}",
) )
direction = "dropped" if change_percent < 0 else "increased" direction = "down" if change_percent < 0 else "up"
return await EmailService.send_email( return await EmailService.send_email(
to_email=to_email, to_email=to_email,
subject=f"📊 Price Alert: .{tld} {direction} {abs(change_percent)}%", subject=f"💰 .{tld} moved {direction} {abs(change_percent)}%",
html_content=html, html_content=html,
text_content=f".{tld} price {direction} from ${old_price:.2f} to ${new_price:.2f} at {registrar}.", text_content=f".{tld} is now ${new_price:.2f} (was ${old_price:.2f}) at {registrar}.",
) )
# ============== Subscription ============== # ============== Subscription ==============
@ -489,9 +488,9 @@ class EmailService:
return await EmailService.send_email( return await EmailService.send_email(
to_email=to_email, to_email=to_email,
subject=f"✅ Welcome to pounce {plan_name}!", subject=f"🎯 {plan_name} unlocked. Let's hunt.",
html_content=html, html_content=html,
text_content=f"Your {plan_name} subscription is now active. Visit https://pounce.ch/dashboard to get started.", text_content=f"Your {plan_name} plan is active. Start hunting: https://pounce.ch/dashboard",
) )
# ============== Digest ============== # ============== Digest ==============
@ -516,7 +515,7 @@ class EmailService:
return await EmailService.send_email( return await EmailService.send_email(
to_email=to_email, to_email=to_email,
subject="📬 Your pounce Weekly Digest", subject="📊 Your week in domains",
html_content=html, html_content=html,
text_content=f"This week: {total_domains} domains monitored, {status_changes} status changes, {price_alerts} price alerts.", text_content=f"This week: {total_domains} domains monitored, {status_changes} status changes, {price_alerts} price alerts.",
) )
@ -538,9 +537,9 @@ class EmailService:
return await EmailService.send_email( return await EmailService.send_email(
to_email=to_email, to_email=to_email,
subject="🔒 Reset Your pounce Password", subject="Reset your POUNCE password",
html_content=html, html_content=html,
text_content=f"Hi {user_name}, reset your password by visiting: {reset_url}. This link expires in 1 hour.", text_content=f"Reset your password: {reset_url} (expires in 1 hour)",
) )
@staticmethod @staticmethod
@ -558,9 +557,9 @@ class EmailService:
return await EmailService.send_email( return await EmailService.send_email(
to_email=to_email, to_email=to_email,
subject="✉️ Verify Your pounce Email", subject="Verify your email. Start hunting.",
html_content=html, html_content=html,
text_content=f"Hi {user_name}, verify your email by visiting: {verification_url}. This link expires in 24 hours.", text_content=f"Verify your POUNCE account: {verification_url}",
) )
# ============== Contact Form ============== # ============== Contact Form ==============
@ -605,9 +604,9 @@ class EmailService:
confirm_sent = await EmailService.send_email( confirm_sent = await EmailService.send_email(
to_email=email, to_email=email,
subject="We've received your message - pounce", subject="Got your message. We'll be in touch.",
html_content=confirm_html, html_content=confirm_html,
text_content=f"Hi {name}, we've received your message and will get back to you soon.", text_content=f"Hey {name}, we received your message. Expect a reply within 24-48 hours.",
) )
return support_sent # Return whether support email was sent return support_sent # Return whether support email was sent
@ -623,9 +622,9 @@ class EmailService:
return await EmailService.send_email( return await EmailService.send_email(
to_email=to_email, to_email=to_email,
subject="🎉 Welcome to pounce Insights!", subject="You're on the list. Welcome to POUNCE.",
html_content=html, html_content=html,
text_content="Welcome to pounce Insights! You'll receive TLD market trends, domain investing tips, and feature announcements.", text_content="Welcome to POUNCE Insights. Expect market moves, strategies, and feature drops. No spam.",
) )

View File

@ -9,47 +9,47 @@ const values = [
{ {
icon: Target, icon: Target,
title: 'Precision', title: 'Precision',
description: 'Every check, every alert, every data point is accurate and reliable.', description: 'Accurate data. No guesswork. Every check counts.',
}, },
{ {
icon: Shield, icon: Shield,
title: 'Privacy', title: 'Privacy',
description: 'Your domain strategy is confidential. We never share or sell your data.', description: 'Your strategy stays yours. We never share or sell data.',
}, },
{ {
icon: Zap, icon: Zap,
title: 'Speed', title: 'Speed',
description: 'Real-time monitoring ensures you never miss a domain opportunity.', description: 'Real-time intel. You see it first.',
}, },
{ {
icon: Users, icon: Users,
title: 'Transparency', title: 'Transparency',
description: 'Clear pricing, honest communication, no hidden fees or surprises.', description: 'Clear pricing. No surprises. Ever.',
}, },
] ]
const stats = [ const stats = [
{ value: '500K+', label: 'Domains Monitored' }, { value: '500K+', label: 'Domains Tracked' },
{ value: '99.9%', label: 'Uptime' }, { value: '99.9%', label: 'Uptime' },
{ value: '50ms', label: 'Avg Response Time' }, { value: '50ms', label: 'Response Time' },
{ value: '24/7', label: 'Monitoring' }, { value: '24/7', label: 'Always On' },
] ]
const team = [ const team = [
{ {
name: 'Domain Intelligence', name: 'Domain Intel',
role: 'Core Feature', role: 'Core',
description: 'Advanced WHOIS and RDAP queries for accurate availability detection.', description: 'WHOIS + RDAP queries. Accurate. Reliable. Always.',
}, },
{ {
name: 'Price Tracking', name: 'Price Tracking',
role: 'Market Insights', role: 'Market',
description: 'Real-time TLD pricing from major registrars worldwide.', description: 'Real-time TLD pricing. Know what domains cost.',
}, },
{ {
name: 'Instant Alerts', name: 'Instant Alerts',
role: 'Notifications', role: 'Notify',
description: 'Email and webhook notifications the moment domains become available.', description: 'Domain drops? You know first. Email or webhook.',
}, },
] ]
@ -72,13 +72,13 @@ export default function AboutPage() {
<span className="text-ui-sm text-foreground-muted">About pounce</span> <span className="text-ui-sm text-foreground-muted">About pounce</span>
</div> </div>
<h1 className="font-display text-[2.25rem] sm:text-[3rem] md:text-[3.75rem] leading-[1.1] tracking-[-0.035em] text-foreground mb-6"> <h1 className="font-display text-[2.25rem] sm:text-[3rem] md:text-[3.75rem] leading-[1.1] tracking-[-0.035em] text-foreground mb-6">
Domain intelligence, Built for hunters.
<br /> <br />
<span className="text-foreground-muted">simplified.</span> <span className="text-foreground-muted">By hunters.</span>
</h1> </h1>
<p className="text-body-lg text-foreground-muted max-w-2xl mx-auto"> <p className="text-body-lg text-foreground-muted max-w-2xl mx-auto">
We built pounce to give domain investors, businesses, and individuals POUNCE exists for one reason: to give you the edge.
the tools they need to secure high-value domains before anyone else. Track domains. See opportunities. Move first.
</p> </p>
</div> </div>
@ -101,13 +101,12 @@ export default function AboutPage() {
<section className="mb-20 animate-slide-up"> <section className="mb-20 animate-slide-up">
<div className="p-8 sm:p-10 bg-gradient-to-br from-accent/10 via-accent/5 to-transparent border border-accent/20 rounded-2xl"> <div className="p-8 sm:p-10 bg-gradient-to-br from-accent/10 via-accent/5 to-transparent border border-accent/20 rounded-2xl">
<h2 className="text-heading-sm sm:text-heading-md font-medium text-foreground mb-4"> <h2 className="text-heading-sm sm:text-heading-md font-medium text-foreground mb-4">
Our Mission The Mission
</h2> </h2>
<p className="text-body-lg text-foreground-muted leading-relaxed"> <p className="text-body-lg text-foreground-muted leading-relaxed">
To democratize domain intelligence. We believe everyone should have access to Level the playing field. Domain intel shouldn&apos;t be locked behind enterprise
professional-grade domain monitoring tools, not just large corporations with paywalls. With POUNCE, anyone can track domains, spot trends, and strike
expensive enterprise solutions. pounce makes it possible to track any domain, when the iron&apos;s hot. Simple tools. Powerful results.
understand market trends, and act fast when opportunities arise.
</p> </p>
</div> </div>
</section> </section>
@ -115,7 +114,7 @@ export default function AboutPage() {
{/* Values */} {/* Values */}
<section className="mb-20"> <section className="mb-20">
<h2 className="text-heading-sm sm:text-heading-md font-medium text-foreground mb-8 text-center"> <h2 className="text-heading-sm sm:text-heading-md font-medium text-foreground mb-8 text-center">
What We Stand For Our Code
</h2> </h2>
<div className="grid sm:grid-cols-2 gap-4"> <div className="grid sm:grid-cols-2 gap-4">
{values.map((value, i) => ( {values.map((value, i) => (
@ -163,24 +162,24 @@ export default function AboutPage() {
{/* CTA */} {/* CTA */}
<section className="text-center animate-slide-up"> <section className="text-center animate-slide-up">
<h2 className="text-heading-sm sm:text-heading-md font-medium text-foreground mb-4"> <h2 className="text-heading-sm sm:text-heading-md font-medium text-foreground mb-4">
Ready to get started? Ready to hunt?
</h2> </h2>
<p className="text-body text-foreground-muted mb-8"> <p className="text-body text-foreground-muted mb-8">
Join thousands of domain professionals using pounce. Join the hunters who move first.
</p> </p>
<div className="flex flex-col sm:flex-row items-center justify-center gap-3"> <div className="flex flex-col sm:flex-row items-center justify-center gap-3">
<Link <Link
href="/register" href="/register"
className="flex items-center gap-2 px-6 py-3 bg-accent text-background font-medium rounded-xl hover:bg-accent-hover transition-all" className="flex items-center gap-2 px-6 py-3 bg-accent text-background font-medium rounded-xl hover:bg-accent-hover transition-all"
> >
Start Free Start Hunting
<ArrowRight className="w-4 h-4" /> <ArrowRight className="w-4 h-4" />
</Link> </Link>
<Link <Link
href="/contact" href="/contact"
className="flex items-center gap-2 px-6 py-3 bg-background-secondary border border-border text-foreground font-medium rounded-xl hover:border-border-hover transition-all" className="flex items-center gap-2 px-6 py-3 bg-background-secondary border border-border text-foreground font-medium rounded-xl hover:border-border-hover transition-all"
> >
Contact Us Get in Touch
</Link> </Link>
</div> </div>
</section> </section>

View File

@ -11,21 +11,21 @@ const contactMethods = [
{ {
icon: Mail, icon: Mail,
title: 'Email', title: 'Email',
description: 'For general inquiries and support', description: 'Questions? Ideas? Issues?',
value: 'support@pounce.dev', value: 'hello@pounce.ch',
href: 'mailto:support@pounce.dev', href: 'mailto:hello@pounce.ch',
}, },
{ {
icon: MessageSquare, icon: MessageSquare,
title: 'Live Chat', title: 'Live Chat',
description: 'Available Mon-Fri, 9am-6pm CET', description: 'Mon-Fri, 9am-6pm CET',
value: 'Start a conversation', value: 'Start a conversation',
href: '#', href: '#',
}, },
{ {
icon: Clock, icon: Clock,
title: 'Response Time', title: 'Response Time',
description: 'We typically respond within', description: 'We reply fast.',
value: '< 24 hours', value: '< 24 hours',
href: null, href: null,
}, },
@ -33,16 +33,16 @@ const contactMethods = [
const faqs = [ const faqs = [
{ {
q: 'How do I reset my password?', q: 'Forgot my password?',
a: 'Click "Forgot Password" on the login page and follow the instructions sent to your email.', a: 'Hit "Forgot Password" on login. Check your email. Done.',
}, },
{ {
q: 'Can I upgrade my plan mid-cycle?', q: 'Can I upgrade mid-cycle?',
a: 'Yes, upgrades are applied immediately and you\'ll only pay the prorated difference.', a: 'Yes. Pay the difference. New features unlock instantly.',
}, },
{ {
q: 'Do you offer refunds?', q: 'Refunds?',
a: 'We offer a 14-day money-back guarantee on all paid plans, no questions asked.', a: '14-day money-back. No questions. No hassle.',
}, },
] ]
@ -99,10 +99,10 @@ export default function ContactPage() {
<span className="text-ui-sm text-foreground-muted">Get in Touch</span> <span className="text-ui-sm text-foreground-muted">Get in Touch</span>
</div> </div>
<h1 className="font-display text-[2.25rem] sm:text-[3rem] md:text-[3.75rem] leading-[1.1] tracking-[-0.035em] text-foreground mb-4"> <h1 className="font-display text-[2.25rem] sm:text-[3rem] md:text-[3.75rem] leading-[1.1] tracking-[-0.035em] text-foreground mb-4">
Contact Us Let&apos;s Talk
</h1> </h1>
<p className="text-body-lg text-foreground-muted max-w-xl mx-auto"> <p className="text-body-lg text-foreground-muted max-w-xl mx-auto">
Have a question or need help? We're here for you. Question? Idea? Problem? We&apos;re listening.
</p> </p>
</div> </div>

View File

@ -438,10 +438,10 @@ export default function DashboardPage() {
<div className="flex flex-col sm:flex-row sm:items-end sm:justify-between gap-4"> <div className="flex flex-col sm:flex-row sm:items-end sm:justify-between gap-4">
<div> <div>
<h1 className="font-display text-[2rem] sm:text-[2.5rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-1.5"> <h1 className="font-display text-[2rem] sm:text-[2.5rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-1.5">
Dashboard Command Center
</h1> </h1>
<p className="text-body-sm text-foreground-muted"> <p className="text-body-sm text-foreground-muted">
Manage your domains and track investments Your domains. Your intel. Your edge.
</p> </p>
</div> </div>
@ -599,9 +599,9 @@ export default function DashboardPage() {
<div className="w-12 h-12 bg-background-tertiary rounded-xl flex items-center justify-center mx-auto mb-4"> <div className="w-12 h-12 bg-background-tertiary rounded-xl flex items-center justify-center mx-auto mb-4">
<Eye className="w-6 h-6 text-foreground-subtle" /> <Eye className="w-6 h-6 text-foreground-subtle" />
</div> </div>
<p className="text-body text-foreground-muted mb-1">Your watchlist is empty</p> <p className="text-body text-foreground-muted mb-1">No targets yet</p>
<p className="text-body-sm text-foreground-subtle"> <p className="text-body-sm text-foreground-subtle">
Add your first domain above to start monitoring Add a domain above to start hunting
</p> </p>
</div> </div>
) : ( ) : (

View File

@ -60,9 +60,9 @@ export default function LoginPage() {
{/* Header */} {/* Header */}
<div className="text-center mb-8 sm:mb-10"> <div className="text-center mb-8 sm:mb-10">
<h1 className="font-display text-[2rem] sm:text-[2.5rem] md:text-[3rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-2 sm:mb-3">Welcome back</h1> <h1 className="font-display text-[2rem] sm:text-[2.5rem] md:text-[3rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-2 sm:mb-3">Back to the hunt.</h1>
<p className="text-body-sm sm:text-body text-foreground-muted"> <p className="text-body-sm sm:text-body text-foreground-muted">
Sign in to access your watchlist Sign in to your account
</p> </p>
</div> </div>

View File

@ -14,23 +14,23 @@ import clsx from 'clsx'
const features = [ const features = [
{ {
icon: Eye, icon: Eye,
title: 'Continuous Monitoring', title: 'Always Watching',
description: 'Automated WHOIS and DNS queries check your domains daily.', description: 'Daily scans. 886+ TLDs. You sleep, we hunt.',
}, },
{ {
icon: Bell, icon: Bell,
title: 'Instant Notifications', title: 'Instant Alerts',
description: 'Get notified the moment a domain becomes available.', description: 'Domain drops? You know first. Always.',
}, },
{ {
icon: Clock, icon: Clock,
title: 'Expiration Tracking', title: 'Expiry Intel',
description: 'Track expiration dates and plan ahead for domain drops.', description: 'See when domains expire. Plan your move.',
}, },
{ {
icon: Shield, icon: Shield,
title: 'Private & Secure', title: 'Your Strategy, Private',
description: 'Self-hosted infrastructure. Your strategy stays confidential.', description: 'No one sees your watchlist. Ever.',
}, },
] ]
@ -39,16 +39,16 @@ const tiers = [
name: 'Scout', name: 'Scout',
price: '0', price: '0',
period: '', period: '',
description: 'Explore the domain market', description: 'Test the waters. Zero risk.',
features: ['5 domains', 'Daily checks', 'Email alerts', 'Basic search'], features: ['5 domains', 'Daily checks', 'Email alerts', 'Basic search'],
cta: 'Start Free', cta: 'Hunt Free',
highlighted: false, highlighted: false,
}, },
{ {
name: 'Trader', name: 'Trader',
price: '19', price: '19',
period: '/mo', period: '/mo',
description: 'For serious domain investors', description: 'Hunt with precision.',
features: ['50 domains', 'Hourly checks', 'SMS alerts', 'Domain valuation', 'Portfolio tracking'], features: ['50 domains', 'Hourly checks', 'SMS alerts', 'Domain valuation', 'Portfolio tracking'],
cta: 'Start Trading', cta: 'Start Trading',
highlighted: true, highlighted: true,
@ -57,7 +57,7 @@ const tiers = [
name: 'Tycoon', name: 'Tycoon',
price: '49', price: '49',
period: '/mo', period: '/mo',
description: 'For professionals & agencies', description: 'Dominate the market.',
features: ['500 domains', 'Real-time checks', 'API access', 'SEO metrics', 'Bulk tools'], features: ['500 domains', 'Real-time checks', 'API access', 'SEO metrics', 'Bulk tools'],
cta: 'Go Tycoon', cta: 'Go Tycoon',
highlighted: false, highlighted: false,
@ -165,14 +165,14 @@ export default function HomePage() {
{/* Main Headline - RESPONSIVE */} {/* Main Headline - RESPONSIVE */}
<h1 className="font-display text-[2.25rem] leading-[1.1] sm:text-[3rem] md:text-[3.75rem] lg:text-[4.5rem] xl:text-[5.25rem] tracking-[-0.035em] mb-6 sm:mb-8 md:mb-10 animate-slide-up"> <h1 className="font-display text-[2.25rem] leading-[1.1] sm:text-[3rem] md:text-[3.75rem] lg:text-[4.5rem] xl:text-[5.25rem] tracking-[-0.035em] mb-6 sm:mb-8 md:mb-10 animate-slide-up">
<span className="block text-foreground">The domains you want.</span> <span className="block text-foreground">Others wait.</span>
<span className="block text-foreground-muted">The moment they&apos;re free.</span> <span className="block text-foreground-muted">You pounce.</span>
</h1> </h1>
{/* Subheadline - RESPONSIVE */} {/* Subheadline - RESPONSIVE */}
<p className="text-body-md sm:text-body-lg md:text-body-xl text-foreground-muted max-w-xl sm:max-w-2xl mx-auto mb-10 sm:mb-12 md:mb-16 animate-slide-up delay-100 px-4 sm:px-0"> <p className="text-body-md sm:text-body-lg md:text-body-xl text-foreground-muted max-w-xl sm:max-w-2xl mx-auto mb-10 sm:mb-12 md:mb-16 animate-slide-up delay-100 px-4 sm:px-0">
Monitor any domain. Track expiration dates. Get notified instantly Domain intelligence for the decisive. Track any domain.
when your target domains become available for registration. Know the moment it drops. Move before anyone else.
</p> </p>
{/* Domain Checker */} {/* Domain Checker */}
@ -189,13 +189,13 @@ export default function HomePage() {
<div className="text-center mb-10 sm:mb-12"> <div className="text-center mb-10 sm:mb-12">
<div className="inline-flex items-center gap-2 px-3 py-1.5 bg-accent-muted border border-accent/20 rounded-full mb-5"> <div className="inline-flex items-center gap-2 px-3 py-1.5 bg-accent-muted border border-accent/20 rounded-full mb-5">
<TrendingUp className="w-4 h-4 text-accent" /> <TrendingUp className="w-4 h-4 text-accent" />
<span className="text-ui-sm text-accent">Market Insights</span> <span className="text-ui-sm text-accent">Market Intel</span>
</div> </div>
<h2 className="font-display text-[1.75rem] sm:text-[2.5rem] md:text-[3.25rem] lg:text-[4rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-4 sm:mb-5 md:mb-6"> <h2 className="font-display text-[1.75rem] sm:text-[2.5rem] md:text-[3.25rem] lg:text-[4rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-4 sm:mb-5 md:mb-6">
TLD Price Intelligence 886 TLDs. Tracked Daily.
</h2> </h2>
<p className="text-body-sm sm:text-body text-foreground-muted max-w-lg mx-auto"> <p className="text-body-sm sm:text-body text-foreground-muted max-w-lg mx-auto">
Track how domain extension prices evolve. Compare registrars. See price movements. Spot opportunities. Act fast.
</p> </p>
</div> </div>
@ -299,10 +299,10 @@ export default function HomePage() {
<div className="text-center mb-12 sm:mb-16 md:mb-20"> <div className="text-center mb-12 sm:mb-16 md:mb-20">
<p className="label sm:label-md text-accent mb-3 sm:mb-4 md:mb-5">How It Works</p> <p className="label sm:label-md text-accent mb-3 sm:mb-4 md:mb-5">How It Works</p>
<h2 className="font-display text-[1.75rem] sm:text-[2.5rem] md:text-[3.25rem] lg:text-[4rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-4 sm:mb-5 md:mb-6"> <h2 className="font-display text-[1.75rem] sm:text-[2.5rem] md:text-[3.25rem] lg:text-[4rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-4 sm:mb-5 md:mb-6">
Professional domain intelligence Built for hunters.
</h2> </h2>
<p className="text-body-sm sm:text-body md:text-body-lg text-foreground-muted max-w-md sm:max-w-lg mx-auto px-4 sm:px-0"> <p className="text-body-sm sm:text-body md:text-body-lg text-foreground-muted max-w-md sm:max-w-lg mx-auto px-4 sm:px-0">
Everything you need to secure high-value domains before anyone else. The tools that give you the edge. Simple. Powerful. Decisive.
</p> </p>
</div> </div>
@ -336,10 +336,10 @@ export default function HomePage() {
<div className="text-center mb-12 sm:mb-16 md:mb-20"> <div className="text-center mb-12 sm:mb-16 md:mb-20">
<p className="label sm:label-md text-accent mb-3 sm:mb-4 md:mb-5">Pricing</p> <p className="label sm:label-md text-accent mb-3 sm:mb-4 md:mb-5">Pricing</p>
<h2 className="font-display text-[1.75rem] sm:text-[2.5rem] md:text-[3.25rem] lg:text-[4rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-4 sm:mb-5 md:mb-6"> <h2 className="font-display text-[1.75rem] sm:text-[2.5rem] md:text-[3.25rem] lg:text-[4rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-4 sm:mb-5 md:mb-6">
Simple, transparent plans Pick your weapon.
</h2> </h2>
<p className="text-body-sm sm:text-body md:text-body-lg text-foreground-muted"> <p className="text-body-sm sm:text-body md:text-body-lg text-foreground-muted">
Start free. Upgrade as your portfolio grows. Start free. Scale when you&apos;re ready.
</p> </p>
</div> </div>

View File

@ -17,15 +17,15 @@ const tiers = [
icon: Zap, icon: Zap,
price: '0', price: '0',
period: '', period: '',
description: 'Explore the domain market', description: 'Test the waters. Zero risk.',
features: [ features: [
{ text: '5 domains in watchlist', highlight: false }, { text: '5 domains to track', highlight: false },
{ text: 'Daily availability checks', highlight: false }, { text: 'Daily availability scans', highlight: false },
{ text: 'Email notifications', highlight: false }, { text: 'Email alerts', highlight: false },
{ text: 'Basic domain search', highlight: false }, { text: 'Basic search', highlight: false },
{ text: 'TLD price overview', highlight: false }, { text: 'TLD price overview', highlight: false },
], ],
cta: 'Start Free', cta: 'Hunt Free',
highlighted: false, highlighted: false,
badge: null, badge: null,
isPaid: false, isPaid: false,
@ -36,14 +36,14 @@ const tiers = [
icon: TrendingUp, icon: TrendingUp,
price: '19', price: '19',
period: '/mo', period: '/mo',
description: 'For serious domain investors', description: 'Hunt with precision. Daily intel.',
features: [ features: [
{ text: '50 domains in watchlist', highlight: true }, { text: '50 domains to track', highlight: true },
{ text: 'Hourly availability checks', highlight: true }, { text: 'Hourly scans', highlight: true },
{ text: 'SMS & Telegram alerts', highlight: true }, { text: 'SMS & Telegram alerts', highlight: true },
{ text: 'Full TLD market data', highlight: false }, { text: 'Full market data', highlight: false },
{ text: 'Domain valuation', highlight: true }, { text: 'Domain valuation', highlight: true },
{ text: 'Portfolio tracking (25 domains)', highlight: true }, { text: 'Portfolio (25 domains)', highlight: true },
{ text: '90-day price history', highlight: false }, { text: '90-day price history', highlight: false },
], ],
cta: 'Start Trading', cta: 'Start Trading',
@ -57,12 +57,12 @@ const tiers = [
icon: Crown, icon: Crown,
price: '49', price: '49',
period: '/mo', period: '/mo',
description: 'For professionals & agencies', description: 'Dominate the market. No limits.',
features: [ features: [
{ text: '500 domains in watchlist', highlight: true }, { text: '500 domains to track', highlight: true },
{ text: 'Real-time checks (10 min)', highlight: true }, { text: 'Real-time scans (10 min)', highlight: true },
{ text: 'Priority alerts + Webhooks', highlight: true }, { text: 'Priority alerts + Webhooks', highlight: true },
{ text: 'Full REST API access', highlight: true }, { text: 'Full REST API', highlight: true },
{ text: 'SEO metrics (DA/PA)', highlight: true }, { text: 'SEO metrics (DA/PA)', highlight: true },
{ text: 'Unlimited portfolio', highlight: true }, { text: 'Unlimited portfolio', highlight: true },
{ text: 'Bulk import/export', highlight: true }, { text: 'Bulk import/export', highlight: true },
@ -70,7 +70,7 @@ const tiers = [
], ],
cta: 'Go Tycoon', cta: 'Go Tycoon',
highlighted: false, highlighted: false,
badge: 'Best Value', badge: 'Full Power',
isPaid: true, isPaid: true,
}, },
] ]
@ -88,16 +88,16 @@ const comparisonFeatures = [
const faqs = [ const faqs = [
{ {
q: 'How does domain monitoring work?', q: 'How fast will I know when a domain drops?',
a: 'We perform automated WHOIS, RDAP and DNS queries on your watchlist domains. When a domain becomes available or its status changes, you\'ll receive an instant notification via your preferred channel.', a: 'Depends on your plan. Scout: daily. Trader: hourly. Tycoon: every 10 minutes. When it drops, you\'ll know.',
}, },
{ {
q: 'What is domain valuation?', q: 'What\'s domain valuation?',
a: 'Our valuation algorithm analyzes factors like domain length, TLD popularity, keyword value, brandability, and comparable sales to estimate a domain\'s market value.', a: 'Our algorithm scores domains on length, TLD value, keywords, and brandability. Know what a domain is worth before you buy.',
}, },
{ {
q: 'Can I track domains I already own?', q: 'Can I track domains I already own?',
a: 'Yes! With Trader and Tycoon plans, you can add domains to your portfolio to track their value, renewal dates, and overall ROI.', a: 'Absolutely. Trader and Tycoon plans include portfolio tracking. See value changes, renewal dates, and ROI at a glance.',
}, },
{ {
q: 'How accurate is the SEO data?', q: 'How accurate is the SEO data?',
@ -199,10 +199,10 @@ export default function PricingPage() {
<span className="text-ui-sm text-foreground-muted">Pricing</span> <span className="text-ui-sm text-foreground-muted">Pricing</span>
</div> </div>
<h1 className="font-display text-[2.25rem] sm:text-[3rem] md:text-[3.75rem] leading-[1.1] tracking-[-0.035em] text-foreground mb-4 animate-slide-up"> <h1 className="font-display text-[2.25rem] sm:text-[3rem] md:text-[3.75rem] leading-[1.1] tracking-[-0.035em] text-foreground mb-4 animate-slide-up">
Invest in your domain strategy Pick your weapon.
</h1> </h1>
<p className="text-body-lg text-foreground-muted max-w-2xl mx-auto mb-8 animate-slide-up"> <p className="text-body-lg text-foreground-muted max-w-2xl mx-auto mb-8 animate-slide-up">
From hobbyist to professional domainer. Choose the plan that matches your ambition. Casual observer or full-time hunter? We&apos;ve got you covered.
</p> </p>
{/* Error Message */} {/* Error Message */}

View File

@ -21,10 +21,10 @@ function Logo() {
} }
const benefits = [ const benefits = [
'Monitor up to 3 domains free', 'Track up to 5 domains. Free.',
'Daily availability checks', 'Daily scans. You never miss a drop.',
'Instant email notifications', 'Instant alerts. Know first.',
'Track expiration dates', 'Expiry intel. Plan your move.',
] ]
export default function RegisterPage() { export default function RegisterPage() {
@ -69,9 +69,9 @@ export default function RegisterPage() {
{/* Header */} {/* Header */}
<div className="mb-8 sm:mb-10"> <div className="mb-8 sm:mb-10">
<h1 className="font-display text-[2rem] sm:text-[2.5rem] md:text-[3rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-2 sm:mb-3">Create your account</h1> <h1 className="font-display text-[2rem] sm:text-[2.5rem] md:text-[3rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-2 sm:mb-3">Join the hunt.</h1>
<p className="text-body-sm sm:text-body text-foreground-muted"> <p className="text-body-sm sm:text-body text-foreground-muted">
Start monitoring domains in under a minute Start tracking domains in under a minute
</p> </p>
</div> </div>
@ -128,7 +128,7 @@ export default function RegisterPage() {
<Loader2 className="w-4 h-4 animate-spin" /> <Loader2 className="w-4 h-4 animate-spin" />
) : ( ) : (
<> <>
Get Started Start Hunting
<ArrowRight className="w-3.5 sm:w-4 h-3.5 sm:h-4" /> <ArrowRight className="w-3.5 sm:w-4 h-3.5 sm:h-4" />
</> </>
)} )}
@ -150,11 +150,11 @@ export default function RegisterPage() {
<div className="max-w-sm animate-slide-up delay-200"> <div className="max-w-sm animate-slide-up delay-200">
<div className="inline-flex items-center gap-2 sm:gap-2.5 px-3 sm:px-4 py-1.5 sm:py-2 bg-background-tertiary border border-border rounded-full mb-8 sm:mb-10"> <div className="inline-flex items-center gap-2 sm:gap-2.5 px-3 sm:px-4 py-1.5 sm:py-2 bg-background-tertiary border border-border rounded-full mb-8 sm:mb-10">
<div className="w-1.5 h-1.5 rounded-full bg-accent" /> <div className="w-1.5 h-1.5 rounded-full bg-accent" />
<span className="text-ui-sm sm:text-ui text-foreground-muted">Free Plan Included</span> <span className="text-ui-sm sm:text-ui text-foreground-muted">Free Forever</span>
</div> </div>
<h2 className="font-display text-[1.75rem] sm:text-[2.25rem] md:text-[2.75rem] leading-[1.15] tracking-[-0.025em] text-foreground mb-8 sm:mb-10"> <h2 className="font-display text-[1.75rem] sm:text-[2.25rem] md:text-[2.75rem] leading-[1.15] tracking-[-0.025em] text-foreground mb-8 sm:mb-10">
Everything you need to get started Your hunting gear. Ready to go.
</h2> </h2>
<ul className="space-y-4 sm:space-y-5"> <ul className="space-y-4 sm:space-y-5">

View File

@ -272,13 +272,13 @@ export default function TldPricingPage() {
<div className="text-center mb-12 sm:mb-16 animate-fade-in"> <div className="text-center mb-12 sm:mb-16 animate-fade-in">
<div className="inline-flex items-center gap-2 px-3 py-1.5 bg-background-secondary/80 backdrop-blur-sm border border-border rounded-full mb-6"> <div className="inline-flex items-center gap-2 px-3 py-1.5 bg-background-secondary/80 backdrop-blur-sm border border-border rounded-full mb-6">
<BarChart3 className="w-4 h-4 text-accent" /> <BarChart3 className="w-4 h-4 text-accent" />
<span className="text-ui-sm text-foreground-muted">TLD Price Intelligence</span> <span className="text-ui-sm text-foreground-muted">Market Intel</span>
</div> </div>
<h1 className="font-display text-[2rem] sm:text-[2.75rem] md:text-[3.5rem] lg:text-[4rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-4"> <h1 className="font-display text-[2rem] sm:text-[2.75rem] md:text-[3.5rem] lg:text-[4rem] leading-[1.1] tracking-[-0.03em] text-foreground mb-4">
Domain Extension Pricing {pagination.total}+ TLDs. Live Prices.
</h1> </h1>
<p className="text-body sm:text-body-lg text-foreground-muted max-w-2xl mx-auto"> <p className="text-body sm:text-body-lg text-foreground-muted max-w-2xl mx-auto">
Track price trends across {pagination.total}+ TLDs. Compare prices and monitor trends over time. See what domains cost. Spot trends. Find opportunities.
</p> </p>
</div> </div>
@ -290,9 +290,9 @@ export default function TldPricingPage() {
<Lock className="w-5 h-5 text-accent" /> <Lock className="w-5 h-5 text-accent" />
</div> </div>
<div> <div>
<p className="text-body-sm font-medium text-foreground">Unlock Full TLD Data</p> <p className="text-body-sm font-medium text-foreground">See the full picture</p>
<p className="text-ui-sm text-foreground-muted"> <p className="text-ui-sm text-foreground-muted">
Sign in to see detailed pricing, charts, and trends. Sign in for detailed pricing, charts, and trends.
</p> </p>
</div> </div>
</div> </div>
@ -301,7 +301,7 @@ export default function TldPricingPage() {
className="shrink-0 px-5 py-2.5 bg-accent text-background text-ui font-medium rounded-lg className="shrink-0 px-5 py-2.5 bg-accent text-background text-ui font-medium rounded-lg
hover:bg-accent-hover transition-all duration-300" hover:bg-accent-hover transition-all duration-300"
> >
Get Started Free Hunt Free
</Link> </Link>
</div> </div>
)} )}
@ -311,7 +311,7 @@ export default function TldPricingPage() {
<div className="mb-12 sm:mb-16 animate-slide-up"> <div className="mb-12 sm:mb-16 animate-slide-up">
<h2 className="text-body-lg sm:text-heading-sm font-medium text-foreground mb-4 sm:mb-6 flex items-center gap-2"> <h2 className="text-body-lg sm:text-heading-sm font-medium text-foreground mb-4 sm:mb-6 flex items-center gap-2">
<TrendingUp className="w-5 h-5 text-accent" /> <TrendingUp className="w-5 h-5 text-accent" />
Trending Now Moving Now
</h2> </h2>
<div className="grid sm:grid-cols-2 lg:grid-cols-4 gap-3 sm:gap-4"> <div className="grid sm:grid-cols-2 lg:grid-cols-4 gap-3 sm:gap-4">
{trending.map((item) => ( {trending.map((item) => (

View File

@ -84,7 +84,7 @@ export function DomainChecker() {
onChange={(e) => setDomain(e.target.value)} onChange={(e) => setDomain(e.target.value)}
onFocus={() => setIsFocused(true)} onFocus={() => setIsFocused(true)}
onBlur={() => setIsFocused(false)} onBlur={() => setIsFocused(false)}
placeholder="Enter any domain name..." placeholder="Hunt any domain..."
className="w-full px-4 sm:px-6 py-4 sm:py-5 pr-28 sm:pr-36 bg-transparent rounded-xl sm:rounded-2xl className="w-full px-4 sm:px-6 py-4 sm:py-5 pr-28 sm:pr-36 bg-transparent rounded-xl sm:rounded-2xl
text-body-sm sm:text-body-lg text-foreground placeholder:text-foreground-subtle text-body-sm sm:text-body-lg text-foreground placeholder:text-foreground-subtle
focus:outline-none transition-colors" focus:outline-none transition-colors"
@ -108,7 +108,7 @@ export function DomainChecker() {
</div> </div>
<p className="mt-4 sm:mt-5 text-center text-ui-sm sm:text-ui text-foreground-subtle"> <p className="mt-4 sm:mt-5 text-center text-ui-sm sm:text-ui text-foreground-subtle">
Try <span className="text-foreground-muted">example.com</span>, <span className="text-foreground-muted">startup.io</span>, or <span className="text-foreground-muted">brand.co</span> Try <span className="text-foreground-muted">dream.com</span>, <span className="text-foreground-muted">startup.io</span>, or <span className="text-foreground-muted">next.co</span>
</p> </p>
</form> </form>
@ -136,7 +136,7 @@ export function DomainChecker() {
{result.domain} {result.domain}
</p> </p>
<p className="text-body-sm text-accent text-left"> <p className="text-body-sm text-accent text-left">
Available for registration It&apos;s yours for the taking.
</p> </p>
</div> </div>
<span className="px-3 py-1.5 bg-accent text-background text-ui-sm font-medium rounded-lg shrink-0"> <span className="px-3 py-1.5 bg-accent text-background text-ui-sm font-medium rounded-lg shrink-0">
@ -149,7 +149,7 @@ export function DomainChecker() {
<div className="p-4 sm:p-5 bg-background-secondary border-t border-accent/20"> <div className="p-4 sm:p-5 bg-background-secondary border-t border-accent/20">
<div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 sm:gap-4"> <div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 sm:gap-4">
<p className="text-body-sm text-foreground-muted text-left"> <p className="text-body-sm text-foreground-muted text-left">
Secure this domain or add it to your watchlist. Grab it now or track it in your watchlist.
</p> </p>
<Link <Link
href={isAuthenticated ? '/dashboard' : '/register'} href={isAuthenticated ? '/dashboard' : '/register'}
@ -158,7 +158,7 @@ export function DomainChecker() {
hover:bg-accent-hover transition-all duration-300" hover:bg-accent-hover transition-all duration-300"
> >
<Plus className="w-4 h-4" /> <Plus className="w-4 h-4" />
<span>Add to Watchlist</span> <span>Track This</span>
</Link> </Link>
</div> </div>
</div> </div>
@ -177,7 +177,7 @@ export function DomainChecker() {
{result.domain} {result.domain}
</p> </p>
<p className="text-body-sm text-foreground-muted text-left"> <p className="text-body-sm text-foreground-muted text-left">
Currently registered Someone got there first. For now.
</p> </p>
</div> </div>
<span className="px-3 py-1.5 bg-background-tertiary text-foreground-muted text-ui-sm font-medium rounded-lg border border-border shrink-0"> <span className="px-3 py-1.5 bg-background-tertiary text-foreground-muted text-ui-sm font-medium rounded-lg border border-border shrink-0">
@ -265,7 +265,7 @@ export function DomainChecker() {
<div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 sm:gap-4"> <div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 sm:gap-4">
<div className="flex items-center gap-2 text-body-sm text-foreground-muted text-left"> <div className="flex items-center gap-2 text-body-sm text-foreground-muted text-left">
<Clock className="w-4 h-4 text-foreground-subtle shrink-0" /> <Clock className="w-4 h-4 text-foreground-subtle shrink-0" />
<span className="text-left">Get notified when this domain becomes available.</span> <span className="text-left">We&apos;ll alert you the moment it drops.</span>
</div> </div>
<Link <Link
href={isAuthenticated ? '/dashboard' : '/register'} href={isAuthenticated ? '/dashboard' : '/register'}
@ -274,7 +274,7 @@ export function DomainChecker() {
border border-border hover:border-border-hover transition-all duration-300" border border-border hover:border-border-hover transition-all duration-300"
> >
<Plus className="w-4 h-4" /> <Plus className="w-4 h-4" />
<span>Add to Watchlist</span> <span>Track This</span>
</Link> </Link>
</div> </div>
</div> </div>