diff --git a/package-lock.json b/package-lock.json index e17dfae..3fea7cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,8 @@ "@reduxjs/toolkit": "^2.11.2", "react": "^19.2.0", "react-dom": "^19.2.0", - "react-redux": "^9.2.0" + "react-redux": "^9.2.0", + "react-router-dom": "^7.13.1" }, "devDependencies": { "@eslint/js": "^9.39.1", @@ -1719,6 +1720,19 @@ "dev": true, "license": "MIT" }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2650,6 +2664,44 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.1.tgz", + "integrity": "sha512-td+xP4X2/6BJvZoX6xw++A2DdEi++YypA69bJUV5oVvqf6/9/9nNlD70YO1e9d3MyamJEBQFEzk6mbfDYbqrSA==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.13.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.13.1.tgz", + "integrity": "sha512-UJnV3Rxc5TgUPJt2KJpo1Jpy0OKQr0AjgbZzBFjaPJcFOb2Y8jA5H3LT8HUJAiRLlWrEXWHbF1Z4SCZaQjWDHw==", + "license": "MIT", + "dependencies": { + "react-router": "7.13.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, "node_modules/redux": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", @@ -2742,6 +2794,12 @@ "semver": "bin/semver.js" } }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", diff --git a/package.json b/package.json index 7d242b3..8085752 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "@reduxjs/toolkit": "^2.11.2", "react": "^19.2.0", "react-dom": "^19.2.0", - "react-redux": "^9.2.0" + "react-redux": "^9.2.0", + "react-router-dom": "^7.13.1" }, "devDependencies": { "@eslint/js": "^9.39.1", diff --git a/src/App.jsx b/src/App.jsx index 9a82392..111658f 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,10 +1,7 @@ +import AppRouter from './routes/AppRouter'; + function App() { - return ( -
-

StellarAid

-

Welcome to StellarAid - Empowering communities through technology

-
- ) + return ; } -export default App +export default App; diff --git a/src/components/layout/MainLayout.jsx b/src/components/layout/MainLayout.jsx new file mode 100644 index 0000000..04a05d5 --- /dev/null +++ b/src/components/layout/MainLayout.jsx @@ -0,0 +1,30 @@ +import { Outlet, Link } from 'react-router-dom'; + +const MainLayout = () => { + return ( +
+
+ +
+ +
+ {/* Outlet renders the matched child route */} + +
+ +
+

© {new Date().getFullYear()} StellarAid. All rights reserved.

+
+
+ ); +}; + +export default MainLayout; diff --git a/src/pages/Admin.jsx b/src/pages/Admin.jsx new file mode 100644 index 0000000..9f813e3 --- /dev/null +++ b/src/pages/Admin.jsx @@ -0,0 +1,10 @@ +const Admin = () => { + return ( +
+

Admin Dashboard

+

Campaign approval, KYC, and system analytics.

+
+ ); +}; + +export default Admin; diff --git a/src/pages/CampaignDetails.jsx b/src/pages/CampaignDetails.jsx new file mode 100644 index 0000000..6330275 --- /dev/null +++ b/src/pages/CampaignDetails.jsx @@ -0,0 +1,14 @@ +import { useParams } from 'react-router-dom'; + +const CampaignDetails = () => { + const { id } = useParams(); + + return ( +
+

Campaign Details

+

Viewing details for campaign ID: {id}

+
+ ); +}; + +export default CampaignDetails; diff --git a/src/pages/CreateCampaign.jsx b/src/pages/CreateCampaign.jsx new file mode 100644 index 0000000..5f26b00 --- /dev/null +++ b/src/pages/CreateCampaign.jsx @@ -0,0 +1,10 @@ +const CreateCampaign = () => { + return ( +
+

Create Campaign

+

Start a new social impact project.

+
+ ); +}; + +export default CreateCampaign; diff --git a/src/pages/Dashboard.jsx b/src/pages/Dashboard.jsx new file mode 100644 index 0000000..577059a --- /dev/null +++ b/src/pages/Dashboard.jsx @@ -0,0 +1,10 @@ +const Dashboard = () => { + return ( +
+

Dashboard

+

Manage your account, donations, and projects.

+
+ ); +}; + +export default Dashboard; diff --git a/src/pages/Explore.jsx b/src/pages/Explore.jsx new file mode 100644 index 0000000..409ad11 --- /dev/null +++ b/src/pages/Explore.jsx @@ -0,0 +1,10 @@ +const Explore = () => { + return ( +
+

Explore Campaigns

+

Discover and fund global social impact projects.

+
+ ); +}; + +export default Explore; diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx new file mode 100644 index 0000000..47669eb --- /dev/null +++ b/src/pages/Home.jsx @@ -0,0 +1,10 @@ +const Home = () => { + return ( +
+

Welcome to StellarAid

+

Empowering communities through transparent blockchain crowdfunding.

+
+ ); +}; + +export default Home; diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx new file mode 100644 index 0000000..4ffb6be --- /dev/null +++ b/src/pages/Login.jsx @@ -0,0 +1,10 @@ +const Login = () => { + return ( +
+

Login

+

Sign in to your StellarAid account.

+
+ ); +}; + +export default Login; diff --git a/src/pages/NotFound.jsx b/src/pages/NotFound.jsx new file mode 100644 index 0000000..3e0d3fb --- /dev/null +++ b/src/pages/NotFound.jsx @@ -0,0 +1,13 @@ +import { Link } from 'react-router-dom'; + +const NotFound = () => { + return ( +
+

404 - Page Not Found

+

The page you are looking for does not exist.

+ Go back to Home +
+ ); +}; + +export default NotFound; diff --git a/src/pages/Register.jsx b/src/pages/Register.jsx new file mode 100644 index 0000000..b0e1ada --- /dev/null +++ b/src/pages/Register.jsx @@ -0,0 +1,10 @@ +const Register = () => { + return ( +
+

Register

+

Create a new StellarAid account.

+
+ ); +}; + +export default Register; diff --git a/src/routes/AppRouter.jsx b/src/routes/AppRouter.jsx new file mode 100644 index 0000000..a11ab41 --- /dev/null +++ b/src/routes/AppRouter.jsx @@ -0,0 +1,37 @@ +import { BrowserRouter, Routes, Route } from 'react-router-dom'; + +// Layout +import MainLayout from '../components/layout/MainLayout'; + +// Pages +import Home from '../pages/Home'; +import Explore from '../pages/Explore'; +import Login from '../pages/Login'; +import Register from '../pages/Register'; +import Dashboard from '../pages/Dashboard'; +import CampaignDetails from '../pages/CampaignDetails'; +import CreateCampaign from '../pages/CreateCampaign'; +import Admin from '../pages/Admin'; +import NotFound from '../pages/NotFound'; + +const AppRouter = () => { + return ( + + + }> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + + + ); +}; + +export default AppRouter;