This project is a full-stack final year implementation for improving public service delivery at district level in Rwanda, using Kicukiro District as the case study. It provides a digital platform where citizens submit service requests online and administrators manage those requests efficiently.
- Frontend: React.js + Tailwind CSS
- Backend: Node.js + Express
- Database: MongoDB + Mongoose
- Authentication: JWT
- File Uploads: Multer
e-GOV/
backend/
config/
controllers/
middleware/
models/
routes/
uploads/
server.js
frontend/
public/
src/
components/
pages/
services/
App.js
- Citizen registration
- Citizen and admin login
- JWT protected routes
- Service request submission with file upload
- Citizen request tracking
- Admin request filtering and status updates
- Admin analytics
- User role management
- Feedback collection
- Modern landing page
- Login and registration pages
- Citizen dashboard
- Admin dashboard
- Request tracking tables
- Feedback form
- API integration with Axios
Make sure the following are installed on your computer:
- Node.js (recommended version 18 or above)
- npm
- MongoDB Community Server
From the project root folder, install the root helper package and both app dependencies:
npm install
npm run install:allOpen a terminal in the backend folder and run:
Create a .env file inside backend using the values from .env.example:
PORT=5000
MONGO_URI=mongodb://127.0.0.1:27017/egov_system
JWT_SECRET=supersecretjwtkey
CLIENT_URL=http://localhost:3000Start the backend server:
Create the default admin user:
npm run seed-adminOpen another terminal in the frontend folder and run:
Create a .env file inside frontend using the values from .env.example:
REACT_APP_API_URL=http://localhost:5000/api
REACT_APP_UPLOADS_URL=http://localhost:5000From the project root folder, run:
npm run devThe application should open at:
- Frontend:
http://localhost:3000 - Backend API:
http://localhost:5000
If you ever want to run only one side, you can still use:
npm run backendnpm run frontend
After running npm run seed-admin, use:
- Email:
admin@kicukiro.gov.rw - Password: `Admin123!
The file sample-data.json contains example values for:
- Admin login
- Citizen registration
- Service request submission
- Feedback submission
- Open the frontend in the browser.
- Register a new citizen account.
- Log in as the citizen.
- Submit a service request with or without a document.
- Check that the request appears in the citizen dashboard with status
Pending. - Submit feedback and confirm the success message.
- Log in with the seeded admin account.
- Open the admin dashboard.
- Review all citizen requests.
- Filter requests by status.
- Select a request and change its status to
In Progress,Approved, orRejected. - Add a response message and save.
- Review analytics cards and user management section.
- Create a citizen request.
- Log in as admin and update the request.
- Log back in as the citizen.
- Confirm the updated status and admin response are visible in the citizen dashboard.
POST /api/auth/registerPOST /api/auth/loginGET /api/auth/me
POST /api/requestsGET /api/requests/myGET /api/requestsPUT /api/requests/:idGET /api/requests/analytics/summary
POST /api/feedbackGET /api/feedback
GET /api/usersPUT /api/users/:id/role
- Uploaded files are stored inside
backend/uploads. - Only authenticated users can access protected routes.
- Only admins can access request management, analytics, feedback review, and user management endpoints.
- This codebase was written to be beginner-friendly and easy to explain in a final year project defense. `