- Replace Express 4 backend with Express 5 + Mongoose 8 + TypeScript 5.8 - Add MongoDB 8.0 container via docker-compose - Add JWT auth (jose), argon2 password hashing, zod validation, multer uploads - Models: BoardMember, Event, GalleryItem, Sponsor, Minute, Member, User - Full CRUD REST API for all content types - Seed script to populate MongoDB from hardcoded data - Wire all frontend components to fetch from API (no JSX changes) - Add /manage dashboard: login + tabs for Board, Events, Gallery, Sponsors, Minutes, Members - Uploads volume for persistent file storage across deploys
50 lines
1.9 KiB
TypeScript
50 lines
1.9 KiB
TypeScript
import React from 'react';
|
|
import { BrowserRouter as Router, Route, Routes } from 'react-router-dom';
|
|
import Header from './components/Header';
|
|
import Home from './components/Home';
|
|
import Calendar from './components/Calendar';
|
|
import Minutes from './components/Minutes';
|
|
import AboutUs from './components/AboutUs';
|
|
import Footer from './components/Footer';
|
|
import Bylaws from './components/Bylaws';
|
|
import Sponsors from './components/Sponsors';
|
|
import MeetBoard from './components/Meet-Board';
|
|
import Gallery from './components/Gallery';
|
|
import VideoGallery from './components/VideoGallery';
|
|
import Resources from './components/Resources';
|
|
/* import ComingSoon from './components/ComingSoon'; */
|
|
import JoinMCDi from './components/JoinMCDi';
|
|
import Manage from './components/Manage';
|
|
|
|
const App: React.FC = () => {
|
|
return (
|
|
<Router>
|
|
<Routes>
|
|
<Route path="/manage/*" element={<Manage />} />
|
|
<Route path="/*" element={
|
|
<div className="flex flex-col min-h-screen">
|
|
<Header />
|
|
<main className="flex-grow px-4 sm:px-6 lg:px-8 py-8">
|
|
<Routes>
|
|
<Route path="/" element={<Home />} />
|
|
<Route path="/calendar" element={<Calendar />} />
|
|
<Route path="/minutes" element={<Minutes />} />
|
|
<Route path="/about" element={<AboutUs />} />
|
|
<Route path="/bylaws" element={<Bylaws />} />
|
|
<Route path="/sponsors" element={<Sponsors />} />
|
|
<Route path="/meet-board" element={<MeetBoard />} />
|
|
<Route path="/gallery" element={<Gallery />} />
|
|
<Route path="/videos" element={<VideoGallery />} />
|
|
<Route path="/resources" element={<Resources />} />
|
|
<Route path="/joinmcdi" element={<JoinMCDi />} />
|
|
</Routes>
|
|
</main>
|
|
<Footer />
|
|
</div>
|
|
} />
|
|
</Routes>
|
|
</Router>
|
|
);
|
|
};
|
|
|
|
export default App;
|