Simple Spring Boot service for reporting and recovering ghost nets (lost or abandoned fishing nets).
GhostNetFishing helps coordinate the reporting and recovery of ghost nets, which pose serious environmental risks. The application allows anonymous reporting, structured recovery coordination, and lifecycle tracking of each reported net.
-
Make reporting ghost nets easy and accessible
-
Coordinate recovery efforts efficiently
-
Track ghost nets from report to recovery or confirmation of absence
-
Report ghost nets with:
-
GPS coordinates
-
Estimated size
-
Initial status (
REPORTED)
-
-
A name is required to file a report; phone is optional when reporting anonymously
-
If reporting anonymously, the phone number is not required and will not be stored
-
A net can only be marked as missing by a non-anonymous, contactable person
-
Rescuers can:
-
View ghost nets pending recovery
-
Claim a ghost net for recovery (at most one rescuer per net)
-
Mark a ghost net as recovered
-
Mark a ghost net as missing (requires name + phone; not anonymous)
-
See their assigned recoveries on the dashboard and
/tasks
-
A ghost net consists of:
-
GPS coordinates (latitude and longitude)
-
Estimated size
-
Status
-
Assigned rescuer (optional)
-
REPORTED — Net has been reported
-
RECOVERY_PLANNED — A rescuer has claimed the net
-
RECOVERED — Net has been successfully recovered by the assigned rescuer
-
MISSING — Net could not be found at the reported location (requires name + phone; not anonymous)
-
As a reporting person, I want to report ghost nets (optionally anonymously).
-
As a rescuer, I want to sign up to recover a ghost net.
-
As a rescuer, I want to see ghost nets that still need recovery.
-
As a rescuer, I want to mark ghost nets as recovered.
-
Reporting (anonymous allowed)
Public forms on/and/reportwith GPS validation.
Phone number is required only for non-anonymous reports. -
Sign up for recovery
Authenticated users can claim a ghost net.
The system enforces at most one rescuer per net. -
View nets to recover
Open nets are listed on/and/recoverieswith status filters. -
Mark as recovered
Only the assigned rescuer can mark a net asRECOVERED. -
Mark as missing
Only non-anonymous, contactable people can mark a net asMISSING. -
Map view (optional)
Leaflet-based map available on/map(requires network access for map tiles). -
Coordination view (optional)
Listings show the assigned rescuer’s name.
Reassignment is manual (unassign → reassign).
-
Java 21
-
Spring Boot 4
-
Spring Web
-
Spring Data JPA
-
Spring Security
-
Validation
-
Thymeleaf
-
-
MySQL (via Docker Compose)
-
Maven Wrapper
-
Java 21 (JDK)
-
Docker and Docker Compose
-
Bash-compatible shell
-
Maven is shipped via the included wrapper (
./mvnw); a global Maven install is optional
Default database configuration in src/main/resources/application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=myuser
spring.datasource.password=secretConfiguration can be overridden via environment variables or by editing
application.properties.
./mvnw spring-boot:runDependencies will be downloaded on the first run.
Spring Boot 4 with spring-boot-docker-compose starts/stops the MySQL service defined in docker-compose.yaml automatically (Docker daemon must be running). If you prefer manual control, you can still start it yourself with docker compose up -d before running the app.