feat(i18n): Internationalize marketing pages and components

- HomePage.tsx: Add translation keys for features, testimonials, section titles
- FeaturesPage.tsx: Add translation keys for automation engine, multi-tenancy sections
- Hero.tsx: Add translation keys for headline, CTAs, trust signals, visual content
- ContactPage.tsx: Add translation keys for form headings, success messages
- PricingPage.tsx: Add translation keys for FAQ section
- PrivacyPolicyPage.tsx: Full internationalization of 15-section privacy policy
- TermsOfServicePage.tsx: Full internationalization of 16-section terms of service
- Footer.tsx & Navbar.tsx: Add translation keys for brand name, aria-labels

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-03 22:25:11 -05:00
parent c7f241b30a
commit bc094f2f80
10 changed files with 599 additions and 216 deletions

View File

@@ -41,7 +41,7 @@ const Footer: React.FC = () => {
<Link to="/" className="flex items-center gap-2 mb-4 group"> <Link to="/" className="flex items-center gap-2 mb-4 group">
<SmoothScheduleLogo className="h-12 w-12 text-gray-900 dark:text-white group-hover:text-brand-600 dark:group-hover:text-brand-400 transition-colors" /> <SmoothScheduleLogo className="h-12 w-12 text-gray-900 dark:text-white group-hover:text-brand-600 dark:group-hover:text-brand-400 transition-colors" />
<span className="text-lg font-bold text-gray-900 dark:text-white"> <span className="text-lg font-bold text-gray-900 dark:text-white">
Smooth Schedule {t('marketing.footer.brandName')}
</span> </span>
</Link> </Link>
<p className="text-sm text-gray-600 dark:text-gray-400 mb-6"> <p className="text-sm text-gray-600 dark:text-gray-400 mb-6">

View File

@@ -21,16 +21,16 @@ const Hero: React.FC = () => {
<div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-brand-50 dark:bg-brand-900/30 border border-brand-100 dark:border-brand-800 mb-6"> <div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-brand-50 dark:bg-brand-900/30 border border-brand-100 dark:border-brand-800 mb-6">
<span className="flex h-2 w-2 rounded-full bg-brand-600 dark:bg-brand-400 animate-pulse" /> <span className="flex h-2 w-2 rounded-full bg-brand-600 dark:bg-brand-400 animate-pulse" />
<span className="text-sm font-medium text-brand-700 dark:text-brand-300"> <span className="text-sm font-medium text-brand-700 dark:text-brand-300">
New: Automation Marketplace {t('marketing.hero.badge')}
</span> </span>
</div> </div>
<h1 className="text-4xl sm:text-5xl lg:text-6xl font-bold tracking-tight text-gray-900 dark:text-white mb-6"> <h1 className="text-4xl sm:text-5xl lg:text-6xl font-bold tracking-tight text-gray-900 dark:text-white mb-6">
The Operating System for <span className="text-brand-600 dark:text-brand-400">Service Businesses</span> {t('marketing.hero.title')} <span className="text-brand-600 dark:text-brand-400">{t('marketing.hero.titleHighlight')}</span>
</h1> </h1>
<p className="text-lg sm:text-xl text-gray-600 dark:text-gray-400 mb-8 max-w-2xl mx-auto lg:mx-0"> <p className="text-lg sm:text-xl text-gray-600 dark:text-gray-400 mb-8 max-w-2xl mx-auto lg:mx-0">
Orchestrate your entire operation with intelligent scheduling and powerful automation. No coding required. {t('marketing.hero.description')}
</p> </p>
<div className="flex flex-col sm:flex-row gap-4 justify-center lg:justify-start mb-10"> <div className="flex flex-col sm:flex-row gap-4 justify-center lg:justify-start mb-10">
@@ -38,7 +38,7 @@ const Hero: React.FC = () => {
to="/signup" to="/signup"
className="inline-flex items-center justify-center px-6 py-3 text-base font-medium text-white bg-brand-600 hover:bg-brand-700 rounded-lg transition-colors shadow-lg shadow-brand-600/20" className="inline-flex items-center justify-center px-6 py-3 text-base font-medium text-white bg-brand-600 hover:bg-brand-700 rounded-lg transition-colors shadow-lg shadow-brand-600/20"
> >
Start Free Trial {t('marketing.hero.startFreeTrial')}
<ArrowRight className="ml-2 h-5 w-5" /> <ArrowRight className="ml-2 h-5 w-5" />
</Link> </Link>
<Link <Link
@@ -46,22 +46,22 @@ const Hero: React.FC = () => {
className="inline-flex items-center justify-center px-6 py-3 text-base font-medium text-gray-700 dark:text-gray-200 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700 rounded-lg transition-colors" className="inline-flex items-center justify-center px-6 py-3 text-base font-medium text-gray-700 dark:text-gray-200 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 hover:bg-gray-50 dark:hover:bg-gray-700 rounded-lg transition-colors"
> >
<Play className="mr-2 h-5 w-5 fill-current" /> <Play className="mr-2 h-5 w-5 fill-current" />
Watch Demo {t('marketing.hero.watchDemo')}
</Link> </Link>
</div> </div>
<div className="flex flex-wrap gap-x-8 gap-y-4 justify-center lg:justify-start text-sm text-gray-500 dark:text-gray-400"> <div className="flex flex-wrap gap-x-8 gap-y-4 justify-center lg:justify-start text-sm text-gray-500 dark:text-gray-400">
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<CheckCircle2 className="h-4 w-4 text-green-500" /> <CheckCircle2 className="h-4 w-4 text-green-500" />
<span>No credit card required</span> <span>{t('marketing.hero.noCreditCard')}</span>
</div> </div>
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<CheckCircle2 className="h-4 w-4 text-green-500" /> <CheckCircle2 className="h-4 w-4 text-green-500" />
<span>14-day free trial</span> <span>{t('marketing.hero.freeTrial')}</span>
</div> </div>
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
<CheckCircle2 className="h-4 w-4 text-green-500" /> <CheckCircle2 className="h-4 w-4 text-green-500" />
<span>Cancel anytime</span> <span>{t('marketing.hero.cancelAnytime')}</span>
</div> </div>
</div> </div>
</div> </div>
@@ -74,17 +74,17 @@ const Hero: React.FC = () => {
<div className="inline-flex p-4 bg-brand-500/20 rounded-2xl mb-6"> <div className="inline-flex p-4 bg-brand-500/20 rounded-2xl mb-6">
<CheckCircle2 className="w-16 h-16 text-brand-400" /> <CheckCircle2 className="w-16 h-16 text-brand-400" />
</div> </div>
<h3 className="text-2xl font-bold text-white mb-2">Automated Success</h3> <h3 className="text-2xl font-bold text-white mb-2">{t('marketing.hero.visualContent.automatedSuccess')}</h3>
<p className="text-gray-400">Your business, running on autopilot.</p> <p className="text-gray-400">{t('marketing.hero.visualContent.autopilot')}</p>
<div className="mt-8 grid grid-cols-2 gap-4"> <div className="mt-8 grid grid-cols-2 gap-4">
<div className="bg-gray-800/50 p-3 rounded-lg border border-gray-700"> <div className="bg-gray-800/50 p-3 rounded-lg border border-gray-700">
<div className="text-green-400 font-bold">+24%</div> <div className="text-green-400 font-bold">+24%</div>
<div className="text-xs text-gray-500">Revenue</div> <div className="text-xs text-gray-500">{t('marketing.hero.visualContent.revenue')}</div>
</div> </div>
<div className="bg-gray-800/50 p-3 rounded-lg border border-gray-700"> <div className="bg-gray-800/50 p-3 rounded-lg border border-gray-700">
<div className="text-blue-400 font-bold">-40%</div> <div className="text-blue-400 font-bold">-40%</div>
<div className="text-xs text-gray-500">No-Shows</div> <div className="text-xs text-gray-500">{t('marketing.hero.visualContent.noShows')}</div>
</div> </div>
</div> </div>
</div> </div>
@@ -96,8 +96,8 @@ const Hero: React.FC = () => {
<CheckCircle2 className="w-6 h-6" /> <CheckCircle2 className="w-6 h-6" />
</div> </div>
<div> <div>
<div className="text-sm font-medium text-gray-900 dark:text-white">Revenue Optimized</div> <div className="text-sm font-medium text-gray-900 dark:text-white">{t('marketing.hero.visualContent.revenueOptimized')}</div>
<div className="text-xs text-gray-500 dark:text-gray-400">+$2,400 this week</div> <div className="text-xs text-gray-500 dark:text-gray-400">{t('marketing.hero.visualContent.thisWeek')}</div>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -70,7 +70,7 @@ const Navbar: React.FC<NavbarProps> = ({ darkMode, toggleTheme, user }) => {
<Link to="/" className="flex items-center gap-2 group"> <Link to="/" className="flex items-center gap-2 group">
<SmoothScheduleLogo className="h-12 w-12 text-gray-900 dark:text-white group-hover:text-brand-600 dark:group-hover:text-brand-400 transition-colors" /> <SmoothScheduleLogo className="h-12 w-12 text-gray-900 dark:text-white group-hover:text-brand-600 dark:group-hover:text-brand-400 transition-colors" />
<span className="text-xl font-bold text-gray-900 dark:text-white hidden sm:block"> <span className="text-xl font-bold text-gray-900 dark:text-white hidden sm:block">
Smooth Schedule {t('marketing.nav.brandName')}
</span> </span>
</Link> </Link>
@@ -102,7 +102,7 @@ const Navbar: React.FC<NavbarProps> = ({ darkMode, toggleTheme, user }) => {
<button <button
onClick={toggleTheme} onClick={toggleTheme}
className="p-2 rounded-lg text-gray-600 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors" className="p-2 rounded-lg text-gray-600 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"
aria-label={darkMode ? 'Switch to light mode' : 'Switch to dark mode'} aria-label={darkMode ? t('marketing.nav.switchToLightMode') : t('marketing.nav.switchToDarkMode')}
> >
{darkMode ? <Sun className="h-5 w-5" /> : <Moon className="h-5 w-5" />} {darkMode ? <Sun className="h-5 w-5" /> : <Moon className="h-5 w-5" />}
</button> </button>
@@ -136,7 +136,7 @@ const Navbar: React.FC<NavbarProps> = ({ darkMode, toggleTheme, user }) => {
<button <button
onClick={() => setIsMenuOpen(!isMenuOpen)} onClick={() => setIsMenuOpen(!isMenuOpen)}
className="lg:hidden p-2 rounded-lg text-gray-600 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors" className="lg:hidden p-2 rounded-lg text-gray-600 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"
aria-label="Toggle menu" aria-label={t('marketing.nav.toggleMenu')}
> >
{isMenuOpen ? <X className="h-6 w-6" /> : <Menu className="h-6 w-6" />} {isMenuOpen ? <X className="h-6 w-6" /> : <Menu className="h-6 w-6" />}
</button> </button>

View File

@@ -1164,14 +1164,35 @@
"contact": "Contact", "contact": "Contact",
"login": "Login", "login": "Login",
"getStarted": "Get Started", "getStarted": "Get Started",
"signup": "Sign Up" "signup": "Sign Up",
"brandName": "Smooth Schedule",
"switchToLightMode": "Switch to light mode",
"switchToDarkMode": "Switch to dark mode",
"toggleMenu": "Toggle menu"
}, },
"hero": { "hero": {
"headline": "Orchestrate Your Business", "headline": "Orchestrate Your Business",
"subheadline": "The enterprise-grade scheduling platform for service businesses. Multi-tenant, white-label ready, and designed for scale.", "subheadline": "The enterprise-grade scheduling platform for service businesses. Multi-tenant, white-label ready, and designed for scale.",
"cta": "Start Your Free Trial", "cta": "Start Your Free Trial",
"secondaryCta": "View Live Demo", "secondaryCta": "View Live Demo",
"trustedBy": "Powering next-generation service platforms" "trustedBy": "Powering next-generation service platforms",
"badge": "New: Automation Marketplace",
"title": "The Operating System for",
"titleHighlight": "Service Businesses",
"description": "Orchestrate your entire operation with intelligent scheduling and powerful automation. No coding required.",
"startFreeTrial": "Start Free Trial",
"watchDemo": "Watch Demo",
"noCreditCard": "No credit card required",
"freeTrial": "14-day free trial",
"cancelAnytime": "Cancel anytime",
"visualContent": {
"automatedSuccess": "Automated Success",
"autopilot": "Your business, running on autopilot.",
"revenue": "Revenue",
"noShows": "No-Shows",
"revenueOptimized": "Revenue Optimized",
"thisWeek": "+$2,400 this week"
}
}, },
"features": { "features": {
"title": "Built for Modern Service Businesses", "title": "Built for Modern Service Businesses",
@@ -1207,6 +1228,33 @@
"integrations": { "integrations": {
"title": "Extensible Platform", "title": "Extensible Platform",
"description": "API-first design allows deep integration with your existing tools and workflows." "description": "API-first design allows deep integration with your existing tools and workflows."
},
"pageTitle": "Built for Developers, Designed for Business",
"pageSubtitle": "SmoothSchedule isn't just cloud software. It's a programmable platform that adapts to your unique business logic.",
"automationEngine": {
"badge": "Automation Engine",
"title": "Automated Task Manager",
"description": "Most schedulers only book appointments. SmoothSchedule runs your business. Our \"Automated Task Manager\" executes internal tasks without blocking your calendar.",
"features": {
"recurringJobs": "Run recurring jobs (e.g., \"Every Monday at 9am\")",
"customLogic": "Execute custom logic securely",
"fullContext": "Access full customer and event context",
"zeroInfrastructure": "Zero infrastructure management"
}
},
"multiTenancy": {
"badge": "Enterprise Security",
"title": "True Data Isolation",
"description": "We don't just filter your data. We use dedicated secure vaults to physically separate your data from others. This provides the security of a private database with the cost-efficiency of cloud software.",
"strictDataIsolation": "Strict Data Isolation",
"customDomains": {
"title": "Custom Domains",
"description": "Serve the app on your own domain (e.g., `schedule.yourbrand.com`)."
},
"whiteLabeling": {
"title": "White Labeling",
"description": "Remove our branding and make the platform your own."
}
} }
}, },
"howItWorks": { "howItWorks": {
@@ -1336,6 +1384,25 @@
"2": "White-Labeling" "2": "White-Labeling"
} }
} }
},
"faq": {
"title": "Frequently Asked Questions",
"needPython": {
"question": "Do I need to know Python to use SmoothSchedule?",
"answer": "Not at all! You can use our pre-built plugins from the marketplace for common tasks like email reminders and reports. Python is only needed if you want to write custom scripts."
},
"exceedLimits": {
"question": "What happens if I exceed my plan's limits?",
"answer": "We'll notify you when you're close to your limit. If you exceed it, we'll give you a grace period to upgrade. We won't cut off your service immediately."
},
"customDomain": {
"question": "Can I use my own domain name?",
"answer": "Yes! On the Pro and Business plans, you can connect your own custom domain (e.g., booking.yourcompany.com) for a fully branded experience."
},
"dataSafety": {
"question": "Is my data safe?",
"answer": "Absolutely. We use dedicated secure vaults (Postgres schemas) to physically isolate your data from other customers. It's the gold standard for multi-tenant security."
}
} }
}, },
"testimonials": { "testimonials": {
@@ -1508,6 +1575,11 @@
"contact": { "contact": {
"title": "Get in Touch", "title": "Get in Touch",
"subtitle": "Have questions? We'd love to hear from you.", "subtitle": "Have questions? We'd love to hear from you.",
"formHeading": "Send us a message",
"successHeading": "Message Sent!",
"sendAnotherMessage": "Send another message",
"sidebarHeading": "Get in touch",
"scheduleCall": "Schedule a call",
"form": { "form": {
"name": "Your Name", "name": "Your Name",
"namePlaceholder": "John Smith", "namePlaceholder": "John Smith",
@@ -1541,6 +1613,7 @@
"talkToSales": "Talk to Sales" "talkToSales": "Talk to Sales"
}, },
"footer": { "footer": {
"brandName": "Smooth Schedule",
"product": { "product": {
"title": "Product" "title": "Product"
}, },
@@ -1597,6 +1670,62 @@
"code": "# Daily Manager Report\ntomorrow = date.today() + timedelta(days=1)\n\n# Get schedule stats\nstats = api.get_schedule_stats(date=tomorrow)\nrevenue = api.forecast_revenue(date=tomorrow)\n\n# Email manager\napi.send_email(\n to=\"manager@business.com\",\n subject=f\"Schedule for {tomorrow}\",\n body=f\"Bookings: {stats.count}, Est. Rev: ${revenue}\"\n)" "code": "# Daily Manager Report\ntomorrow = date.today() + timedelta(days=1)\n\n# Get schedule stats\nstats = api.get_schedule_stats(date=tomorrow)\nrevenue = api.forecast_revenue(date=tomorrow)\n\n# Email manager\napi.send_email(\n to=\"manager@business.com\",\n subject=f\"Schedule for {tomorrow}\",\n body=f\"Bookings: {stats.count}, Est. Rev: ${revenue}\"\n)"
} }
} }
},
"home": {
"featuresSection": {
"title": "The Operating System for Service Businesses",
"subtitle": "More than just a calendar. A complete platform engineered for growth, automation, and scale."
},
"features": {
"intelligentScheduling": {
"title": "Intelligent Scheduling",
"description": "Handle complex resources like staff, rooms, and equipment with concurrency limits."
},
"automationEngine": {
"title": "Automation Engine",
"description": "Install plugins from our marketplace or build your own to automate tasks."
},
"multiTenant": {
"title": "Multi-Tenant Architecture",
"description": "Dedicated secure vaults for enterprise-grade security and white-labeling."
},
"integratedPayments": {
"title": "Integrated Payments",
"description": "Seamlessly accept payments with Stripe integration and automated invoicing."
},
"customerManagement": {
"title": "Customer Management",
"description": "CRM features to track history, preferences, and engagement."
},
"advancedAnalytics": {
"title": "Advanced Analytics",
"description": "Deep insights into revenue, utilization, and staff performance."
}
},
"testimonialsSection": {
"title": "Trusted by Modern Businesses",
"subtitle": "See why forward-thinking companies choose SmoothSchedule."
},
"testimonials": {
"winBack": {
"quote": "I installed the 'Client Win-Back' plugin and recovered $2k in bookings the first week. No setup required.",
"author": "Alex Rivera",
"role": "Owner",
"company": "TechSalon"
},
"resources": {
"quote": "Finally, a scheduler that understands 'rooms' and 'equipment' are different from 'staff'. Perfect for our medical spa.",
"author": "Dr. Sarah Chen",
"role": "Owner",
"company": "Lumina MedSpa"
},
"whiteLabel": {
"quote": "We white-labeled SmoothSchedule for our franchise. The multi-tenant architecture made it effortless.",
"author": "Marcus Johnson",
"role": "Director of Ops",
"company": "FitNation"
}
}
} }
}, },
"trial": { "trial": {
@@ -1806,6 +1935,241 @@
"paymentProcessing": "Payment processing", "paymentProcessing": "Payment processing",
"prioritySupport": "Priority support" "prioritySupport": "Priority support"
} }
},
"privacyPolicy": {
"title": "Privacy Policy",
"lastUpdated": "Last updated: December 1, 2025",
"section1": {
"title": "1. Introduction",
"content": "Welcome to SmoothSchedule. We respect your privacy and are committed to protecting your personal data. This Privacy Policy explains how we collect, use, disclose, and safeguard your information when you use our scheduling platform and services."
},
"section2": {
"title": "2. Information We Collect",
"subsection1": {
"title": "2.1 Information You Provide",
"intro": "We collect information you directly provide to us, including:",
"items": [
"Account information (name, email, password, phone number)",
"Business information (business name, subdomain, industry)",
"Payment information (processed securely through third-party payment processors)",
"Customer data you input into the platform (appointments, resources, services)",
"Communications with our support team"
]
},
"subsection2": {
"title": "2.2 Automatically Collected Information",
"intro": "When you use our Service, we automatically collect:",
"items": [
"Log data (IP address, browser type, device information, operating system)",
"Usage data (pages visited, features used, time spent on platform)",
"Cookie data (session cookies, preference cookies)",
"Performance and error data for service improvement"
]
}
},
"section3": {
"title": "3. How We Use Your Information",
"intro": "We use the collected information for:",
"items": [
"Providing and maintaining the Service",
"Processing your transactions and managing subscriptions",
"Sending you service updates, security alerts, and administrative messages",
"Responding to your inquiries and providing customer support",
"Improving and optimizing our Service",
"Detecting and preventing fraud and security issues",
"Complying with legal obligations",
"Sending marketing communications (with your consent)"
]
},
"section4": {
"title": "4. Data Sharing and Disclosure",
"subsection1": {
"title": "4.1 We Share Data With:",
"items": [
"<strong>Service Providers:</strong> Third-party vendors who help us provide the Service (hosting, payment processing, analytics)",
"<strong>Business Transfers:</strong> In connection with any merger, sale, or acquisition of all or part of our company",
"<strong>Legal Requirements:</strong> When required by law, court order, or legal process",
"<strong>Protection of Rights:</strong> To protect our rights, property, or safety, or that of our users"
]
},
"subsection2": {
"title": "4.2 We Do NOT:",
"items": [
"Sell your personal data to third parties",
"Share your data for third-party marketing without consent",
"Access your customer data except for support or technical purposes"
]
}
},
"section5": {
"title": "5. Data Security",
"intro": "We implement industry-standard security measures to protect your data:",
"items": [
"Encryption of data in transit (TLS/SSL)",
"Encryption of sensitive data at rest",
"Regular security audits and vulnerability assessments",
"Access controls and authentication mechanisms",
"Regular backups and disaster recovery procedures"
],
"disclaimer": "However, no method of transmission over the Internet is 100% secure. While we strive to protect your data, we cannot guarantee absolute security."
},
"section6": {
"title": "6. Data Retention",
"content": "We retain your personal data for as long as necessary to provide the Service and fulfill the purposes described in this policy. When you cancel your account, we retain your data for 30 days to allow for account reactivation. After this period, your personal data may be anonymized and aggregated for internal analytics and service improvement purposes. Anonymized data cannot be used to identify you personally and cannot be retrieved or attributed to any person or account. We may also retain certain data if required for legal or legitimate business purposes."
},
"section7": {
"title": "7. Your Rights and Choices",
"intro": "Depending on your location, you may have the following rights:",
"items": [
"<strong>Access:</strong> Request a copy of your personal data",
"<strong>Correction:</strong> Update or correct inaccurate data",
"<strong>Deletion:</strong> Request deletion of your personal data",
"<strong>Portability:</strong> Receive your data in a portable format",
"<strong>Objection:</strong> Object to certain data processing activities",
"<strong>Restriction:</strong> Request restriction of data processing",
"<strong>Withdraw Consent:</strong> Withdraw previously given consent"
],
"contact": "To exercise these rights, please contact us at privacy@smoothschedule.com."
},
"section8": {
"title": "8. Cookies and Tracking",
"intro": "We use cookies and similar tracking technologies to:",
"items": [
"Maintain your session and keep you logged in",
"Remember your preferences and settings",
"Analyze usage patterns and improve our Service",
"Provide personalized content and features"
],
"disclaimer": "You can control cookies through your browser settings, but disabling cookies may affect your ability to use certain features of the Service."
},
"section9": {
"title": "9. Third-Party Services",
"content": "Our Service may contain links to third-party websites or integrate with third-party services (OAuth providers, payment processors). We are not responsible for the privacy practices of these third parties. We encourage you to review their privacy policies before providing any personal information."
},
"section10": {
"title": "10. Children's Privacy",
"content": "Our Service is not intended for children under 13 years of age. We do not knowingly collect personal information from children under 13. If you believe we have collected data from a child under 13, please contact us immediately so we can delete it."
},
"section11": {
"title": "11. International Data Transfers",
"content": "Your information may be transferred to and processed in countries other than your country of residence. These countries may have different data protection laws. We ensure appropriate safeguards are in place to protect your data in accordance with this Privacy Policy."
},
"section12": {
"title": "12. California Privacy Rights",
"content": "If you are a California resident, you have additional rights under the California Consumer Privacy Act (CCPA), including the right to know what personal information we collect, the right to delete your information, and the right to opt-out of the sale of your information (which we do not do)."
},
"section13": {
"title": "13. GDPR Compliance",
"content": "If you are in the European Economic Area (EEA), we process your personal data based on legal grounds such as consent, contract performance, legal obligations, or legitimate interests. You have rights under the General Data Protection Regulation (GDPR) including the right to lodge a complaint with a supervisory authority."
},
"section14": {
"title": "14. Changes to This Privacy Policy",
"content": "We may update this Privacy Policy from time to time. We will notify you of material changes by posting the new policy on this page and updating the \"Last updated\" date. We encourage you to review this Privacy Policy periodically."
},
"section15": {
"title": "15. Contact Us",
"intro": "If you have any questions about this Privacy Policy or our data practices, please contact us:",
"emailLabel": "Email:",
"email": "privacy@smoothschedule.com",
"dpoLabel": "Data Protection Officer:",
"dpo": "dpo@smoothschedule.com",
"websiteLabel": "Website:",
"website": "https://smoothschedule.com/contact"
}
},
"termsOfService": {
"title": "Terms of Service",
"lastUpdated": "Last updated: December 1, 2025",
"sections": {
"acceptanceOfTerms": {
"title": "1. Acceptance of Terms",
"content": "By accessing and using SmoothSchedule (\"the Service\"), you accept and agree to be bound by the terms and provision of this agreement. If you do not agree to these Terms of Service, please do not use the Service."
},
"descriptionOfService": {
"title": "2. Description of Service",
"content": "SmoothSchedule is a multi-tenant scheduling platform that enables businesses to manage appointments, resources, services, and customer interactions. The Service is provided on a subscription basis with various pricing tiers."
},
"userAccounts": {
"title": "3. User Accounts",
"intro": "To use the Service, you must:",
"requirements": {
"accurate": "Create an account with accurate and complete information",
"security": "Maintain the security of your account credentials",
"notify": "Notify us immediately of any unauthorized access",
"responsible": "Be responsible for all activities under your account"
}
},
"acceptableUse": {
"title": "4. Acceptable Use",
"intro": "You agree not to use the Service to:",
"prohibitions": {
"laws": "Violate any applicable laws or regulations",
"ip": "Infringe on intellectual property rights",
"malicious": "Transmit malicious code or interfere with the Service",
"unauthorized": "Attempt to gain unauthorized access to any part of the Service",
"fraudulent": "Use the Service for any fraudulent or illegal purpose"
}
},
"subscriptionsAndPayments": {
"title": "5. Subscriptions and Payments",
"intro": "Subscription terms:",
"terms": {
"billing": "Subscriptions are billed in advance on a recurring basis",
"cancel": "You may cancel your subscription at any time",
"refunds": "No refunds are provided for partial subscription periods",
"pricing": "We reserve the right to change pricing with 30 days notice",
"failed": "Failed payments may result in service suspension"
}
},
"trialPeriod": {
"title": "6. Trial Period",
"content": "We may offer a free trial period. At the end of the trial, your subscription will automatically convert to a paid plan unless you cancel. Trial terms may vary and are subject to change."
},
"dataAndPrivacy": {
"title": "7. Data and Privacy",
"content": "Your use of the Service is also governed by our Privacy Policy. We collect, use, and protect your data as described in that policy. You retain ownership of all data you input into the Service."
},
"serviceAvailability": {
"title": "8. Service Availability",
"content": "While we strive for 99.9% uptime, we do not guarantee uninterrupted access to the Service. We may perform maintenance, updates, or modifications that temporarily affect availability. We are not liable for any downtime or service interruptions."
},
"intellectualProperty": {
"title": "9. Intellectual Property",
"content": "The Service, including all software, designs, text, graphics, and other content, is owned by SmoothSchedule and protected by copyright, trademark, and other intellectual property laws. You may not copy, modify, distribute, or create derivative works without our express written permission."
},
"termination": {
"title": "10. Termination",
"content": "We may terminate or suspend your account and access to the Service at any time, with or without cause, with or without notice. Upon termination, your right to use the Service will immediately cease. We will retain your data for 30 days after termination, after which it may be permanently deleted."
},
"limitationOfLiability": {
"title": "11. Limitation of Liability",
"content": "To the maximum extent permitted by law, SmoothSchedule shall not be liable for any indirect, incidental, special, consequential, or punitive damages, or any loss of profits or revenues, whether incurred directly or indirectly, or any loss of data, use, goodwill, or other intangible losses resulting from your use of the Service."
},
"warrantyDisclaimer": {
"title": "12. Warranty Disclaimer",
"content": "The Service is provided \"as is\" and \"as available\" without warranties of any kind, either express or implied, including but not limited to implied warranties of merchantability, fitness for a particular purpose, or non-infringement."
},
"indemnification": {
"title": "13. Indemnification",
"content": "You agree to indemnify and hold harmless SmoothSchedule, its officers, directors, employees, and agents from any claims, damages, losses, liabilities, and expenses (including legal fees) arising from your use of the Service or violation of these Terms."
},
"changesToTerms": {
"title": "14. Changes to Terms",
"content": "We reserve the right to modify these Terms at any time. We will notify you of material changes via email or through the Service. Your continued use of the Service after such changes constitutes acceptance of the new Terms."
},
"governingLaw": {
"title": "15. Governing Law",
"content": "These Terms shall be governed by and construed in accordance with the laws of the jurisdiction in which SmoothSchedule is registered, without regard to its conflict of law provisions."
},
"contactUs": {
"title": "16. Contact Us",
"intro": "If you have any questions about these Terms of Service, please contact us at:",
"email": "Email:",
"emailAddress": "legal@smoothschedule.com",
"website": "Website:",
"websiteUrl": "https://smoothschedule.com/contact"
}
}
} }
} }
} }

View File

@@ -76,7 +76,7 @@ const ContactPage: React.FC = () => {
{/* Contact Form */} {/* Contact Form */}
<div> <div>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mb-8"> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mb-8">
Send us a message {t('marketing.contact.formHeading')}
</h2> </h2>
{submitted ? ( {submitted ? (
@@ -85,7 +85,7 @@ const ContactPage: React.FC = () => {
<Send className="h-8 w-8 text-green-600 dark:text-green-400" /> <Send className="h-8 w-8 text-green-600 dark:text-green-400" />
</div> </div>
<h3 className="text-lg font-semibold text-green-800 dark:text-green-200 mb-2"> <h3 className="text-lg font-semibold text-green-800 dark:text-green-200 mb-2">
Message Sent! {t('marketing.contact.successHeading')}
</h3> </h3>
<p className="text-green-600 dark:text-green-400"> <p className="text-green-600 dark:text-green-400">
{t('marketing.contact.form.success')} {t('marketing.contact.form.success')}
@@ -94,7 +94,7 @@ const ContactPage: React.FC = () => {
onClick={() => setSubmitted(false)} onClick={() => setSubmitted(false)}
className="mt-4 text-sm text-green-700 dark:text-green-300 underline" className="mt-4 text-sm text-green-700 dark:text-green-300 underline"
> >
Send another message {t('marketing.contact.sendAnotherMessage')}
</button> </button>
</div> </div>
) : ( ) : (
@@ -199,7 +199,7 @@ const ContactPage: React.FC = () => {
{/* Contact Info */} {/* Contact Info */}
<div> <div>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mb-8"> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mb-8">
Get in touch {t('marketing.contact.sidebarHeading')}
</h2> </h2>
<div className="space-y-6 mb-12"> <div className="space-y-6 mb-12">
@@ -244,7 +244,7 @@ const ContactPage: React.FC = () => {
href="mailto:sales@smoothschedule.com" href="mailto:sales@smoothschedule.com"
className="inline-flex items-center gap-2 text-brand-600 dark:text-brand-400 font-medium hover:text-brand-700 dark:hover:text-brand-300 transition-colors" className="inline-flex items-center gap-2 text-brand-600 dark:text-brand-400 font-medium hover:text-brand-700 dark:hover:text-brand-300 transition-colors"
> >
Schedule a call {t('marketing.contact.scheduleCall')}
<span aria-hidden="true">&rarr;</span> <span aria-hidden="true">&rarr;</span>
</a> </a>
</div> </div>

View File

@@ -39,10 +39,10 @@ def execute(context):
{/* Header */} {/* Header */}
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center mb-20"> <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center mb-20">
<h1 className="text-4xl sm:text-5xl font-bold text-gray-900 dark:text-white mb-6"> <h1 className="text-4xl sm:text-5xl font-bold text-gray-900 dark:text-white mb-6">
Built for Developers, Designed for Business {t('marketing.features.pageTitle')}
</h1> </h1>
<p className="text-xl text-gray-600 dark:text-gray-400 max-w-3xl mx-auto"> <p className="text-xl text-gray-600 dark:text-gray-400 max-w-3xl mx-auto">
SmoothSchedule isn't just cloud software. It's a programmable platform that adapts to your unique business logic. {t('marketing.features.pageSubtitle')}
</p> </p>
</div> </div>
@@ -53,22 +53,21 @@ def execute(context):
<div> <div>
<div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400 text-sm font-medium mb-6"> <div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400 text-sm font-medium mb-6">
<Zap className="w-4 h-4" /> <Zap className="w-4 h-4" />
<span>Automation Engine</span> <span>{t('marketing.features.automationEngine.badge')}</span>
</div> </div>
<h2 className="text-3xl font-bold text-gray-900 dark:text-white mb-6"> <h2 className="text-3xl font-bold text-gray-900 dark:text-white mb-6">
Automated Task Manager {t('marketing.features.automationEngine.title')}
</h2> </h2>
<p className="text-lg text-gray-600 dark:text-gray-400 mb-8"> <p className="text-lg text-gray-600 dark:text-gray-400 mb-8">
Most schedulers only book appointments. SmoothSchedule runs your business. {t('marketing.features.automationEngine.description')}
Our "Automated Task Manager" executes internal tasks without blocking your calendar.
</p> </p>
<ul className="space-y-4"> <ul className="space-y-4">
{[ {[
'Run recurring jobs (e.g., "Every Monday at 9am")', t('marketing.features.automationEngine.features.recurringJobs'),
'Execute custom logic securely', t('marketing.features.automationEngine.features.customLogic'),
'Access full customer and event context', t('marketing.features.automationEngine.features.fullContext'),
'Zero infrastructure management' t('marketing.features.automationEngine.features.zeroInfrastructure')
].map((item) => ( ].map((item) => (
<li key={item} className="flex items-center gap-3"> <li key={item} className="flex items-center gap-3">
<CheckCircle2 className="w-5 h-5 text-green-500" /> <CheckCircle2 className="w-5 h-5 text-green-500" />
@@ -108,7 +107,7 @@ def execute(context):
</div> </div>
<div className="mt-8 flex items-center justify-center gap-4 text-gray-500 text-sm"> <div className="mt-8 flex items-center justify-center gap-4 text-gray-500 text-sm">
<Lock className="w-4 h-4" /> <Lock className="w-4 h-4" />
<span>Strict Data Isolation</span> <span>{t('marketing.features.multiTenancy.strictDataIsolation')}</span>
</div> </div>
</div> </div>
</div> </div>
@@ -116,15 +115,13 @@ def execute(context):
<div className="order-1 lg:order-2"> <div className="order-1 lg:order-2">
<div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 text-sm font-medium mb-6"> <div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-blue-100 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400 text-sm font-medium mb-6">
<Shield className="w-4 h-4" /> <Shield className="w-4 h-4" />
<span>Enterprise Security</span> <span>{t('marketing.features.multiTenancy.badge')}</span>
</div> </div>
<h2 className="text-3xl font-bold text-gray-900 dark:text-white mb-6"> <h2 className="text-3xl font-bold text-gray-900 dark:text-white mb-6">
True Data Isolation {t('marketing.features.multiTenancy.title')}
</h2> </h2>
<p className="text-lg text-gray-600 dark:text-gray-400 mb-8"> <p className="text-lg text-gray-600 dark:text-gray-400 mb-8">
We don't just filter your data. We use dedicated secure vaults to physically {t('marketing.features.multiTenancy.description')}
separate your data from others. This provides the security of a private
database with the cost-efficiency of cloud software.
</p> </p>
<div className="grid sm:grid-cols-2 gap-6"> <div className="grid sm:grid-cols-2 gap-6">
@@ -133,9 +130,9 @@ def execute(context):
<Server className="w-6 h-6" /> <Server className="w-6 h-6" />
</div> </div>
<div> <div>
<h3 className="font-semibold text-gray-900 dark:text-white mb-1">Custom Domains</h3> <h3 className="font-semibold text-gray-900 dark:text-white mb-1">{t('marketing.features.multiTenancy.customDomains.title')}</h3>
<p className="text-sm text-gray-600 dark:text-gray-400"> <p className="text-sm text-gray-600 dark:text-gray-400">
Serve the app on your own domain (e.g., `schedule.yourbrand.com`). {t('marketing.features.multiTenancy.customDomains.description')}
</p> </p>
</div> </div>
</div> </div>
@@ -144,9 +141,9 @@ def execute(context):
<Code className="w-6 h-6" /> <Code className="w-6 h-6" />
</div> </div>
<div> <div>
<h3 className="font-semibold text-gray-900 dark:text-white mb-1">White Labeling</h3> <h3 className="font-semibold text-gray-900 dark:text-white mb-1">{t('marketing.features.multiTenancy.whiteLabeling.title')}</h3>
<p className="text-sm text-gray-600 dark:text-gray-400"> <p className="text-sm text-gray-600 dark:text-gray-400">
Remove our branding and make the platform your own. {t('marketing.features.multiTenancy.whiteLabeling.description')}
</p> </p>
</div> </div>
</div> </div>

View File

@@ -21,62 +21,62 @@ const HomePage: React.FC = () => {
const features = [ const features = [
{ {
icon: Calendar, icon: Calendar,
title: 'Intelligent Scheduling', title: t('marketing.home.features.intelligentScheduling.title'),
description: 'Handle complex resources like staff, rooms, and equipment with concurrency limits.', description: t('marketing.home.features.intelligentScheduling.description'),
color: 'brand', color: 'brand',
}, },
{ {
icon: Zap, icon: Zap,
title: 'Automation Engine', title: t('marketing.home.features.automationEngine.title'),
description: 'Install plugins from our marketplace or build your own to automate tasks.', description: t('marketing.home.features.automationEngine.description'),
color: 'purple', color: 'purple',
}, },
{ {
icon: Globe, icon: Globe,
title: 'Multi-Tenant Architecture', title: t('marketing.home.features.multiTenant.title'),
description: 'Dedicated secure vaults for enterprise-grade security and white-labeling.', description: t('marketing.home.features.multiTenant.description'),
color: 'green', color: 'green',
}, },
{ {
icon: CreditCard, icon: CreditCard,
title: 'Integrated Payments', title: t('marketing.home.features.integratedPayments.title'),
description: 'Seamlessly accept payments with Stripe integration and automated invoicing.', description: t('marketing.home.features.integratedPayments.description'),
color: 'orange', color: 'orange',
}, },
{ {
icon: Users, icon: Users,
title: 'Customer Management', title: t('marketing.home.features.customerManagement.title'),
description: 'CRM features to track history, preferences, and engagement.', description: t('marketing.home.features.customerManagement.description'),
color: 'pink', color: 'pink',
}, },
{ {
icon: BarChart3, icon: BarChart3,
title: 'Advanced Analytics', title: t('marketing.home.features.advancedAnalytics.title'),
description: 'Deep insights into revenue, utilization, and staff performance.', description: t('marketing.home.features.advancedAnalytics.description'),
color: 'indigo', color: 'indigo',
}, },
]; ];
const testimonials = [ const testimonials = [
{ {
quote: "I installed the 'Client Win-Back' plugin and recovered $2k in bookings the first week. No setup required.", quote: t('marketing.home.testimonials.winBack.quote'),
author: "Alex Rivera", author: t('marketing.home.testimonials.winBack.author'),
role: "Owner", role: t('marketing.home.testimonials.winBack.role'),
company: "TechSalon", company: t('marketing.home.testimonials.winBack.company'),
rating: 5, rating: 5,
}, },
{ {
quote: "Finally, a scheduler that understands 'rooms' and 'equipment' are different from 'staff'. Perfect for our medical spa.", quote: t('marketing.home.testimonials.resources.quote'),
author: "Dr. Sarah Chen", author: t('marketing.home.testimonials.resources.author'),
role: "Owner", role: t('marketing.home.testimonials.resources.role'),
company: "Lumina MedSpa", company: t('marketing.home.testimonials.resources.company'),
rating: 5, rating: 5,
}, },
{ {
quote: "We white-labeled SmoothSchedule for our franchise. The multi-tenant architecture made it effortless.", quote: t('marketing.home.testimonials.whiteLabel.quote'),
author: "Marcus Johnson", author: t('marketing.home.testimonials.whiteLabel.author'),
role: "Director of Ops", role: t('marketing.home.testimonials.whiteLabel.role'),
company: "FitNation", company: t('marketing.home.testimonials.whiteLabel.company'),
rating: 5, rating: 5,
}, },
]; ];
@@ -91,10 +91,10 @@ const HomePage: React.FC = () => {
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="text-center mb-16"> <div className="text-center mb-16">
<h2 className="text-3xl sm:text-4xl font-bold text-gray-900 dark:text-white mb-4"> <h2 className="text-3xl sm:text-4xl font-bold text-gray-900 dark:text-white mb-4">
The Operating System for Service Businesses {t('marketing.home.featuresSection.title')}
</h2> </h2>
<p className="text-lg text-gray-600 dark:text-gray-400 max-w-2xl mx-auto"> <p className="text-lg text-gray-600 dark:text-gray-400 max-w-2xl mx-auto">
More than just a calendar. A complete platform engineered for growth, automation, and scale. {t('marketing.home.featuresSection.subtitle')}
</p> </p>
</div> </div>
@@ -123,10 +123,10 @@ const HomePage: React.FC = () => {
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="text-center mb-16"> <div className="text-center mb-16">
<h2 className="text-3xl sm:text-4xl font-bold text-gray-900 dark:text-white mb-4"> <h2 className="text-3xl sm:text-4xl font-bold text-gray-900 dark:text-white mb-4">
Trusted by Modern Businesses {t('marketing.home.testimonialsSection.title')}
</h2> </h2>
<p className="text-lg text-gray-600 dark:text-gray-400"> <p className="text-lg text-gray-600 dark:text-gray-400">
See why forward-thinking companies choose SmoothSchedule. {t('marketing.home.testimonialsSection.subtitle')}
</p> </p>
</div> </div>

View File

@@ -12,10 +12,10 @@ const PricingPage: React.FC = () => {
{/* Header */} {/* Header */}
<div className="pt-24 pb-12 text-center px-4 sm:px-6 lg:px-8"> <div className="pt-24 pb-12 text-center px-4 sm:px-6 lg:px-8">
<h1 className="text-4xl font-bold text-gray-900 dark:text-white mb-4"> <h1 className="text-4xl font-bold text-gray-900 dark:text-white mb-4">
Simple, Transparent Pricing {t('marketing.pricing.title')}
</h1> </h1>
<p className="text-xl text-gray-600 dark:text-gray-400 max-w-2xl mx-auto"> <p className="text-xl text-gray-600 dark:text-gray-400 max-w-2xl mx-auto">
Start for free, upgrade as you grow. No hidden fees. {t('marketing.pricing.subtitle')}
</p> </p>
</div> </div>
@@ -27,24 +27,24 @@ const PricingPage: React.FC = () => {
{/* FAQ Section */} {/* FAQ Section */}
<div className="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8 pb-20"> <div className="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8 pb-20">
<h2 className="text-3xl font-bold text-center text-gray-900 dark:text-white mb-12"> <h2 className="text-3xl font-bold text-center text-gray-900 dark:text-white mb-12">
Frequently Asked Questions {t('marketing.pricing.faq.title')}
</h2> </h2>
<FAQAccordion items={[ <FAQAccordion items={[
{ {
question: "Do I need to know Python to use SmoothSchedule?", question: t('marketing.pricing.faq.needPython.question'),
answer: "Not at all! You can use our pre-built plugins from the marketplace for common tasks like email reminders and reports. Python is only needed if you want to write custom scripts." answer: t('marketing.pricing.faq.needPython.answer')
}, },
{ {
question: "What happens if I exceed my plan's limits?", question: t('marketing.pricing.faq.exceedLimits.question'),
answer: "We'll notify you when you're close to your limit. If you exceed it, we'll give you a grace period to upgrade. We won't cut off your service immediately." answer: t('marketing.pricing.faq.exceedLimits.answer')
}, },
{ {
question: "Can I use my own domain name?", question: t('marketing.pricing.faq.customDomain.question'),
answer: "Yes! On the Pro and Business plans, you can connect your own custom domain (e.g., booking.yourcompany.com) for a fully branded experience." answer: t('marketing.pricing.faq.customDomain.answer')
}, },
{ {
question: "Is my data safe?", question: t('marketing.pricing.faq.dataSafety.question'),
answer: "Absolutely. We use dedicated secure vaults (Postgres schemas) to physically isolate your data from other customers. It's the gold standard for multi-tenant security." answer: t('marketing.pricing.faq.dataSafety.answer')
} }
]} /> ]} />
</div> </div>

View File

@@ -1,16 +1,19 @@
import React from 'react'; import React from 'react';
import { useTranslation } from 'react-i18next';
const PrivacyPolicyPage: React.FC = () => { const PrivacyPolicyPage: React.FC = () => {
const { t } = useTranslation();
return ( return (
<div> <div>
{/* Header Section */} {/* Header Section */}
<section className="py-20 lg:py-28 bg-gradient-to-br from-white via-brand-50/30 to-white dark:from-gray-900 dark:via-gray-800 dark:to-gray-900"> <section className="py-20 lg:py-28 bg-gradient-to-br from-white via-brand-50/30 to-white dark:from-gray-900 dark:via-gray-800 dark:to-gray-900">
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center"> <div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
<h1 className="text-4xl sm:text-5xl font-bold text-gray-900 dark:text-white mb-6"> <h1 className="text-4xl sm:text-5xl font-bold text-gray-900 dark:text-white mb-6">
Privacy Policy {t('marketing.privacyPolicy.title')}
</h1> </h1>
<p className="text-xl text-gray-600 dark:text-gray-400"> <p className="text-xl text-gray-600 dark:text-gray-400">
Last updated: December 1, 2025 {t('marketing.privacyPolicy.lastUpdated')}
</p> </p>
</div> </div>
</section> </section>
@@ -20,161 +23,145 @@ const PrivacyPolicyPage: React.FC = () => {
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8"> <div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="prose prose-lg dark:prose-invert max-w-none"> <div className="prose prose-lg dark:prose-invert max-w-none">
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">1. Introduction</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section1.title')}</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
Welcome to SmoothSchedule. We respect your privacy and are committed to protecting your personal data. This Privacy Policy explains how we collect, use, disclose, and safeguard your information when you use our scheduling platform and services. {t('marketing.privacyPolicy.section1.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">2. Information We Collect</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section2.title')}</h2>
<h3 className="text-xl font-semibold text-gray-900 dark:text-white mt-6 mb-3">2.1 Information You Provide</h3> <h3 className="text-xl font-semibold text-gray-900 dark:text-white mt-6 mb-3">{t('marketing.privacyPolicy.section2.subsection1.title')}</h3>
<p className="text-gray-600 dark:text-gray-400 mb-4"> <p className="text-gray-600 dark:text-gray-400 mb-4">
We collect information you directly provide to us, including: {t('marketing.privacyPolicy.section2.subsection1.intro')}
</p> </p>
<ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6"> <ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6">
<li>Account information (name, email, password, phone number)</li> {(t('marketing.privacyPolicy.section2.subsection1.items', { returnObjects: true }) as string[]).map((item, index) => (
<li>Business information (business name, subdomain, industry)</li> <li key={index}>{item}</li>
<li>Payment information (processed securely through third-party payment processors)</li> ))}
<li>Customer data you input into the platform (appointments, resources, services)</li>
<li>Communications with our support team</li>
</ul> </ul>
<h3 className="text-xl font-semibold text-gray-900 dark:text-white mt-6 mb-3">2.2 Automatically Collected Information</h3> <h3 className="text-xl font-semibold text-gray-900 dark:text-white mt-6 mb-3">{t('marketing.privacyPolicy.section2.subsection2.title')}</h3>
<p className="text-gray-600 dark:text-gray-400 mb-4"> <p className="text-gray-600 dark:text-gray-400 mb-4">
When you use our Service, we automatically collect: {t('marketing.privacyPolicy.section2.subsection2.intro')}
</p> </p>
<ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6"> <ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6">
<li>Log data (IP address, browser type, device information, operating system)</li> {(t('marketing.privacyPolicy.section2.subsection2.items', { returnObjects: true }) as string[]).map((item, index) => (
<li>Usage data (pages visited, features used, time spent on platform)</li> <li key={index}>{item}</li>
<li>Cookie data (session cookies, preference cookies)</li> ))}
<li>Performance and error data for service improvement</li>
</ul> </ul>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">3. How We Use Your Information</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section3.title')}</h2>
<p className="text-gray-600 dark:text-gray-400 mb-4"> <p className="text-gray-600 dark:text-gray-400 mb-4">
We use the collected information for: {t('marketing.privacyPolicy.section3.intro')}
</p> </p>
<ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6"> <ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6">
<li>Providing and maintaining the Service</li> {(t('marketing.privacyPolicy.section3.items', { returnObjects: true }) as string[]).map((item, index) => (
<li>Processing your transactions and managing subscriptions</li> <li key={index}>{item}</li>
<li>Sending you service updates, security alerts, and administrative messages</li> ))}
<li>Responding to your inquiries and providing customer support</li>
<li>Improving and optimizing our Service</li>
<li>Detecting and preventing fraud and security issues</li>
<li>Complying with legal obligations</li>
<li>Sending marketing communications (with your consent)</li>
</ul> </ul>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">4. Data Sharing and Disclosure</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section4.title')}</h2>
<h3 className="text-xl font-semibold text-gray-900 dark:text-white mt-6 mb-3">4.1 We Share Data With:</h3> <h3 className="text-xl font-semibold text-gray-900 dark:text-white mt-6 mb-3">{t('marketing.privacyPolicy.section4.subsection1.title')}</h3>
<ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6"> <ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6">
<li><strong>Service Providers:</strong> Third-party vendors who help us provide the Service (hosting, payment processing, analytics)</li> {(t('marketing.privacyPolicy.section4.subsection1.items', { returnObjects: true }) as string[]).map((item, index) => (
<li><strong>Business Transfers:</strong> In connection with any merger, sale, or acquisition of all or part of our company</li> <li key={index} dangerouslySetInnerHTML={{ __html: item }} />
<li><strong>Legal Requirements:</strong> When required by law, court order, or legal process</li> ))}
<li><strong>Protection of Rights:</strong> To protect our rights, property, or safety, or that of our users</li>
</ul> </ul>
<h3 className="text-xl font-semibold text-gray-900 dark:text-white mt-6 mb-3">4.2 We Do NOT:</h3> <h3 className="text-xl font-semibold text-gray-900 dark:text-white mt-6 mb-3">{t('marketing.privacyPolicy.section4.subsection2.title')}</h3>
<ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6"> <ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6">
<li>Sell your personal data to third parties</li> {(t('marketing.privacyPolicy.section4.subsection2.items', { returnObjects: true }) as string[]).map((item, index) => (
<li>Share your data for third-party marketing without consent</li> <li key={index}>{item}</li>
<li>Access your customer data except for support or technical purposes</li> ))}
</ul> </ul>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">5. Data Security</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section5.title')}</h2>
<p className="text-gray-600 dark:text-gray-400 mb-4"> <p className="text-gray-600 dark:text-gray-400 mb-4">
We implement industry-standard security measures to protect your data: {t('marketing.privacyPolicy.section5.intro')}
</p> </p>
<ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6"> <ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6">
<li>Encryption of data in transit (TLS/SSL)</li> {(t('marketing.privacyPolicy.section5.items', { returnObjects: true }) as string[]).map((item, index) => (
<li>Encryption of sensitive data at rest</li> <li key={index}>{item}</li>
<li>Regular security audits and vulnerability assessments</li> ))}
<li>Access controls and authentication mechanisms</li>
<li>Regular backups and disaster recovery procedures</li>
</ul> </ul>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
However, no method of transmission over the Internet is 100% secure. While we strive to protect your data, we cannot guarantee absolute security. {t('marketing.privacyPolicy.section5.disclaimer')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">6. Data Retention</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section6.title')}</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
We retain your personal data for as long as necessary to provide the Service and fulfill the purposes described in this policy. When you cancel your account, we retain your data for 30 days to allow for account reactivation. After this period, your personal data may be anonymized and aggregated for internal analytics and service improvement purposes. Anonymized data cannot be used to identify you personally and cannot be retrieved or attributed to any person or account. We may also retain certain data if required for legal or legitimate business purposes. {t('marketing.privacyPolicy.section6.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">7. Your Rights and Choices</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section7.title')}</h2>
<p className="text-gray-600 dark:text-gray-400 mb-4"> <p className="text-gray-600 dark:text-gray-400 mb-4">
Depending on your location, you may have the following rights: {t('marketing.privacyPolicy.section7.intro')}
</p> </p>
<ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6"> <ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6">
<li><strong>Access:</strong> Request a copy of your personal data</li> {(t('marketing.privacyPolicy.section7.items', { returnObjects: true }) as string[]).map((item, index) => (
<li><strong>Correction:</strong> Update or correct inaccurate data</li> <li key={index} dangerouslySetInnerHTML={{ __html: item }} />
<li><strong>Deletion:</strong> Request deletion of your personal data</li> ))}
<li><strong>Portability:</strong> Receive your data in a portable format</li>
<li><strong>Objection:</strong> Object to certain data processing activities</li>
<li><strong>Restriction:</strong> Request restriction of data processing</li>
<li><strong>Withdraw Consent:</strong> Withdraw previously given consent</li>
</ul> </ul>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
To exercise these rights, please contact us at privacy@smoothschedule.com. {t('marketing.privacyPolicy.section7.contact')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">8. Cookies and Tracking</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section8.title')}</h2>
<p className="text-gray-600 dark:text-gray-400 mb-4"> <p className="text-gray-600 dark:text-gray-400 mb-4">
We use cookies and similar tracking technologies to: {t('marketing.privacyPolicy.section8.intro')}
</p> </p>
<ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6"> <ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6">
<li>Maintain your session and keep you logged in</li> {(t('marketing.privacyPolicy.section8.items', { returnObjects: true }) as string[]).map((item, index) => (
<li>Remember your preferences and settings</li> <li key={index}>{item}</li>
<li>Analyze usage patterns and improve our Service</li> ))}
<li>Provide personalized content and features</li>
</ul> </ul>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
You can control cookies through your browser settings, but disabling cookies may affect your ability to use certain features of the Service. {t('marketing.privacyPolicy.section8.disclaimer')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">9. Third-Party Services</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section9.title')}</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
Our Service may contain links to third-party websites or integrate with third-party services (OAuth providers, payment processors). We are not responsible for the privacy practices of these third parties. We encourage you to review their privacy policies before providing any personal information. {t('marketing.privacyPolicy.section9.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">10. Children's Privacy</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section10.title')}</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
Our Service is not intended for children under 13 years of age. We do not knowingly collect personal information from children under 13. If you believe we have collected data from a child under 13, please contact us immediately so we can delete it. {t('marketing.privacyPolicy.section10.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">11. International Data Transfers</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section11.title')}</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
Your information may be transferred to and processed in countries other than your country of residence. These countries may have different data protection laws. We ensure appropriate safeguards are in place to protect your data in accordance with this Privacy Policy. {t('marketing.privacyPolicy.section11.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">12. California Privacy Rights</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section12.title')}</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
If you are a California resident, you have additional rights under the California Consumer Privacy Act (CCPA), including the right to know what personal information we collect, the right to delete your information, and the right to opt-out of the sale of your information (which we do not do). {t('marketing.privacyPolicy.section12.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">13. GDPR Compliance</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section13.title')}</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
If you are in the European Economic Area (EEA), we process your personal data based on legal grounds such as consent, contract performance, legal obligations, or legitimate interests. You have rights under the General Data Protection Regulation (GDPR) including the right to lodge a complaint with a supervisory authority. {t('marketing.privacyPolicy.section13.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">14. Changes to This Privacy Policy</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section14.title')}</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
We may update this Privacy Policy from time to time. We will notify you of material changes by posting the new policy on this page and updating the "Last updated" date. We encourage you to review this Privacy Policy periodically. {t('marketing.privacyPolicy.section14.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">15. Contact Us</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">{t('marketing.privacyPolicy.section15.title')}</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
If you have any questions about this Privacy Policy or our data practices, please contact us: {t('marketing.privacyPolicy.section15.intro')}
</p> </p>
<p className="text-gray-600 dark:text-gray-400 mb-2"> <p className="text-gray-600 dark:text-gray-400 mb-2">
<strong>Email:</strong> privacy@smoothschedule.com <strong>{t('marketing.privacyPolicy.section15.emailLabel')}</strong> {t('marketing.privacyPolicy.section15.email')}
</p> </p>
<p className="text-gray-600 dark:text-gray-400 mb-2"> <p className="text-gray-600 dark:text-gray-400 mb-2">
<strong>Data Protection Officer:</strong> dpo@smoothschedule.com <strong>{t('marketing.privacyPolicy.section15.dpoLabel')}</strong> {t('marketing.privacyPolicy.section15.dpo')}
</p> </p>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
<strong>Website:</strong> https://smoothschedule.com/contact <strong>{t('marketing.privacyPolicy.section15.websiteLabel')}</strong> {t('marketing.privacyPolicy.section15.website')}
</p> </p>
</div> </div>

View File

@@ -1,16 +1,19 @@
import React from 'react'; import React from 'react';
import { useTranslation } from 'react-i18next';
const TermsOfServicePage: React.FC = () => { const TermsOfServicePage: React.FC = () => {
const { t } = useTranslation();
return ( return (
<div> <div>
{/* Header Section */} {/* Header Section */}
<section className="py-20 lg:py-28 bg-gradient-to-br from-white via-brand-50/30 to-white dark:from-gray-900 dark:via-gray-800 dark:to-gray-900"> <section className="py-20 lg:py-28 bg-gradient-to-br from-white via-brand-50/30 to-white dark:from-gray-900 dark:via-gray-800 dark:to-gray-900">
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center"> <div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
<h1 className="text-4xl sm:text-5xl font-bold text-gray-900 dark:text-white mb-6"> <h1 className="text-4xl sm:text-5xl font-bold text-gray-900 dark:text-white mb-6">
Terms of Service {t('marketing.termsOfService.title')}
</h1> </h1>
<p className="text-xl text-gray-600 dark:text-gray-400"> <p className="text-xl text-gray-600 dark:text-gray-400">
Last updated: December 1, 2025 {t('marketing.termsOfService.lastUpdated')}
</p> </p>
</div> </div>
</section> </section>
@@ -20,110 +23,142 @@ const TermsOfServicePage: React.FC = () => {
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8"> <div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="prose prose-lg dark:prose-invert max-w-none"> <div className="prose prose-lg dark:prose-invert max-w-none">
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">1. Acceptance of Terms</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.acceptanceOfTerms.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
By accessing and using SmoothSchedule ("the Service"), you accept and agree to be bound by the terms and provision of this agreement. If you do not agree to these Terms of Service, please do not use the Service. {t('marketing.termsOfService.sections.acceptanceOfTerms.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">2. Description of Service</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.descriptionOfService.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
SmoothSchedule is a multi-tenant scheduling platform that enables businesses to manage appointments, resources, services, and customer interactions. The Service is provided on a subscription basis with various pricing tiers. {t('marketing.termsOfService.sections.descriptionOfService.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">3. User Accounts</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.userAccounts.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-4"> <p className="text-gray-600 dark:text-gray-400 mb-4">
To use the Service, you must: {t('marketing.termsOfService.sections.userAccounts.intro')}
</p> </p>
<ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6"> <ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6">
<li>Create an account with accurate and complete information</li> <li>{t('marketing.termsOfService.sections.userAccounts.requirements.accurate')}</li>
<li>Maintain the security of your account credentials</li> <li>{t('marketing.termsOfService.sections.userAccounts.requirements.security')}</li>
<li>Notify us immediately of any unauthorized access</li> <li>{t('marketing.termsOfService.sections.userAccounts.requirements.notify')}</li>
<li>Be responsible for all activities under your account</li> <li>{t('marketing.termsOfService.sections.userAccounts.requirements.responsible')}</li>
</ul> </ul>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">4. Acceptable Use</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.acceptableUse.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-4"> <p className="text-gray-600 dark:text-gray-400 mb-4">
You agree not to use the Service to: {t('marketing.termsOfService.sections.acceptableUse.intro')}
</p> </p>
<ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6"> <ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6">
<li>Violate any applicable laws or regulations</li> <li>{t('marketing.termsOfService.sections.acceptableUse.prohibitions.laws')}</li>
<li>Infringe on intellectual property rights</li> <li>{t('marketing.termsOfService.sections.acceptableUse.prohibitions.ip')}</li>
<li>Transmit malicious code or interfere with the Service</li> <li>{t('marketing.termsOfService.sections.acceptableUse.prohibitions.malicious')}</li>
<li>Attempt to gain unauthorized access to any part of the Service</li> <li>{t('marketing.termsOfService.sections.acceptableUse.prohibitions.unauthorized')}</li>
<li>Use the Service for any fraudulent or illegal purpose</li> <li>{t('marketing.termsOfService.sections.acceptableUse.prohibitions.fraudulent')}</li>
</ul> </ul>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">5. Subscriptions and Payments</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.subscriptionsAndPayments.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-4"> <p className="text-gray-600 dark:text-gray-400 mb-4">
Subscription terms: {t('marketing.termsOfService.sections.subscriptionsAndPayments.intro')}
</p> </p>
<ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6"> <ul className="list-disc pl-6 text-gray-600 dark:text-gray-400 mb-6">
<li>Subscriptions are billed in advance on a recurring basis</li> <li>{t('marketing.termsOfService.sections.subscriptionsAndPayments.terms.billing')}</li>
<li>You may cancel your subscription at any time</li> <li>{t('marketing.termsOfService.sections.subscriptionsAndPayments.terms.cancel')}</li>
<li>No refunds are provided for partial subscription periods</li> <li>{t('marketing.termsOfService.sections.subscriptionsAndPayments.terms.refunds')}</li>
<li>We reserve the right to change pricing with 30 days notice</li> <li>{t('marketing.termsOfService.sections.subscriptionsAndPayments.terms.pricing')}</li>
<li>Failed payments may result in service suspension</li> <li>{t('marketing.termsOfService.sections.subscriptionsAndPayments.terms.failed')}</li>
</ul> </ul>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">6. Trial Period</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.trialPeriod.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
We may offer a free trial period. At the end of the trial, your subscription will automatically convert to a paid plan unless you cancel. Trial terms may vary and are subject to change. {t('marketing.termsOfService.sections.trialPeriod.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">7. Data and Privacy</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.dataAndPrivacy.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
Your use of the Service is also governed by our Privacy Policy. We collect, use, and protect your data as described in that policy. You retain ownership of all data you input into the Service. {t('marketing.termsOfService.sections.dataAndPrivacy.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">8. Service Availability</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.serviceAvailability.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
While we strive for 99.9% uptime, we do not guarantee uninterrupted access to the Service. We may perform maintenance, updates, or modifications that temporarily affect availability. We are not liable for any downtime or service interruptions. {t('marketing.termsOfService.sections.serviceAvailability.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">9. Intellectual Property</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.intellectualProperty.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
The Service, including all software, designs, text, graphics, and other content, is owned by SmoothSchedule and protected by copyright, trademark, and other intellectual property laws. You may not copy, modify, distribute, or create derivative works without our express written permission. {t('marketing.termsOfService.sections.intellectualProperty.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">10. Termination</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.termination.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
We may terminate or suspend your account and access to the Service at any time, with or without cause, with or without notice. Upon termination, your right to use the Service will immediately cease. We will retain your data for 30 days after termination, after which it may be permanently deleted. {t('marketing.termsOfService.sections.termination.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">11. Limitation of Liability</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.limitationOfLiability.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
To the maximum extent permitted by law, SmoothSchedule shall not be liable for any indirect, incidental, special, consequential, or punitive damages, or any loss of profits or revenues, whether incurred directly or indirectly, or any loss of data, use, goodwill, or other intangible losses resulting from your use of the Service. {t('marketing.termsOfService.sections.limitationOfLiability.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">12. Warranty Disclaimer</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.warrantyDisclaimer.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
The Service is provided "as is" and "as available" without warranties of any kind, either express or implied, including but not limited to implied warranties of merchantability, fitness for a particular purpose, or non-infringement. {t('marketing.termsOfService.sections.warrantyDisclaimer.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">13. Indemnification</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.indemnification.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
You agree to indemnify and hold harmless SmoothSchedule, its officers, directors, employees, and agents from any claims, damages, losses, liabilities, and expenses (including legal fees) arising from your use of the Service or violation of these Terms. {t('marketing.termsOfService.sections.indemnification.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">14. Changes to Terms</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.changesToTerms.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
We reserve the right to modify these Terms at any time. We will notify you of material changes via email or through the Service. Your continued use of the Service after such changes constitutes acceptance of the new Terms. {t('marketing.termsOfService.sections.changesToTerms.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">15. Governing Law</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.governingLaw.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
These Terms shall be governed by and construed in accordance with the laws of the jurisdiction in which SmoothSchedule is registered, without regard to its conflict of law provisions. {t('marketing.termsOfService.sections.governingLaw.content')}
</p> </p>
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">16. Contact Us</h2> <h2 className="text-2xl font-bold text-gray-900 dark:text-white mt-8 mb-4">
{t('marketing.termsOfService.sections.contactUs.title')}
</h2>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
If you have any questions about these Terms of Service, please contact us at: {t('marketing.termsOfService.sections.contactUs.intro')}
</p> </p>
<p className="text-gray-600 dark:text-gray-400 mb-2"> <p className="text-gray-600 dark:text-gray-400 mb-2">
<strong>Email:</strong> legal@smoothschedule.com <strong>{t('marketing.termsOfService.sections.contactUs.email')}</strong> {t('marketing.termsOfService.sections.contactUs.emailAddress')}
</p> </p>
<p className="text-gray-600 dark:text-gray-400 mb-6"> <p className="text-gray-600 dark:text-gray-400 mb-6">
<strong>Website:</strong> https://smoothschedule.com/contact <strong>{t('marketing.termsOfService.sections.contactUs.website')}</strong> {t('marketing.termsOfService.sections.contactUs.websiteUrl')}
</p> </p>
</div> </div>