The public site, member workspace, and FastAPI service live here. Members can explore events and project groups, manage a profile, file and follow tickets, read articles, submit ideas, and see contribution history. Admins can manage members, publish events and banners, award merit points, review tickets and ideas, and publish articles.
| Surface | Address | Status checked 29 September 2026 |
|---|---|---|
| Next.js website | reinforce-sst.com | Serving the integrated frontend |
| FastAPI | api.reinforce-sst.com | Health endpoint returned 200 |
| YUVI hosted endpoint | YUVI health | Returned 503; Discord bridge is not verified live |
| Older Vercel URL | reinforce-student-dashboard.vercel.app | Still serves the legacy Vite client |
These checks establish availability, not a complete signed-in workflow. The dashboard ticket bridge and Discord role grant still require an end-to-end test with a real linked member. See verification and rollout. In the pending dashboard changes, an admin can approve an SPG registration in the Admin Console. Approval creates one group and resolves its ticket together; ordinary status changes cannot approve a registration. This still needs a live signed-in review after deployment.
Next.js web/ ──► FastAPI server/ ──► Firestore
▲ ▲
│ │
YUVI Discord bot ───────┘
YUVI lives in a separate repository. The API and bot share Firestore document shapes, documented in the data contract. Firebase Admin credentials stay on the servers; the browser calls the API with a Firebase ID token.
| Directory | Purpose |
|---|---|
web/ |
Next.js public site, /auth, dashboard, admin console |
server/ |
FastAPI routes and Firestore services |
docs/ |
Data contract, workflows, and verification |
Use Node 20+, Python 3.13+, and uv. Configuration examples contain names and safe defaults, never credentials.
cd server
cp .env.example .env # fill in your own Firebase configuration
uv sync --locked
uv run uvicorn main:app --reload --port 8080In another terminal:
cd web
cp .env.example .env.local # fill in Firebase web configuration
npm ci
npm run dev # http://localhost:3000The API docs are at http://localhost:8080/docs. To verify a change, run
uv run --locked pytest -q in server/ and npm test && npm run lint && npm run build
in web/. Local tests use fixtures; they do not exercise Discord or production
Firestore.
For anything that touches the dashboard UI, also run the end-to-end suite, which drives a real browser over every member-facing route:
cd web
npx playwright install --with-deps chromium # once
npm run e2e # or PLAYWRIGHT_CHANNEL=chrome npm run e2eIt builds and starts the app itself and intercepts every API and Firebase call, so it needs no running server and no credentials. See docs/verification.md for what it does and does not prove.
Read CONTRIBUTING.md, the Firestore data contract,
and YUVI's source. Keep /auth compatible
with YUVI's private #link_token= link. Admin API access requires the verified
Firebase admin claim; Core and custom role labels are display metadata.