Changelog
All notable changes to the FLA Event & Awards Platform are documented here. Format: Keep a Changelog · Versioning: SemVer · Tags: annotated git tags per milestone (rule in WORKFLOW.md).
[Unreleased]
Added
- SRS: admin dashboard spec expanded — graphs (FR-0805: votes-over-time, funnel,
category shares, top candidates, AI score distribution), full stats coverage (FR-0806, 7d/30d trend KPIs), audit tab (FR-0807), AI insights (FR-0407: weekly summaries, judge-ready applicant briefs, vote-anomaly flags), new use case UC-16, chart-stack decision D11 (Chart.js CDN + JSON endpoints). Roadmap updated: v0.2.0 gets a dashboard starter, completion in v0.8.0.
bin/qa.sh— repeatable QA suite (29 checks: route statuses + body markers for every
public page and all docs, security probes .env/.git/path traversal, HTTPS redirect). Usage: ./bin/qa.sh [base-url].
Fixed
- Docs viewer fatal error (
sort($paths ??= [])— expression cannot be passed by
reference); /docs, /docs/srs and all workflow pages restored.
- Doc slugs are canonical:
docs/SRS.md→/docs/srs, workflows →/docs/workflows~<name>;
registration placeholder cross-links updated accordingly.
- QA script: grep marker handling (
--guard) and correct HTTP→HTTPS redirect probe.
Security
database/migrate.shno longer carries a default DB password — credentials come from
.env / environment, script refuses to run without them.
- Production posture:
APP_DEBUG=falsein live.env— stack traces are no longer
rendered to visitors (errors go to logs only).
[0.1.0] — 2026-08-29
Docs + scaffold baseline.
Added
- Plain-PHP modular core:
Router,DB(PDO/MariaDB),Settings,View,Config,
Env, Auth session skeleton, helpers (url(), setting(), absolute_url()…).
- Module skeletons under
src/Modules/: Home, Docs, Registration, Branding, Events,
Ai, Voting, Cards, Judges, Tickets, Comms, Winners, Audit, Notifications, Dashboard.
- Docs viewer (
/docs,/docs/{slug}): renders all repo.mdfiles as organized
webpages with TOC + mermaid support (FR-0103).
- Core services:
- AI gateway — MiniMax platform driver (
minimax-m3, OpenAI-compatible) + deterministic
- AI gateway — MiniMax platform driver (
MockProvider; mock active until keys (NFR-08).
- LinkedIn OIDC client + mock fixture.
- WhatsApp null driver (logs to
storage/logs/whatsapp.log). - Share-card generator: GD driver (applied / visiting / winner, 1080×1080 PNG);
AI driver reserved (cards.driver).
- Landing page (responsive, DB-branded), 404 page, registration placeholder pages.
- Database migrations 001–009: settings(+seeds), users, events, categories,
registrations, question_bank, ai_sessions, ai_answers, votes, judge_assignments, judge_reviews, tickets, ticket_messages, feature_toggles(+seeds), audit_log, notifications, communications, communication_recipients. Runner: database/migrate.sh.
- Documentation set:
docs/SRS.md(business use-cases UC-01…15, FR/NFR, BR-001…010),
7 workflow docs (docs/WORKFLOWS/), TODO.md (session handoff), ROADMAP.md, WORKFLOW.md, HELP.md, AGENTS.md.
.env.example,.gitignore,composer.json(PSR-4 autoload only — no framework),
bin/card-demo.php, Apache-inline public .htaccess.
- Live deployment: nginx vhost (
deploy/nginx.conftemplate) serving
https://event.production1.jugaar.ai on plain 443 — Let's Encrypt certificate issued, HTTP→HTTPS redirect enabled. Verified public responses on /, /health, /docs/*.
Fixed
- Router treats
HEADasGET(monitoring tools send HEAD).
Security
.envgit-ignored; PDO prepared statements; session cookie flags
(HttpOnly, SameSite=Lax, Secure on HTTPS).