GoDriving.xyz - Learn to drive by playing. Gamified driver education (road-sign games & quizzes) partnering with driving schools across Africa. React + Express + PostgreSQL.
# GoDriving.xyz
**Learn to drive by playing.** GoDriving is a gamified driver-education platform that
teaches road signs and the highway code through games and puzzles, and connects new
drivers with trusted local driving schools — starting in Kenya and growing across
East Africa, Africa and beyond.
Live:
godriving.xyz
## What's inside
- **Games & puzzles**
- **Sign Library** – study every road sign with meanings (no login required)
- **Sign Match** – memory match game pairing signs with their names
- **Highway Code Quiz** – timed multiple-choice quiz with streaks & bonuses
- **Road Run** – arcade lane-driving game (dodge traffic, collect coins)
- **Accounts & gamification** – email/password sign-up, XP, coins, levels, global rank
- **Driving-school directory** – searchable, filterable list of verified partner schools
- **Student → school leads** – learners request to enroll; schools receive the lead
- **Partner programme** – driving schools apply to join and share revenue
- **Leaderboards** – overall XP plus per-game rankings
## Tech stack
| Layer | Technology |
|-----------|--------------------------------------------------------|
| Frontend | React 18 + TypeScript, Vite 6, React Router 7, Tailwind CSS v4, Motion, lucide-react |
| Backend | Node.js + Express, PostgreSQL (`pg`), bcryptjs auth with session tokens |
| Hosting | IIS (static SPA + reverse proxy) on Windows, Node API as an nssm service |
## Local development
```bash
npm install
# Terminal 1 — API (
localhost)
npm run server
# Terminal 2 — Vite dev server (
localhost, proxies /api)
npm run dev
```
Create a `.env` from `.env.example`:
```
PORT=3009
DATABASE_URL=postgresql://godriving:YOUR_PASSWORD@localhost:5432/godriving
SITE_URL=
godriving.xyz
```
The API auto-creates all tables and seeds a starter set of driving schools on first run.
## Production build
```bash
npm run build # outputs static sit …