Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/giangartun/Tis-GOAT-Frontend/llms.txt

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

Beyond user management, the GOAT Portfolio admin panel provides dedicated tools for managing the platform’s reference data and public-facing content. The Technologies, Grades, Announcements, and Backup tabs give admins full control over the vocabulary and configuration that all users depend on when building their portfolios.

Technology catalog

Technologies are the tags users attach to their portfolio projects to describe the tools, languages, and frameworks involved. The admin panel provides full CRUD management of the platform-wide technology catalog. List all technologies:
GET /api/admin/tecnologias
Response:
{
  "total": 42,
  "tecnologias": [
    {
      "id_tecnologia": "01ABC...",
      "nombre": "React",
      "categoria": "Frontend"
    }
  ]
}
Create a technology:
POST /api/admin/tecnologias
Request body:
{
  "nombre": "React",
  "categoria": "Frontend"
}
Update a technology:
PUT /api/admin/tecnologias/:id
Request body (all fields optional):
{
  "nombre": "React 19",
  "categoria": "Frontend"
}
Delete a technology:
DELETE /api/admin/tecnologias/:id
In the admin UI, technologies are displayed in a table with their name and category. Each row has Edit and Delete action buttons. Clicking Edit opens a modal pre-filled with the current values. Clicking Delete opens a confirmation modal before the record is permanently removed. An Add Technology button in the top-right opens a blank creation modal. Both nombre and categoria are required when creating or updating a technology.

Grade catalog

Academic degree grades are used in the education and academic experience sections of user portfolios. The admin panel provides CRUD management for the grades available platform-wide. List all grades:
GET /api/admin/grados
Response:
{
  "total": 8,
  "grados": [
    {
      "id_grado": "01DEF...",
      "nombre_grado": "Licenciatura"
    }
  ]
}
Create a grade:
POST /api/admin/grados
Request body:
{
  "nombre_grado": "Licenciatura"
}
Update a grade:
PUT /api/admin/grados/:id
Request body:
{
  "nombre_grado": "Licenciatura en Ciencias"
}
Delete a grade:
DELETE /api/admin/grados/:id
The grade catalog UI follows the same pattern as the technology catalog — a table with inline Edit and Delete buttons per row, and an Add Grade button to open the creation modal. The nombre_grado field is required.

Announcements

Announcements are public-facing cards displayed on the GOAT Portfolio home page. They are created and managed exclusively through the admin panel, but are visible to all visitors without authentication.
Announcements are publicly visible and do not require authentication to view. The public home page fetches them from an unauthenticated endpoint — no token is needed for read access.
List all announcements (admin):
GET /api/admin/anuncios
Each item in the response has the following shape:
{
  "id_anuncio": "01GHI...",
  "titulo": "Nueva funcionalidad disponible",
  "descripcion": "Ahora puedes personalizar tu plantilla de portafolio.",
  "foto_url": "https://cdn.example.com/anuncios/imagen.jpg",
  "url_redireccion": "https://goat.example.com/blog/nueva-funcionalidad",
  "creado_en": "2024-06-01T08:30:00Z"
}
Create an announcement:
POST /api/admin/anuncios
This endpoint accepts multipart/form-data:
FieldTypeRequiredDescription
titulostringAnnouncement title
descripcionstring✅ (if no image)Body text of the announcement
url_redireccionstringURL the announcement card links to
fotoFileOptional image file (JPG, PNG, or WebP)
Update an announcement:
POST /api/admin/anuncios/:id
Accepts the same multipart/form-data fields as creation. To remove an existing image without replacing it, include the field eliminar_foto=1 in the form data. Delete an announcement:
DELETE /api/admin/anuncios/:id
Public endpoint (no authentication required):
GET /api/anuncios/home
This is the endpoint consumed by the public home page. It returns the same announcement list structure and requires no Authorization header. It is called directly by the getAnunciosPublicos service function in the frontend. In the admin UI, announcements are displayed as a card grid (up to 3 columns on wide screens). Each card shows the image (if present), title, description excerpt, redirect URL, and creation date. The Edit and Delete buttons are located in a footer bar at the bottom of each card.

Data backup

The Backup tab provides tools to export a full snapshot of platform data and to restore the platform from a previously exported file.

Export

Clicking Download Backup triggers a download of the current platform data as a JSON file:
GET /api/admin/backup
The file is automatically named using the current date:
backup_YYYY-MM-DD.json
The download is handled client-side — the API returns a binary blob which the frontend converts into a downloadable file link using window.URL.createObjectURL.

Import / Restore

To restore a backup, click the file drop zone in the Import card and select a .json backup file. A confirmation modal will appear before the operation is committed.
POST /api/admin/backup/importar
This endpoint accepts multipart/form-data with a single field:
FieldTypeDescription
archivoFileThe .json backup file to restore
Response:
{
  "message": "Backup importado correctamente",
  "importado_en": "2024-06-15T14:22:00Z"
}
Importing a backup is a destructive operation. It will overwrite the current platform data with the contents of the backup file. After a successful import, all active sessions — including your own — are invalidated. The admin panel automatically clears localStorage and redirects to the login page approximately two seconds after the import completes. Ensure you are restoring the correct file before confirming.

Build docs developers (and LLMs) love