Plataforma web profesional para gestión de invitaciones y RSVPs, diseñada con Next.js 14, TypeScript, y Neon PostgreSQL con Drizzle ORM. Incluye panel de administración completo, sistema de emails automáticos, y soporte multi-evento.
- Diseño impactante mobile-first con animaciones Framer Motion
- Soporte multi-evento - Cada evento tiene su URL única (
/mi-evento) - Temas personalizables - Colores, imágenes de fondo, información
- OG Images dinámicas para compartir en redes sociales
- Dashboard completo con estadísticas en tiempo real
- Gestión de RSVPs - Ver, editar, filtrar, buscar
- Configuración de eventos - Todo editable desde el panel
- Gestión de usuarios - Roles y permisos por evento
- Envío de emails - Individual o masivo
- Exportación a PDF - Lista de invitados
- Confirmación automática al hacer RSVP (configurable por evento)
- Recordatorios programados - Fecha/hora configurable
- Re-invitaciones a quienes cancelaron
- Templates HTML elegantes con info del evento
- Super Admin - Acceso total a todos los eventos
- Manager - Gestiona eventos asignados
- Viewer - Solo lectura de eventos asignados
- Cada evento tiene su propio slug URL
- RSVPs, configuración y emails aislados por evento
- Evento de inicio configurable
npm installCrea .env.local:
# Base de datos Neon PostgreSQL (REQUERIDO)
DATABASE_URL=postgresql://user:password@ep-xxx.neon.tech/dbname?sslmode=require
# Emails con Resend (REQUERIDO para emails)
RESEND_API_KEY=re_xxx
FROM_EMAIL=invitaciones@tudominio.com
# URL de la aplicación
NEXT_PUBLIC_APP_URL=https://tudominio.com
# Secret para tokens de cancelación
CANCEL_TOKEN_SECRET=tu-secret-aleatorio
# Secret para cron jobs (recordatorios automáticos)
CRON_SECRET=tu-cron-secretnpx drizzle-kit pushnpx ts-node scripts/create-super-admin.tsnpm run dev- Crea cuenta en Vercel
- Importa tu repositorio de GitHub
- Configura las variables de entorno
DATABASE_URL
RESEND_API_KEY
FROM_EMAIL
NEXT_PUBLIC_APP_URL
CANCEL_TOKEN_SECRET
CRON_SECRET
El archivo vercel.json ya está configurado para ejecutar el cron cada 12 horas:
{
"crons": [
{
"path": "/api/cron/send-reminders",
"schedule": "0 */12 * * *"
}
]
}| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/rsvp |
Crear nuevo RSVP |
| GET | /api/events/[slug] |
Info de evento público |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/rsvp?eventId=X |
Listar RSVPs de evento |
| GET | /api/event-settings?eventId=X |
Configuración de evento |
| POST | /api/admin/event-settings/update |
Actualizar configuración |
| POST | /api/admin/send-email |
Enviar email individual |
| POST | /api/admin/send-bulk-email |
Enviar emails masivos |
| GET | /api/admin/users |
Listar usuarios |
| POST | /api/events |
Crear nuevo evento |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/cron/send-reminders |
Enviar recordatorios programados |
rooftop-party/
├── app/
│ ├── [slug]/ # Página dinámica de evento
│ ├── admin/ # Panel de administración
│ │ ├── page.tsx
│ │ └── components/
│ ├── api/
│ │ ├── rsvp/ # CRUD de RSVPs
│ │ ├── events/ # Gestión de eventos
│ │ ├── admin/ # Endpoints admin
│ │ ├── auth/ # Autenticación
│ │ └── cron/ # Jobs programados
│ ├── cancel/[rsvpId]/ # Página de cancelación
│ ├── login/ # Login admin
│ └── components/
├── lib/
│ ├── schema.ts # Schema de base de datos
│ ├── queries.ts # Queries de DB
│ ├── db.ts # Conexión a Neon
│ ├── auth.ts # Utilidades de auth
│ ├── email-template.ts # Template de emails
│ └── resend.ts # Cliente de Resend
├── types/
│ └── event.ts # Tipos TypeScript
├── scripts/
│ └── create-super-admin.ts
├── event-config.json # Configuración por defecto
├── vercel.json # Configuración de cron
└── drizzle.config.ts
Cada evento puede configurar independientemente:
- Toggle: Activar/desactivar
- Comportamiento: Se envía automáticamente cuando alguien hace RSVP
- Configurable desde: Panel Admin → Config → Configuración de Emails
- Toggle: Activar/desactivar
- Fecha/Hora: Configurable con date picker
- Comportamiento: Cron job verifica cada 12 horas y envía si es momento
- Destinatarios: Solo RSVPs confirmados del evento específico
- Anti-duplicado: Campo
reminderSentAtevita reenvíos
- Autenticación por sesión con cookies HTTP-only
- Permisos por evento para usuarios no super_admin
- Tokens de cancelación firmados con secret
- Validación de cron con
CRON_SECRET - Rate limiting recomendado para producción
| Servicio | Plan | Costo |
|---|---|---|
| Vercel | Hobby | Gratis |
| Neon PostgreSQL | Free tier | Gratis (hasta 3GB) |
| Resend | Free tier | Gratis (3000 emails/mes) |
Total: $0 USD para eventos pequeños/medianos
- ✅ Configuración de emails por evento
- ✅ Confirmación automática de RSVP (toggle)
- ✅ Recordatorios programados con fecha/hora
- ✅ Cron job para envío automático
- ✅ UI mejorada en panel de configuración
- Panel de administración completo
- Sistema multi-evento
- Gestión de usuarios y roles
- Emails con Resend
- Deploy en Vercel
Para problemas o preguntas:
- Revisa los logs en Vercel
- Verifica las variables de entorno
- Consulta
ADMIN_GUIDE.mdpara el panel de admin
¡Disfruta creando eventos increíbles! 🎉🎊✨