LMS Sitemap & Architecture

Year 3 (2026) — Custom Contest Platform
← Back to Dashboard

A purpose-built, single-competition platform for Musterpoint Productions, replacing Thinkific for the Year 3 cycle. Two surfaces in one system: a Student Portal for entrants and an Admin Portal for the team. The Judging Portal lives as a separate application (judgingportal.vercel.app) that reads from the same submission database.

The whole point: eliminate the Thinkific → spreadsheet → judging portal handoff. Judging stays in its own app but reads from this database directly, so no more manual sync. Built with Claude Code for rapid iteration.

Last updated 2026-05-12 · full spec in AI/lms-spec.md

In Progress

Student Flow

Linear competition entry · 4 steps · prereqs gate each step
1Step 1
Watch the Documentary
/account/watch
YouTube or Vimeo embed. Resume where left off. Unlocks Step 2 on completion.
2Step 2
View Study Guide
/account/study-guide
Read inline or download PDF (EN + FR). Marks Step 2 on download or scroll-to-end.
3Step 3
Take the Quiz
/account/quiz
25 questions randomly drawn from a larger pool. Multiple-choice. Pass threshold required. Unlimited retries. Unlocks Step 4 on pass.
4Step 4
Submit Your Work
/account/submit
Structured form: primary video, supporting video, external links, files, artist statement, category, topic. Edit, delete, or replace until deadline.

Sitemap

Student Portal · Admin Portal · System
Student Portal For entrants
Login
/account
Email + password sign-in for returning entrants.
  • Forgot Password Prominent · prevents re-registration
Sign Up
/account/signup
New account creation with duplicate-email detection. Required fields: name, email, password, province, school, age band.
Dashboard
/account/dashboard
Contest progress and the next-step CTA.
On this page
  • Continue Where You Left Off Primary CTA · jumps to the next incomplete step
  • Submission Status After Step 4 · received, shortlisted, selected, or not advanced (with timestamps)
  • Contest Timeline Submission deadline, results, award show
  • Latest News Announcements and program updates
Settings
/account/settings
Name, email, password, language, province, school.
  • Request Account Deletion Triggers manual review · CASL / privacy compliant
1Watch the Documentary
/account/watch
YouTube or Vimeo embed · resume where left off.
2Study Guide
/account/study-guide
Read inline or download the PDF (English and French).
3Quiz
/account/quiz
25 random questions from a larger pool · multiple-choice · pass to unlock the submission step.
4Submit Your Work
/account/submit
Structured form: primary video, supporting video, external links, files, artist statement.
  • Category required + optional topic tag for sponsor reporting
  • Edit / Delete / Replace Anytime before deadline
  • Confirmation Email With edit link · proves the submission landed
Help
/account/help
FAQ + contact form. Pre-fills the student's email and (if applicable) their submission ID so the team can find the record fast.
  • FAQ Common signup, quiz, and submission questions
  • Contact the Team Sends to info@energycreates.com with student context attached
Admin Portal For the team · role-gated
Admin Login
/admin
For the Musterpoint team only. Role-based access (admin · viewer). Judges sign in to the separate judging app, not here.
Dashboard
/admin/dashboard
Headline numbers and a live activity feed.
Students
/admin/students
Searchable list · filter by step or status.
  • Student Profile Single-student view: progress, contact, history
Submissions
/admin/submissions
All entries · filter by category, province, or status.
  • Submission Page Full submission · download files · approve / reject / restore
  • Reject Reasons Logged Reversible · no Thinkific-style lock-in
  • Inbound Email Emails to info@energycreates.com referencing a submission ID auto-attach to that record · manual attach also supported
Judging External app
judgingportal.vercel.app
Separate application on Vercel. Reads from the submission database directly so judges work on live data without manual sync.
  • Shortlist Phase 1 · approve or reject the long list
  • Scoring Phase 2 · 8-criteria, 100-point rubric
  • Results Aggregated scores · winner selection
Analytics
/admin/analytics
Signups, submissions, step drop-off, geography, topic breakdown.
Contest Management
/admin/competition
Quiz question pool, deadlines, content updates.
Exports
/admin/exports
CSV or JSON · submissions and profiles joined.
Team
/admin/team
Team users · roles · invites. Judge accounts are managed in the judging app.
System Localization & API
French Mirror
/fr/account/*
Full French translation of the student portal.
API
Server endpoints powering progress, quiz, submission, and admin queries.
  • /api/progress Read/write student step progress
  • /api/quiz Submit answers, return pass/fail
  • /api/submission Upload + edit submission
  • /api/admin/* Admin-only queries · login-protected

Per-Page Intent & Primary CTA

One commit per page · next step always visible
PageVisible statePrimary CTA
/accountLogged outLog In / Sign Up
/account/dashboardContest progress 1–4Continue [current step]
/account/watchYouTube / Vimeo embed, resume buttonMark complete / Continue to Step 2
/account/study-guidePDF preview + downloadContinue to Step 3
/account/quizQuestion 1 of 25 · randomized from question poolSubmit answer / Continue
/account/submitUpload area, category picker, prior submission preview if any · editable / deletable until deadlineSave draft / Submit / Replace
/account/settingsProfile fields + "Request account deletion" buttonSave changes

Challenges & Fixes

Documented Year 1 / Year 2 pain points · Year 3 platform fixes them by design
Past ChallengeYear 3 Fix
Rejected submissions in Thinkific could not be un-rejected. Manual workaround required adding them to the judging portal in a separate system; the student's account showed the wrong state.Admin can approve · reject · restore any submission. Status changes audit-logged. One system, no parallel records.
Submission form treats primary video + supporting explainer video as one file.Separate structured fields: primary video, supporting video, external links, uploaded files, artist statement.
Many projects live on YouTube or Google Drive; links are buried in long written explanations and reviewers miss them.Dedicated External Links field. Surfaces prominently on the submission detail / judging view.
Duplicates — students re-upload updated versions; earlier ones get marked rejected.Edit / delete / replace your own submission anytime before deadline. Versioning instead of duplicate rejection.
Duplicate accounts — same student appears twice, inflating counts.Email-uniqueness check at signup with "Did you mean to log in?" prompt. Prominent forgot-password link.
Artist Statements sometimes submitted via email rather than the platform. Silent data loss (e.g., Sebastian Arellano-Rubach's statement).Email integration with info@energycreates.com — emails referencing a submission ID get attached to that record. Manual attach also supported.
Some students submit playable artifacts (e.g., "Spark" RPG by Faith Breis). No way to evaluate — submission excluded.Per-medium constraints documented at submission time. Either accept with reviewer instructions, or block up front.
Archiving the contest in Thinkific doesn't actually stop submissions. New submissions arrived after contest close.Hard submission window — server-side cutoff, not just UI-hidden. Manual override for late-permitted submissions.
Drop-off at the final submit click. GA showed ~1,250 BC students reached the 2-of-2 page; how many actually clicked submit is unknown.Server-side success record. Upload errors surface visibly with retry. submission_upload_failed event identifies stuck students.
Thinkific has no real export. Last year required copy/paste from each submission page into the spreadsheet to rank ~1,400 entries.Native CSV / JSON exports — submissions + profile data joined in one file. No copy/paste, no silent dropped fields.
Province not captured at signup. BC participation reverse-engineered from GA IP (4,700–5,300 range from a 5,000-account manual sample).Province (and school) required at signup. Stored on the student record. Filterable in admin.
No topic / category field. CEP keyword pulls (LNG, oil, EVs, Clean Fuel) had to be free-text keyword matching.Category required at submit (film · visual art · writing · music · installation · game · other). Topic tag for sponsor reporting.
Late event instrumentation — project_submitted not wired until late 2025. Year 1 and most of Year 2 submission counts badly under-counted.Every event wired on day 1. Server-side counts are truth; GA is for funnel analysis only.
Multi-editor spreadsheet caused Artist Statements to disappear. Had to lock editing to Inna and Brian; helpers got a single checkbox column.Native role-based admin. Shortlist + scoring are first-class platform actions, not spreadsheet columns. No cell-level conflicts. Arlene-friendly UX.
Two fragmented systems — Thinkific for the contest, separate portal for judging. Data sync was manual.Shared database. Judging still runs as its own app (judgingportal.vercel.app) but reads from the submission database directly — no CSV exports, no manual sync.
The Year 3 platform isn't a generic LMS — it's a purpose-built fix for documented Year 1/Year 2 friction. Every requirement in the Technical tabs below traces back to one of these challenges.

Guiding Principles

Foundational rules for the build
1.1

Linear 1-2-3-4 Flow

Watch → Study Guide → Quiz → Submit. Every page makes the next step obvious. Students should never wonder "what now?"

1.2

Progressive Disclosure

Locked steps are visible but disabled with a "complete previous step to unlock" tooltip. No dead ends, no confusion.

1.3

Mobile-First

The 15–25 demographic is mobile-dominant. Every page must work at 375px, including the quiz and submission upload.

1.4

Resume Anywhere

Close the tab mid-quiz, come back tomorrow, pick up at the same question. Same for video position and submission draft.

1.5

Full French Parity

Not a translation toggle on top of English — a proper /fr/account/* mirror with French CTAs, error states, and emails.

1.6

Self-Serve Edits

Students fix their own typos and re-uploads. Edit, delete, or replace any submission anytime before the deadline. No support tickets for routine corrections.

1.7

Reversible Admin Actions

Every admin action (reject, restore, ban) is undoable and audit-logged. Year 2's "rejected in Thinkific, can't un-reject" lock-in does not repeat.

1.8

Capture What We Report On

Ask each thing at the right moment: province at signup, category and topic at submission. Sponsor reports shouldn't require reverse-engineering analytics.

Technical

Login · progress · submissions · analytics
Login is presented on the front-end website (`Log In` link, `Enter Now` button). Auth is consolidated under energycreates.com/account — no separate subdomain like the old competition.energycreates.com Thinkific instance.

Login Requirements

  • Email + password (no SSO for Year 3).
  • Duplicate prevention — uniqueness check on email at signup; "Did you mean to log in?" prompt if a match is found.
  • Email verification on signup (single-tap link).
  • Forgot-password flow with rate-limited reset emails. Prominent placement on login screen.
  • Session persistence across tabs / devices.
  • CASL-compliant marketing opt-in checkbox during signup.
  • Required signup fields — name, email, password, province, school, age band.

What Gets Tracked Per Student

  • Watch progress: last playback position (seconds), completed (bool).
  • Study guide: downloaded (bool) or scrolled-to-end (bool).
  • Quiz: answers per attempt, score, passed (bool), attempt count.
  • Submission: file URLs, description, terms-agreed (bool), submitted-at, last-edited-at.

Persistence

State lives server-side keyed by user ID. Local browser cache is a write-through cache only — never the source of truth. This avoids the "I switched devices and lost my progress" failure mode of localStorage-only LMSs.

Student-Side Requirements

  • Large file upload — video, audio, image, document. Chunked upload with resumability for ~50–500MB files.
  • Required category field — film, visual art, writing, music, installation, other. Optional secondary topic/theme field for sponsor reporting.
  • Edit / delete / replace until deadline — students fix their own typos and re-uploads. No support tickets needed.
  • Error recovery — failed uploads don't lose state. Clear error messages, retry button. Server records every attempt.
  • Confirmation — visible "submitted" badge in the dashboard + email receipt with edit link.
  • Per-medium constraints documented up front — file types and max sizes shown before upload, not after rejection.

Admin-Side Requirements

  • Reversible reject / restore — every submission has an editable status (submitted · rejected · restored). Reject reasons logged. Same record, no parallel system.
  • Audit log — who changed status, when, why. Visible on the submission detail page.
  • Filter / search — by category, province, status, student name, date. The list view should match the way the judging team thinks about the entries.
  • Bulk export — CSV / JSON of submissions (with file URLs) for the judging portal handoff.
Critical replacement for Thinkific. The current instance has documented bugs: rejected submissions can't be un-rejected, students bail at the final submit click with no signal, duplicate accounts inflate counts. The new platform is the riskiest single deliverable on the build — start prototyping it first.
Year 1 and most of Year 2 submission counts from analytics are badly under-counted because project_submitted wasn't instrumented until late 2025. Year 3 wires every event on day 1 so we don't repeat the mistake.

Events fired by the LMS

  • account_created — server-side, includes province + age band.
  • step_started / step_completed — for each of watch · study-guide · quiz · submit.
  • quiz_attempted — fires per attempt with score + pass/fail.
  • submission_started — when the upload form opens.
  • submission_upload_failed — surfaces stuck students explicitly.
  • submission_completed — server-side, irrevocable proof of submit.
  • submission_edited / submission_deleted — for edit-flow analytics.
  • submission_shortlisted — Phase 1 approve (judging).
  • submission_scored — Phase 2 score saved · judge, total, criterion breakdown.

Truth source

Server-side database is the source of truth for counts (signups, submissions, completions). GA is for funnel/drop-off analysis only. Cross-check the two at every reporting cycle; investigate any divergence — that's how Year 2's instrumentation gap should have been caught earlier.