TODO — Session Handoff
READ THIS FIRST in every new session. It tells you where FLA is, what's next,
and what's waiting on decisions. Update it at the end of every working session
(rule in WORKFLOW.md). Full spec:docs/SRS.md· Plan:ROADMAP.md.
Project in one line
FLA Event & Awards Platform — plain PHP 8.3 + MariaDB, modular, hosted at https://event.production1.jugaar.ai (plain 443). Flagship: public-voted, AI-assessed awards (70% public / 30% board, admin veto).
Current state
- Version:
v0.1.0(tagged) + post-release QA pass 2026-08-29 —./bin/qa.sh
suite: 29/29 checks green (all pages, all docs render incl. SRS tables/TOC/mermaid, security probes, HTTPS redirect, DB idempotency ×2, 25 FKs, no dup seeds).
- Live:
https://event.production1.jugaar.ai(nginx + PHP 8.3 FPM, Let's Encrypt
cert issued 2026-08-29, HTTP→HTTPS redirect). Health: /health, docs: /docs.
- Live routes:
/landing ·/docs(+/docs/{slug}) ·/health·
registration placeholders (/register/visitor, /register/award, /guest-of-honor).
- Implemented core: Router, DB (PDO), Settings, View, Router, Config, Env, Auth skeleton,
Markdown renderer (docs viewer), AI gateway (MiniMax driver + Mock), LinkedIn client (+Mock), WhatsApp null-driver, GD card generator (+ AI driver reserved).
- DB:
fla_event, migrations001–009applied (settings/users/events/categories/
registrations/ai_qa/votes/judges/tickets/system+audit).
- Mocks active:
AI_MOCK=true, LinkedIn mock, WhatsApp null → site fully works without keys.
Next up — v0.2.0 (Admin core + Branding)
- Admin auth (session login, first admin user — seed + forced password change).
- Branding control panel:
/admin/branding→ editsettings(name/logo/colors/tagline/campaign texts) live + feature toggles UI. - Audit writer (
Core\Audit::log) wired to admin actions. - Layout consumes branding incl. logo upload.
- Admin home starter: KPI cards + Chart.js line (registrations over time) — full
admin dashboard spec lives in SRS FR-0805–0807 + AI insights FR-0407, build completes in v0.8.0.
- Docs: SRS UC-01 marking implemented parts; CHANGELOG 0.2.0; update this file.
Backlog by milestone
| Milestone | Scope |
|---|---|
| v0.3.0 | Events + categories CRUD, status lifecycle, show/hide, public event pages |
| v0.4.0 | Registration ×3 (visitor, award, GoH) + LinkedIn OAuth + manual entry + photo upload |
| v0.5.0 | AI interview (bank, session, marking, stats) via gateway (MiniMax m3) |
| v0.6.0 | Public voting + restrictions + reason + 70/30 engine + share cards (GD) |
| v0.7.0 | Judges panel (+ assignments, decisions, admin report) |
| v0.8.0 | Dashboards (applicant/staff/admin) + tickets + mass comms + notifications |
| v0.9.0 | Winners (finalize, audit-lock, announce, badges) + audit UI |
| v1.0.0 | Responsive polish, comprehensive dashboard, hardening, launch checklist |
Open questions (waiting on owner)
- MiniMax m3: exact model id + base URL + API key (platform.minimax.io). Code assumes
minimax-m3@https://api.minimax.io/v1— verify when key arrives. - LinkedIn App client id/secret (OIDC: openid, profile, email).
- WhatsApp provider: Meta Cloud API or Twilio (+ keys).
- Email: SMTP details or transactional provider for comms/notifications.
- AI image API (later, for fancy share cards).
- Vote-change policy: final (current default) or changeable until window closes?
- Public leaderboard before finalization? Default: admin-only (BR-006).
Environment notes
- Host runs MariaDB 10.11 + PHP 8.3 (pdo_mysql, gd, opcache) + Nginx + certbot.
- DB creds live in
.env(never committed). Rotate the dev password on public exposure. - Branding/campaign/weights all in
settings— admin panel edits them from v0.2.0. - DejaVu fonts available at
/usr/share/fonts/truetype/dejavu/(GD card text).
Definition of done (per milestone)
Docs updated (SRS → workflow → CHANGELOG → ROADMAP → this file) → code → verified → conventional commit → annotated git tag.