Menya is a 5-sided education platform for Rwanda's school ecosystem: a public marketplace, student application portal, school admin dashboard, super-admin command center, and USSD/SMS fallback layer.school management system
# Menya — Multi-Tenant Education SaaS Platform
Menya is a 5-sided education platform for Rwanda's school ecosystem: a public marketplace, student application portal, school admin dashboard, super-admin command center, and USSD/SMS fallback layer.
---
## Prerequisites
- Elixir ~> 1.15 / OTP 26+
- PostgreSQL 15+
- Node.js 18+
- Rust (for the NIF allocation engine — optional, can skip on Windows)
---
## Quick Start
### 1. Backend (Phoenix — port 4000)
```bash
cd backend
mix setup # install deps, create DB, run migrations, seed
mix phx.server #
localhost
```
### 2. Frontend — School Admin Dashboard (React — port 3000)
```bash
cd frontend/school-admin
npm install
npm run dev #
localhost
```
The React dev server proxies `/api` requests to `localhost:4000` automatically.
---
## The 5 Sides — Where to Find & Test Everything
### Side 1: Public Marketplace (SSR / Phoenix LiveView)
The SEO-optimized, server-rendered public face of the platform.
| Page | URL | Source |
|---|---|---|
| **Marketplace Home** — school search & discovery | localhost:4000/ | `backend/lib/menya_web/live/marketplace_live.ex` |
| **School Profile** — individual school page | localhost:4000/schools/:slug | `backend/lib/menya_web/live/school_profile_live.ex` |
| **School Site** (subdomain-resolved) | Requires subdomain routing via Caddy | `backend/lib/menya_web/live/school_site_live.ex` |
| **Sitemap** | localhost:4000/sitemap.xml | `backend/lib/menya_web/controllers/sitemap_controller.ex` |
### Side 2: Student Application Portal (Phoenix LiveView)
Multi-step application form: personal info → details → document upload → payment → confirmation.
| Page | URL | Source |
|---|---|---|
| **Apply to a School** | localhost:4000/student/apply/:school_slug | `backend/lib/menya_web/live/student_apply_live.ex` |
Features: client-side image compression via Canvas API, drag-and-drop document upload (S3 presigned), MoMo/Airtel Money payment flow with polli …