UniEvents is built around a two-level multi-tenant hierarchy. At the top sits a University — the institutional anchor that groups together a set of faculties or organizations. Below it are Tenants, each representing an individual faculty, club, or department. Every tenant owns its own users, physical spaces, and events, yet is always traceable back to its parent university. This separation lets a single UniEvents deployment serve an entire institution while keeping each faculty’s data cleanly isolated.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.
Universities
A university is the top-level public entity in the system. It acts as the discovery layer: visitors can browse/universities/[slug] to explore all the faculties and events that belong to it.
| Field | Type | Notes |
|---|---|---|
id | uuid | Primary key, auto-generated |
name | varchar(255) | Unique display name |
slug | varchar(300) | URL-safe identifier, unique |
description | text | Optional public description |
logoUrl | varchar(500) | Link to the institution’s logo |
createdAt | timestamp | Auto-set on creation |
Tenants (Faculties)
A tenant maps to a single faculty, club, or organizational unit within a university. Each tenant belongs to exactly one university and one category (e.g., Engineering, Sports, Cultural). Tenant-scoped data — users, spaces, and events — is always filtered bytenantId, making the boundary of each faculty’s data explicit at the database layer.
| Field | Type | Notes |
|---|---|---|
id | uuid | Primary key, auto-generated |
name | varchar(255) | Unique display name |
slug | varchar(300) | URL-safe identifier, unique |
description | text | Optional public description |
universityId | uuid | FK → universities.id |
categoryId | uuid | FK → categories.id |
createdAt | timestamp | Auto-set on creation |
Categories
Categories classify tenants so that events can be browsed by faculty type. Asuperadmin manages categories globally from the /admin portal.
| Field | Type | Notes |
|---|---|---|
id | uuid | Primary key, auto-generated |
name | varchar(255) | Unique category name (e.g., “Engineering”) |
slug | varchar(300) | URL-safe identifier, unique |
icon | varchar(100) | Material Symbols icon name |
createdAt | timestamp | Auto-set on creation |
Slug-Based Routing
Both universities and tenants expose human-readable URL slugs that are auto-generated from theirname field at creation time (and regenerated on rename). The slug is guaranteed to be unique within its table.
University pages
Public university landing pages are served at
/universities/[slug], listing all tenants and featured events for that institution.Faculty event filtering
Event listings can be scoped to a specific faculty by passing its
slug as a query filter, so students can browse only their faculty’s upcoming events.Slugs are generated by a shared
generateUniqueSlug helper that appends a numeric suffix when a collision is detected, guaranteeing uniqueness even for faculties with identical names across different universities.Data Hierarchy at a Glance
The full ownership chain flows like this:| Level | Table | Key relationship |
|---|---|---|
| Institution | universities | Root entity |
| Faculty/Club | tenants | universityId → universities.id |
| Venue | spaces | tenantId → tenants.id |
| Event | events | tenantId → tenants.id, spaceId → spaces.id |
| Staff/Student | users | tenantId → tenants.id (null for superadmin) |
| Registration | attendees | eventId → events.id, userId → users.id |