Proctored exams,
without the per-seat fees.
Self-hostable exam platform with Safe Exam Browser lockdown, webcam snapshots, invite-only allowlists, and server-side grading. Next.js + Supabase.
-- Correct answers live in an admin-only table.
-- Candidates can't read it — even via direct API calls.
create table answer_keys (
question_id uuid primary key references questions(id),
correct jsonb
);
alter table answer_keys enable row level security;
create policy "admin_only" on answer_keys for all
using (exists(select 1 from profiles
where id = auth.uid()
and role = 'admin'));
-- Grading runs in a SECURITY DEFINER function so the
-- client never has to fetch the correct answers.
submit_attempt(attempt_id, terminated) → voidFeatures
What's in the box.
Self-hosted. No per-candidate billing.
Proctoring
Forced fullscreen, clipboard block, tab-switch detection, periodic webcam snapshots, auto-submit on violations.
SEB-locked
One-click Safe Exam Browser config. Server verifies the BEK hash so only SEB can load the exam.
Invite-only
Single-use codes locked to specific emails. Strangers can't even see the test exists.
Server-side grading
Correct answers live in an admin-only RLS-isolated table. Candidates can't query them — even with crafted API calls.
Image questions
Upload images on the question prompt or any MCQ option. MCQ + long-answer types supported.
Free to host
Runs on Vercel + Supabase free tiers. Handles thousands of candidates at roughly $0.
Stack
Next.js + Supabase.
Postgres with Row-Level Security, Auth, and Storage. Safe Exam Browser is optional.npx vercel deploy to ship.
