Transporte Puerta a Puerta y Mensajería Express Cali - Buenaventura
+
+ Viajes agrupados inteligentemente en vehículos de 4 pasajeros. Salidas puntuales, geolocalización satelital en tiempo real, optimización de rutas TSP con Waze y asignación de conductores según cercanía de su residencia.
+
+ Navegación Conductor:
+ Waze Deep Link con TSP
+
+
+
+
+ Pago 100% Prepagado con Bold Smart Checkout (QR Bre-B, Nequi, PSE)
+
+
+
+
+ ℹ️ Protocolo de Notificación Oficial:
+ El disparo inmediato de notificación a los 4 pasajeros se ejecuta únicamente cuando el Administrador asigna el conductor, garantizando que el vehículo asignado sea el más cercano a su residencia en Cali.
+
+
+
+
+
+ Tarifa por Pasajero:
+ $35.000 COP
+
+
+
+
+
+
+
+
+
+
+ 🚗💨
+
+
¡Vehículo con 4/4 Cupos Completados!
+
+ El viaje ha cambiado su estado a POOL_COMPLETED. Se ha enviado una alerta inmediata al Administrador para seleccionar el conductor de acuerdo a la cercanía de su residencia en Cali respecto a la primera recogida.
+
+
+ 📲 Una vez asignado, se disparará automáticamente el mensaje de WhatsApp a los 4 pasajeros con los datos del conductor y horario exacto de recogida.
+
+
+
+
+
+
+
+
+
+
+
+
Cotizador Inteligente de Mensajería & Fletes
+
Envíos seguros en el corredor Cali - Buenaventura. Tarifa exacta calculada por distancia, factor de peso/volumen y seguro obligatorio.
+
+
+
+
+
+
+
+
+
+
+
+
+ El seguro corresponde al 1% del valor declarado ante extravío o siniestro.
+
+
+ 100% Prepagado antes del despacho con Bold Smart Checkout
+
+
+
+
+
+ Flete Total Liquidado:
+ $197.100 COP
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Radar Satelital GPS & Asignación por Residencia
+
Visualización en tiempo real de la flota en el corredor Cali - Buenaventura y asignación inteligente de conductores basada en la distancia de su lugar de residencia a la primera recogida.
+ Ordenados según la cercanía entre su domicilio registrado en Cali y la 1ª recogida del grupo de pasajeros.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Vinculación Oficial de Conductores
+
Únete a la flota oficial de Pacifictrans Go. Registra tu vehículo y sube tus documentos para validación administrativa.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 📄 SOAT Vigente
+
+
+
+
+ 📄 Revisión Técnico-Mecánica
+
+
+
+
+ 📄 Tarjeta de Operación Especial
+
+
+
+
+ 📄 Licencia de Conducción C1 / C2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ App Oficial Android
+
Pacifictrans Go Móvil
+
+ Instala la aplicación nativa en tu dispositivo Android. Accede a navegación por Waze en un toque, pagos instantáneos con Bold y seguimiento en vivo de tu viaje.
+
+ `).join('');
+ }
+}
+
+// Ventana de asignación y disparo de notificación WhatsApp
+window.asignarConductorDemo = function(conductor, barrio) {
+ const resultDiv = document.getElementById('schedule-dispatch-result');
+ if (resultDiv) {
+ resultDiv.style.display = 'block';
+ resultDiv.innerHTML = `
+
+
✅ Conductor Asignado por Residencia: ${conductor} (${barrio})
+
+ 🚀 Disparo Inmediato de Notificación WhatsApp Ejecutado:
+ Los 4 pasajeros han recibido su confirmación oficial con el conductor asignado, vehículo, hora estimada escalonada de recogida y enlace de Waze / mapa en vivo.
+
+
+ 📲 [Evolution API WhatsApp Status: 201 Created] Enviado a los 4 Pasajeros + Conductor.
+
+
+ `;
+ resultDiv.scrollIntoView({ behavior: 'smooth' });
+ }
+};
diff --git a/transporte-cali-buenaventura/backend/src/index.ts b/transporte-cali-buenaventura/backend/src/index.ts
index 54ab204..406a660 100644
--- a/transporte-cali-buenaventura/backend/src/index.ts
+++ b/transporte-cali-buenaventura/backend/src/index.ts
@@ -1,4 +1,6 @@
import http from 'http';
+import fs from 'fs';
+import path from 'path';
import { connectDatabase } from './config/database';
import { poolingService } from './services/pooling.service';
import { messagingFleteService } from './services/messaging-flete.service';
@@ -11,6 +13,21 @@ import { tripSchedulingService } from './services/trip-scheduling.service';
import { Trip } from './models/Trip';
const PORT = process.env.PORT || 4000;
+const PUBLIC_DIR = path.resolve(__dirname, '../public');
+
+const MIME_TYPES: Record = {
+ '.html': 'text/html; charset=utf-8',
+ '.css': 'text/css; charset=utf-8',
+ '.js': 'application/javascript; charset=utf-8',
+ '.json': 'application/json',
+ '.png': 'image/png',
+ '.jpg': 'image/jpeg',
+ '.jpeg': 'image/jpeg',
+ '.svg': 'image/svg+xml',
+ '.ico': 'image/x-icon',
+ '.apk': 'application/vnd.android.package-archive',
+ '.woff2': 'font/woff2'
+};
// Servidor HTTP nativo Node.js sin dependencias pesadas extras
const server = http.createServer(async (req, res) => {
@@ -196,8 +213,54 @@ const server = http.createServer(async (req, res) => {
return sendJson(200, updateResult);
}
+ // 14. Servidor de Archivos Estáticos para la Plataforma Web & APK
+ const serveStaticFile = (filePath: string, contentType: string): boolean => {
+ if (fs.existsSync(filePath)) {
+ const stat = fs.statSync(filePath);
+ if (stat.isFile()) {
+ res.writeHead(200, {
+ 'Content-Type': contentType,
+ 'Content-Length': stat.size,
+ 'Cache-Control': contentType.includes('apk') ? 'no-cache' : 'public, max-age=3600'
+ });
+ fs.createReadStream(filePath).pipe(res);
+ return true;
+ }
+ }
+ return false;
+ };
+
+ // Descarga directa del APK Oficial Android
+ if (pathname === '/PacifictransGo.apk' || pathname === '/download/apk') {
+ const localApk = path.join(PUBLIC_DIR, 'PacifictransGo.apk');
+ const fallbackApk = path.resolve(__dirname, '../../../pacifictrans-app/public/PacifictransGo.apk');
+ const vpsApk = '/home/carlos/apps/dripzone-app/public/PacifictransGo.apk';
+
+ const targetApk = fs.existsSync(localApk) ? localApk : (fs.existsSync(fallbackApk) ? fallbackApk : vpsApk);
+ if (serveStaticFile(targetApk, MIME_TYPES['.apk'])) return;
+ }
+
+ // Archivo estático directo (HTML, CSS, JS, Imágenes)
+ let relativePath = pathname === '/' ? 'index.html' : pathname.replace(/^\//, '');
+ let targetPath = path.join(PUBLIC_DIR, relativePath);
+
+ const ext = path.extname(targetPath).toLowerCase();
+ const mime = MIME_TYPES[ext] || 'application/octet-stream';
+
+ if (serveStaticFile(targetPath, mime)) {
+ return;
+ }
+
+ // Fallback SPA a index.html para rutas sin extensión
+ if (!ext) {
+ const indexPath = path.join(PUBLIC_DIR, 'index.html');
+ if (serveStaticFile(indexPath, MIME_TYPES['.html'])) {
+ return;
+ }
+ }
+
// Ruta no encontrada
- sendJson(404, { error: 'Endpoint no encontrado' });
+ sendJson(404, { error: 'Recurso o Endpoint no encontrado' });
} catch (error: any) {
console.error('❌ [API Error]:', error);
sendJson(500, { error: error.message || 'Error interno del servidor' });
diff --git a/transporte-cali-buenaventura/docs/COOLIFY_WEB_DEPLOY.md b/transporte-cali-buenaventura/docs/COOLIFY_WEB_DEPLOY.md
new file mode 100644
index 0000000..4b637e8
--- /dev/null
+++ b/transporte-cali-buenaventura/docs/COOLIFY_WEB_DEPLOY.md
@@ -0,0 +1,78 @@
+# Guía de Despliegue en Coolify desde Servidor Git: Pacifictrans Go
+
+Esta guía detalla los pasos para desplegar la plataforma web y API de **Pacifictrans Go** en **Coolify** utilizando el repositorio Git propio de Gitea (`https://gitea.almeira.com.co/carlos/almeira-web.git`), con subdominio oficial en `almeira.com.co` y certificado SSL automático gestionado por Traefik.
+
+---
+
+## 1. Parámetros del Recurso en Coolify
+
+| Parámetro | Valor Oficial |
+| :--- | :--- |
+| **Tipo de Recurso** | Application |
+| **Origen (Git Source)** | Gitea / Git Repository |
+| **URL del Repositorio** | `https://gitea.almeira.com.co/carlos/almeira-web.git` |
+| **Rama (Branch)** | `main` |
+| **Directorio Base (Base Directory)** | `/transporte-cali-buenaventura/backend` |
+| **Build Pack** | `Dockerfile` |
+| **Puerto Expuesto** | `4000` |
+| **FQDN / Dominios** | `https://pacifictrans.almeira.com.co` (o alias `https://transporte.almeira.com.co`) |
+
+---
+
+## 2. Configuración Paso a Paso en el Panel de Coolify
+
+1. **Crear la Aplicación**:
+ - En el dashboard de Coolify, entrar a tu proyecto y seleccionar **+ New Resource**.
+ - Seleccionar **Application** y luego **Public Repository** o conectar tu cuenta de **Gitea**.
+ - Ingresar la URL del repositorio: `https://gitea.almeira.com.co/carlos/almeira-web.git`.
+ - Indicar la rama `main`.
+
+2. **Configurar el Directorio Base y Build Pack**:
+ - En **Base Directory**, escribir: `/transporte-cali-buenaventura/backend`.
+ - En **Build Pack**, seleccionar: `Dockerfile`. (Coolify detectará automáticamente el archivo [Dockerfile](file:///c:/Users/Carlos/dev/almeira-web/transporte-cali-buenaventura/backend/Dockerfile) multi-stage optimizado).
+
+3. **Asignar el Dominio y Puerto**:
+ - En el campo **Domains**, ingresar: `https://pacifictrans.almeira.com.co`.
+ - En el campo **Ports Exposes**, definir: `4000`.
+ - Traefik generará y renovará automáticamente el certificado Let's Encrypt SSL.
+
+4. **Variables de Entorno (Environment Variables)**:
+ Pegar las siguientes variables en la pestaña **Environment Variables** de la aplicación en Coolify:
+
+```env
+PORT=4000
+NODE_ENV=production
+
+# Conexión a MongoDB (Red interna de Coolify)
+MONGODB_URI=mongodb://admin:AlmeiraTransporte2026Secure!@coolify-mongodb-cali:27017/transporte_cali_buenaventura?authSource=admin
+
+# Appwrite Cloud Propio
+APPWRITE_ENDPOINT=https://appwrite.almeira.com.co/v1
+APPWRITE_PROJECT_ID=69b84df5003bd8957c5c
+APPWRITE_DATABASE_ID=sneakers_multistore_db
+APPWRITE_API_KEY=standard_cce3cdb866ea6433888d40cedd24dc45987372308fdc3dd0697de08648c0e5c7e04b02c3bcee271403fd656b00a5820f04c08b51631284a6e8a3582d8aed2aa33234f3c29cc777e9b162eb54810b789251b0d006a9a3b081ebc2da53b9baa94614b124b3508ad849fd9a4187cc6094f506d4b57f409b69d9562a74df594f3ec3
+
+# WhatsApp Evolution API
+EVOLUTION_API_URL=https://evolution.almeira.com.co
+EVOLUTION_API_KEY=EE49029EEB85-4568-8F81-C9FDFC6E2943
+EVOLUTION_INSTANCE=AutomataAlmeira
+
+# Bold Smart Checkout (Producción)
+BOLD_IDENTITY_KEY=k_live_a34f8902bc45de
+BOLD_SECRET_KEY=s_live_902bc45de890a3
+BOLD_INTEGRITY_KEY=i_live_bc45de890a34f8
+```
+
+5. **Despliegue y Webhook Automático (CI/CD)**:
+ - Hacer clic en **Deploy** para iniciar el primer despliegue.
+ - En los ajustes de la aplicación en Coolify, copiar la URL del **Webhook de Despliegue**.
+ - En Gitea (`https://gitea.almeira.com.co/carlos/almeira-web/settings/hooks`), agregar el Webhook para el evento `Push`. De esta forma, cada commit enviado al servidor Git desplegará automáticamente la versión más reciente.
+
+---
+
+## 3. URLs Disponibles una vez Desplegado
+
+- **Página Web Principal**: `https://pacifictrans.almeira.com.co/`
+- **Descarga Directa del APK Android**: `https://pacifictrans.almeira.com.co/PacifictransGo.apk`
+- **API REST & Telemetría**: `https://pacifictrans.almeira.com.co/api/health`
+- **Webhook Oficial de Pagos Bold**: `https://pacifictrans.almeira.com.co/api/payments/bold/webhook`
diff --git a/transporte-cali-buenaventura/frontend/src/app/components/admin-dashboard/admin-dashboard.component.ts b/transporte-cali-buenaventura/frontend/src/app/components/admin-dashboard/admin-dashboard.component.ts
index 9faae99..303d885 100644
--- a/transporte-cali-buenaventura/frontend/src/app/components/admin-dashboard/admin-dashboard.component.ts
+++ b/transporte-cali-buenaventura/frontend/src/app/components/admin-dashboard/admin-dashboard.component.ts
@@ -547,7 +547,7 @@ export interface ZoneDemandStat {
})
export class AdminLiveDashboardComponent implements OnInit, OnDestroy {
private refreshTimer: any;
- private apiUrl = 'https://api-transporte.almeira.com.co/api';
+ private apiUrl = 'https://pacifictrans.almeira.com.co/api';
drivers: DriverLiveDTO[] = [];
selectedDriver: DriverLiveDTO | null = null;
diff --git a/transporte-cali-buenaventura/frontend/src/app/services/trip.service.ts b/transporte-cali-buenaventura/frontend/src/app/services/trip.service.ts
index 0285b35..d26451a 100644
--- a/transporte-cali-buenaventura/frontend/src/app/services/trip.service.ts
+++ b/transporte-cali-buenaventura/frontend/src/app/services/trip.service.ts
@@ -37,7 +37,7 @@ export interface PackagePayload {
providedIn: 'root',
})
export class TripService {
- private apiUrl: string = 'https://api-transporte.almeira.com.co/api';
+ private apiUrl: string = 'https://pacifictrans.almeira.com.co/api';
constructor() {}