BloomGate is a Smart Exam Paper Generator powered by BloomJoin. This full-stack application streamlines the process of creating, managing, and generating exam papers, utilizing advanced filtering and management techniques.
The main dashboard provides an overview of the system with statistics, question complexity distribution, and recent exam papers.
Generate exam papers automatically based on complexity distribution with real-time preview.
Manage your question repository with weights, complexity levels, and filtering capabilities.
Preview generated exam papers with a professional layout, ready for printing or download.
Toggle to include answers and explanations for creating answer keys.
The repository is structured as a monorepo containing two main applications:
- Backend: A robust RESTful API built with NestJS. It handles data persistence, exam logic, question management, and the core BloomJoin algorithms.
- Frontend: A modern, responsive user interface built with Next.js (App Router), React, and Tailwind CSS.
- Framework: NestJS v11
- Language: TypeScript
- Testing: Jest
- Architecture: Modular (Controllers, Services, Providers)
- Framework: Next.js v16
- Language: TypeScript
- Styling: Tailwind CSS v4
- UI Library: React v19
- Dashboard: Overview of questions, exams, colleges, and distribution statistics
- Question Bank: Manage questions with complexity levels (Easy, Medium, Hard, Expert), weights, and tags
- Exam Generation: Automatically generate exam papers based on complexity distribution
- PDF Preview & Export: View, print, and download exam papers with professional formatting
- Answer Key Generation: Toggle to include answers and explanations
- College Management: Register and manage colleges for exam distribution
- Exam Distribution: Distribute exams to multiple colleges via email
- BloomJoin Sync: Efficiently synchronize exam modifications across distributed college sites using Bloom Filters
- Theme Support: Light and dark mode themes
- Node.js (Latest LTS recommended)
- npm or yarn
The backend runs on http://localhost:3001 by default.
- Navigate to the backend directory:
cd backend - Install dependencies:
npm install
- Start the development server:
npm run start:dev
- Run tests:
npm run test
The frontend runs on http://localhost:3000 by default.
- Navigate to the frontend directory:
cd frontend - Install dependencies:
npm install
- Start the development server:
npm run dev
- Build for production:
npm run build
The backend exposes the following API endpoints:
GET /api/questions- List all questionsPOST /api/questions- Create a questionGET /api/questions/statistics- Get question statisticsGET /api/questions/:id- Get a specific questionPUT /api/questions/:id- Update a questionDELETE /api/questions/:id- Delete a question
GET /api/exams- List all examsPOST /api/exams- Create an examPOST /api/exams/generate- Auto-generate exam based on criteriaGET /api/exams/:id/pdf- Get exam PDFGET /api/exams/:id/pdf-content- Get exam PDF content with metadataPOST /api/exams/distribute- Distribute exam to collegesPOST /api/exams/modify- Modify distributed exam
GET /api/exams/colleges/all- List all collegesPOST /api/exams/colleges- Create a collegeGET /api/exams/colleges/:id- Get a specific college
POST /api/bloom-filter/bloom-join- Perform bloom join for sync
/
├── backend/ # NestJS API application
│ ├── src/
│ │ ├── bloom-filter/ # BloomJoin algorithm implementation
│ │ ├── email/ # Email service for distribution
│ │ ├── exams/ # Exam management & PDF generation
│ │ ├── questions/ # Question bank management
│ │ ├── app.controller.ts # Main API controller
│ │ ├── app.module.ts # Root module
│ │ └── main.ts # Application entry point
│ └── test/ # E2E tests
├── frontend/ # Next.js Client application
│ ├── app/ # Next.js App Router pages
│ ├── components/ # React components
│ │ ├── Dashboard.tsx # Main dashboard
│ │ ├── QuestionBank.tsx # Question management
│ │ ├── ExamPapers.tsx # Exam listing
│ │ ├── GenerateExam.tsx # Exam generation
│ │ ├── PdfViewer.tsx # PDF preview
│ │ ├── Distribution.tsx # Exam distribution
│ │ ├── BloomJoinSync.tsx # BloomJoin synchronization
│ │ └── ...
│ ├── lib/ # Utilities and API client
│ │ ├── api.ts # Backend API integration
│ │ └── theme.tsx # Theme provider
│ └── public/ # Static assets
├── docs/
│ └── screenshots/ # Application screenshots
└── README.md # Project documentation
BloomGate uses the BloomJoin algorithm to efficiently synchronize exam modifications across distributed college sites. When you modify a distributed exam, only the changed questions are synced using bloom filters, minimizing network cost by up to 85%.
- Create Bloom Filter: Admin creates a bloom filter from modified question IDs
- Filter Records: Colleges filter local records against the bloom filter to find matches
- Compute Join: Only matching records are synced, minimizing network traffic
This project is licensed under the MIT License.




