📧 Catálogo Completo de Emails — Sistema LPDI

Auditoría exhaustiva de TODOS los correos electrónicos que genera el ecosistema eco.lpdi.co

12
Emails totales
3
Flujos de negocio
2
Crons automáticos
Flujo A — Registro de ICG (Inversionistas / Corporativos / Gestores) 2 emails
1
Contact Welcome (ICG asigna contacto)
Asunto: "[NombreICG] te ha asignado como contacto en el Ecosistema LPDI"
Al registrar ICG Disparo manual

¿Cuándo se envía? Cuando un ICG se registra y nombra a un contacto de la compañía, o cuando desde el dashboard ICG se crea un nuevo contacto.

Contenido: Informa al contacto que fue asignado, muestra contraseña temporal, y botón para establecer nueva contraseña. Si es CEO, incluye bloque especial de privilegios de edición.

📬 Destinatario: El contacto asignado por el ICG
Archivos involucrados
email.ts → sendContactWelcomeEmail() · buildContactWelcomeHtml()
Llamado desde: registro-icg/+page.server.ts, dashboard/icg/nuevo/+page.server.ts, ceo.ts
2
Recuperación de contraseña (Supabase Auth)
Asunto: "Reset your password" (template Supabase)
Olvidé mi contraseña Supabase Auth

¿Cuándo se envía? Cuando cualquier usuario (ICG, Startup, miembro de equipo) hace clic en "Olvidaste tu contraseña?" en la pantalla de login.

Contenido: Email nativo de Supabase Auth con enlace para restablecer contraseña. Redirige a /auth/recuperar.

📬 Destinatario: El usuario que solicita la recuperación
Archivos involucrados
login/+page.svelte → supabase.auth.resetPasswordForEmail()
Redirect: auth/reset-password/+page.svelte
Flujo B — Registro de Startup 2 emails
3
Startup Welcome (Confirmación de cuenta)
Asunto: "Bienvenido al Ecosistema LPDI — Confirma tu cuenta"
Al registrar startup Disparo manual

¿Cuándo se envía? Inmediatamente después de que una startup completa el formulario de registro inicial.

Contenido: Confirma que la empresa fue registrada. Botón "Confirmar mi cuenta y ver mi registro". Enlace válido por 7 días.

📬 Destinatario: El email del CEO/representante que registró la startup
Archivos involucrados
email.ts → sendStartupWelcomeEmail() · buildStartupWelcomeHtml()
Llamado desde: registro-startup/+page.server.ts
4
Startup Follow-up (Motivación de score)
Asunto: "Aumenta el score de tu perfil en el Ecosistema LPDI"
Cron automático Días después del registro

¿Cuándo se envía? Automáticamente vía cron, días después del registro de la startup. Muestra el score actual y motiva a completar el perfil.

Contenido: Score actual (ej: 45/100), explicación de beneficios de completar perfil, botón "Aumentar mi score".

📬 Destinatario: El email del usuario que registró la startup
Archivos involucrados
email.ts → sendStartupFollowupEmail() · buildStartupFollowupHtml()
Llamado desde: api/cron/startup-followup/+server.ts
Flujo C — Invitación de Equipo Fundador (Panel 6 FD) 6 emails
5
Invitación al equipo (2 botones: confirmar / rechazar)
Asunto: "[NombreCEO] te ha incluido en el equipo de [Empresa] — confirma tu registro"
CEO agrega miembro Disparo manual

¿Cuándo se envía? Cuando el CEO/representante agrega un miembro al equipo fundador desde el Panel 6 del formulario detallado.

Contenido:

  • Datos del miembro registrado (nombre, correo, cargo, permisos de edición)
  • Links a Términos y Condiciones + Política de Datos
  • Botón verde: "Confirmar mis datos"
  • Botón rojo: "No hago parte de la compañía"
  • Enlace válido 7 días
📬 Destinatario: El miembro del equipo invitado
Archivos involucrados
email-team.ts → sendTeamInvitationEmail()
Llamado desde: team.ts (inviteFounderFlow + re-send)
6
Bienvenida CON permisos de edición
Asunto: "Bienvenido al equipo de [Empresa] en LPDI"
Miembro confirma (can_edit=true) Automático al confirmar

¿Cuándo se envía? Cuando el miembro invitado hace clic en "Confirmar mis datos" Y tiene permisos de edición asignados por el CEO.

Contenido: Credenciales (correo + contraseña temporal), aviso de que puede editar el formulario de la startup, botón para establecer contraseña.

📬 Destinatario: El miembro del equipo que confirmó
7
Bienvenida SIN permisos de edición
Asunto: "Bienvenido al equipo de [Empresa] en LPDI"
Miembro confirma (can_edit=false) Automático al confirmar

¿Cuándo se envía? Cuando el miembro invitado confirma Y NO tiene permisos de edición.

Contenido: Credenciales (correo + contraseña temporal), aviso de que solo el CEO puede modificar el formulario, botón para establecer contraseña.

📬 Destinatario: El miembro del equipo que confirmó
8
Confirmación de rechazo
Asunto: "Confirmación: no haces parte del equipo de [Empresa]"
Miembro rechaza invitación Automático al rechazar

¿Cuándo se envía? Cuando el miembro hace clic en "No hago parte de la compañía".

Contenido: Confirmación de que NO será asociado al equipo. Opción de revertir si fue error (botón "Confirmar mis datos" como segunda oportunidad).

📬 Destinatario: El miembro que rechazó
9
Notificación al CEO — Miembro aceptó
Asunto: "[NombreMiembro] aceptó tu invitación al equipo de [Empresa]"
Miembro confirma Notificación automática

¿Cuándo se envía? Automáticamente al CEO cuando un miembro confirma su registro.

Contenido: Nombre y email del miembro, permisos asignados (edición o solo lectura). Email de transparencia.

📬 Destinatario: El CEO/representante que invitó
10
Notificación al CEO — Miembro rechazó
Asunto: "[NombreMiembro] rechazó la invitación al equipo de [Empresa]"
Miembro rechaza Notificación automática

¿Cuándo se envía? Automáticamente al CEO cuando un miembro rechaza la invitación.

Contenido: Informa que el miembro NO fue asociado. Sugiere comunicarse con la persona y volver a invitar desde Panel 6.

📬 Destinatario: El CEO/representante que invitó
Flujo D — Reminders Automáticos (Cron) 2 emails
11
Reminder de invitación de equipo (re-envío)
Asunto: (mismo que Email #5 — re-envío automático)
Cron cada hora Día 3, 6 y 7

¿Cuándo se envía? Cron automático (pg_cron cada hora). Re-envía la invitación de equipo en los días 3, 6 y 7 después de la invitación original. En día 8+ marca como expirado/rechazado.

Contenido: Idéntico al Email #5 (invitación al equipo con botones confirmar/rechazar).

📬 Destinatario: Miembros con invitación pendiente
Cadencia de reminders
Día 0: Invitación original (#5)
Día 3: 1er reminder automático
Día 6: 2do reminder automático
Día 7: 3er y último reminder
Día 8+: Expiración automática (sin email)
12
Follow-up de completitud de startup (cron)
Asunto: (mismo que Email #4 — cron automático)
Cron automático Post-registro

¿Cuándo se envía? Cron automático que detecta startups registradas hace X días con score bajo y envía motivación para completar perfil.

Contenido: Idéntico al Email #4 (score + botón "Aumentar mi score").

📬 Destinatario: CEO/usuario que registró la startup
Archivos involucrados
api/cron/startup-followup/+server.ts → sendStartupFollowupEmail()