This project is the backend (server side) of an online English learning and testing platform. Itβs designed to handle everything behind the scenes: user accounts, test delivery, result tracking, and certificate generation.
I built it to:
- Test and explore modern backend architecture with NestJS and Fastify.
- Create a solid, production-ready base for a real platform.
- Show how to structure a clean, maintainable project for long-term growth.
-
Backend: ~90% complete.
- Fully functional authentication
- Exam question management
- Progress calculation and result storage
- Admin panel API for managing users and certificates
- Email service for OTP verification and notifications
-
Frontend: ~40% complete.
- Already has login, registration, and session handling
- Core structure in place but missing most of the UI for exams and admin features
If someone picks this up, they could connect the existing backend to a finished frontend without starting from scratch.
If youβre hiring, hereβs what this project shows about my skills:
-
Planning and Architecture
- I didnβt just write code β I organized it into logical modules so features are easy to add or change later.
- Each feature (auth, exams, certificates) is isolated in its own folder.
-
Security Awareness
- Role-based access (admin, user)
- Token-based authentication (JWT)
- Email verification with OTP
-
Scalability
- Built on NestJS + Fastify for better performance under heavy load.
- Follows a modular structure so new features donβt break existing ones.
-
Real-World Features
- Email integration
- Result tracking & certificates
- Admin tools to manage platform content
Even without deep technical details, hereβs the big picture:
- NestJS + Fastify β The main framework and web server
- MongoDB + Mongoose β Database to store users, exams, and results
- JWT Authentication β Secure login sessions
- Nodemailer β Sends OTPs and notifications by email
- Helmet & CORS β Basic security protections
The backend is organized like this:
api-server/
βββ auth-guard/ # Security checks for routes
βββ decorators/ # Helpers for cleaner code
βββ libs/ # Core tools (email, DB connection, env configs)
βββ modules/ # Main features
β βββ authentication
β βββ tests
β βββ certificates
β βββ user
β βββ admin-*
βββ schemas/ # Database models
βββ main.ts # App starting point
This makes it easy for another developer to find exactly where a feature lives.
For a developer picking this up:
# Install dependencies
npm install
# Start in development mode
npm run start:dev
The server will start and connect to MongoDB.
API documentation is auto-generated by NestJS Swagger (available at /docs
when running).
If you want to:
- Finish the frontend
- Expand backend features
- Deploy to production
You can fork the repo, make changes, and submit a pull request. Iβve kept the structure clean so onboarding is fast.