Judiciary+
An AI-assisted study platform for judiciary and law exam preparation.
- Kind
- Independent product
- What it is
- AI learning platform
- My role
- Independent product · design, engineering, AI
- Period
- Aug 2026 – present


The idea
JudiciaryPlus helps candidates prepare for judiciary and competitive law examinations. A student chooses their exam and syllabus, then plans, studies, practises and revises in one account, with an AI tutor that answers from legal sources rather than from memory.
- Who it's for
- Candidates preparing for judiciary and competitive law examinations, who need one place to plan, study, practise and revise.
- The problem
- Law-exam preparation is spread across PDFs, notes, question papers and generic chatbots that can state the law confidently and wrongly. Students need one place that keeps their own record, adapts practice to their weak areas and grounds AI answers in real statutes and judgments.
What I built
I designed and built JudiciaryPlus end to end: interface, API, database schema, AI integration, tests and release tooling. The source code is private, so there is no public repository link.
- Designed and built the product end to end: React front end, serverless API, Postgres schema and AI integration.
- Wrote an automated test suite of more than 1,600 tests covering scheduling, revision, AI routing, admin authorisation and data migrations.
- Set up separate production and staging environments that never share a database, with scripted release checks.
What it does
Each feature is verified in the source code. The label says whether it is on the production branch or still in staging.
AI Tutor
In productionStreaming answers to legal questions, routed by question type and grounded in retrieved statutes and verified judgments.
Practice, quizzes and mock exams
In productionAdaptive daily quizzes weighted towards weak topics, model papers, timed mock examinations and post-exam analysis.
Syllabus management
In productionStudents set their own exam and syllabus. Topics are structured per subject and drive planning and coverage.
Study planner
In productionDaily plans built within a fixed study-hour budget. AI interprets requests such as "only study X today", while the schedule itself is computed deterministically.
Adaptive revision
In productionA revision queue ranked by recent mistakes, accuracy, due dates and coverage gaps, with spaced intervals per topic.
Progress and reports
In productionDashboard, daily/weekly/monthly reports, study calendar and a mistake book to track progress over time.
Admin console
In productionA separate console for staff with server-side role checks, student overviews, content management and an append-only audit trail.
Guardian reports
In productionA parent portal with scheduled progress reports that keep the student's username private.
Account-scoped study data
In productionEvery student's syllabus, plans, attempts and notes are stored per account and isolated with row-level security.
Judgment intelligence
In stagingLegal news traced to the official judgment, then turned into a reviewed learning pack.
Official previous-year paper ingestion
In stagingImporting official past papers into the question bank for practice.
The engineering
How it is put together, and the problems that took the most care.
A single-page React app talks to a small set of serverless functions. Those functions own authentication, AI calls and privileged writes, while Postgres row-level security isolates each student's data.
Client
React + TypeScript SPA (Vite). Lazy-loaded routes, a Zustand store, IndexedDB for local persistence.
Serverless API
Vercel Functions for auth, tutor (streamed over SSE), planner, syllabus and admin. Admin operations share one function through an operation router with per-operation permissions.
AI layer
A provider adapter with an ordered fallback chain per feature, a total time budget across attempts, and health tracking that routes around degraded models.
Data
Supabase Postgres, Auth and Storage. Schema changes are versioned SQL migrations, checked against an in-memory Postgres before release.
Technology
- Front end
- React 18
- TypeScript
- Vite
- Tailwind CSS
- Zustand
- React Router
- Recharts
- API
- Vercel Functions (Node)
- Server-sent events
- Zod
- Data
- Supabase Postgres
- Supabase Auth
- Row-level security
- IndexedDB
- AI
- Google Gemini
- Ollama-compatible models
- Provider fallback chains
- Quality
- Vitest
- PGlite migration checks
- Secret-scan release script
Hard problems, and how I solved them
Keeping the AI tutor available when a provider fails
- Problem
- Single AI providers rate-limit, stall or return errors, and a student mid-question shouldn't see a dead end.
- Approach
- Each feature has an ordered chain that mixes two providers, so a failure on one falls through to the other. A cumulative deadline bounds the total wait, and a health tracker marks models as degraded after stalls so routing avoids them.
Not letting the model decide what must be trustworthy
- Problem
- Revision priority, mastery and due dates drive what a student studies next. They need to be explainable and repeatable.
- Approach
- These are computed by deterministic, capped scoring rules from practice results and plans. The model never assigns them, and tutor conversations never count as evidence of mastery.
Grounding legal answers in real sources
- Problem
- A tutor that paraphrases the law from memory can be confidently wrong, which is costly for exam candidates.
- Approach
- Sources are imported only from approved official hosts, de-duplicated by content hash and quality-checked. They become searchable evidence only after an explicit verification step.
Authorisation that the browser can't bypass
- Problem
- The admin console exposes student data, so hiding buttons in the UI isn't access control.
- Approach
- Every admin operation is checked on the server against a permission matrix, using the role stored in the database rather than anything sent by the client. Non-staff callers get a 404, and admin actions are written to an insert-only audit log.
The evidence
What can be checked, and what the public version does not do.
- Role
- Independent product
- Timeline
- Aug 2026 – present
- Automated tests
- 1,600+
- Database migrations
- 36
- Source
- Private repository
Explore the product
Building something where AI has to be trusted?
JudiciaryPlus answers from retrieved sources, keeps working when an AI provider fails, and leaves the decisions that matter to deterministic code. If your product needs AI that people can rely on, I can build it the same way.