{"id":51071990,"url":"https://github.com/sofiatechnology/exetatest","last_synced_at":"2026-06-25T13:01:01.373Z","repository":{"id":366557287,"uuid":"1273377659","full_name":"sofiatechnology/exetatest","owner":"sofiatechnology","description":"Free, accessible study tool helping DRC students pass the State Examination(EXETAT)","archived":false,"fork":false,"pushed_at":"2026-06-23T09:38:45.000Z","size":880,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-23T11:32:30.393Z","etag":null,"topics":["education","nestjs","offline-first","open-source","quizapp","sequelize"],"latest_commit_sha":null,"homepage":"https://exetatest.sofiatech.space","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sofiatechnology.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-18T13:15:04.000Z","updated_at":"2026-06-23T09:38:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/sofiatechnology/exetatest","commit_stats":null,"previous_names":["sofiatechnology/exetatest"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sofiatechnology/exetatest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sofiatechnology%2Fexetatest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sofiatechnology%2Fexetatest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sofiatechnology%2Fexetatest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sofiatechnology%2Fexetatest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sofiatechnology","download_url":"https://codeload.github.com/sofiatechnology/exetatest/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sofiatechnology%2Fexetatest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34731256,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["education","nestjs","offline-first","open-source","quizapp","sequelize"],"created_at":"2026-06-23T11:30:48.282Z","updated_at":"2026-06-24T12:00:37.310Z","avatar_url":"https://github.com/sofiatechnology.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EXETATEST\n\n![alt text](EXETATEST.png)\n**EXETATEST** is the backend API for an exam preparation platform built for students preparing for the **State Examination (Examen d'État)** in the **Democratic Republic of the Congo**. It powers a mobile app that helps students study, practice with quizzes, and prepare for one of the most important academic milestones in their lives.\n\n\nThe API is built with **NestJS** and **Sequelize**, designed to be fast, simple, and easy to learn from — making it both a real product and a teaching resource for developers who want to learn how to build a production-style backend feature by feature.\n\n---\n\n## Why This Project Matters\n\nThe State Examination is a defining moment for every Congolese student finishing secondary school. Passing it determines access to university, scholarships, and future career paths. Yet many students prepare with limited resources: outdated textbooks, scarce past papers, little access to structured practice, and almost no digital tools designed specifically for their curriculum.\n\nEXETATEST exists to close that gap.\n\n- **Accessibility first.** Many students study on low-end phones with unreliable internet. The API is built with offline sync support and aggressive caching so the app stays usable even with a weak connection.\n- **Built around the real curriculum.** Subjects, courses, and questions are organized the way students actually encounter them in the DRC education system, not adapted from a foreign syllabus.\n- **Free and open.** Quality exam prep shouldn't depend on what a family can afford. Keeping this project open source means schools, teachers, and independent developers across the country can build on it, host it, or extend it without barriers.\n- **A tool for the community, not just a product.** Teachers can contribute questions and courses. Developers can contribute code. Former students who passed the exam can give back by improving the platform for the next generation.\n\nIn a country where access to quality educational technology is still rare, this project is an attempt to put a serious, well-built study tool directly in the hands of the students who need it most.\n\n---\n\n## What It Does\n\n- Authenticated dashboards for both students and admins\n- Quiz and test items (questions, courses, sections) organized by subject\n- Custom test sets and invitations between users\n- Profile management and admin-side content management\n- Offline sync support so students can keep studying without a stable connection\n- Passwordless OTP login via email — no passwords to forget or leak\n- Cached, speed-optimized REST endpoints built for low-bandwidth environments\n\n---\n\n## Tech Stack\n\n| Layer | Technology |\n|---|---|\n| Framework | NestJS v10 |\n| ORM | Sequelize v6 (sequelize-typescript) |\n| Language | TypeScript v5 |\n| Database | PostgreSQL |\n| Auth | JWT + OTP (passwordless) |\n| Email | Resend (default) + Nodemailer / SMTP fallback |\n| Validation | class-validator / class-transformer |\n| Config | @nestjs/config / dotenv |\n\n---\n\n## Project Structure\n\n```\nsrc/\n  auth/          # OTP + JWT authentication\n  email/         # Email service and templates\n  models/        # Sequelize models\n  users/         # User profiles\n  item/          # Quiz items\n  item-course/   # Courses linked to items\n  item-question/ # Questions linked to items\n  common/        # Guards, decorators, filters, interceptors\nscripts/         # Seed scripts and SQL\n```\n\nEach feature module follows the same shape: `dto/`, `*.controller.ts`, `*.service.ts`, `*.module.ts`. Controllers handle routing only; business logic lives in services.\n\n---\n\n## Getting Started\n\n### Prerequisites\n\n- Node.js (LTS)\n- PostgreSQL\n- A Resend API key and verified sender domain for OTP emails\n\n### Setup\n\n```bash\ngit clone https://github.com/your-org/exetatest.git\ncd exetatest\nnpm install\ncp .env.example .env\n```\n\nFill in your `.env` file with your database and email credentials, then run:\n\n```bash\nnpm run start:dev\n```\n\nThe API will be available at `http://localhost:3000`.\n\n### Running Tests\n\n```bash\nnpm run lint\nnpm run build\n```\n\n---\n\n## API Overview\n\n| Method | Route | Description |\n|---|---|---|\n| POST | `/auth/otp/send` | Send a one-time login code by email |\n| POST | `/auth/otp/verify` | Verify the code and receive a JWT |\n| GET | `/auth/profile` | Get the authenticated user's profile |\n| GET | `/users/profile` | Get current user profile |\n| PATCH | `/users/profile` | Update current user profile |\n\nSwagger documentation is kept up to date with every change and is available at `/api` once the server is running.\n\n---\n\n## How to Contribute\n\nThis project grows through community effort, and contributions of every kind are welcome, not just code.\n\n### Ways to Contribute\n\n- **Code.** Fix bugs, build new features, improve performance, or help refactor existing modules. The codebase is intentionally kept simple and readable, so it's a good place to start even if you're early in your backend journey.\n- **Exam content.** Teachers, tutors, and former students can contribute subjects, courses, and quiz questions that reflect the real State Examination curriculum.\n- **Translations.** Help make the platform and its content accessible in more local languages.\n- **Documentation.** Improve setup guides, write tutorials, or document features for other contributors.\n- **Testing and feedback.** Try the app with real students, report bugs, and suggest improvements based on how it's actually used in the field.\n\n### Contribution Workflow\n\n1. Fork the repository.\n2. Create a feature branch: `git checkout -b feature/your-feature-name`.\n3. Follow the existing module pattern (`dto/`, controller, service, module) for any new feature.\n4. Keep business logic in services, not controllers.\n5. Run `npm run lint` and `npm run build` and fix any errors before opening a pull request.\n6. Update Swagger docs for any endpoint you add or change.\n7. Open a pull request describing what changed and why.\n\n### Code Style\n\n- Favor clarity over cleverness. This project is meant to be read and learned from.\n- Avoid introducing new major dependencies without discussion — open an issue first if you think one is needed.\n- Keep each endpoint minimal and fast; this app is used by students on low-end devices and slow connections.\n\n### Reporting Issues\n\nIf you find a bug, have a feature request, or want to propose new exam content, please open an issue with as much detail as possible: what you expected, what happened instead, and steps to reproduce if relevant.\n\n---\n\n## License\n\nThis project is open source. See the `LICENSE` file for details.\n\n---\n\n## A Note to Contributors\n\nIf you're a student who once sat for the State Exam, a teacher who knows the curriculum inside out, or a developer who just wants to build something that matters, your contribution can directly help a student preparing for one of the biggest tests of their life. That's the whole point of this project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsofiatechnology%2Fexetatest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsofiatechnology%2Fexetatest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsofiatechnology%2Fexetatest/lists"}