diff --git a/JOBHERO_CONTEXTO.md b/JOBHERO_CONTEXTO.md new file mode 100644 index 0000000..dc20c2f --- /dev/null +++ b/JOBHERO_CONTEXTO.md @@ -0,0 +1,231 @@ +# 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.