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
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:
@ -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 }} <{{ email }}></p>
|
<p><strong>From:</strong> {{ name }} <{{ email }}></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.",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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'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'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>
|
||||||
|
|||||||
@ -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'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're listening.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -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>
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
@ -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>
|
||||||
|
|
||||||
|
|||||||
@ -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'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're ready.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -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've got you covered.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{/* Error Message */}
|
{/* Error Message */}
|
||||||
|
|||||||
@ -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">
|
||||||
|
|||||||
@ -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) => (
|
||||||
|
|||||||
@ -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'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'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>
|
||||||
|
|||||||
Reference in New Issue
Block a user