Verified Learning Live demo
For the best experience, view this page on a desktop. On mobile, the app screens are shown as preview images — tap any to enlarge.
Verified Learning · Project scope

A training platform
that proves completion.

A video training platform built so that a certificate means what it says. Every minute watched is verified on the server, every trainee passes an end-of-course quiz, and the certificate is issued only against that record.

Scroll to read the scope
What we are building

Five parts. One system.

The platform is built from five connected parts: a trainee portal for watching and certifying, and an administrator portal for running the programme. Each part is described below.

Part 01 · Anti-skip video player

Completion the server can prove.

Most platforms record progress by asking the browser how far the trainee has watched. That is a claim, not evidence. This player reports watched intervals continuously, and the server merges them and refuses to mark a video complete unless the coverage is genuinely continuous from start to finish.

learning.yourdomain.com / course / information-security / lesson-2
Lesson player with the watched part of the progress rail filled and the unwatched part locked
Lesson player with the watched part of the progress rail filled and the unwatched part locked
Live demo screen — tap to enlarge

Screen from the live demo, with sample data. Try it yourself

No skipping forward

The rail is locked beyond the furthest point reached, and playback speed is fixed. Credited time never runs ahead of real time.

Free review

Within content already watched, trainees seek freely and rewatch as often as they wish.

Auto-pause on focus loss

If the training window is no longer the active screen, playback stops. Progress is saved at that point.

Unlimited resumes

A session can be stopped and resumed any number of times. Lessons unlock in order, so long courses can be split across videos.

What anti-skip can and cannot do

Seek-locking and watch verification are enforced on the server and are reliable. Auto-pause on focus loss is enforced in the browser and is best-effort — it stops the common case of a trainee leaving the video running in a background tab, but it cannot detect a second monitor or a trainee who leaves the room. We state this plainly so the control is not later mistaken for a guarantee of attention.

Part 02 · Quiz and certification

Watched in full. Tested. Certified automatically.

The end-of-course quiz unlocks only when the server confirms that every video has been watched in full. The moment a trainee passes, the certificate is generated and issued — no manual approval, no waiting.

learning.yourdomain.com / course / information-security / quiz
End-of-course quiz question with the trainee's locked answer marked Correct
learning.yourdomain.com / certificates / VL-2026-000123
Certificate of completion issued after passing the quiz, with a Download PDF button
End-of-course quiz question with the trainee's locked answer marked Correct
End-of-course quiz — tap to enlarge
Certificate of completion issued after passing the quiz, with a Download PDF button
Issued certificate — tap to enlarge

Screens from the live demo, with sample data. Try it yourself

How a certificate is earned
1
Every video watched in full
Coverage is verified on the server across every video in the course.
2
End-of-course quiz passed
The quiz unlocks after the last video. The pass mark is 70%.
3
Issued automatically
The certificate is issued in the same step that records the pass, with a unique serial number.
Available at any time
Trainees download again from My certificates; administrators can retrieve any certificate issued.

Watching every video is not enough on its own, and neither is the quiz: a certificate needs both.

The end-of-course quiz
Each attempt draws questions at random from the course's question bank, with the options shuffled.
Each answer is locked once submitted and marked Correct or Incorrect. The right answer is never shown.
70% to pass. Questions per attempt and the number of attempts are set per course — ten questions and two attempts by default.
A trainee who uses every attempt without passing is locked out until an administrator resets their attempts. Every reset is recorded in the audit log.
On every certificate
Course title
Trainee name
Training duration, set per course
Completion date
Serial number

Certificates are frozen to the course version and template version they were issued with. Replacing a video or redesigning the template later never changes a certificate already issued.

Part 03 · Reporting, import and export

Six breakdowns. One export button.

A Power BI–styled dashboard built into the platform — not a Power BI integration, so it needs no Microsoft licence. It shows trainees, completion rate, work in progress and certificates issued, flags anyone locked out of a quiz, and exports everything to Excel.

learning.yourdomain.com / admin / dashboard
Administrator dashboard with completion figures, a quiz lock-out alert and completions by month
Administrator dashboard with completion figures, a quiz lock-out alert and completions by month
Live demo screen — tap to enlarge

Screen from the live demo, with sample data. Try it yourself

The six breakdowns

01 Trainee name
02 Course launch year
03 Course completion count
04 Completion date by trainee
05 Started but incomplete
06 Quiz attempts, best score and result

“Completed” means a certificate has been issued — every video watched and the quiz passed.

Import and export

Excel in, Excel out.

Every import comes with a downloadable template, a description of each column with an example, and a preview that lists any problems row by row. Nothing is written until the preview is confirmed.

Imports
Trainee accounts
Course assignments
A whole course from the course template
Quiz questions
Exports
Dashboard and monthly report
Trainee list, with the current filters
Certificates as a ZIP of PDFs with an index
Audit log
Parts 04 & 05 · Administration

Everything your training team needs, in one place.

Write the training page, upload and replace videos, build the quiz bank, design the certificate and manage trainees — all from the administrator portal. Publishing is refused, with the reason, until a course has its videos and enough quiz questions.

learning.yourdomain.com / admin / courses / workplace-safety
Draft course editor with the training page fields and a publishing checklist
learning.yourdomain.com / admin / trainees
Trainee list with seats used against the account limit, filters and bulk import
learning.yourdomain.com / admin / certificate-template
Certificate template designer with a selected text box and position controls
Draft course editor with the training page fields and a publishing checklist
Course editor — tap to enlarge
Trainee list with seats used against the account limit, filters and bulk import
Trainee management — tap to enlarge
Certificate template designer with a selected text box and position controls
Certificate designer — tap to enlarge

Screens from the live demo, with sample data. Try it yourself

Videos and versioning

Upload, reorder and replace videos in a draft version. Publishing it never affects trainees who have finished or already started — they stay on the version they began.

Training page

Description, standards effective date, certificate duration, video language, a link to training material and a message from the organiser, for each course.

Quiz question bank

Four or five options per question, one correct, in English with optional Traditional Chinese. Questions are retired rather than deleted, and can be imported from Excel.

Certificate template designer

Drag-and-drop text, data fields, images, lines and a background on an A4 landscape page. A stress test checks that the longest names still fit before saving.

Trainee accounts

Add, invite, edit, deactivate and delete. Accounts that hold certificates are deactivated rather than deleted, so every certificate stays verifiable. Courses assigned individually or in bulk.

Configurable account limits

The number of administrator and trainee accounts is set per deployment. The trainee list shows seats in use, and adding or importing past the limit is refused with a clear message.

Architecture

A proven stack, not a new one.

Every component below is a mature, widely deployed technology with a long support horizon. Nothing here is experimental. The result is a platform your IT team can assess quickly and maintain without specialist knowledge.

Entry points
Trainee portal
Course list, player, quiz, certificates. EN / 繁中.
Administrator portal
Courses, quiz banks, certificate templates, trainees, dashboard, imports and exports, audit log.
Application layer
Authentication · Session management · Role enforcement

Argon2id password hashing, server-side sessions, and role checks on every request. Trainee and administrator boundaries are enforced on the server, never in the browser.

Core services
Watch verification
Interval merging and coverage checks on the server.
Quiz and certificates
Random draw and scoring on the server; PDF certificates, versioned and immutable once issued.
Reporting
Aggregations, charts, and Excel import and export.
Storage
PostgreSQL
Accounts, courses, watch intervals, quiz attempts, certificates, audit log. Encrypted at rest, daily backups.
Object storage — Cloudflare R2
Video files, served through an authenticated proxy. R2 charges no egress fee, which matters when many trainees stream multi-gigabyte courses.

Storage sizing

There is no fixed ceiling — storage scales on demand. The figure that actually matters for a video platform is monthly transfer, not capacity, which is why the platform uses Cloudflare R2.

Initial allocation
500 GB
Roughly 250–500 hours of 720p video
Egress charge
None
Streaming volume does not add cost
Beyond 500 GB
Extendable
Added as the video library grows
Technology

A pragmatic, modern stack. No moonshots.

Trainee accounts
100
Default limit, configurable
Admin accounts
4
Default limit, configurable
Interface languages
2
English and 繁中
Quiz pass mark
70%
Checked on the server
Layer 01

Application & UI

Next.js 14 · React 18 · TypeScript
Tailwind CSS · shadcn/ui
Bilingual routing (EN / 繁中)
Layer 02

Backend services

Node.js · Fastify · TypeScript
Zod request validation
Background video transcoding to 720p
Layer 03

Watch verification

Client interval reporting
Server-side merge and coverage check
Tamper-resistant completion record
Layer 04

Data

PostgreSQL 16 · Drizzle ORM
Daily automated backups
Encrypted at rest and in transit
Layer 05

Media, PDF & Excel

Cloudflare R2 object storage
Certificate PDFs with embedded CJK fonts
XLSX import and export
Layer 06

Operations

Containerised deployment
Uptime and error monitoring
Staging and production environments
Agreed for each deployment
Hosting region Domain and email setup — with your IT team Account limits Certificate design Quiz settings per course Storage allocation
Scope of work

Everything included. Everything excluded.

The full scope, set out plainly as modules and deliverables, so what is built matches what was asked for.

Functional areas
5
Player, quiz and certification, reporting, trainees, course administration
Portals
2
Trainee and administrator
Excel imports
4
Trainees, assignments, courses, quiz questions
Interface languages
2
English and Traditional Chinese
Module What is delivered
Administrator portal Secure login and access management for administrator accounts, up to the configured limit. Courses, quiz banks, certificate templates, trainees, dashboard, imports and exports, and audit log.
Trainee portal Secure login, assigned course list, training page, integrated video player, end-of-course quiz, and certificates.
Trainee management Add, invite, edit, deactivate and delete trainee accounts, or create them by self-registration or Excel/CSV import. Accounts holding certificates are deactivated rather than deleted. Courses assigned individually or in bulk.
Account limits Configurable maximum number of administrator and trainee accounts, enforced on creation, import, self-registration and reactivation, with seats in use shown to administrators.
Video management and versioning Upload, reorder and replace videos in a draft version of the course; videos are transcoded to 720p in the background. Publishing a new version leaves trainees who finished or started on their own version.
Anti-skip enforcement Fast-forwarding into unwatched content is blocked and playback speed is fixed. Free seeking within content already watched. Playback pauses automatically when the training window is no longer the active screen. Unlimited resumes.
Completion tracking Watched intervals are verified on the server. A video is marked complete only when coverage is genuinely continuous from start to finish; lessons unlock in order.
End-of-course quiz Unlocks once every video is complete. Random draw from a per-course question bank with shuffled options; each answer locked and marked Correct or Incorrect without revealing the right one. 70% pass mark, limited attempts, administrator reset after lock-out.
E-certificate generation Issued automatically only when every video is complete and the quiz is passed. Downloadable as PDF by the trainee at any time. Carries course title, trainee name, training duration, completion date and serial number.
Certificate template designer Drag-and-drop editor for text, data fields, images, lines and background, with placement and overflow checks and a long-name stress test. Each course picks a template.
Certificate integrity Each certificate is frozen to the course version and template version it was issued with. Later changes never alter a certificate already issued.
Statistics dashboard Registered trainees, completion rate, in progress, not started and certificates issued, completions by month and by course, quiz lock-out alerts, and the six breakdowns, with filters.
Imports and exports Excel templates and validated, preview-first imports for trainees, course assignments, courses and quiz questions. Exports of the dashboard, monthly report, trainee list, certificates (ZIP of PDFs) and audit log.
Training page Per course: description, effective date of the standards covered, certificate duration, video language, link to training material, and a message from the organiser.
Audit log A record of administrator actions and key trainee events — publishing, imports, quiz resets, account changes, certificates issued.
Bilingual interface Both portals in English and Traditional Chinese throughout, with the language choice persisting to each account.
Deployment and hosting Production environment setup, domain and email setup, initial system configuration, administrator training, and documentation.
Post-launch support Defect resolution within the delivered scope after go-live.

Not in this scope

Stated plainly, so there is no ambiguity at delivery.

Deferred — available later
Microsoft Entra single sign-on. The platform is built so this can be enabled later as configuration rather than redevelopment.
Questions inside a video. Assessment happens in the end-of-course quiz.
Mobile applications for iOS or Android. The portals are responsive and work in a mobile browser.
Automated reminder emails. Account invitations are included.
Out of scope
Live Power BI integration. The dashboard is built into the platform; a Power BI licence is not required and not supplied.
Production of training videos or course content.
Writing quiz questions. The system manages the question bank; your training team authors the questions.
Migration of historical training records from any existing system.
Next steps

See it working.

The live demo runs both portals in the browser with sample data. Nothing you do there is saved anywhere but your own browser, and it can be reset at any time.

Try the live demo
Worth trying in the demo
1Drag the progress bar past what you have watched.
2Finish the lessons, sit the quiz and download the certificate.
3Switch to the administrator view and reset a locked-out trainee.
4Move a box in the certificate designer and turn on the stress test.
Verified Learning.