ExamHacker is an educational platform for AI-powered quiz generation, sharing, and passive learning. The platform consists of a web application and an Android application synchronized through a shared backend.
Students can upload lecture materials and automatically generate quizzes and flashcards using AI or create them manually. Quizzes can be shared privately via links or published to a community-driven QuizHub where users can discover, rate, comment on, and download study materials. The Android application can display learning cards during everyday smartphone usage, such as after unlocking the phone or opening selected applications.
- AI-powered quiz and flashcard generation from study materials
- Manual quiz creation and editing
- Public QuizHub with ratings, comments, and tags
- Quiz sharing via links
- Cross-platform synchronization between web and mobile
- Passive learning through contextual mobile flashcards
- Progress tracking and gamification
- Backend - Golang with Gin, GORM and FastAPI with gRPC, SQLAlchemy
- Databases - PostgreSQL
- Mobile App - Kotlin, Android SDK, Jetpack Compose, Room,
- Decompose, Ktor
- Web Interface - Vue.js with TypeScript
- DevOps - GitHub Actions, Docker
- ML - Python with Pydantic and OpenAI
You can access ExamHacker by the link: http://examhacker.ru
- Git
- Docker
- Docker Compose
- GNU Make
- openssl (to generate secrets)
git clone https://github.com/Delta-Software-Innopolis/exam-hack && cd exam-hackmake generate-secrets cp .env.dev.example .env.dev
vim .env.devmake devBase URL:
/hub
Authentication:
Some endpoints require a Bearer Token.
Authorization: Bearer <your_token>
Returns a simple response indicating that the API is running.
200 OK
{}Returns a paginated list of published packs.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| offset | integer | No | 1 | Pagination offset |
| limit | integer | No | 16 | Maximum number of packs returned |
| subject | string | No | - | Filter by subject |
| professor | string | No | - | Filter by professor |
| course_book | string | No | - | Filter by course book |
| university | string | No | - | Filter by university |
| search_main | string | No | - | General search |
200 OK
{
"packs": [
{
"id": 1,
"author": {
"id": 1,
"name": "John Doe"
},
"rating": 4.7,
"name": "Biology Midterm",
"subject": "Biology",
"university": "Harvard",
"professor": "Dr. Smith",
"course_book": "Campbell Biology",
"forks": [
{
"id": 2,
"rating": 4.5,
"name": "Updated Version"
}
]
}
]
}Publishes a new pack.
Authentication required
{
"pack_id": 123,
"subject": "Biology",
"university": "Harvard",
"professor": "Dr. Smith",
"course_book": "Campbell Biology"
}200 OK
{
"adding": "success"
}Adds an existing published pack to the current user.
Authentication required
| Parameter | Type | Required |
|---|---|---|
| pack_id | integer | Yes |
200 OK
{
"message": "Pack added successfully"
}Returns autocomplete suggestions.
| Parameter | Type | Required | Description |
|---|---|---|---|
| sug_type | string | Yes | Type of suggestion |
| q | string | Yes | Search query |
GET /suggestions/?sug_type=subject&q=math
200 OK
{
["suggestion1". "suggestion2"]
}Used when publishing a pack.
| Field | Type |
|---|---|
| pack_id | integer |
| subject | string |
| university | string |
| professor | string |
| course_book | string |
| Field | Type |
|---|---|
| id | integer |
| author | Author |
| rating | number | null |
| name | string |
| subject | string |
| university | string |
| professor | string |
| course_book | string |
| forks | Fork[] |
| Field | Type |
|---|---|
| id | integer |
| name | string |
| Field | Type |
|---|---|
| id | integer |
| rating | number | null |
| name | string |
{
"packs": [
{
"...": "PublishedQuiz"
}
]
}Validation errors return 422 Unprocessable Entity.
Example:
{
"detail": [
{
"loc": ["body", "field"],
"msg": "Field required",
"type": "missing"
}
]
}- Timur Chumaraev - Frontend
- Alexander Blinov - Backend
- Konstantin Ustiuzhanin - Backend/DevOps
- Pavel Mashchenko - Mobile
- Daria Evdokimova - Mobile
- Viktor Konovalov - Fullstack, Project manager
- Mikhail Novikov - ML/DevOps
- Stepan Tarabin - Design/Fullstack