Sistema completo de generación y verificación de boletos para eventos, construido con Next.js 15 y Supabase.
git clone <tu-repo>
cd website
npm install
-- Copiar y ejecutar el contenido de supabase-schema.sql
-- en el Query Editor de Supabase
Crear bucket para comprobantes:
comprobantes
Configurar políticas de Storage:
-- Política para permitir insertar comprobantes
CREATE POLICY "Allow receipt uploads" ON storage.objects
FOR INSERT WITH CHECK (bucket_id = 'comprobantes');
-- Política para permitir lectura de comprobantes
CREATE POLICY "Allow receipt downloads" ON storage.objects
FOR SELECT USING (bucket_id = 'comprobantes');
Crear archivo .env.local
:
NEXT_PUBLIC_SUPABASE_URL=tu_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=tu_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=tu_service_role_key
Editar src/lib/party-config.ts
:
export const partyConfig: PartyConfig = {
name: "Tu Evento 2025",
date: "DD de MM, YYYY",
time: "HH:MM hrs",
location: "Tu Ubicación",
price: 150,
currency: "MXN",
logo: "/logo.webp",
};
export const bankInfo = {
bank: "Tu Banco",
account: "1234567890",
clabe: "012345678901234567",
holder: "Tu Nombre",
concept: "Concepto de Pago",
};
npm run dev
Realizar transferencia bancaria
Generar boleto
/tickets
Compartir boleto
Verificar en el evento
/verify
Administrar boletos
/admin
src/
├── app/
│ ├── (site)/
│ │ ├── tickets/page.tsx # Página de generación
│ │ ├── verify/page.tsx # Página de verificación
│ │ └── admin/page.tsx # Panel de administración
│ └── api/
│ └── tickets/ # API endpoints
├── components/
│ ├── tickets/
│ │ ├── TicketForm.tsx # Formulario de boletos
│ │ ├── TicketVerification.tsx # Verificación
│ │ └── TicketAdmin.tsx # Panel admin
│ └── ui/ # Componentes UI
├── lib/
│ ├── supabase.ts # Configuración Supabase
│ ├── ticket-service.ts # Servicios de boletos
│ ├── ticket-generator.ts # Generador de imágenes
│ └── party-config.ts # Configuración del evento
└── types/
└── tickets.ts # Tipos TypeScript
tickets
CREATE TABLE tickets (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
code VARCHAR(10) UNIQUE NOT NULL,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
quantity INTEGER NOT NULL DEFAULT 1,
status VARCHAR(50) DEFAULT 'pending',
receipt_url TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
pending
: Boleto creado, pago pendientepaid
: Pago confirmado, boleto válidoused
: Boleto utilizado en el eventocancelled
: Boleto canceladoEditar src/lib/ticket-generator.ts
:
// Cambiar colores
const gradient = ctx.createLinearGradient(0, 0, 0, canvas.height);
gradient.addColorStop(0, "#tu-color-1");
gradient.addColorStop(1, "#tu-color-2");
// Cambiar fuentes
ctx.font = "bold 36px Arial";
// Agregar logo
const logo = new Image();
logo.src = "/tu-logo.png";
ctx.drawImage(logo, x, y, width, height);
El sistema usa Tailwind CSS. Personalizar en:
src/components/tickets/TicketForm.tsx
src/components/tickets/TicketVerification.tsx
src/components/tickets/TicketAdmin.tsx
-- Habilitar RLS
ALTER TABLE tickets ENABLE ROW LEVEL SECURITY;
-- Permitir lectura pública
CREATE POLICY "Public read access" ON tickets
FOR SELECT USING (true);
-- Permitir inserción pública
CREATE POLICY "Public insert access" ON tickets
FOR INSERT WITH CHECK (true);
-- Permitir actualización pública
CREATE POLICY "Public update access" ON tickets
FOR UPDATE USING (true);
# Instalar Vercel CLI
npm i -g vercel
# Desplegar
vercel
# Configurar variables de entorno en Vercel Dashboard
El panel de administración incluye:
qrcode
esté instaladagit checkout -b feature/nueva-funcionalidad
)git commit -am 'Agregar nueva funcionalidad'
)git push origin feature/nueva-funcionalidad
)Este proyecto está bajo la Licencia MIT. Ver LICENSE
para más detalles.
Desarrollado por DgoTecHub Community para la gestión de eventos tecnológicos.
¿Necesitas ayuda? Crea un issue en el repositorio o contacta al equipo de desarrollo.