FULL STACK · JAVA + ANGULAR
AeridesA seat for every role. No double booking.
Aerides is a multi-tenant web app for organising gaming sessions: events with role-based slots, sign-ups and a FIFO waitlist. When someone withdraws, the first person waiting is promoted in the same transaction, sees the update live and receives an email. Java and Spring Boot on the backend, Angular on the frontend, with an Italian and English UI.
The free demo may take about two minutes to start. The entry page wakes it up and opens the app when it is ready.
- Scope
- Gaming groups · resource booking · per-group roles
- Stack
- Java 21 · Spring Boot 4.1 · Angular 22 · PostgreSQL 17 · Docker
- Quality
- 150 backend unit tests · 206 integration tests · 91 Jest · 2 Playwright e2e tests
- Status
- Demo on Render and Neon · GitHub Actions CI · Azure Terraform validated, not applied
The goal
Organising a session means matching availability, capacity and group composition. Two simultaneous sign-ups must not take the same last seat, withdrawals must release it to the next person waiting, and each group must see only its own data.
How it works
A modular Spring Boot monolith with REST APIs, PostgreSQL and an Angular standalone frontend with signals. Groups have owners, officers and members; events move through drafts, publishing and completion. Database transactions and locks protect booking rules, while WebSocket, email and Discord notifications run after commit.
Features
Events and weekly series
Calendar, filters, drafts and series in the organiser’s time zone, including daylight saving changes.
Sign-ups and approvals
Tank, Healer and DPS slots, a FIFO waitlist and optional officer approval.
Live updates
A withdrawal promotes the next person waiting: a WebSocket page update, personal toast and email in the recipient’s language.
Groups, audit and statistics
Invitations, per-group permissions, action history, attendance and unfilled roles.
Screens





Screenshots taken on 27 October 2026 from the local Docker stack with demo data. Names and groups are fictitious.
Technical decisions
Concurrency tested against the database
A pessimistic slot lock serialises sign-ups. A test with 20 parallel requests for 3 seats confirms exactly 3 participants. Withdrawal and promotion are atomic.
Notifications after commit
Transactional listeners send updates and notifications only after commit: no user is told about a rolled-back change.
Isolation and revocable access
Every endpoint checks authorisation and lookups are scoped to the group. WebSocket subscriptions check permissions; connections close when access is revoked or tokens expire.
Tests with real services
Testcontainers PostgreSQL, GreenMail and STOMP clients verify concurrency, isolation, email and realtime behaviour. Playwright exercises two users and the full promotion flow.