Initial Commit

This commit is contained in:
2025-11-16 16:00:51 +00:00
commit ba324b370e
52 changed files with 8014 additions and 0 deletions

104
src/App.tsx Normal file
View File

@@ -0,0 +1,104 @@
import { ClerkProvider } from '@clerk/clerk-react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
// Import Leaflet CSS
import 'leaflet/dist/leaflet.css';
// Layout
import { Layout } from './components/layout';
// Auth components
import { ProtectedRoute, SignInPage, SignUpPage } from './components/auth';
// Pages
import {
HomePage,
MapPage,
ReportFormPage,
EventsPage,
AnalyticsPage
} from './pages';
const queryClient = new QueryClient({
defaultOptions: {
queries: {
staleTime: 1000 * 60 * 5, // 5 minutes
retry: 1,
},
},
});
const clerkPubKey = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY;
if (!clerkPubKey) {
throw new Error('Missing Clerk Publishable Key');
}
function App() {
return (
<ClerkProvider publishableKey={clerkPubKey}>
<QueryClientProvider client={queryClient}>
<BrowserRouter>
<Routes>
{/* Public routes */}
<Route path="/sign-in/*" element={<SignInPage />} />
<Route path="/sign-up/*" element={<SignUpPage />} />
{/* Routes with layout */}
<Route
path="/"
element={
<Layout>
<HomePage />
</Layout>
}
/>
<Route
path="/map"
element={
<Layout>
<MapPage />
</Layout>
}
/>
{/* Protected routes */}
<Route
path="/reports/new"
element={
<ProtectedRoute>
<Layout>
<ReportFormPage />
</Layout>
</ProtectedRoute>
}
/>
<Route
path="/events"
element={
<ProtectedRoute>
<Layout>
<EventsPage />
</Layout>
</ProtectedRoute>
}
/>
<Route
path="/analytics"
element={
<ProtectedRoute>
<Layout>
<AnalyticsPage />
</Layout>
</ProtectedRoute>
}
/>
</Routes>
</BrowserRouter>
</QueryClientProvider>
</ClerkProvider>
);
}
export default App;