Origin Raid Planner is a full-stack raid planning application built for World of Warcraft guild officers. It centralizes roster management, raid signups, composition building, Discord publication, and weekly operational follow-up in a single workflow-oriented tool.
The project is designed around real officer constraints: balancing multiple raids across a week, handling mains and rerolls, publishing actionable information to Discord, and reducing spreadsheet-driven coordination.
Origin Raid Planner covers the full lifecycle of raid preparation:
- Discord OAuth login restricted to guild officers
- guild member synchronization from Discord
- roster management with mains, rerolls, classes, specs, and roles
- weekly raid templates and ad hoc manual raids
- visual drag-and-drop composition building
- weekly auto-compose rules and officer validation tools
- Discord signup messages with interactive status updates
- reminders for missing signups
- publication of final compositions back to Discord
- confirmation tracking, bench management, and fairness monitoring
This is not a generic CRUD dashboard. It is a production-oriented product with non-trivial business logic and external system integration.
It demonstrates:
- end-to-end product design for a real user group
- Spring Boot API design around domain-heavy workflows
- Angular UI built for operational decision-making
- Discord bot and OAuth integration
- scheduling, reminders, and automated weekly publishing
- Docker-based deployment and maintenance scripts
The project is split into two applications:
- Backend: Spring Boot API at the repository root
- Frontend: Angular application in
raid-planner-ui/
- authentication and access control
- roster and raid domain logic
- weekly template generation
- reminder and publication workflows
- Discord API integration via JDA
- persistence, migrations, and operational endpoints
- officer dashboard and weekly planning views
- composition building and validation workflows
- template administration
- publication and reminder tooling
- compact comparison views for cross-raid decision making
- Java 15
- Spring Boot 2.4
- Spring Web
- Spring Data JPA
- MySQL 8
- Flyway
- JDA (Discord API)
- Angular 19
- TypeScript
- SCSS
- Angular CDK
- SortableJS
- Docker
- Docker Compose
- Nginx
- Uptime Kuma
- VPS deployment scripts
- MySQL backup and restore scripts
- navigate raids on a
Wednesday -> Tuesdayplanning cycle - create weekly or one-off raids
- build 2-group compositions visually
- lock, validate, and publish raid compositions
- compare a raid against a reference raid already prepared
- monitor confirmations, absences, bench, and signup gaps
- publish signup messages to the correct guild channel
- let players update their status directly from Discord
- send reminder messages when signups are missing
- publish final compositions with officer-ready formatting
src/main/java/com/origin/: backend source codesrc/main/resources/: application configuration and resourcessrc/main/resources/db/migration/: Flyway migrationsraid-planner-ui/src/: frontend source codedocker-compose.prod.yml: production stack definitionscripts/: deployment, backup, and restore scripts
- Java 15+
- Maven
- Node.js + npm
- MySQL 8
- a configured Discord application and bot
Useful environment variables:
DISCORD_BOT_TOKENDISCORD_GUILD_IDDISCORD_OAUTH_CLIENT_IDDISCORD_OAUTH_CLIENT_SECRETDISCORD_OAUTH_REDIRECT_URIDISCORD_OAUTH_FRONTEND_SUCCESS_URLDISCORD_OAUTH_FRONTEND_DENIED_URL
Run locally:
$env:DISCORD_BOT_TOKEN="..."
$env:DISCORD_OAUTH_CLIENT_ID="..."
$env:DISCORD_OAUTH_CLIENT_SECRET="..."
mvn spring-boot:runcd raid-planner-ui
npm install
npm startDefault local URLs:
- frontend: http://localhost:4200
- backend: http://localhost:8080
- Copy
.env.prod.exampleto.env.prod - Fill in Discord and MySQL secrets
- Start the production stack:
docker compose --env-file .env.prod -f docker-compose.prod.yml up -d --buildUseful operational scripts:
scripts/deploy-frontend.shscripts/deploy-backend.shscripts/deploy-all.shscripts/backup-db.shscripts/restore-db.sh
The production stack includes a lightweight monitoring service based on Uptime Kuma.
Suggested monitors:
- frontend public URL:
https://planner.origin-raid.fr/ - backend health endpoint:
https://planner.origin-raid.fr/actuator/health - optional internal monitor via local bind:
http://127.0.0.1:3001
By default, the monitoring UI is bound locally on the VPS:
MONITORING_BIND=127.0.0.1:3001
This keeps the dashboard private by default. It can be reached through an SSH tunnel or published later behind your reverse proxy if needed.
The project is organized with:
- a root repository for backend, infrastructure, deployment scripts, and documentation
- a dedicated frontend repository mounted as a Git submodule in
raid-planner-ui/
When a change affects the frontend:
- commit and push inside
raid-planner-ui - commit and push the root repository to update the submodule pointer
The application is already usable in production for officer workflows. The most natural next steps are:
- stronger automated test coverage
- more observability and operational monitoring
- continued UX refinement for officer decision-making
- additional hardening around production automation