🏃 Um jogo de conquista territorial no mundo real para corredores.
LigaRun transforma corridas em batalhas épicas. Corredores conquistam tiles hexagonais em Curitiba através de loops GPS válidos, defendem seu território e competem por bandeiras (assessorias, academias, boxes).
runwarapp/
├── backend/ # Kotlin + Spring Boot
│ ├── src/
│ │ └── main/kotlin/com/runwar/
│ │ ├── config/ # Security, JWT, CORS
│ │ ├── domain/ # User, Bandeira, Tile, Run
│ │ ├── game/ # H3Grid, LoopValidator, ShieldMechanics
│ │ ├── geo/ # GPX Parser
│ │ └── notification/ # Notificações
│ └── README.md
├── frontend/ # Next.js + TypeScript
│ ├── src/
│ │ ├── app/
│ │ ├── components/
│ │ └── lib/
│ └── README.md
├── ios/ # App iOS nativo (SwiftUI + Mapbox)
│ └── LigaRun/
│ ├── project.yml
│ └── README.md
└── docker-compose.yml
docker-compose up -d dbcd backend
./gradlew bootRunO backend estará em http://localhost:8080 Swagger UI: http://localhost:8080/swagger-ui.html
cd frontend
npm install
npm run devO frontend estará em http://localhost:3000
Para o mapa funcionar, obtenha um token em https://www.mapbox.com/ e configure:
# frontend/.env.local
NEXT_PUBLIC_MAPBOX_TOKEN=seu_token_aquiO app iOS nativo vive em ios/LigaRun/ (SwiftUI + Mapbox), consumindo o mesmo backend. Para gerar o projeto:
cd ios/LigaRun
# configure API_BASE_URL e MAPBOX_ACCESS_TOKEN em Config/*.xcconfig
xcodegen generate
open LigaRun.xcodeproj| Ação | Efeito |
|---|---|
| Conquista (tile neutro) | Escudo = 100 |
| Ataque (tile rival) | Escudo -35 |
| Defesa (seu tile) | Escudo +20 |
| Troca de dono | Escudo = 65, Cooldown 18h |
| Em disputa | Escudo < 70 |
- Distância mínima: 1.2 km
- Duração mínima: 7 minutos
- Fechamento: ≤ 40m entre início e fim
- Cobertura: ≥ 60% dentro do tile
- 3 ações territoriais por dia (usuário)
- 60 ações por dia (bandeira)
Backend:
- Kotlin + Spring Boot 3.2
- PostgreSQL + PostGIS
- Uber H3 (grid hexagonal)
- JWT Authentication
Frontend:
- Next.js 14 + TypeScript
- Mapbox GL JS
- Zustand (state)
- Vanilla CSS
Proprietário - LigaRun © 2026