
Full-stack platform for managing tourist destinations, sports equipment inventory, and reservations with real-time analytics. React + Vite frontend backed by a Spring Boot 3 REST API on PostgreSQL (Supabase), secured with Auth0 JWT authentication.
- Reservations — Full lifecycle management with pricing policies, discounts, surcharges, and conflict detection
- Equipment inventory — Track availability by type and destination with operational status
- Admin dashboard — Real-time KPIs, charts (Nivo), and interactive maps (Leaflet) via React Query
- Pricing policies — Configurable rules by season, duration, or customer loyalty tier
- Auth0 security — JWT roles enforced on every endpoint; Axios injects tokens automatically
- Testing — JUnit 5 + Mockito + MockMvc (backend), Vitest + Testing Library + MSW (frontend)
| Layer |
Technologies |
| Frontend |
React 19, Vite 5, TypeScript, Tailwind CSS, TanStack Query 5, Auth0 React SDK |
| Visualizations |
Nivo (charts), Leaflet + MarkerCluster (maps) |
| Backend |
Spring Boot 3.1, Java 21, Spring Data JPA, Auth0 Resource Server |
| Database |
PostgreSQL via Supabase |
| Auth |
Auth0 + JWT (roles embedded in token) |
- Node.js >= 18, npm >= 9
- Java 21 (Temurin/OpenJDK), Maven 3.9+
- Supabase project or local PostgreSQL instance
- Auth0 application configured
git clone https://github.com/Kevinbeltran123/DeporTur.git
cd DeporTur
cp .env.example .env # Fill in Auth0 and Supabase credentials
./start-backend.sh # Spring Boot on http://localhost:8080/api
./start-frontend.sh # Vite on http://localhost:5173
DeporTur/
├── backend/ # Spring Boot (controllers, services, repositories, DTOs)
├── frontend/ # React SPA (pages, components, hooks, services)
├── start-backend.sh
├── start-frontend.sh
└── Dockerfile # Multi-stage build (optional)
| Endpoint |
Description |
GET /api/dashboard/metricas |
KPIs: clients, reservations, revenue, status breakdown (cached 5 min) |
GET /api/dashboard/equipos-por-tipo |
Equipment totals and availability by type |
GET /api/dashboard/destinos-populares |
Destinations ranked by reservations |
GET/POST /api/reservas |
Reservation CRUD with overlap validation |
GET /api/equipos, GET /api/destinos |
Equipment and destination listings |
| Variable |
Description |
SUPABASE_DB_URL |
PostgreSQL JDBC connection string |
AUTH0_DOMAIN |
Auth0 issuer domain |
AUTH0_AUDIENCE |
API audience validated by the backend |
VITE_AUTH0_CLIENT_ID |
Public client ID for the SPA |
VITE_API_URL |
Backend base URL (default: http://localhost:8080/api) |
cd backend && mvn clean test # JUnit 5 + Mockito + JaCoCo coverage report
cd frontend && npm run test # Vitest + Testing Library