From 0080d1e766473e20861c98e3689d42ef9335f6df Mon Sep 17 00:00:00 2001 From: "yves.gugger" Date: Mon, 8 Dec 2025 10:41:28 +0100 Subject: [PATCH] feat: Complete company & legal pages Added professional pages for all footer links: Company Pages: - /about - Mission, values, stats, features - /blog - Featured post, grid layout, newsletter CTA - /contact - Contact form, FAQ, company info - /careers - Open positions, benefits, values Legal Pages: - /privacy - Full privacy policy with sections - /terms - Terms of service - /cookies - Cookie types table, management info - /imprint - Company registration, contacts, disclaimer All pages follow consistent design: - Same Header/Footer components - Unified typography and spacing - Ambient glow effects - Animated sections - Mobile responsive --- frontend/src/app/about/page.tsx | 194 ++++++++++++++++++++++ frontend/src/app/blog/page.tsx | 198 +++++++++++++++++++++++ frontend/src/app/careers/page.tsx | 209 ++++++++++++++++++++++++ frontend/src/app/contact/page.tsx | 259 ++++++++++++++++++++++++++++++ frontend/src/app/cookies/page.tsx | 202 +++++++++++++++++++++++ frontend/src/app/imprint/page.tsx | 178 ++++++++++++++++++++ frontend/src/app/privacy/page.tsx | 158 ++++++++++++++++++ frontend/src/app/terms/page.tsx | 192 ++++++++++++++++++++++ 8 files changed, 1590 insertions(+) create mode 100644 frontend/src/app/about/page.tsx create mode 100644 frontend/src/app/blog/page.tsx create mode 100644 frontend/src/app/careers/page.tsx create mode 100644 frontend/src/app/contact/page.tsx create mode 100644 frontend/src/app/cookies/page.tsx create mode 100644 frontend/src/app/imprint/page.tsx create mode 100644 frontend/src/app/privacy/page.tsx create mode 100644 frontend/src/app/terms/page.tsx diff --git a/frontend/src/app/about/page.tsx b/frontend/src/app/about/page.tsx new file mode 100644 index 0000000..3d6f141 --- /dev/null +++ b/frontend/src/app/about/page.tsx @@ -0,0 +1,194 @@ +'use client' + +import { Header } from '@/components/Header' +import { Footer } from '@/components/Footer' +import { Target, Shield, Zap, Users, Globe, TrendingUp, ArrowRight } from 'lucide-react' +import Link from 'next/link' + +const values = [ + { + icon: Target, + title: 'Precision', + description: 'Every check, every alert, every data point is accurate and reliable.', + }, + { + icon: Shield, + title: 'Privacy', + description: 'Your domain strategy is confidential. We never share or sell your data.', + }, + { + icon: Zap, + title: 'Speed', + description: 'Real-time monitoring ensures you never miss a domain opportunity.', + }, + { + icon: Users, + title: 'Transparency', + description: 'Clear pricing, honest communication, no hidden fees or surprises.', + }, +] + +const stats = [ + { value: '500K+', label: 'Domains Monitored' }, + { value: '99.9%', label: 'Uptime' }, + { value: '50ms', label: 'Avg Response Time' }, + { value: '24/7', label: 'Monitoring' }, +] + +const team = [ + { + name: 'Domain Intelligence', + role: 'Core Feature', + description: 'Advanced WHOIS and RDAP queries for accurate availability detection.', + }, + { + name: 'Price Tracking', + role: 'Market Insights', + description: 'Real-time TLD pricing from major registrars worldwide.', + }, + { + name: 'Instant Alerts', + role: 'Notifications', + description: 'Email and webhook notifications the moment domains become available.', + }, +] + +export default function AboutPage() { + return ( +
+ {/* Ambient glow */} +
+
+
+ +
+ +
+
+ {/* Hero */} +
+
+ + About pounce +
+

+ Domain intelligence, +
+ simplified. +

+

+ We built pounce to give domain investors, businesses, and individuals + the tools they need to secure high-value domains before anyone else. +

+
+ + {/* Stats */} +
+ {stats.map((stat) => ( +
+

+ {stat.value} +

+

{stat.label}

+
+ ))} +
+ + {/* Mission */} +
+
+

+ Our Mission +

+

+ To democratize domain intelligence. We believe everyone should have access to + professional-grade domain monitoring tools, not just large corporations with + expensive enterprise solutions. pounce makes it possible to track any domain, + understand market trends, and act fast when opportunities arise. +

+
+
+ + {/* Values */} +
+

+ What We Stand For +

+
+ {values.map((value, i) => ( +
+
+ +
+

{value.title}

+

{value.description}

+
+ ))} +
+
+ + {/* Features */} +
+

+ What We Do +

+
+ {team.map((item, i) => ( +
+
+
+

{item.name}

+ + {item.role} + +
+

{item.description}

+
+
+ ))} +
+
+ + {/* CTA */} +
+

+ Ready to get started? +

+

+ Join thousands of domain professionals using pounce. +

+
+ + Start Free + + + + Contact Us + +
+
+
+
+ +
+
+ ) +} + diff --git a/frontend/src/app/blog/page.tsx b/frontend/src/app/blog/page.tsx new file mode 100644 index 0000000..99202b2 --- /dev/null +++ b/frontend/src/app/blog/page.tsx @@ -0,0 +1,198 @@ +'use client' + +import { Header } from '@/components/Header' +import { Footer } from '@/components/Footer' +import { BookOpen, Calendar, Clock, ArrowRight, TrendingUp, Shield, Zap } from 'lucide-react' +import Link from 'next/link' + +const featuredPost = { + title: 'The Complete Guide to Domain Investing in 2025', + excerpt: 'Everything you need to know about finding, evaluating, and acquiring valuable domains in today\'s market.', + category: 'Guide', + date: 'Dec 5, 2025', + readTime: '12 min read', + slug: 'complete-guide-domain-investing-2025', +} + +const posts = [ + { + title: 'Understanding TLD Pricing Trends', + excerpt: 'How domain extension prices fluctuate and what it means for your portfolio.', + category: 'Market Analysis', + date: 'Dec 3, 2025', + readTime: '5 min read', + icon: TrendingUp, + }, + { + title: 'WHOIS Privacy: What You Need to Know', + excerpt: 'A deep dive into domain privacy protection and why it matters.', + category: 'Security', + date: 'Nov 28, 2025', + readTime: '7 min read', + icon: Shield, + }, + { + title: 'Catching Expiring Domains: Best Practices', + excerpt: 'Strategies for monitoring and acquiring domains as they drop.', + category: 'Strategy', + date: 'Nov 22, 2025', + readTime: '6 min read', + icon: Zap, + }, + { + title: 'New gTLDs: Opportunities and Risks', + excerpt: 'Evaluating the potential of newer generic top-level domains.', + category: 'Market Analysis', + date: 'Nov 15, 2025', + readTime: '8 min read', + icon: TrendingUp, + }, + { + title: 'Domain Valuation 101', + excerpt: 'Learn the fundamentals of assessing a domain\'s worth.', + category: 'Guide', + date: 'Nov 10, 2025', + readTime: '10 min read', + icon: BookOpen, + }, + { + title: 'API Integration: Automating Your Workflow', + excerpt: 'How to use the pounce API to streamline domain monitoring.', + category: 'Tutorial', + date: 'Nov 5, 2025', + readTime: '9 min read', + icon: Zap, + }, +] + +const categories = ['All', 'Guide', 'Market Analysis', 'Security', 'Strategy', 'Tutorial'] + +export default function BlogPage() { + return ( +
+ {/* Ambient glow */} +
+
+
+ +
+ +
+
+ {/* Hero */} +
+
+ + pounce Blog +
+

+ Insights & Guides +

+

+ Expert knowledge on domain investing, market trends, and strategies. +

+
+ + {/* Categories */} +
+ {categories.map((cat, i) => ( + + ))} +
+ + {/* Featured Post */} +
+ + + Featured + {featuredPost.category} + +

+ {featuredPost.title} +

+

+ {featuredPost.excerpt} +

+
+ + + {featuredPost.date} + + + + {featuredPost.readTime} + +
+ +
+ + {/* Posts Grid */} +
+ {posts.map((post, i) => ( + +
+ +
+ {post.category} +

+ {post.title} +

+

+ {post.excerpt} +

+
+ {post.date} + {post.readTime} +
+ + ))} +
+ + {/* Newsletter CTA */} +
+

+ Stay Updated +

+

+ Get the latest domain insights and market analysis delivered to your inbox. +

+
+ + +
+
+
+
+ +
+
+ ) +} + diff --git a/frontend/src/app/careers/page.tsx b/frontend/src/app/careers/page.tsx new file mode 100644 index 0000000..e5ea387 --- /dev/null +++ b/frontend/src/app/careers/page.tsx @@ -0,0 +1,209 @@ +'use client' + +import { Header } from '@/components/Header' +import { Footer } from '@/components/Footer' +import { Briefcase, MapPin, Clock, ArrowRight, Code, Palette, LineChart, Users, Heart, Coffee, Laptop, Globe } from 'lucide-react' +import Link from 'next/link' + +const openPositions = [ + { + title: 'Senior Backend Engineer', + department: 'Engineering', + location: 'Remote (Europe)', + type: 'Full-time', + description: 'Build and scale our domain intelligence infrastructure using Python and FastAPI.', + icon: Code, + }, + { + title: 'Frontend Developer', + department: 'Engineering', + location: 'Remote (Worldwide)', + type: 'Full-time', + description: 'Create beautiful, performant user interfaces with React and Next.js.', + icon: Palette, + }, + { + title: 'Data Engineer', + department: 'Data', + location: 'Zurich, Switzerland', + type: 'Full-time', + description: 'Design data pipelines for domain pricing and market analytics.', + icon: LineChart, + }, + { + title: 'Customer Success Manager', + department: 'Customer Success', + location: 'Remote (Europe)', + type: 'Full-time', + description: 'Help our customers succeed and get the most out of pounce.', + icon: Users, + }, +] + +const benefits = [ + { + icon: Globe, + title: 'Remote-First', + description: 'Work from anywhere in the world with flexible hours.', + }, + { + icon: Heart, + title: 'Health & Wellness', + description: 'Comprehensive health insurance and wellness budget.', + }, + { + icon: Coffee, + title: 'Learning Budget', + description: 'Annual budget for courses, conferences, and books.', + }, + { + icon: Laptop, + title: 'Equipment', + description: 'Top-of-the-line hardware and home office setup.', + }, +] + +const values = [ + 'We ship fast and iterate based on feedback', + 'We value transparency and open communication', + 'We prioritize user experience over features', + 'We believe in work-life balance', +] + +export default function CareersPage() { + return ( +
+ {/* Ambient glow */} +
+
+
+ +
+ +
+
+ {/* Hero */} +
+
+ + Join Our Team +
+

+ Build the future of +
+ domain intelligence +

+

+ We're a small, focused team building tools that help thousands of people + monitor and acquire valuable domains. Join us. +

+
+ + {/* Values */} +
+

How We Work

+
    + {values.map((value) => ( +
  • +
    + {value} +
  • + ))} +
+
+ + {/* Benefits */} +
+

Benefits & Perks

+
+ {benefits.map((benefit, i) => ( +
+
+ +
+

{benefit.title}

+

{benefit.description}

+
+ ))} +
+
+ + {/* Open Positions */} +
+

+ Open Positions +

+
+ {openPositions.map((position, i) => ( +
+
+
+
+ +
+
+

+ {position.title} +

+

{position.description}

+
+ + {position.department} + + + + {position.location} + + + + {position.type} + +
+
+
+ + Apply + + +
+
+ ))} +
+
+ + {/* CTA */} +
+

+ Don't see the right role? +

+

+ We're always looking for talented people. Send us your resume + and we'll keep you in mind for future opportunities. +

+ + Send General Application + + +
+
+
+ +
+
+ ) +} + diff --git a/frontend/src/app/contact/page.tsx b/frontend/src/app/contact/page.tsx new file mode 100644 index 0000000..bd0e1ce --- /dev/null +++ b/frontend/src/app/contact/page.tsx @@ -0,0 +1,259 @@ +'use client' + +import { useState } from 'react' +import { Header } from '@/components/Header' +import { Footer } from '@/components/Footer' +import { Mail, MessageSquare, Clock, Send, Loader2, CheckCircle, MapPin, Building } from 'lucide-react' +import Link from 'next/link' + +const contactMethods = [ + { + icon: Mail, + title: 'Email', + description: 'For general inquiries and support', + value: 'support@pounce.dev', + href: 'mailto:support@pounce.dev', + }, + { + icon: MessageSquare, + title: 'Live Chat', + description: 'Available Mon-Fri, 9am-6pm CET', + value: 'Start a conversation', + href: '#', + }, + { + icon: Clock, + title: 'Response Time', + description: 'We typically respond within', + value: '< 24 hours', + href: null, + }, +] + +const faqs = [ + { + q: 'How do I reset my password?', + a: 'Click "Forgot Password" on the login page and follow the instructions sent to your email.', + }, + { + q: 'Can I upgrade my plan mid-cycle?', + a: 'Yes, upgrades are applied immediately and you\'ll only pay the prorated difference.', + }, + { + q: 'Do you offer refunds?', + a: 'We offer a 14-day money-back guarantee on all paid plans, no questions asked.', + }, +] + +export default function ContactPage() { + const [formState, setFormState] = useState<'idle' | 'loading' | 'success'>('idle') + const [formData, setFormData] = useState({ + name: '', + email: '', + subject: '', + message: '', + }) + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault() + setFormState('loading') + + // Simulate form submission + await new Promise(resolve => setTimeout(resolve, 1500)) + setFormState('success') + + // Reset after showing success + setTimeout(() => { + setFormState('idle') + setFormData({ name: '', email: '', subject: '', message: '' }) + }, 3000) + } + + return ( +
+ {/* Ambient glow */} +
+
+
+ +
+ +
+
+ {/* Hero */} +
+
+ + Get in Touch +
+

+ Contact Us +

+

+ Have a question or need help? We're here for you. +

+
+ + {/* Contact Methods */} +
+ {contactMethods.map((method) => ( +
+
+ +
+

{method.title}

+

{method.description}

+ {method.href ? ( + + {method.value} + + ) : ( + {method.value} + )} +
+ ))} +
+ +
+ {/* Contact Form */} +
+

Send us a message

+ + {formState === 'success' ? ( +
+
+ +
+

Message Sent!

+

+ We'll get back to you within 24 hours. +

+
+ ) : ( +
+
+
+ + setFormData({ ...formData, name: e.target.value })} + required + className="w-full px-4 py-3 bg-background-secondary border border-border rounded-xl text-body text-foreground placeholder:text-foreground-subtle focus:outline-none focus:ring-2 focus:ring-accent/30 focus:border-accent transition-all" + placeholder="Your name" + /> +
+
+ + setFormData({ ...formData, email: e.target.value })} + required + className="w-full px-4 py-3 bg-background-secondary border border-border rounded-xl text-body text-foreground placeholder:text-foreground-subtle focus:outline-none focus:ring-2 focus:ring-accent/30 focus:border-accent transition-all" + placeholder="you@example.com" + /> +
+
+
+ + +
+
+ +