NSCT Prep is a free, signup-free web platform I designed and built end to end to help final-year Computer Science students in Pakistan prepare for the National Skills Certification Test. It puts 33,800+ answer-keyed MCQs across 10 subjects and 149 topics behind one configurable quiz engine, built on Next.js 16, React 19 and MongoDB Atlas.
The problem
Every NSCT season, final-year CS students go looking for practice material and find it scattered: PDFs passed around WhatsApp groups, blog posts with answer keys that are years out of date, and question sets with no explanations at all. There was no single place to practise by subject and topic, check an answer, and understand why it was right.
The students who need this most are often studying on a phone, on mobile data, between classes. A platform that asked them to sign up, loaded slowly, or lost their progress halfway through a quiz would simply be closed. So the brief I set myself was narrow on purpose: fast, free, no account, and built around practice rather than content for its own sake.
My role
I designed and built NSCT Prep end to end: the product scope, the interface, the question data model, the quiz engine, the PDF export, the blog, and the deployment on Vercel. That meant making content decisions as well as engineering ones, such as how to split 10 Computer Science subjects into 149 topics a student would actually recognise from their syllabus.
Architecture and tech stack
Next.js 16 with Server Components
Subject, topic and blog pages render on the server, so the HTML that reaches a slow phone, or Google, already contains the content. Only the quiz itself, which needs timers and instant feedback, runs as client components. I built on Next.js 16 and React 19 from the first commit rather than planning a migration later.
MongoDB Atlas for the question bank
Each MCQ is a document tagged by subject, topic, difficulty and source, carrying its options, answer key and explanation together. A document store fits that shape well, and new university-shared questions slot in without a schema migration.
An in-memory TTL cache for random sets
Drawing a fresh random set from a large collection on every quiz start is wasted work. Question pools are cached in memory with a time-to-live, so a random set is assembled in milliseconds and the cache refreshes itself as the bank grows.
PDFKit for offline study
Some students prefer paper, or need to study without a connection. The server generates PDF booklets with PDFKit, so a practice set can be downloaded and printed.
Key features
- 33,800+ verified MCQs across 10 CS subjects and 149 topics, all answer-keyed with detailed explanations.
- A configurable quiz engine: subject, topic, difficulty, question count, instant or end-of-quiz review, and a per-question, total or unlimited timer.
- A results screen with an animated score ring, a correct, incorrect and skipped breakdown, and a per-question review.
- 2,518 real university exam questions from Pakistani CS departments, structured into reusable practice sets.
- 12 articles on exam strategy and career guidance, written in Markdown.
- Mobile-first design with a dedicated bottom navigation bar.
Challenges and how I solved them
Keeping a half-finished quiz safe
- Problem
- On a phone it is easy to lose a quiz by accident: a swipe back, a closed tab, a tap on the navbar. Losing twenty answered questions is the fastest way to lose a student.
- Solution
- Anti-leave protection catches browser back, tab close and in-app navigation while a quiz is running, and asks before throwing the progress away.
Fifteen themes with no flash
- Problem
- Students study late, so dark mode mattered, and I wanted them to pick an accent colour they liked. Theme code that runs after hydration paints the wrong colours first on every page load.
- Solution
- Light and dark modes and 15 accent palettes run entirely on CSS variables. The saved choice in localStorage is applied before first paint, so there is no flash of unstyled content.
Making a quiz site discoverable
- Problem
- A quiz app is mostly interaction, and to a search engine much of it looks like an empty shell. A free tool nobody can find helps nobody.
- Solution
- Server Components carry the subject, topic and blog content, while JSON-LD structured data (Organization, FAQ and Breadcrumb), dynamic Open Graph images and a sitemap describe the site to search engines. The same server-first approach runs the 340+ localized pages of EasyToolbox, my multilingual calculator platform.
Results
NSCT Prep is live at nsctprep.dev and free to use. A student can open it, pick Data Structures, choose a topic and difficulty, set a timer and be answering questions within seconds, without creating an account. When they finish, they see what they got right, wrong or skipped, with an explanation for every question.
- 33,800+
- answer-keyed MCQs with explanations
- 149 topics
- across 10 Computer Science subjects
- 2,518
- real university exam questions
- 0 signups
- needed to start practising
What's next
The next step is progress that follows a student across devices without forcing an account on anyone who does not want one, along with more university papers as departments share them. If you are building something similar for students, the Aubade learning portal case study covers the other side of EdTech: a full LMS interface.
