Modular β’ Testable β’ Extensible β’ Event-driven
Hackathon Management System is a backend platform designed to manage realistic hackathon scenarios from creation to winner assignment.
The system supports multiple actors and workflows, including:
- Hackathon administration
- Team management
- Project submissions
- Evaluation processes
- Winner selection
- Support requests
- User moderation
- Notifications
- External service integrations
The architecture follows Clean Architecture to keep business rules independent from technical implementations.
- Create and manage hackathons
- Configure schedules and lifecycle states
- Assign managers and staff members
- Create teams
- Invite members
- Participate in hackathons
- Submit projects
- Evaluate submissions
- Select winners using business policies
- Open support requests
- Track request lifecycle
- Report users and moderation issues
- Automatic event-driven notifications
- User communication workflows
- Calendar services
- Payment providers
The project follows Clean Architecture.
core β business domain and rules
application β use cases and orchestration
infrastructure β technical implementations
presentation β REST API layer
application/
βββ ports/
β βββ repositories/
β βββ strategies/
βββ services/
βββ scheduler/
βββ factory/
βββ listeners/
βββ config/
core/
βββ entities/
βββ enums/
βββ events/
βββ state/
βββ policies/
infrastructure/
βββ jpa/repositories/
βββ strategies/
presentation/
βββ controller/
βββ dto/
βββ mapper/
βββ error/
Main entities:
- Hackathon
- User
- Manager
- StaffMember
- Team
- TeamParticipation
- Submission
- Notification
- SupportRequest
- StaffAssignment
- ModerationReport
Used for external service integrations.
Strategies:
CalendarStrategyPaymentStrategy
Implementations:
- Google Calendar
- PayPal
Used to create hackathons.
Components:
HackathonBuilderHackathonBuilderDirector
Used to manage lifecycle transitions without large conditional blocks.
Applied to:
- Support requests
- User accounts
Examples:
SupportRequest:
Open β In Progress β Resolved / Rejected
Account:
Active β Suspended β Revoked
Components:
SupportRequestLifecycleStateMachineAccountLifecycleStateMachineStateRegistry
Each state encapsulates its own allowed transitions.
Used to decouple business actions from secondary reactions such as notifications.
Components:
DomainEventPublisherSpringDomainEventPublisherNotificationDomainEventListener
Observed events:
- TeamCreatedEvent
- TeamDeletedEvent
- TeamMemberAddedEvent
- UserSuspendedEvent
- WinnerPrizePaidEvent
- HackathonConcludedEvent
- SupportRequestCreatedEvent
- SupportRequestAcceptedEvent
- SupportRequestRejectedEvent
Spring automatically manages event subscription and dispatching.
- JDK 21
- Maven or Maven Wrapper
Verify installation:
java -version
./mvnw -vgit clone <repository-url>
cd HackathonManagementSystem
./mvnw clean compileStart Spring Boot:
./mvnw spring-boot:runBuild executable JAR:
./mvnw clean package
java -jar target/Progetto_IdS_Hackathon-0.0.1-SNAPSHOT.jarSwagger UI:
http://localhost:8080/swagger-ui/index.html
OpenAPI JSON:
http://localhost:8080/v3/api-docs
Default configuration:
URL: jdbc:h2:file:~/hackathon-db;AUTO_SERVER=TRUE
Username: sa
Password: (empty)
Development setup:
- Database is recreated at every startup
- Automatic seed execution
- Database file stored in:
~/hackathon-db.mv.db
The application uses a centralized Clock.
Modes:
app.clock.mode=SYSTEM
app.clock.zone=Europe/Romeapp.clock.mode=FIXED
app.clock.zone=Europe/Rome
app.clock.fixed-instant=2026-04-10T10:00:00ZUseful for:
- deterministic tests
- lifecycle simulations
- scheduler demonstrations
Available jobs:
app.scheduler.hackathon-lifecycle-cron=0 */5 * * * *
app.scheduler.team-invitation-expiration-cron=0 */10 * * * *Frontend:
https://marvelous-cajeta-1a68ff.netlify.app/
- Start the backend:
./mvnw spring-boot:run-
Open the frontend.
-
Allow browser access to local services when prompted.
-
The frontend will connect to:
http://localhost:8080
- Matteo Vittori
- Alejandro Innocenzi
MIT License