Spring Boot backend for DisasterVerse β a real-time disaster management platform with JWT authentication, PostgreSQL (Supabase) database, SOS alerts, and live WebSocket broadcasting.
- Java 17
- Spring Boot 3.5.0
- PostgreSQL (Supabase)
- JWT Authentication
- WebSocket (STOMP)
- Swagger / OpenAPI
- Docker
- Maven
- Java 17 or higher
- Maven 3.6+
- Docker (optional)
- Supabase account (free tier works)
git clone https://github.com/your-username/disasterverse-backend.git
cd disasterverse-backendWindows PowerShell
$env:SPRING_DATASOURCE_URL="jdbc:postgresql://aws-1-ap-south-1.pooler.supabase.com:6543/postgres?sslmode=require"
$env:SPRING_DATASOURCE_USERNAME="postgres.your_project_ref"
$env:SPRING_DATASOURCE_PASSWORD="your_database_password"
$env:JWT_SECRET="your_generated_secret"Linux / Mac
export SPRING_DATASOURCE_URL="jdbc:postgresql://aws-1-ap-south-1.pooler.supabase.com:6543/postgres?sslmode=require"
export SPRING_DATASOURCE_USERNAME="postgres.your_project_ref"
export SPRING_DATASOURCE_PASSWORD="your_database_password"
export JWT_SECRET="your_generated_secret"Option A: Maven
mvn spring-boot:run -DskipTestsOption B: Docker
docker build -t disasterverse-backend .
docker run -p 8080:8080 \
-e SPRING_DATASOURCE_URL="your_url" \
-e SPRING_DATASOURCE_USERNAME="your_username" \
-e SPRING_DATASOURCE_PASSWORD="your_password" \
-e JWT_SECRET="your_secret" \
disasterverse-backend| Method | Endpoint | Description |
|---|---|---|
POST |
/api/v1/auth/signup |
Register a new user |
POST |
/api/v1/auth/login |
Login and get JWT token |
GET |
/api/v1/alerts |
Get all disaster alerts |
GET |
/api/v1/alerts/active |
Get all active alerts |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/v1/alerts |
Create a disaster alert |
POST |
/api/v1/sos |
Submit an SOS report |
GET |
/api/v1/sos |
Get all SOS reports |
PATCH |
/api/v1/sos/status/{id} |
Update SOS report status |
GET |
/api/v1/dashboard/stats |
Get dashboard statistics |
| Endpoint | Description |
|---|---|
/ws |
WebSocket connection (SockJS) |
/topic/alerts |
Subscribe to live alert broadcasts |
/topic/sos |
Subscribe to live SOS broadcasts |
curl -X POST http://localhost:8080/api/v1/auth/signup \
-H "Content-Type: application/json" \
-d '{
"fullName": "John Doe",
"email": "john@example.com",
"password": "password123"
}'curl -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "john@example.com",
"password": "password123"
}'curl -X POST http://localhost:8080/api/v1/alerts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"title": "Major Earthquake Detected",
"description": "7.2 magnitude near coastal region",
"disasterType": "EARTHQUAKE",
"severity": "CRITICAL",
"latitude": 22.5726,
"longitude": 88.3639
}'curl -X POST http://localhost:8080/api/v1/sos \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{
"message": "Trapped under rubble, need help!",
"latitude": 22.5726,
"longitude": 88.3639
}'disasterType : EARTHQUAKE | FLOOD | FIRE | HURRICANE | TORNADO | TSUNAMI | LANDSLIDE | OTHER
severity : LOW | MEDIUM | HIGH | CRITICAL
sosStatus : PENDING | ACTIVE | RESOLVED
role : USER | ADMIN
# Build image
docker build -t disasterverse-backend .
# Run container
docker run -p 8080:8080 \
-e SPRING_DATASOURCE_URL="your_url" \
-e SPRING_DATASOURCE_USERNAME="your_username" \
-e SPRING_DATASOURCE_PASSWORD="your_password" \
-e JWT_SECRET="your_secret" \
disasterverse-backend- Push your code to GitHub
- Go to render.com and create an account
- Click New + β Web Service
- Connect your GitHub repository
- Set Runtime to Docker
- Add the environment variables listed below
- Click Create Web Service
Live API: https://disasterverse-backend-nnez.onrender.com
| Variable | Description | Required |
|---|---|---|
SPRING_DATASOURCE_URL |
PostgreSQL connection string from Supabase | β Yes |
SPRING_DATASOURCE_USERNAME |
Database username (postgres.your_project_ref) |
β Yes |
SPRING_DATASOURCE_PASSWORD |
Database password | β Yes |
JWT_SECRET |
Base64-encoded secret key for JWT signing | β Yes |
PORT |
Server port | No (default: 8080) |
# Linux / Mac
openssl rand -base64 64
# Windows PowerShell
[Convert]::ToBase64String((1..64 | ForEach-Object { Get-Random -Maximum 256 }) -as [byte[]])disasterverse/
βββ src/main/java/com/disasterverse/
β βββ DisasterVerseApplication.java
β βββ config/
β β βββ CorsConfig.java
β β βββ SecurityConfig.java
β β βββ SwaggerConfig.java
β βββ controller/
β β βββ AuthController.java
β β βββ DashboardController.java
β β βββ DisasterAlertController.java
β β βββ SosReportController.java
β βββ dto/
β β βββ request/
β β β βββ CreateAlertRequest.java
β β β βββ LoginRequest.java
β β β βββ SignupRequest.java
β β β βββ SosRequest.java
β β β βββ UpdateSosStatusRequest.java
β β βββ response/
β β βββ AlertResponse.java
β β βββ ApiResponse.java
β β βββ AuthResponse.java
β β βββ DashboardStatsResponse.java
β β βββ SosResponse.java
β βββ entity/
β β βββ BaseEntity.java
β β βββ DisasterAlert.java
β β βββ SosReport.java
β β βββ User.java
β βββ enums/
β β βββ AlertSeverity.java
β β βββ DisasterType.java
β β βββ SosStatus.java
β β βββ UserRole.java
β βββ exception/
β β βββ BusinessException.java
β β βββ GlobalExceptionHandler.java
β β βββ ResourceNotFoundException.java
β βββ repository/
β β βββ DisasterAlertRepository.java
β β βββ SosReportRepository.java
β β βββ UserRepository.java
β βββ security/
β β βββ JwtAuthenticationFilter.java
β β βββ JwtService.java
β β βββ UserDetailsServiceImpl.java
β βββ service/
β β βββ AuthService.java
β β βββ DashboardService.java
β β βββ DisasterAlertService.java
β β βββ SosReportService.java
β β βββ impl/
β β βββ AuthServiceImpl.java
β β βββ DashboardServiceImpl.java
β β βββ DisasterAlertServiceImpl.java
β β βββ SosReportServiceImpl.java
β βββ websocket/
β βββ AlertPublisher.java
β βββ SosPublisher.java
β βββ WebSocketConfig.java
βββ src/main/resources/
β βββ application.yml
βββ Dockerfile
βββ render.yaml
βββ pom.xml
Ankur Banik GitHub: @AnkurBanik124
For issues or questions, please open an issue on GitHub.