# Gotagig

> Marketplace geolocalizado en tiempo real para contratar músicos por pedido — el "Uber de los músicos".
> El usuario busca un servicio musical (mariachis, saxofón, gaitas venezolanas, solistas, guitarristas, duetos, tambores…),
> ve quién está disponible **cerca de su área** (y en otras zonas del país), y lo contrata **express** o **programado**
> con días/semanas/meses de anticipación.

**Países iniciales:** 🇻🇪 Venezuela · 🇨🇱 Chile · 🇮🇪 Irlanda. Arquitectura multi-país desde el día 1.

---

## Stack

| Capa | Tecnología |
|------|-----------|
| **Frontend** | Next.js 15 (App Router) + TypeScript + Tailwind CSS + Leaflet (mapas) |
| **Backend** | FastAPI + SQLAlchemy 2.0 + Pydantic v2 |
| **Base de datos** | PostgreSQL + **PostGIS** (búsquedas por radio geográfico "cerca de mí") |
| **Auth** | JWT stateless (`Authorization: Bearer`), passlib/bcrypt |
| **Real-time** | Búsqueda por polling en el MVP → WebSockets en fase 2 |

---

## Cómo correrlo en local

### 1. Base de datos (Docker)
```bash
docker compose up -d db
```
Esto levanta PostgreSQL 16 con PostGIS ya instalado en `localhost:5432` (usuario/clave/db = `gotagig`).

### 2. Backend (FastAPI)
```bash
cd backend
python -m venv .venv
# Windows PowerShell:
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env          # revisá los valores
python -m app.seed              # crea tablas + datos demo (músicos en VE/CL/IE)
fastapi dev app/main.py --port 8005   # http://localhost:8005  (docs en /docs)
# producción: gunicorn (ver requirements.txt) delante de la app ASGI
```

### 3. Frontend (Next.js)
```bash
cd frontend
npm install
copy .env.local.example .env.local
npm run dev -- --port 3005      # http://localhost:3005
```

---

## Estructura

```
gotagig/
├── backend/                 FastAPI + SQLAlchemy + PostGIS
│   └── app/
│       ├── core/            config, seguridad (JWT/hash), sesión DB
│       ├── models/          User, MusicianProfile, Booking
│       ├── schemas/         Pydantic (request/response)
│       ├── api/routes/      auth, musicians, search, bookings
│       ├── catalog.py       catálogo de servicios (mariachi, saxofón, gaita…)
│       ├── seed.py          crea tablas + datos demo
│       └── main.py          entrypoint FastAPI
└── frontend/                Next.js App Router
    └── app/                 landing, /buscar (mapa), /login, /registro
```

## Concepto de negocio

- **Dos lados:** `cliente` (contrata) y `músico` (ofrece). Una cuenta puede ser ambas.
- **Disponibilidad en tiempo real:** cada músico marca `is_available` y actualiza su ubicación; el cliente ve
  los que están dentro de su radio, ordenados por distancia (PostGIS `ST_DWithin` + `ST_Distance`).
- **Alcance por país:** se puede buscar en tu zona, ampliar el radio a otras ciudades, o barrer todo el país.
- **Modos de contratación:** `express` (ahora) o `programado` (fecha futura).
