Penny — AI teaching assistant for South African classrooms (TanStack Start, Supabase, Cloudflare)
# Penny
**AI teaching assistant for South African classrooms.**
Penny helps teachers capture marks by voice, draft report comments, and send parent messages — built for real classroom workflows, CAPS-aligned contexts, and POPIA-aware data handling.
**Live app:** app.pennyteacher.co.za
---
## Screenshot
---
## Features
- **Voice mark capture** — record marks hands-free during lessons
- **Report comments** — AI-assisted, teacher-controlled comment drafting
- **Parent messaging** — transactional email for school–home communication
- **Billing** — PayFast subscriptions for South African payments
- **Prep Check** — AI curriculum planning checker (modular tool)
- **Oral Assessment** — voice viva assessments that verify authentic understanding
---
## Tech stack
| Layer | Technology |
|-------|------------|
| Framework | TanStack Start + React 19 |
| Routing / data | TanStack Router, TanStack Query |
| Styling | Tailwind CSS 4, Radix UI, shadcn-style components |
| Backend / DB | Supabase (Auth, Postgres, RLS, Storage) |
| Deploy | Cloudflare Workers via Nitro |
| AI | Google Gemini |
| Email | Resend |
| Payments | PayFast |
| Package manager | Bun |
---
## Getting started
### Prerequisites
- Bun (recommended) or Node.js 20+
- A Supabase project
- API keys for Gemini, Resend, and PayFast (as needed)
### Setup
```bash
# Clone
git clone
github.com
cd penny-teacher
# Install
bun install
# Configure environment
cp .env.example .env
# Fill in Supabase, Gemini, Resend, PayFast, and CRON_SECRET values
# Run locally
bun run dev
```
Open the local URL printed by Vite (usually `
localhost`).
### Scripts
| Command | Purpose |
|---------|---------|
| `bun run dev` | Local development server |
| `bun run build` | Production build (Nitro → Cloudflare Worker) |
| `bun run typecheck` | TypeScript check (`tsc --noEmit`) |
| `bun run lint` | ESLint |
| `bun run format` | Prettier format |
---
## Environment …