Add footer with links

This commit is contained in:
gpt-engineer-app[bot]
2025-09-28 14:42:49 +00:00
parent 7de6b974ed
commit fb708a36d9
5 changed files with 375 additions and 13 deletions

View File

@@ -4,6 +4,7 @@ import { TooltipProvider } from "@/components/ui/tooltip";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { BrowserRouter, Routes, Route } from "react-router-dom"; import { BrowserRouter, Routes, Route } from "react-router-dom";
import { AuthProvider } from "@/hooks/useAuth"; import { AuthProvider } from "@/hooks/useAuth";
import { Footer } from "@/components/layout/Footer";
import Index from "./pages/Index"; import Index from "./pages/Index";
import Parks from "./pages/Parks"; import Parks from "./pages/Parks";
import ParkDetail from "./pages/ParkDetail"; import ParkDetail from "./pages/ParkDetail";
@@ -13,6 +14,9 @@ import Manufacturers from "./pages/Manufacturers";
import Auth from "./pages/Auth"; import Auth from "./pages/Auth";
import Profile from "./pages/Profile"; import Profile from "./pages/Profile";
import NotFound from "./pages/NotFound"; import NotFound from "./pages/NotFound";
import Terms from "./pages/Terms";
import Privacy from "./pages/Privacy";
import SubmissionGuidelines from "./pages/SubmissionGuidelines";
const queryClient = new QueryClient(); const queryClient = new QueryClient();
@@ -23,19 +27,27 @@ const App = () => (
<Toaster /> <Toaster />
<Sonner /> <Sonner />
<BrowserRouter> <BrowserRouter>
<Routes> <div className="min-h-screen flex flex-col">
<Route path="/" element={<Index />} /> <div className="flex-1">
<Route path="/parks" element={<Parks />} /> <Routes>
<Route path="/parks/:slug" element={<ParkDetail />} /> <Route path="/" element={<Index />} />
<Route path="/parks/:parkSlug/rides/:rideSlug" element={<RideDetail />} /> <Route path="/parks" element={<Parks />} />
<Route path="/rides" element={<Rides />} /> <Route path="/parks/:slug" element={<ParkDetail />} />
<Route path="/manufacturers" element={<Manufacturers />} /> <Route path="/parks/:parkSlug/rides/:rideSlug" element={<RideDetail />} />
<Route path="/auth" element={<Auth />} /> <Route path="/rides" element={<Rides />} />
<Route path="/profile" element={<Profile />} /> <Route path="/manufacturers" element={<Manufacturers />} />
<Route path="/profile/:username" element={<Profile />} /> <Route path="/auth" element={<Auth />} />
{/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */} <Route path="/profile" element={<Profile />} />
<Route path="*" element={<NotFound />} /> <Route path="/profile/:username" element={<Profile />} />
</Routes> <Route path="/terms" element={<Terms />} />
<Route path="/privacy" element={<Privacy />} />
<Route path="/submission-guidelines" element={<SubmissionGuidelines />} />
{/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */}
<Route path="*" element={<NotFound />} />
</Routes>
</div>
<Footer />
</div>
</BrowserRouter> </BrowserRouter>
</TooltipProvider> </TooltipProvider>
</AuthProvider> </AuthProvider>

View File

@@ -0,0 +1,35 @@
import { Link } from 'react-router-dom';
export function Footer() {
return (
<footer className="border-t border-border bg-background py-4">
<div className="container mx-auto px-4">
<div className="flex flex-col sm:flex-row justify-between items-center gap-2 text-xs text-muted-foreground">
<div>
© 2024 ThrillWiki. All rights reserved.
</div>
<div className="flex items-center gap-4">
<Link
to="/terms"
className="hover:text-foreground transition-colors"
>
Terms of Service
</Link>
<Link
to="/privacy"
className="hover:text-foreground transition-colors"
>
Privacy Policy
</Link>
<Link
to="/submission-guidelines"
className="hover:text-foreground transition-colors"
>
Submission Guidelines
</Link>
</div>
</div>
</div>
</footer>
);
}

86
src/pages/Privacy.tsx Normal file
View File

@@ -0,0 +1,86 @@
import { Header } from '@/components/layout/Header';
export default function Privacy() {
return (
<div className="min-h-screen bg-background">
<Header />
<main className="container mx-auto px-4 py-8 max-w-4xl">
<div className="prose dark:prose-invert max-w-none">
<h1 className="text-4xl font-bold mb-8">Privacy Policy</h1>
<section className="mb-8">
<h2 className="text-2xl font-semibold mb-4">Information We Collect</h2>
<p className="text-muted-foreground mb-4">
We collect information you provide directly to us, such as when you create an account, submit reviews, or contact us.
</p>
<ul className="list-disc pl-6 text-muted-foreground mb-4">
<li>Account information (email, username, display name)</li>
<li>Profile information and photos</li>
<li>Reviews, ratings, and comments</li>
<li>Photos and media uploads</li>
</ul>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold mb-4">How We Use Your Information</h2>
<p className="text-muted-foreground mb-4">
We use the information we collect to:
</p>
<ul className="list-disc pl-6 text-muted-foreground mb-4">
<li>Provide and maintain ThrillWiki services</li>
<li>Process and display your reviews and content</li>
<li>Communicate with you about your account</li>
<li>Improve our services and user experience</li>
<li>Prevent fraud and maintain security</li>
</ul>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold mb-4">Information Sharing</h2>
<p className="text-muted-foreground mb-4">
We do not sell, trade, or share your personal information with third parties except as described in this policy:
</p>
<ul className="list-disc pl-6 text-muted-foreground mb-4">
<li>Public content (reviews, ratings) is visible to all users</li>
<li>We may share information if required by law</li>
<li>We may share aggregated, non-personal data for research</li>
</ul>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold mb-4">Data Security</h2>
<p className="text-muted-foreground mb-4">
We implement appropriate security measures to protect your personal information against unauthorized access, alteration, disclosure, or destruction.
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold mb-4">Your Rights</h2>
<p className="text-muted-foreground mb-4">
You have the right to:
</p>
<ul className="list-disc pl-6 text-muted-foreground mb-4">
<li>Access and update your account information</li>
<li>Delete your account and associated data</li>
<li>Export your data</li>
<li>Opt out of communications</li>
</ul>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold mb-4">Cookies and Analytics</h2>
<p className="text-muted-foreground mb-4">
We use cookies and similar technologies to improve your experience and analyze usage patterns. You can control cookie settings in your browser.
</p>
</section>
<div className="mt-12 p-4 bg-muted rounded-lg">
<p className="text-sm text-muted-foreground">
Last updated: January 2024
</p>
</div>
</div>
</main>
</div>
);
}

View File

@@ -0,0 +1,161 @@
import { Header } from '@/components/layout/Header';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge';
import { CheckCircle, AlertTriangle, Camera, Star } from 'lucide-react';
export default function SubmissionGuidelines() {
return (
<div className="min-h-screen bg-background">
<Header />
<main className="container mx-auto px-4 py-8 max-w-4xl">
<div className="mb-8">
<h1 className="text-4xl font-bold mb-4">Submission Guidelines</h1>
<p className="text-xl text-muted-foreground">
Help us maintain the quality and accuracy of ThrillWiki by following these guidelines when contributing content.
</p>
</div>
<div className="grid gap-6">
<Card>
<CardHeader>
<CardTitle className="flex items-center gap-2">
<Star className="w-5 h-5" />
Writing Quality Reviews
</CardTitle>
<CardDescription>
Great reviews help other enthusiasts make informed decisions
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div className="flex items-start gap-3">
<CheckCircle className="w-5 h-5 text-green-500 mt-0.5" />
<div>
<h4 className="font-medium">Be Specific and Detailed</h4>
<p className="text-sm text-muted-foreground">
Describe the ride experience, intensity, theming, and what makes it unique
</p>
</div>
</div>
<div className="flex items-start gap-3">
<CheckCircle className="w-5 h-5 text-green-500 mt-0.5" />
<div>
<h4 className="font-medium">Consider Different Perspectives</h4>
<p className="text-sm text-muted-foreground">
Think about families, thrill seekers, and first-time visitors
</p>
</div>
</div>
<div className="flex items-start gap-3">
<CheckCircle className="w-5 h-5 text-green-500 mt-0.5" />
<div>
<h4 className="font-medium">Include Practical Information</h4>
<p className="text-sm text-muted-foreground">
Mention wait times, best times to visit, height requirements, etc.
</p>
</div>
</div>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle className="flex items-center gap-2">
<Camera className="w-5 h-5" />
Photo Submission Guidelines
</CardTitle>
<CardDescription>
High-quality photos enhance the ThrillWiki experience
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div>
<h4 className="font-medium mb-2">Photo Requirements</h4>
<ul className="space-y-2 text-sm text-muted-foreground">
<li> High resolution and good lighting</li>
<li> Clear subject focus (rides, parks, attractions)</li>
<li> No watermarks or heavy editing</li>
<li> Must be your original photos or properly licensed</li>
</ul>
</div>
<div className="flex flex-wrap gap-2">
<Badge variant="outline">Landscape preferred</Badge>
<Badge variant="outline">Max 10MB per image</Badge>
<Badge variant="outline">JPG/PNG formats</Badge>
</div>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle className="flex items-center gap-2">
<AlertTriangle className="w-5 h-5" />
Content Standards
</CardTitle>
<CardDescription>
What to avoid when contributing to ThrillWiki
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div className="grid sm:grid-cols-2 gap-4">
<div>
<h4 className="font-medium text-red-600 mb-2">Not Allowed</h4>
<ul className="space-y-1 text-sm text-muted-foreground">
<li> Offensive or inappropriate content</li>
<li> False or misleading information</li>
<li> Spam or promotional content</li>
<li> Copyrighted material without permission</li>
<li> Personal attacks or harassment</li>
</ul>
</div>
<div>
<h4 className="font-medium text-green-600 mb-2">Encouraged</h4>
<ul className="space-y-1 text-sm text-muted-foreground">
<li> Honest, balanced reviews</li>
<li> Constructive feedback</li>
<li> Helpful tips and insights</li>
<li> Accurate park information</li>
<li> Respectful community interaction</li>
</ul>
</div>
</div>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Moderation Process</CardTitle>
<CardDescription>
How we maintain content quality on ThrillWiki
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<p className="text-sm text-muted-foreground">
All submissions are reviewed by our community moderation team. Content that doesn't meet our guidelines may be:
</p>
<div className="grid sm:grid-cols-3 gap-4 text-sm">
<div className="text-center p-3 bg-muted rounded-lg">
<div className="font-medium">Pending Review</div>
<div className="text-muted-foreground">Awaiting approval</div>
</div>
<div className="text-center p-3 bg-green-50 dark:bg-green-950/20 rounded-lg">
<div className="font-medium text-green-700 dark:text-green-400">Approved</div>
<div className="text-muted-foreground">Published to site</div>
</div>
<div className="text-center p-3 bg-red-50 dark:bg-red-950/20 rounded-lg">
<div className="font-medium text-red-700 dark:text-red-400">Rejected</div>
<div className="text-muted-foreground">Needs revision</div>
</div>
</div>
</CardContent>
</Card>
<div className="mt-8 p-4 bg-muted rounded-lg">
<p className="text-sm text-muted-foreground">
Questions about these guidelines? Contact our moderation team for clarification.
</p>
</div>
</div>
</main>
</div>
);
}

68
src/pages/Terms.tsx Normal file
View File

@@ -0,0 +1,68 @@
import { Header } from '@/components/layout/Header';
export default function Terms() {
return (
<div className="min-h-screen bg-background">
<Header />
<main className="container mx-auto px-4 py-8 max-w-4xl">
<div className="prose dark:prose-invert max-w-none">
<h1 className="text-4xl font-bold mb-8">Terms of Service</h1>
<section className="mb-8">
<h2 className="text-2xl font-semibold mb-4">1. Acceptance of Terms</h2>
<p className="text-muted-foreground mb-4">
By accessing and using ThrillWiki, you accept and agree to be bound by the terms and provision of this agreement.
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold mb-4">2. User Content</h2>
<p className="text-muted-foreground mb-4">
Users are responsible for all content they submit, including reviews, photos, and park information. Content must be accurate, respectful, and relevant to theme parks and rides.
</p>
<ul className="list-disc pl-6 text-muted-foreground mb-4">
<li>No false or misleading information</li>
<li>No offensive, harmful, or inappropriate content</li>
<li>No spam or promotional content</li>
<li>Respect intellectual property rights</li>
</ul>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold mb-4">3. Community Guidelines</h2>
<p className="text-muted-foreground mb-4">
ThrillWiki is a community-driven platform. We expect all users to contribute positively and help maintain the quality of information.
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold mb-4">4. Moderation</h2>
<p className="text-muted-foreground mb-4">
We reserve the right to moderate, edit, or remove any content that violates these terms or our community guidelines.
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold mb-4">5. Account Termination</h2>
<p className="text-muted-foreground mb-4">
We may suspend or terminate accounts that repeatedly violate these terms or engage in harmful behavior.
</p>
</section>
<section className="mb-8">
<h2 className="text-2xl font-semibold mb-4">6. Changes to Terms</h2>
<p className="text-muted-foreground mb-4">
We may update these terms from time to time. Continued use of ThrillWiki constitutes acceptance of any changes.
</p>
</section>
<div className="mt-12 p-4 bg-muted rounded-lg">
<p className="text-sm text-muted-foreground">
Last updated: January 2024
</p>
</div>
</div>
</main>
</div>
);
}