# Classroom Tanzania — Next.js frontend
A learning app for Tanzanian students (Standard 1 through university), covering the
NECTA and ZEC syllabi, past papers, mock exams, and progress analytics.
The app is the client half of:
```
Next.js frontend → Laravel REST API → MySQL
```
The API lives in `../classroom-tanzania-api`. Everything that used to hit
Supabase goes through the service layer in `src/services`, which now calls that
API. No database credentials exist in this project.
## Requirements
- Node.js 18.18+ (developed on Node 24)
- npm
- The API running — see `../classroom-tanzania-api/README.md`
## Running it locally
```bash
npm install
cp .env.example .env.local # points at
localhost
npm run dev
```
Then open , with the API on .
| Variable | Purpose |
|---|---|
| `NEXT_PUBLIC_API_URL` | Base URL of the Laravel API, including `/api`. |
The API's `FRONTEND_URLS` must list this app's origin, or the browser will block
every call: CORS runs with credentials enabled and therefore no wildcard.
| Command | What it does |
|---|---|
| `npm run dev` | Development server on port 3000 |
| `npm run build` | Production build |
| `npm start` | Serve the production build (run `npm run build` first) |
| `npm run typecheck` | `tsc --noEmit` |
| `npm run lint` | Next's linter |
## Project structure
```
src/
app/ App Router routes (one folder per screen)
components/
ui/ Icon, PasswordField, ShareActions, ShareButton, BookmarkButton
layout/ AppShell, BottomNav, ScreenHeader, SessionProvider, RequireAuth
auth/ Login, register, forgot password, terms, level cascade
dashboard/ Home, notifications, trending, bookmarks, performance
learning/ Subject detail, topic reader
quizzes/ Quiz flow, past-paper flow, papers list, downloads
guardian/ Guardian dashboard, student detail, invite-code manager
profile/ Account screen and its sub-views
video/ …