{"id":42273115,"url":"https://github.com/coder7475/english_test_quiz","last_synced_at":"2026-01-27T07:30:44.984Z","repository":{"id":309000034,"uuid":"1034622453","full_name":"coder7475/english_test_quiz","owner":"coder7475","description":"A modern, scalable digital competency assessment platform built with a TypeScript monorepo architecture using Turborepo. This system provides comprehensive functionality for students, supervisors, and administrators to assess and certify digital skills across levels A1 to C2, similar to standardized competency frameworks.","archived":false,"fork":false,"pushed_at":"2025-08-09T06:56:20.000Z","size":363,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-09T07:13:35.033Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coder7475.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2025-08-08T17:37:20.000Z","updated_at":"2025-08-09T03:51:46.000Z","dependencies_parsed_at":"2025-08-09T07:14:09.478Z","dependency_job_id":null,"html_url":"https://github.com/coder7475/english_test_quiz","commit_stats":null,"previous_names":["coder7475/english_test_quiz"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/coder7475/english_test_quiz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coder7475%2Fenglish_test_quiz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coder7475%2Fenglish_test_quiz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coder7475%2Fenglish_test_quiz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coder7475%2Fenglish_test_quiz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coder7475","download_url":"https://codeload.github.com/coder7475/english_test_quiz/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coder7475%2Fenglish_test_quiz/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28808012,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T07:14:39.408Z","status":"ssl_error","status_checked_at":"2026-01-27T07:14:39.098Z","response_time":168,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-01-27T07:30:43.832Z","updated_at":"2026-01-27T07:30:44.978Z","avatar_url":"https://github.com/coder7475.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Test_School Competency Assessment Platform\n\nA modern, scalable digital competency assessment platform built with a TypeScript monorepo architecture using Turborepo. This system provides comprehensive functionality for students, supervisors, and administrators to assess and certify digital skills across levels A1 to C2, similar to standardized competency frameworks.\n\n## 🌟 Features\n\n- **🔐 Role-based Authentication**: Secure JWT-based authentication for Students, Supervisors, and Admins.\n- **📝 Three-Step Assessment**: Progressive evaluation process for levels A1 to C2 with automated scoring and certification.\n- **⏱ Timer System**: Configurable countdown timers with auto-submission on timeout.\n- **📚 Question Management**: Admin-controlled question pool with 132 questions across 22 competencies and 6 levels.\n- **📜 Certification**: Automatic certificate generation with optional PDF download and email delivery.\n- **🏗️ Scalable Architecture**: Modular monorepo structure with shared packages for backend and frontend.\n- **🛡️ Security**: Input validation, bcrypt password hashing, and optional Safe Exam Browser (SEB) integration.\n- **📊 Admin Dashboard**: User and question management with pagination and configuration controls.\n\n## 🏗️ Architecture\n\n### Architectural Design\n\n[![](./Architectural_Design.png)]\n\n\n\nThis monorepo contains the following apps and packages:\n\n### 📱 Applications\n\n- **`backend`**: Express.js REST API with MongoDB integration\n    - User authentication and authorization with JWT and OTP\n    - Three-step assessment management with eligibility checks\n    - Question pool management\n    - Certificate generation and delivery\n    - Admin panel APIs for user and question management\n- **`frontend`**: React.js application (using Vite) for the user interface\n    - Responsive design with Tailwind CSS\n    - Role-based UI components (Student, Admin, Supervisor)\n    - Real-time assessment progress and timer updates\n\n### 📦 Shared Packages\n\n- **`@repo/db`**: Database utilities and MongoDB connector with Mongoose\n\n### ⚙️ Configuration Packages\n\n- **`@repo/eslint-config`**: ESLint configurations for Vite, React, and Node.js\n- **`@repo/prettier-config`**: Prettier formatting configurations\n- **`@repo/typescript-config`**: TypeScript configurations for different project types\n\nEach package/app is 100% [TypeScript](https://www.typescriptlang.org/) with strict type checking.\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n- **Node.js** \u003e= 18.0.0\n- **pnpm** \u003e= 8.0.0 (recommended package manager)\n- **MongoDB** \u003e= 5.0\n- **Nodemailer** (for email OTP)\n- **Safe Exam Browser** (optional, for secure exam environment)\n\n### Installation\n\n1. **Clone the repository:**\n    \n    ```bash\n    git clone https://github.com/your-repo/test-school-platform.git\n    cd test-school-platform\n    ```\n    \n2. **Install dependencies:**\n    \n    ```bash\n    pnpm install\n    ```\n    \n3. **Environment Setup:**\n    \n    ```bash\n    # Copy environment files\n    cp apps/backend/.env.example apps/backend/.env\n    cp apps/frontend/.env.example apps/frontend/.env\n    ```\n    \n4. **Configure Environment Variables:**\n    \n**Backend (.env):**\n    \n```env\n# Server Configuration\nPORT=3000\nHOST=localhost\nNODE_ENV=development\nDB_URI=\"mongodb://127.0.0.1:27017/practice\"\nFRONTEND_URL=\"http://localhost:5173\"\n\n# JWT ENVS\nJWT_ACCESS_SECRET=\"access\"\nJWT_ACCESS_EXPIRES=\"15m\"\nJWT_REFRESH_SECRET=\"refresh\"\nJWT_REFRESH_EXPIRES=\"7d\"\n\n# Hash Salt\nPASSWORD_HASH_SALT=12\n\n# redis\nREDIS_HOST=redis-****\nREDIS_PORT=111**\nREDIS_USERNAME=default\nREDIS_PASSWORD=****\n\n\n# SMTP GMAIL FOR Production\nSMTP_HOST=smtp.gmail.com\nSMTP_PORT=465 # change to 587 for development\nSMTP_USER=***@gmail.com\nSMTP_PASS=****\nSMTP_FROM=***@quiz.robiulhossain.com\n\n\n# Resend\nRESEND_API_KEY=re*****\n```\n    \n**Frontend (.env):**\n    \n```env\nVITE_BASE_URL=\"http://localhost:3000/api/v1\"\n```\n    \n\n### Development\n\n```bash\n# Run all applications in development mode\npnpm dev\n\n# Run only the backend\npnpm backend\n\n# Run only the frontend\npnpm frontend\n\n# Run specific app\npnpm dev --filter=frontend\npnpm dev --filter=backend\n```\n\n### Production Build\n\n```bash\n# Build all packages and apps\npnpm build\n\n# Deploy the backend\nvercel deploy --prod\n\n# Start production server - Backend\ncd apps/backend \u0026\u0026 pnpm start\n\n# Start preview server - Frontend\ncd apps/frontend \u0026\u0026 pnpm preview\n\n# Deploy the Frontend\npnpm run deploy \n```\n## Database Design\n\n### ER Diagram\n\n[![er_diagram](./ER_Diagram.png)]\n\n## 📚 API Documentation\n\nThe backend provides a comprehensive REST API with the following endpoints:\n\n### 🔐 **Authentication APIs**\n\n|Method|Endpoint|Description|\n|---|---|---|\n|POST|`/api/auth/register`|Register a new user|\n|POST|`/api/auth/login`|Login and receive JWTs tokens in cookie|\n|GET|`/api/auth/logout`| Logout and clear cookies |\n|POST|`/api/auth/refresh`|Refresh access token|\n|POST|`/api/auth/forgot-password`|Send password reset link|\n|POST|`/api/auth/reset-password`|Reset password using a reset token|\n\n### 🔑 **OTP APIs**\n\n|Method|Endpoint|Description|\n|---|---|---|\n|POST|`/api/otp/send`|Send OTP to email or SMS|\n|POST|`/api/otp/verify`|Verify OTP provided by the user|\n\n### 👤 **User APIs**\n\n|Method|Endpoint|Description|\n|---|---|---|\n|GET|`/api/users/me`|Get current user profile|\n\n### 📝 **Assessment APIs**\n\n|Method|Endpoint|Description|\n|---|---|---|\n|POST|`/api/assessments/start`|Start a new assessment step|\n|GET|`/api/assessments/:id/questions/:questionId`|Retrieve specific question details|\n|POST|`/api/assessments/:id/answer/:questionId`|Save answer for a specific question|\n|POST|`/api/assessments/:id/submit`|Submit assessment and calculate score|\n|GET|`/api/assessments`|List user’s completed assessments|\n\n### 📜 **Certificate APIs**\n\n|Method|Endpoint|Description|\n|---|---|---|\n|GET|`/api/certificates`|Retrieve user’s certificate details|\n|POST|`/api/certificates/send`|Send certificate to user’s email (optional)|\n\n### 👨‍💼 **Admin APIs**\n\n|Method|Endpoint|Description|\n|---|---|---|\n|GET|`/api/admin/users`|List all users with pagination|\n|GET|`/api/admin/users/:id`|Get specific user details|\n|PUT|`/api/admin/users/:id`|Update user details|\n|DELETE|`/api/admin/users/:id`|Delete a user|\n|GET|`/api/admin/questions`|List questions with filters and pagination|\n|POST|`/api/admin/questions`|Add a new question|\n|PUT|`/api/admin/questions/:id`|Update an existing question|\n|DELETE|`/api/admin/questions/:id`|Delete a question|\n|GET|`/api/admin/config`|Retrieve configuration settings|\n|PUT|`/api/admin/config`|Update configuration settings|\n\nFor detailed API documentation, see [API_Design.md](https://grok.com/chat/apps/backend/API_Design.md).\n\n## 🏗️ Project Structure\n\n```\ntest-school-platform/\n├── apps/\n│   ├── backend/                  # Express.js API server\n│   │   ├── src/\n│   │   │   ├── modules/          # Feature modules (auth, user, assessment, etc.)\n│   │   │   │   ├── auth/         # Authentication logic\n│   │   │   │   ├── user/         # User profile management\n│   │   │   │   ├── assessment/   # Assessment management\n│   │   │   │   ├── question/     # Question pool management\n│   │   │   │   ├── certificate/  # Certificate generation\n│   │   │   │   └── admin/       # Admin operations\n│   │   │   ├── middlewares/      # Express middlewares (auth, validation)\n│   │   │   ├── models/           # Mongoose schemas\n│   │   │   ├── routes/           # API routes\n│   │   │   ├── services/         # External services (email, SMS)\n│   │   │   ├── utils/            # Utility functions\n│   │   │   ├── types/            # TypeScript type definitions\n│   │   │   └── configs/          # Configuration files\n│   │   └── dist/                 # Compiled JavaScript\n│   └── frontend/                 # React.js application (Vite)\n│       ├── src/\n│       │   ├── components/       # Reusable React components\n│       │   ├── pages/            # Page components\n│       │   ├── redux/            # Redux state management\n│       │   ├── styles/           # Tailwind CSS\n│       │   ├── App.tsx           # Main app component\n│       │   ├── index.tsx         # Entry point\n│       ├── public/               # Static assets\n│       └── dist/                 # Compiled output\n├── packages/\n│   ├── db/                       # Database utilities (Mongoose)\n│   ├── utils/                    # Shared utilities (JWT, bcrypt, OTP)\n│   ├── ui/                       # Shared React components\n│   ├── assessment/               # Assessment logic utilities\n├── configs/\n│   ├── eslint-config/            # ESLint configurations\n│   ├── prettier-config/          # Prettier configurations\n│   └── typescript-config/        # TypeScript configurations\n└── turbo.json                    # Turborepo configuration\n```\n\n### Utilities\n\nThis Turborepo has additional tools set up for you:\n\n- [TypeScript](https://www.typescriptlang.org/) for static type checking\n- [ESLint](https://eslint.org/) for code linting\n- [Prettier](https://prettier.io/) for code formatting\n- [Tailwind CSS](https://tailwindcss.com/) for frontend styling\n- [Redux Toolkit](https://redux-toolkit.js.org/) for state management\n\n## 📊 Database Schema\n\n### ER Diagram\n\n\n\n## 🚀 Deployment\n\n### Backend Deployment\n\nThe backend is configured for deployment on platforms like Vercel, Railway, or any Node.js hosting service.\n\n```bash\n# Build for production\npnpm build --filter=backend\n\n# Start production server\ncd apps/backend \u0026\u0026 pnpm start\n```\n\n### Frontend Deployment\n\nThe frontend can be deployed to Vercel, Netlify, or any static hosting service.\n\n```bash\n# Build for production\npnpm build --filter=frontend\n\n# Static export (if needed)\npnpm export --filter=frontend\n```\n\n## 🛠️ Available Scripts\n\n```bash\n# Development\npnpm dev              # Run all apps in development\npnpm backend          # Run only backend\npnpm dev --filter=*   # Run specific app\n\n# Building\npnpm build            # Build all packages and apps\npnpm build --filter=* # Build specific package\n\n# Code Quality\npnpm lint             # Lint all packages\npnpm format           # Format code with Prettier\npnpm check-types      # Type check all packages\n\n# Cleaning\npnpm clean            # Clean all build artifacts\n```\n\n### Remote Caching\n\n\u003e [!TIP]  \n\u003e Vercel Remote Cache is free for all plans. Get started today at [vercel.com](https://vercel.com/signup?/signup?utm_source=remote-cache-sdk\u0026utm_campaign=free_remote_cache).\n\nTurborepo can use [Remote Caching](https://turborepo.com/docs/core-concepts/remote-caching) to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines.\n\nBy default, Turborepo will cache locally. To enable Remote Caching, you will need a Vercel account. If you don't have one, [create one](https://vercel.com/signup?utm_source=turborepo-examples), then run:\n\n```bash\n# With global turbo installed\nturbo login\nturbo link\n\n# Without global turbo\npnpm exec turbo login\npnpm exec turbo link\n```\n\n## Documentation\n\n- [SRS](./Test_School_Competency.pdf)\n\n## Diagrams\n\n## 📄 License\n\nThis project is licensed under the [MIT License](https://grok.com/chat/LICENSE).\n\nYou are free to use, modify, and distribute this software in accordance with the terms of the MIT License.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoder7475%2Fenglish_test_quiz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoder7475%2Fenglish_test_quiz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoder7475%2Fenglish_test_quiz/lists"}