{"id":28296134,"url":"https://github.com/vezem1r/altester","last_synced_at":"2026-04-07T07:44:24.662Z","repository":{"id":294742014,"uuid":"919158119","full_name":"Vezem1r/Altester","owner":"Vezem1r","description":"Altester is a robust and scalable educational platform developed as part of a bachelor's thesis, built using a microservices architecture. Designed for educational institutions, it optimizes the entire test lifecycle - from creation and distribution to AI-powered evaluation.","archived":false,"fork":false,"pushed_at":"2026-02-21T22:18:39.000Z","size":5462,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-07T07:44:21.390Z","etag":null,"topics":["bachelor-thesis","docker","docker-compose","environment-variables","java","jwt-authentication","langchain4j","ldap","microservices","postgresql","react","real-time-chat","real-time-notifications","redis","spring-mail","springboot","springsecurity","websocket","websockets"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/Vezem1r.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-19T20:59:57.000Z","updated_at":"2026-02-21T22:18:44.000Z","dependencies_parsed_at":"2025-05-22T12:01:52.456Z","dependency_job_id":null,"html_url":"https://github.com/Vezem1r/Altester","commit_stats":null,"previous_names":["vezem1r/altester"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Vezem1r/Altester","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vezem1r%2FAltester","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vezem1r%2FAltester/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vezem1r%2FAltester/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vezem1r%2FAltester/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Vezem1r","download_url":"https://codeload.github.com/Vezem1r/Altester/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vezem1r%2FAltester/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31504897,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["bachelor-thesis","docker","docker-compose","environment-variables","java","jwt-authentication","langchain4j","ldap","microservices","postgresql","react","real-time-chat","real-time-notifications","redis","spring-mail","springboot","springsecurity","websocket","websockets"],"created_at":"2025-05-22T19:18:11.944Z","updated_at":"2026-04-07T07:44:24.656Z","avatar_url":"https://github.com/Vezem1r.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Altester\n\n\u003cdiv align=\"center\"\u003e\n\n![Version](https://img.shields.io/badge/version-1.0.0-blue)\n![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.4.5-brightgreen)\n![Java](https://img.shields.io/badge/Java-21-orange)\n![License](https://img.shields.io/badge/license-MIT-green)\n\n\u003c/div\u003e\n\n## 🔍 Overview\n\nAltester is a robust and scalable educational platform developed as part of a bachelor's thesis, built using a microservices architecture. Designed for educational institutions, it optimizes the entire test lifecycle - from creation and distribution to AI-powered evaluation.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/2be1f7f7-fd20-49a3-bf63-c3d7701a27b5\" alt=\"Image\" /\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch3\u003e💻 Demo Platform\u003c/h3\u003e\n  \u003ca href=\"https://altester.vezem1r.com/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/🔗_LIVE_DEMO-💜View_Platform-8b5cf6?style=for-the-badge\u0026logo=external-link\u0026logoColor=white\" alt=\"Live Demo\" height=\"45\"/\u003e\n  \u003c/a\u003e\n  \u003cp\u003e\u003cem\u003eBest viewed on desktop/laptop devices\u003c/em\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n### Key Features\n\n- **AI-Powered Grading** - Automated assessment with multiple AI models\n- **Real-time Communication** - Instant messaging between students and teachers\n- **Advanced Test Management** - Comprehensive test creation and administration\n- **Role-Based Access** - Tailored experiences for administrators, teachers, and students\n- **Enterprise Integration** - LDAP support for institutional deployment\n\n## 📚 Documentation\n\n- [Setup and Installation Guide](https://github.com/Vezem1r/Altester/wiki/Setup-and-Installation-Guide)\n- [Environment Configuration](https://github.com/Vezem1r/Altester/wiki/Environment-Setup)\n- [API Documentation](https://github.com/Vezem1r/Altester/wiki/API-Documentation)\n- [System Architecture](https://github.com/Vezem1r/Altester/wiki/Architecture-Overview)\n\n## 🛠️ Technology Stack\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003eBackend Technologies\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n| Technology | Purpose |\n|------------|---------|\n| **Java 21** | Core language for all microservices |\n| **Spring Boot 3.4.5** | Application framework with consistent version across services |\n| **Spring Security** | Authentication and authorization framework |\n| **Spring Data JPA** | ORM for data access and persistence |\n| **Spring Data LDAP** | LDAP directory integration |\n| **PostgreSQL** | Primary relational database |\n| **JWT (jjwt 0.11.5)** | Secure token-based authentication |\n| **WebSockets** | Real-time bidirectional communication |\n| **Redis** | High-performance caching layer |\n| **LangChain4j 1.0.0-beta3** | Advanced AI integration framework |\n| **Thymeleaf** | Template engine for email verification |\n| **Spring Mail** | SMTP integration for notifications |\n| **Jackson 2.15.2** | JSON processing library |\n| **Spring Validation** | Request validation framework |\n| **SpringDoc 2.8.6** | API documentation generation |\n| **Docker \u0026 Compose** | Containerization and orchestration |\n\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003eFrontend Technologies\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n| Technology | Purpose |\n|------------|---------|\n| **React** | Modern UI library |\n| **WebSocket Client** | Real-time communication |\n\n\u003c/details\u003e\n\n## 🧩 Microservices Architecture\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003e1. Authorization Service\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n**Core Responsibilities:**\n- User registration and account management\n- Dual authentication methods:\n  - Local username/password authentication\n  - LDAP integration for enterprise environments\n- Secure password management (reset, change) for local users\n- Email management with verification\n- OTP-based verification for all critical actions\n- JWT token generation and management\n- SMTP integration for all verification workflows\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003e2. Chat Service\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n**Core Responsibilities:**\n- Real-time messaging between platform users\n- Role-restricted communication channels:\n  - Students can only message their assigned teachers\n  - Teachers can message students in their assigned groups\n- Conversation history and management\n- WebSocket security with custom interceptors\n- User online/offline status tracking\n- Message read status indicators\n- \"User is typing\" live indicators\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003e3. Notification Service\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n**Core Responsibilities:**\n- System-wide notifications delivery\n- User-specific alerts and messages\n- Real-time delivery via WebSockets\n- Notification history and management\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003e4. AI Grading Service\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n**Core Responsibilities:**\n- Automated assessment of free-text responses\n- Support for multiple AI providers:\n  - OpenAI models\n  - Anthropic Claude\n  - Google Gemini\n  - DeepSeek\n- Integration with test workflow\n- Submission processing in contextual prompts\n- Secure API key management for AI services\n- Response parsing for extracting:\n  - Grades\n  - Detailed feedback\n  - Error explanations for students\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003e5. Core Service\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n**Core Responsibilities:**\n- Central business logic coordination\n- Subject creation and management\n- Semester validation and academic period handling\n- Student duplication validation across groups\n- Group creation and membership management\n- Test creation and configuration:\n  - Question management (5 distinct formats)\n  - Test parameters and settings\n  - Time limits and attempt policies\n- Test attempt lifecycle management:\n  - Starting tests\n  - Reconnecting to in-progress tests\n  - Saving partial results\n  - Completing attempts\n  - Sending grading requests to AI service\n- Placeholder validation and injection prevention in prompts\n- Role-based API key management\n\u003c/details\u003e\n\n## 👥 User Roles and Features\n\n\u003cdiv align=\"center\"\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\n      \u003cth align=\"center\"\u003e\n        \u003cimg width=\"30\" height=\"30\" src=\"https://img.icons8.com/color/48/administrator-male.png\" alt=\"Administrator\"/\u003e\n        \u003cbr\u003eAdministrator\n      \u003c/th\u003e\n      \u003cth align=\"center\"\u003e\n        \u003cimg width=\"30\" height=\"30\" src=\"https://img.icons8.com/color/48/teacher.png\" alt=\"Teacher\"/\u003e\n        \u003cbr\u003eTeacher\n      \u003c/th\u003e\n      \u003cth align=\"center\"\u003e\n        \u003cimg width=\"30\" height=\"30\" src=\"https://img.icons8.com/color/48/student-male.png\" alt=\"Student\"/\u003e\n        \u003cbr\u003eStudent\n      \u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\n        \u003cul\u003e\n          \u003cli\u003eComplete user management\u003c/li\u003e\n          \u003cli\u003eSubject \u0026 group management\u003c/li\u003e\n          \u003cli\u003eTest lifecycle management\u003c/li\u003e\n          \u003cli\u003eQuestion configuration\u003c/li\u003e\n          \u003cli\u003ePerformance analytics\u003c/li\u003e\n          \u003cli\u003eAPI key management\u003c/li\u003e\n          \u003cli\u003eSystem configuration\u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cul\u003e\n          \u003cli\u003eAccess to assigned groups\u003c/li\u003e\n          \u003cli\u003eTest creation \u0026 management\u003c/li\u003e\n          \u003cli\u003eStudent submission grading\u003c/li\u003e\n          \u003cli\u003eAI grade review\u003c/li\u003e\n          \u003cli\u003eStudent communication\u003c/li\u003e\n          \u003cli\u003eLimited API key management\u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/td\u003e\n      \u003ctd\u003e\n        \u003cul\u003e\n          \u003cli\u003eTest participation\u003c/li\u003e\n          \u003cli\u003eAttempt resumption\u003c/li\u003e\n          \u003cli\u003eTest history access\u003c/li\u003e\n          \u003cli\u003eTeacher communication\u003c/li\u003e\n          \u003cli\u003eNotification reception\u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eAdministrator Detailed Features\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n- Comprehensive user management\n  - Student and teacher accounts\n  - LDAP integration (LDAP-imported accounts have immutable core properties)\n- Subject and group management\n  - Creation, editing, and archiving\n  - Assignment of teachers to groups\n- Semester configuration via environment variables\n- Complete test lifecycle management\n  - Creation, updates, deletion\n  - Teacher assignment and permissions\n- Question management across all 5 supported types:\n  - Text only\n  - Text + image\n  - Image only\n  - Multiple choice\n  - Multiple choice + image\n- Student performance analytics by test and group\n- System-wide configuration and monitoring\n- API key management\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eTeacher Detailed Features\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n- Access to assigned groups and students\n- Test creation and management\n  - Create new tests\n  - Edit owned or delegated tests\n  - Configure question parameters\n- Student submission evaluation\n  - Manual grading\n  - Review of AI-graded submissions\n- Real-time communication with students\n- Notification reception for relevant events\n- Limited API key management\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eStudent Detailed Features\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n- Access to current semester groups and subjects\n- Test participation\n  - Take active tests\n  - Resume attempts within configured time limits\n  - Submit answers for evaluation\n- View comprehensive test history across semesters\n- Real-time communication with assigned teachers\n- System and test notifications\n\u003c/details\u003e\n\n## 🌐 Universal Features\n\n\u003cdiv align=\"center\"\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003cimg width=\"40\" height=\"40\" src=\"https://img.icons8.com/color/48/password-check.png\" alt=\"account\"/\u003e\n        \u003cbr\u003e\u003cb\u003eAccount Management\u003c/b\u003e\n        \u003cbr\u003e\u003csmall\u003eSelf-service password \u0026 email updates\u003c/small\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003cimg width=\"40\" height=\"40\" src=\"https://img.icons8.com/color/48/bell.png\" alt=\"notifications\"/\u003e\n        \u003cbr\u003e\u003cb\u003eReal-time Notifications\u003c/b\u003e\n        \u003cbr\u003e\u003csmall\u003eInstant updates and alerts\u003c/small\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003cimg width=\"40\" height=\"40\" src=\"https://img.icons8.com/color/48/database.png\" alt=\"pagination\"/\u003e\n        \u003cbr\u003e\u003cb\u003eData Pagination\u003c/b\u003e\n        \u003cbr\u003e\u003csmall\u003eEfficient data management\u003c/small\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\n## ⚙️ Environment Configuration\n\nApplication is configured via environment variables in `.env` file. See our [detailed configuration guide](https://github.com/Vezem1r/Altester/wiki/Environment-Setup) for all options.\n\n```bash\n# Quick start configuration example\ncp .env.example .env\n# Edit your .env file with appropriate values\nnano .env\n\n# Also configure frontend environment as needed\ncp ./fronend/.env.example ./frontend/.env\nnano ./fronend/.env\n\n# Start the services\ndocker-compose up -d\n```\n\n## 🚀 Getting Started\n\n```bash\n# Clone the repository\ngit clone https://github.com/Vezem1r/Altester.git\ncd Altester\n\n# Configure environment\ncp .env.example .env\ncp ./fronend/.env.example .env\n# Edit variables as needed\n\n# Build and run\ndocker-compose build\ndocker-compose up -d\n\n# Access the application\nopen http://localhost:5173\n```\n\n## 🛠️ Next Steps\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003eThese are the enhancements to further improve Altester's architecture and performance:\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003e1. AI Feature Implementation\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n**Planned Features:**\n- Teacher can request AI regrade for concrete test\n- Teacher can generate questions for test using AI\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003e2. API Gateway Implementation\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n**Planned Features:**\n- Centralized request routing for all microservices\n- Rate limiting to prevent abuse and ensure fair usage\n- Load balancing\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003e3. Advanced Cache Management\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n**Improvements:**\n- Granular cache invalidation strategies\n  - Update specific cache entries instead of full purge\n\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cb\u003e4. Future Enhancements\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\n**Under Consideration:**\n- Kubernetes orchestration for better scalability\n- GraphQL API alongside REST\n- Machine learning for predictive test difficulty adjustment\n\u003c/details\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003cimg width=\"40\" height=\"40\" src=\"https://img.icons8.com/color/48/api.png\" alt=\"api\"/\u003e\n        \u003cbr\u003e\u003cb\u003eAPI Gateway\u003c/b\u003e\n        \u003cbr\u003e\u003csmall\u003e2025\u003c/small\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003cimg width=\"40\" height=\"40\" src=\"https://img.icons8.com/?size=100\u0026id=pHS3eRpynIRQ\u0026format=png\u0026color=000000\" alt=\"cache\"/\u003e\n        \u003cbr\u003e\u003cb\u003eCache Optimization\u003c/b\u003e\n        \u003cbr\u003e\u003csmall\u003e2025\u003c/small\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003cimg width=\"40\" height=\"40\" src=\"https://img.icons8.com/color/48/rocket.png\" alt=\"future\"/\u003e\n        \u003cbr\u003e\u003cb\u003eFuture Features\u003c/b\u003e\n        \u003cbr\u003e\u003csmall\u003eOngoing\u003c/small\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvezem1r%2Faltester","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvezem1r%2Faltester","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvezem1r%2Faltester/lists"}