trymeapp/README.md

73 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TryMe Gaming App.
![TryMe Logo](./2dlogo_medium_256x256.png)
## Purpose
**TryMe** is a student quiz creation and sharing web application where students build multiple-choice and write-in quizzes (0 to 40 questions on the public free tier), share direct quiz URLs with classmates, vote with thumbs up/down, pin and reorder favourite quizzes in a drag-and-drop right-hand rail, and compete on per-quiz leaderboards.
---
## Key Features
- **Federated Auth0 Login & Local Dev Mode**: Sign in with federated IdPs via Auth0 OIDC/JWKS (`AUTH0_DOMAIN`, `AUTH0_CLIENT_ID`, `AUTH0_CLIENT_SECRET`), plus an optional `DEV_AUTH_ENABLED` local mode for instant development and automated testing.
- **Student-Friendly Player Profiles**:
- Pick from 8 stylized geometric animal emblems (`Fox`, `Owl`, `Bear`, `Otter`, `Koala`, `Tiger`, `Frog`, `Penguin`) across 8 festive colorways.
- Set a unique `nickname`, `first_name`, `last_name`, optional `age` (**never** asks for a birthday), inclusive `gender` options (including Non-binary, Two-Spirit, Agender, Genderqueer, Other / self-described, and Prefer not to say), and explicit confirmation of permission to use public websites.
- **Multiple-Choice & Write-In Quizzes (0–40 Questions)**:
- Combine multiple-choice and case-insensitive write-in questions (with optional accepted synonyms) up to 40 questions on the free tier.
- Share any public quiz via `/quiz/<share-slug>`, vote thumbs up or down, and view **your latest score**, **your all-time best**, and **the best score by anyone (with their nickname)**.
- **Drag-and-Drop Favourites Rail + Pop-Up Recycle Bin**:
- Drag quiz cards from the main page into the right-hand **Favourites** pane, drag to reorder, or drag out of the pane onto the pop-up **Recycle Bin** (with one-click Undo and full keyboard accessibility).
- **Personal API Keys**: Generate `tm_live_...` API keys to access `/api/v1/*` programmatically and expire old keys immediately.
- **Moderator Controls**: Configured at launch (initial moderator claim) or via `ADMIN_USER` container variable to ban/restore users and remove inappropriate quizzes.
---
## Quick Start
### Run with Docker Compose (App + PostgreSQL 16)
```bash
docker compose up --build
```
Open **`http://localhost:8000`** for the web app, **`http://localhost:8000/docs`** for Swagger UI, or **`http://localhost:8000/openapi.yaml`** for the OpenAPI 3.1 specification.
### Run Locally (SQLite + Python Virtual Environment)
```bash
python3 -m venv venv
venv/bin/pip install -e ".[dev]"
venv/bin/alembic upgrade head
cd frontend && npm ci && npm run build && cd ..
SEED_STARTER_QUIZZES=true venv/bin/uvicorn app.main:app --port 8000
```
### Run Automated Tests
```bash
venv/bin/pytest -v
```
---
## Project Layout
```text
trymeapp/
├── .gitea/workflows/cicd.yaml # Harbor + DockerHub + Helm OCI CI/CD pipeline
├── .github/workflows/ci.yml # GitHub Actions pytest, SPA, Docker & Helm CI
├── Dockerfile # Multi-stage Node 22 + Python 3.11 build
├── docker-compose.yaml # App + PostgreSQL 16 stack (symlinked at docker-compose.yml)
├── version.ini # Root container & API version (0.1)
├── openapi.yaml # OpenAPI 3.1 specification
├── alembic.ini / alembic/ # Database schema migrations
├── app/ # FastAPI application, Auth0/API key auth, routers & models
├── frontend/ # React 19 + TypeScript + Vite SPA (Hallmark Hum theme)
├── helm-chart/ # Kubernetes Deployment, Service, Ingress & SQLite PVC
├── tests/ # Pytest test suite
├── SETUP.md # Auth0, Moderator, Database & API Key setup guide
├── INSTALL.md # Operator installation, Helm & CI secrets reference
└── SYSTEM.md # Architecture & data flow design document
```
See [SETUP.md](./SETUP.md) for Auth0 and moderator configuration, [INSTALL.md](./INSTALL.md) for Helm and Docker operations, and [SYSTEM.md](./SYSTEM.md) for system architecture details.