Many services in one login
# Mesob-Lite (Full-Stack)
A full-stack prototype of a one-stop digital government service portal, inspired by Ethiopia's **MESOB** (Modern Ethiopian Service for Organized Benefit) platform. Built as a final-year internship project.
> Student prototype for internship coursework. Not affiliated with the Federal Government of Ethiopia or the real MESOB platform. All data (service centers, service names) is illustrative.
## Architecture
```
mesob-lite-fullstack/
├── frontend/ HTML5, CSS3, vanilla JavaScript (talks to the API over fetch())
└── backend/ Node.js + Express REST API + SQLite database (better-sqlite3)
```
The frontend and backend are two separate applications that communicate over a JSON REST API — a standard decoupled client/server architecture. The frontend runs on its own static file server; the backend runs on its own Node process and owns the database.
```
Browser (frontend) --HTTPS/JSON + JWT--> Express API (backend) --SQL--> SQLite database
```
## What's new in this version
The original prototype stored everything in the browser's `localStorage`. This version replaces that with:
- **A real backend**: Node.js + Express, organized into routes / controllers / middleware
- **A real database**: SQLite (via `better-sqlite3`) with four tables — `users`, `service_groups`, `services`, `requests` — related by foreign keys
- **Real authentication**: citizens register and log in with a hashed password (Node's built-in `crypto.scrypt`) and receive a JWT (hand-rolled with `crypto`, HMAC-SHA256) used to authorize every subsequent request
- **Role-based access**: `citizen` vs `staff` accounts. Only staff can see the full request queue or change a request's status
- **A real REST API** — see `backend/README.md` for the full endpoint list
## Running it locally
You need two terminals — one for each half of the app.
**1. Start the backend (API + database)**
```bash
cd backend
npm install
npm start
# API running at
localhost
```
The fir …