An application for managing university internships using Domain-Driven Design, CQRS, and Event Sourcing, built as an alternative to internships.finki.ukim.mk.
It supports students, companies, and coordinators throughout the internship lifecycle - from applications and journal submissions to validation and archiving - with a backend built around aggregates, commands, events, projections, handlers, and sagas.
- Spring Boot (Kotlin) + Axon Framework - Core backend that handles internship operations, events, and business logic.
- Spring Cloud Gateway - API Gateway which routes requests to backend services.
- Keycloak - Manages authentication and authorization.
- Apache Kafka - Event-driven messaging between services.
- Spring Cloud OpenFeign - HTTP communication between services.
- Consul - Service discovery.
- PostgreSQL - Database.
- React (TypeScript) - Frontend.
- Tailwind CSS - Styling.
- shadcn/ui - UI components.
- Companies create or assign internships to students.
- Students accept or reject internship offers.
- Students submit weekly internship journals.
- Companies validate or request changes to journals.
- Coordinators perform final validation.
- Administrative staff archive completed internships.
- Email notifications on key internship status changes.
- Interactive journal tracking with status change history and comments.
- Role-based access control for students, companies, coordinators, and administrators.