Files
Jobhero_back/JOBHERO_CONTEXTO.md
CarlosTorres fb5caeab6e Agregar documento de contexto del proyecto
Incluye:
- Estructura del proyecto
- URLs de producción
- Comandos útiles
- Problemas resueltos
- Configuraciones importantes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 20:48:02 +00:00

6.5 KiB

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

cd /var/www/jobhero-frontend
npm run build

Compilar APK Android

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

cd /var/www/jobhero-backend
php artisan config:clear
php artisan cache:clear
php artisan route:clear

Reiniciar Servicios

systemctl restart nginx
systemctl restart php8.3-fpm
systemctl restart cloudflared

Ver Logs

# 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.