A study tool for scheduling exams and creating practice problem sets. Organize classes by semester, add exams with dates and locations, build practice sets with multiple question types, attach PDFs per question, and study using flashcards, quiz mode, or timed practice exams.
- Organize classes by semester (e.g., Spring 2026, Fall 2026)
- Add multiple exams per class with date, time, and location
- View all exams at a glance in a semester grid
- Create practice sets for any class
- Question types: Open-ended, Multiple Choice (A–D), True/False
- Per-question PDF import: Attach a PDF to each question and/or answer for reference
- Import PDF for "What should this question ask?"
- Import PDF for "What is the correct answer?" (all question types)
- PDFs are displayed inline when studying
- Flashcards — Flip through questions one at a time, reveal answers on click
- Quiz Mode — Answer questions one by one, get scored at the end, review missed questions
- Practice Exam with Timer — Timed exam simulation with countdown, question navigator, and score summary
- All data stored in browser
localStorage(no backend required) - Data persists across sessions
| Technology | Purpose |
|---|---|
| React 19 | UI framework |
| TypeScript | Type safety |
| Vite | Build tool & dev server |
| React Router | Client-side routing |
| Tailwind CSS | Styling |
| Lucide React | Icons |
- Node.js 18+ and npm
git clone https://github.com/nej296/Exam-Practice-Problem-Maker-.git
cd Exam-Practice-Problem-Maker-
npm installnpm run devOpen http://localhost:5173 in your browser.
npm run build
npm run previewsrc/
├── App.tsx # Routes and app shell
├── main.tsx
├── components/
│ ├── layout/ # Header, PageContainer, Modal
│ ├── scheduler/ # Semester grid, class cards, exam management
│ ├── practice/ # Class selector, problem creator, study mode selector
│ └── study/ # Flashcards, Quiz, Practice Exam modes
├── context/
│ └── AppContext.tsx # Global state and actions
├── types/
│ └── index.ts # TypeScript interfaces
└── utils/
├── storage.ts # localStorage load/save
└── helpers.ts # ID generation, shuffle, etc.
| Path | Description |
|---|---|
/ |
Redirects to /scheduler |
/scheduler |
Semester grid — view all semesters and classes |
/scheduler/:semesterId |
Semester detail — classes, exams, practice sets |
/practice |
Select a class to create practice problems |
/practice/:semesterId/:classId |
Create practice problems for a class |
/practice/:semesterId/:classId/success |
After creating — choose study mode |
/study/:semesterId/:classId/:setId |
Select study mode (flashcards, quiz, timed exam) |
/study/:semesterId/:classId/:setId/session |
Active study session |
- Semester — Contains classes (e.g., Spring 2026)
- Class — Name, optional instructor, exams, practice sets
- Exam — Label, date, time, location
- Practice Set — Name, list of problems
- Problem — Type (open-ended / multiple-choice / true-false), question text, answer, optional PDFs per question and answer
| Command | Description |
|---|---|
npm run dev |
Start dev server with HMR |
npm run build |
Type-check and build for production |
npm run preview |
Preview production build locally |
npm run lint |
Run ESLint |
MIT