website

Sistema de Boletos para Fiesta - DgoTecHub

Sistema completo de generación y verificación de boletos para eventos, construido con Next.js 15 y Supabase.

✨ Características

🎫 Generación de Boletos

🔍 Verificación de Boletos

👤 Panel de Administración

🛠️ Tecnologías Utilizadas

📦 Instalación

1. Clonar e instalar dependencias

git clone <tu-repo>
cd website
npm install

2. Configurar Supabase

  1. Crear un nuevo proyecto en Supabase
  2. Ejecutar el esquema de base de datos:
-- Copiar y ejecutar el contenido de supabase-schema.sql
-- en el Query Editor de Supabase
  1. Crear bucket para comprobantes:

    • Ir a Storage → Create bucket
    • Nombre: comprobantes
    • Configurar como público
  2. 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');

3. Variables de entorno

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

4. Configurar evento

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",
};

5. Ejecutar proyecto

npm run dev

🚀 Uso del Sistema

Para Clientes (Comprar Boletos)

  1. Realizar transferencia bancaria

    • Usar los datos bancarios mostrados
    • Incluir el concepto especificado
  2. Generar boleto

    • Ir a /tickets
    • Llenar formulario con datos
    • Subir comprobante de pago
    • Descargar boleto generado
  3. Compartir boleto

    • Usar botón de compartir
    • Guardar imagen del boleto
    • Llevar código QR al evento

Para Organizadores (Verificar Boletos)

  1. Verificar en el evento

    • Ir a /verify
    • Escanear QR o ingresar código
    • Verificar datos del titular
    • Marcar como usado al permitir entrada
  2. Administrar boletos

    • Ir a /admin
    • Ver estadísticas del evento
    • Filtrar boletos por estado
    • Exportar datos para reportes

🔧 Estructura del Proyecto

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

📊 Base de Datos

Tabla 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()
);

Estados de Boleto

🎨 Personalización

Diseño del Boleto

Editar 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);

Estilos CSS

El sistema usa Tailwind CSS. Personalizar en:

🔐 Seguridad

Políticas RLS (Row Level Security)

-- 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);

Validación de Archivos

🚀 Despliegue

Vercel (Recomendado)

# Instalar Vercel CLI
npm i -g vercel

# Desplegar
vercel

# Configurar variables de entorno en Vercel Dashboard

Otras Plataformas

📈 Métricas y Analytics

El panel de administración incluye:

🐛 Solución de Problemas

Error: “Boleto no encontrado”

Error: “Error al subir comprobante”

Error: “No se puede generar QR”

🤝 Contribución

  1. Fork el repositorio
  2. Crear rama para feature (git checkout -b feature/nueva-funcionalidad)
  3. Commit cambios (git commit -am 'Agregar nueva funcionalidad')
  4. Push a la rama (git push origin feature/nueva-funcionalidad)
  5. Crear Pull Request

📄 Licencia

Este proyecto está bajo la Licencia MIT. Ver LICENSE para más detalles.

🎉 Créditos

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.