# JobHero - Documento de Contexto

**Última actualización:** 2026-01-29
**Autor:** Claude Opus 4.5

---

## Resumen del Proyecto

**JobHero** es una plataforma de marketplace/gig economy que conecta clientes con proveedores de servicios ("héroes"). Funciona como aplicación web y móvil (Android/iOS).

---

## Stack Tecnológico

| Capa | Tecnología |
|------|------------|
| **Backend** | Laravel 11.0 (PHP 8.2+) |
| **Frontend** | Angular 18 + Ionic 8 |
| **Mobile** | Capacitor 6 (Android/iOS) |
| **Base de Datos** | MySQL 8.0 |
| **Servidor Web** | Nginx |
| **Autenticación** | Laravel Passport (OAuth 2.0) |
| **Pagos** | OpenPay |
| **Notificaciones** | OneSignal |
| **Mapas** | Google Maps API |

---

## Estructura de Directorios

```
/var/www/
├── jobhero-backend/          # API Laravel
│   ├── app/Http/Controllers/ # Controladores principales
│   ├── app/Http/Middleware/  # CORS y otros middlewares
│   ├── app/Models/           # Modelos Eloquent
│   ├── config/               # Configuraciones
│   ├── .env                  # Variables de entorno (NO en git)
│   └── storage/logs/         # Logs de Laravel
│
├── jobhero-frontend/         # App Angular/Ionic
│   ├── src/app/pages/        # Páginas de la app
│   ├── src/app/services/     # Servicios HTTP
│   ├── android/              # Proyecto Android Capacitor
│   ├── www/                  # Build compilado
│   └── jobhero-release.keystore # Keystore para firmar APK
│
└── JOBHERO_CONTEXTO.md       # Este documento
```

---

## URLs de Producción

| Servicio | URL |
|----------|-----|
| **Frontend Web** | https://jobhero.consultoria-as.com |
| **API Backend** | https://jobhero-api.consultoria-as.com |
| **Gitea Frontend** | https://git.consultoria-as.com/CarlosTorres/Jobhero_front |
| **Gitea Backend** | https://git.consultoria-as.com/CarlosTorres/Jobhero_back |

---

## Túneles Cloudflare

Los servicios están expuestos a internet mediante Cloudflare Tunnels:

| Hostname | Destino Local |
|----------|---------------|
| `jobhero.consultoria-as.com` | `http://localhost:80` |
| `jobhero-api.consultoria-as.com` | `http://localhost:8080` |

**Servicio:** `cloudflared.service` (systemd)

**Nota:** Los registros DNS CNAME deben existir en Cloudflare apuntando al túnel.

---

## Configuración de Nginx

**Frontend** (`/etc/nginx/sites-enabled/jobhero`):
- Puerto: 80
- Root: `/var/www/jobhero-frontend/www`
- SPA routing habilitado

**Backend** (`/etc/nginx/sites-enabled/jobhero-backend`):
- Puerto: 8080
- Root: `/var/www/jobhero-backend/public`
- PHP-FPM: `unix:/var/run/php/php8.3-fpm.sock`

---

## Credenciales Importantes

### Keystore para APK (GUARDAR EN LUGAR SEGURO)
- **Archivo:** `/var/www/jobhero-frontend/jobhero-release.keystore`
- **Alias:** `jobhero`
- **Contraseña:** `JobHero2024!`
- **Validez:** 10,000 días

### Base de Datos
- Ver `/var/www/jobhero-backend/.env`

---

## Usuarios de Prueba

| Email | Nombre |
|-------|--------|
| `torch2196@gmail.com` | Admin |
| `ialcarazsalazar@consultoria-as.com` | ivan |
| `ialcarazsalazar@gmail.com` | alex |

---

## Comandos Útiles

### Compilar Frontend Web
```bash
cd /var/www/jobhero-frontend
npm run build
```

### Compilar APK Android
```bash
cd /var/www/jobhero-frontend
npm run build
npx cap sync android
cd android
export ANDROID_HOME=/opt/android-sdk
./gradlew assembleRelease
# APK en: android/app/build/outputs/apk/release/app-release.apk
```

### Limpiar Caché Laravel
```bash
cd /var/www/jobhero-backend
php artisan config:clear
php artisan cache:clear
php artisan route:clear
```

### Reiniciar Servicios
```bash
systemctl restart nginx
systemctl restart php8.3-fpm
systemctl restart cloudflared
```

### Ver Logs
```bash
# Laravel
tail -f /var/www/jobhero-backend/storage/logs/laravel-$(date +%Y-%m-%d).log

# Nginx
tail -f /var/log/nginx/jobhero-backend-error.log
tail -f /var/log/nginx/jobhero-frontend-error.log

# Cloudflare Tunnel
journalctl -u cloudflared -f
```

---

## Problemas Resueltos en Esta Sesión

### 1. Configuración de Túneles Cloudflare
- Se configuraron túneles para exponer la app fuera de la red local
- Hostnames: `jobhero.consultoria-as.com` y `jobhero-api.consultoria-as.com`
- Se crearon registros DNS CNAME en Cloudflare

### 2. CORS Duplicado
- **Problema:** Nginx y Laravel ambos agregaban headers CORS, causando error "multiple values"
- **Solución:** Se removieron los headers CORS de Nginx, dejando solo Laravel

### 3. URL de API Incorrecta
- **Problema:** El frontend usaba `api.jobhero.consultoria-as.com` en vez de `jobhero-api.consultoria-as.com`
- **Solución:** Se actualizó `env.service.ts` y se recompiló

### 4. Caché de Cloudflare
- **Problema:** Cloudflare cacheaba versiones viejas del main.js
- **Solución:** Se renombró main.js a main-vX.js para evitar caché

### 5. Timezone Incorrecto
- **Problema:** Las postulaciones se creaban con 2 horas de diferencia
- **Solución:** Se cambió de `America/Tijuana` a `America/Mexico_City` en `PostulationController.php`

### 6. Autocomplete de Dirección
- **Problema:** No aparecía la lista hasta hacer clic en otro lugar
- **Solución:** Se cambió `ionChange` a `ionInput`

### 7. GPS no Autocompletando
- **Problema:** La dirección del GPS no se mostraba en el input
- **Solución:** Se sincronizó `addressAutocomplete` con `myAddress` en `doGeocode()`

### 8. Número Interior
- **Problema:** Se autollenaba incorrectamente con la localidad
- **Solución:** Se removió el autollenado y se habilitó el campo para edición manual

---

## Archivos Modificados en Esta Sesión

### Backend
- `app/Http/Middleware/Cors.php` - CORS actualizado
- `app/Http/Controllers/PostulationController.php` - Timezone corregido
- `.env` - URL de producción

### Frontend
- `src/app/services/env.service.ts` - API_URL actualizada
- `src/app/pages/category/category.page.ts` - GPS y autocomplete arreglados
- `src/app/pages/category/category.page.html` - UI del formulario
- `android/app/build.gradle` - Configuración de firma APK

---

## Próximos Pasos Sugeridos

1. **Probar todos los flujos** de la aplicación en producción
2. **Configurar HTTPS** correctamente si hay problemas de certificados
3. **Implementar CI/CD** para automatizar deployments
4. **Agregar monitoreo** (logs centralizados, alertas)
5. **Backup de base de datos** automatizado
6. **Revisar seguridad** - el token de Gitea está visible en los remotes

---

## Contacto

Para dudas sobre este proyecto, revisar la documentación en los READMEs de cada repositorio o contactar al equipo de desarrollo.
