Start a Project
Available for new projects
Client
Own product — MCQs Galaxy
Industry
Education
Published
August 20, 2026
Stack
PHP · MySQL · JavaScript
The challenge

Students preparing for PPSC, FPSC, NTS and MDCAT could find plenty of MCQs to read, but nowhere to sit an actual practice test — one they could shape themselves, under real exam conditions and real marking rules.

What I did

Built a configurable quiz engine on top of a 44,000-question bank: pick up to eight subjects, filter each by sub-topic and difficulty, set a timer, and choose the marking scheme of the exam you are actually sitting. Written in plain PHP and MySQL to run on ordinary shared hosting.

Results

What changed

  • 0144,000+ questions across 31+ subjects, live and searchable
  • 02Quizzes mix up to 8 subjects, 100 questions, with per-subject difficulty filters
  • 03Four real exam marking schemes reproduced, plus a custom option
  • 04Built in two months and still in active development

Measured after the work went live. Nothing estimated.

The gap

Search for exam preparation in Pakistan and you find no shortage of MCQs. Long pages of questions with the answer underneath. Useful for reading. Useless for practising.

What none of them let you do is sit a test. You cannot say give me forty questions from Pakistan Affairs and Islamic Studies, thirty minutes, marked the way FPSC marks it. You can only scroll.

That is the whole reason this exists. The product is the quiz engine. The 44,000 questions are the raw material it runs on, not the point.

Making it feel like the real exam

This is the part that turned out to matter most, and it is not a technical problem — it is a domain one.

Pakistani exam boards do not mark the same way. Get that wrong and a practice score means nothing, because it does not predict the real one. So the engine reproduces the actual schemes:

Scheme Correct Wrong
No penalty (practice) 1 0
FPSC / PPSC 4 −1
NTS 1 −0.25
MDCAT 5 −1
Custom your choice your choice

A detail that follows from taking this seriously: a skipped question scores zero, but still counts as wrong under negative marking — because that is how the real papers work. Getting that wrong would quietly teach students the opposite of the right exam strategy.

Timers run from ten minutes to two hours, or off entirely for relaxed practice.

Building the quiz itself

The setup is deliberately layered rather than a single form:

  • Pick up to eight subjects and mix them in one paper
  • Fine-tune each one separately — sub-topic, difficulty, how many questions from that subject
  • The interface shows how many questions actually match those filters as you set them, so you never build a quiz the bank cannot fill
  • Questions are randomised every time, so re-taking the same configuration is not the same paper

Afterwards, results break down per category, so a student can see they are strong on Islamic Studies and weak on Everyday Science rather than just seeing a single number. Wrong answers can be re-attempted.

The constraints that shaped it

This runs on ordinary shared hosting, not a cloud platform with autoscaling. That shaped several decisions, and I would defend all of them:

  • Plain PHP 8 and MySQL, no framework. Around 133 files and 17,000 lines. A framework would have added deployment complexity without solving a problem this project has. The traffic is read-heavy and the hosting is modest.
  • Hard caps, stated openly in the interface: eight subjects, 100 questions per subject, 100 per quiz, and ten quizzes per hour per user. That last one is a rate limit protecting a shared-hosting database, and I chose to explain it to users rather than hide it and let quizzes fail.
  • Bulk import over manual entry. 44,000 questions do not get typed in. Spreadsheets come in through PhpSpreadsheet with validation and category mapping on the way.

Keeping people coming back

Exam prep is a habit, so the engine tracks one: points, streaks and badges for signed-in users, a leaderboard, and a daily challenge that refreshes every day. There is also a past-papers section and an interview-question bank kept separate from the main MCQ set.

None of that is technically hard. It matters because a student who returns daily for a month learns considerably more than one who does a single enormous quiz and never comes back.

Where it stands

Built in about two months, and still growing. The engineering is real; the audience is still early, and I would rather say that than inflate it.

What I would do next: search is currently ordinary indexed queries, which is fine at 44,000 rows but will not stay fine. Full-text indexing on the question text is the obvious next step before the bank grows much further.

Built with
PHPMySQLJavaScriptTailwind CSS

Got a problem like this one?

Tell me what is going wrong. I'll tell you what it takes to fix it.