Magician’s School

Inspiration

Preparing for the IBA admission test is often fragmented. Students attend classes in one place, collect resources from another, take mock tests through separate forms, and track their progress manually. This makes an already stressful preparation period even harder.

We were inspired to create Magician’s School, a unified learning and competition platform for IBA aspirants in Bangladesh. Our goal was to bring classes, practice, assessment, analytics, mentorship, and community into one structured ecosystem. We also wanted preparation to feel engaging, so we introduced houses, rank progression, badges, and leaderboards that reward consistency as well as performance.

What it does

Magician’s School supports the complete student journey:

  • Secure registration, login, password recovery, and profile management
  • Online and offline program enrollment
  • Live Zoom class scheduling and protected class recordings
  • Organized learning resources for Math, English, and Analytical Ability
  • Topic-based practice tests generated from a question bank
  • Balanced quizzes based on difficulty and subject distribution
  • Scheduled assignments, assessments, and competitive live exams
  • Timed exam sessions with saved progress and automatic submission
  • Detailed scorecards, explanations, analytics, and leaderboards
  • House competitions between Gryffindor, Hufflepuff, Ravenclaw, and Slytherin
  • A separate Math Course with its own classes, exams, access rules, and leaderboard
  • Administrative tools for publishing content, reviewing enrollments, moderating submissions, and managing schedules

Students also earn rank points through official activities. Daily exams, weekly exams, assessments, and completed assignments contribute differently, while missed required activities may reduce rank points. Retakes help students learn without changing official competition results.

How we built it

We built the frontend with Next.js 16, React 19, Tailwind CSS, DaisyUI, Framer Motion, and Recharts. The interface is responsive and provides separate experiences for public visitors, enrolled students, Math-only students, students with both memberships, and administrators.

The backend uses Node.js, Express 5, MongoDB, and Mongoose. It exposes REST APIs for authentication, courses, classes, exams, assessments, analytics, and payments.

Authentication uses JWTs, while passwords are hashed with bcrypt. Middleware enforces authentication, administrator permissions, program membership, and exam-specific access. Password-reset tokens are hashed, time-limited, and delivered through configurable email providers.

Questions are stored in a reusable question bank. The backend can generate topic-based practice papers and difficulty-based quizzes while balancing questions across subjects and learning areas. Official live-exam questions and assignments remain isolated from the reusable practice pool.

The examination engine keeps answers and deadlines in local storage so accidental refreshes do not erase progress or restart the timer. It automatically submits when time expires and can submit an official attempt when the student leaves the exam tab. Scheduled exam results remain hidden until the official deadline, and answer keys are redacted by the server before release.

For payments, we integrated PayStation-hosted checkout. Prices, discounts, eligibility, and remaining balances are recalculated on the server. Checkout locks, reusable payment records, exact-amount verification, callback handling, and idempotent processing help prevent duplicate or manipulated transactions.

Challenges we faced

One of the hardest challenges was designing access control for multiple overlapping programs. A user can have general access, Math access, both memberships, an outstanding installment, or suspended general access. Administrators must bypass student restrictions without weakening normal authorization. We solved this by deriving access from verified payment records and applying program-aware middleware to every protected route.

Building a fair competition system was another challenge. Practice attempts and retakes should support learning, but they must not inflate official rankings. Disqualified submissions must remain auditable while contributing zero points. Missed-exam penalties should apply only to exams scheduled after a student joined. We handled these cases with separate official and retake submissions, access-start dates, moderation metadata, and deterministic ranking rules.

Payment processing required careful state management. Gateway callbacks can arrive late, repeat, contain inconsistent fields, or report refunds after a successful transaction. We created explicit payment states, unique invoice identifiers, exact price checks, concurrency locks, retry-safe checkout attempts, and access synchronization after every verified status change.

Question data also arrived in several formats, with different field names and answer representations. We built normalization and validation logic to support these formats while keeping malformed questions out of generated tests.

Finally, creating a feature-rich interface that remained usable on mobile was challenging. Dashboards, timers, question navigation, analytics, administration forms, and leaderboards all needed to work on smaller screens without overwhelming students.

What we learned

We learned that an education platform is more than a collection of videos and tests. The most important part is connecting content, assessment, feedback, access, and motivation into one dependable workflow.

We also learned to keep sensitive decisions on the server. Exam scoring, answer release, payment amounts, discount eligibility, and membership access cannot safely depend on browser input.

The project strengthened our understanding of:

  • Full-stack architecture and REST API design
  • Authentication and role-based authorization
  • MongoDB schema and index design
  • Time-sensitive exam workflows
  • Randomized and balanced question selection
  • Payment state machines and callback idempotency
  • Responsive interface design
  • Automated testing for complex business rules

Our backend currently passes 175 automated tests, covering scoring, access control, retakes, rankings, payment verification, discounts, penalties, moderation, and program isolation. The frontend also passes its lint checks.

What’s next

Our next priorities are to complete the remaining Math Course recording catalog, add more authored questions and class schedules, validate the full payment flow with working PayStation sandbox credentials, and expand student analytics with deeper topic-level recommendations.

We also want to introduce smarter study plans that use each student’s performance history to identify weak areas and recommend the next class, resource, or practice test. The long-term goal is to make Magician’s School a personalized preparation companion that helps students study with greater structure, confidence, and consistency.

Built With

Share this project:

Updates

Submission history