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 */}
+
+
+
+
+
+ );
+};
+
+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;