Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Edfermachado/proyectoSistemas/llms.txt

Use this file to discover all available pages before exploring further.

Attending a UniEvents event requires completing a registration form at /events/[slug]/register. Free events issue a confirmed ticket immediately; paid events enter a payment-pending state until a faculty administrator verifies your transfer. This guide walks through the full flow from browsing to receiving your ticket.
Only accounts with role = 'user' can register for events. If you are logged in as a faculty administrator (tenant_admin, event_manager, or access_control), the registerForEvent action will return an error: “Solo los asistentes regulares pueden registrarse en los eventos. Tu cuenta tiene rol administrativo.” Administrative accounts must use a separate regular attendee account to register.

Registration Flow

1

Open the event detail page

Navigate to /events/[slug] for the event you want to attend. Review the date, time, venue, and price shown in the ticket card on the right. You must be logged in as a role = 'user' account — unauthenticated visitors see a Inicia Sesión para Registrarte button instead.
2

Click the register button

Click Inscribirse Ahora (free events) or Comprar Entrada (paid events). You will be redirected to /events/[slug]/register.
3

Fill in your personal details

Complete the registration form with the following required fields:
FieldDescription
nameYour full name
emailPre-filled from your session and read-only — cannot be changed
phoneYour contact phone number
attendeeTypeSelect Estudiante Universitario or Público Foráneo / General
4

Submit payment details (paid events only)

If the event has a non-zero price, an additional Datos para el Pago Móvil panel appears showing the faculty’s bank account details. Complete the extra fields:
FieldRequiredDescription
paymentReferenceYesThe last 6 digits of your mobile payment transaction reference
screenshotNoAn image file (JPEG, PNG, or WebP) of your payment confirmation screen
5

Submit the form

Click Confirmar Inscripción (free) or Registrar Compra (paid). The form calls the registerForEvent server action. Your email is taken from the authenticated session — not from the form — to prevent spoofing.
6

Receive your ticket

  • Free events: Your registration status is set directly to confirmado. A QR code is displayed immediately on the success screen and is also accessible from your profile.
  • Paid events: Your registration status is set to pago_pendiente. The faculty administrator must verify your payment before your ticket is confirmed. You will be notified in your profile when the status changes.

Attendee Types

When registering, you must select one of two attendee types. This value is stored in the attendee_type column and used in faculty attendance reporting:

estudiante

A student enrolled at the hosting university. Select this option if you belong to the academic community of the faculty organizing the event.

foraneo

An external or visiting attendee from outside the university (general public, guests from other institutions, etc.).

Payment Information

For paid events, the event registration page displays the faculty’s mobile payment (Pago Móvil) details so you can complete the transfer before or during registration:
Banco:        {event.paymentBank}
Teléfono:     {event.paymentPhone}
Cédula/RIF:   {event.paymentId}
After making the transfer, enter the last 6 digits of the transaction reference in the paymentReference field and optionally upload a screenshot as proof. Your registration will show as pago_pendiente until a faculty admin confirms it.

Screenshot / Image Upload

Payment screenshots are processed server-side by the registerForEvent action using a two-step upload strategy:
// src/app/actions/attendees.actions.ts

// 1. Try Supabase Storage first
screenshotUrl = await uploadPaymentScreenshot(screenshot, "reg-" + Date.now());

// 2. If Supabase is unavailable, save locally as WebP
if (!screenshotUrl) {
  const fileName = `payment_reg_${Date.now()}.webp`;
  const uploadDir = join(process.cwd(), "public", "uploads", "payments");
  // Resizes to max 800px wide and converts to WebP at 80% quality via sharp
  screenshotUrl = `/uploads/payments/${fileName}`;
}
PriorityStorage BackendResulting URL
1 (preferred)Supabase StorageRemote CDN URL
2 (fallback)Local filesystem/uploads/payments/{filename}.webp
Accepted file types: image/jpeg, image/png, image/webp.

After Registration

Once your form is submitted successfully:
  • You are redirected to /events/[slug]/register?success=true&ticket={ticketToken} (for free events, the token is shown immediately).
  • For free events, the TicketQR component renders your QR code on the success screen. This QR encodes your ticketToken UUID.
  • Your registration is always accessible from your profile at /profile, regardless of payment status.
Duplicate registrations for the same event are prevented at the service layer by AttendeesService.registerAttendee. If you attempt to register for an event with a user account (userId) that already has a registration record for that event, the action returns the error: “Ya estás registrado en este evento.”

Build docs developers (and LLMs) love