Plataforma de gestion deportiva orientada a clubes, canchas, reservas y pagos, implementada con arquitectura de microservicios.
En desarrollo activo.
PoliCourt centraliza la operacion de un ecosistema deportivo:
- Gestion de deportes, clubes, canchas y usuarios.
- Flujo de reservas con reglas de negocio en backend.
- Integracion de pagos con Stripe para checkout y webhooks.
- Exposicion de APIs desacopladas para evolucion por dominio.
El repositorio esta organizado como monorepo con tres piezas principales:
- Backend principal: Java 21 + Spring Boot 3.x (
backend/policourt-backend) - Backend complementario: FastAPI (
backend/fastapi) - Frontend: React + TypeScript + Vite + Bun (
frontend)
Frontend React (4000)
|- API Spring Boot (4001) -> PostgreSQL
|- API FastAPI (4003) -> PostgreSQL
\- Stripe (checkout)
Stripe CLI (docker) -> webhook -> Spring Boot /api/payments/webhook/stripe
- Dominio y negocio en capas limpias del servicio Spring Boot.
- Separacion de responsabilidades entre capa de presentacion, aplicacion, dominio e infraestructura.
- Persistencia en PostgreSQL con migraciones gestionadas por Flyway.
- Java 21
- Spring Boot 3.5.x
- Spring Security + JWT
- Spring Data JPA
- Flyway
- PostgreSQL
- OpenAPI/Swagger (springdoc)
- Stripe Java SDK
- Python + FastAPI
- SQLAlchemy
- Pydantic Settings
- JWT middleware
- React 19 + TypeScript
- Vite 7
- Bun
- Tailwind CSS 4
- TanStack Query
- Axios
PoliCourt/
|- backend/
| |- policourt-backend/ # Servicio principal Java/Spring Boot
| \- fastapi/ # Servicio Python/FastAPI
|- frontend/ # Aplicacion web React
|- scripts/ # Scripts utilitarios (Stripe, etc.)
|- docker-compose.yml # Orquestacion local
\- .env.example # Variables de entorno base
- Docker Desktop + Docker Compose
- Java 21 (si vas a correr Spring Boot fuera de Docker)
- Bun 1.x (si vas a correr frontend fuera de Docker)
- Python 3.10+ (si vas a correr FastAPI fuera de Docker)
- Crear archivo de entorno raiz:
cp .env.example .envEn Windows PowerShell:
Copy-Item .env.example .env- Definir secretos obligatorios para backend Java (no commitear secretos reales):
JWT_SECRETJWT_ACCESS_TOKEN_EXPIRATION_MSJWT_REFRESH_TOKEN_EXPIRATION_MSSTRIPE_SECRET_KEYSTRIPE_WEBHOOK_SECRET
- Verificar puertos locales disponibles:
4000Frontend4001Spring Boot4003FastAPI5433PostgreSQL expuesto localmente
Levanta toda la plataforma:
docker-compose up --buildEn segundo plano:
docker-compose up -d --buildServicios incluidos por docker-compose.yml:
db(PostgreSQL)springbootfastapifrontendstripe(Stripe CLI para webhook forwarding)
docker-compose up -d dbDesde backend/policourt-backend:
./mvnw spring-boot:runEn Windows:
.\mvnw.cmd spring-boot:runDesde backend/fastapi:
uvicorn app.main:app --host 0.0.0.0 --port 4003 --reloadDesde frontend:
bun install
bun dev- API base: http://localhost:4001/api
- Swagger UI: http://localhost:4001/swagger-ui.html
- OpenAPI JSON: http://localhost:4001/api-docs
Dominios detectados en controladores:
/api/auth/api/users/api/sports/api/clubs/api/courts/api/bookings/api/payments
- API base: http://localhost:4003/api/v1
- OpenAPI JSON: http://localhost:4003/openapi.json
- Swagger UI: http://localhost:4003/docs
En backend/policourt-backend:
PoliCourt.postman_collection.jsonPoliCourt.Reservas.Payment.postman_collection.json
Desde backend/policourt-backend:
./mvnw clean installEn Windows:
.\mvnw.cmd clean installDesde frontend:
bun run lint
bun run build- Error de conexion a DB: validar que
dbeste arriba y que Spring uselocalhost:5433en entorno local. - Error JWT al iniciar Spring: faltan variables
JWT_*requeridas. - Webhook de Stripe no llega: revisar que el contenedor
stripeeste corriendo y que el endpoint/api/payments/webhook/stripesea accesible en4001. - CORS desde frontend: validar origen
http://localhost:4000.