Educational platform connecting institutions and students with qualified teachers in Sierra Leone. Built with Next.js 14, TypeScript, and Supabase.
# Tutor-Link
Tutor-Link is a full-stack web application that connects parents with tutors for in-home tutoring. The backend is implemented as **one deployable Next.js 14 app** (modular monolith): HTTP endpoints live under `app/api`, business rules live under `lib/services`, and data plus authentication are provided by **Supabase** (PostgreSQL and Supabase Auth, including email OTP). Optional **Redis** backs **server-side rate limiting** when `REDIS_URL` is set so limits stay consistent across multiple instances.
**Live demo:**
wikin-tich.vercel.app
---
## Architecture
The browser talks to a single Node process that serves both the React UI (App Router) and JSON API routes. **`middleware.ts`** adds security headers and protects dashboard routes with a lightweight session check; **CSRF validation, sanitization, validation, and rate limiting** for state-changing APIs run inside **`app/api`** handlers, which call **`lib/services/*`** modules. **Supabase** holds application data and auth users; **Redis** (when configured) participates in rate limits. **`GET /api/health`** returns process and dependency status for monitoring (it intentionally skips CSRF and rate limits).
```mermaid
flowchart TB
subgraph actors [Actors]
parent[Parent]
tutor[Tutor]
adminUser[Admin]
end
subgraph nextApp [Next.js 14 - single deployable]
ui[App Router pages]
mw[middleware.ts]
api[app/api route handlers]
svc[lib/services]
end
subgraph data [Data and messaging]
supabase[(Supabase Postgres and Auth)]
end
subgraph opt [Optional at runtime]
redis[(Redis)]
end
parent --> ui
tutor --> ui
adminUser --> ui
ui --> mw
mw --> ui
ui --> api
api --> svc
svc --> supabase
svc --> redis
monitor[Health checks] --> api
```
---
## Tech stack
| Area | Technology |
|------|------------|
| Language | TypeScript (strict) |
| Runtime | Node.js — **20** in Docker; **18+** acceptable for local dev |
| Web framework | Next.js 14 (App Router), React 18 |
| Styling | Tailwind CSS |
| Database and auth …