A Web application for creating structured exam questions with image uploads and ZIP export functionality.
- ✅ Multiple question types (MCQ single/multiple, Scenario, Short/Long answer)
- ✅ Marks management (positive, negative, partial)
- ✅ Multiple image uploads per question with validation
- ✅ Client-side ZIP export with JSZip
- ✅ Auto-save to localStorage
- ✅ Full TypeScript with Zod validation
- ✅ Clean, maintainable component architecture
- ✅ ESLint best practices
- QuestionEditor: Manages individual question form state and validation
- ImageUploader: Handles file uploads, validation, and preview display
- ExportModal: User input for ZIP filename and export trigger
- lib/validation.ts: Centralized Zod schemas and file validation
- lib/storage.ts: Simple localStorage operations
- lib/zip.ts: ZIP generation and download utilities
- lib/types.ts: TypeScript interfaces and types
- Component-level logic: Components manage their own state and behavior
- Focused utilities: Utility functions are small, single-purpose helpers
- Clear separation: UI logic stays in components, data operations in utils
- Type safety: Full TypeScript with strict validation
- Maintainability: Clear file structure, extensive comments, ESLint compliance
```bash
pnpm install
pnpm run dev
pnpm run build ```
- Create Questions: Click "Add Question" to create a new question
- Configure: Select type, add prompt, options (for MCQs), marks, and images
- Auto-save: Questions are automatically saved to localStorage
- Export: Click "Export ZIP" to download all questions and images
The ZIP file contains:
data.json: Complete question data with metadata<uuid>.ext: All uploaded images with crypto-generated filenames
- Client-side only (no authentication or backend)
- Maximum file size: 5 MB per image
- Total size warning at 80 MB
- Supported formats: jpg, jpeg, png, gif, webp, svg
- Next.js 16 (App Router)
- TypeScript
- Zod validation
- JSZip
- Tailwind CSS v4
- shadcn/ui components