Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/nicolasgrajaleshoyos/portafolio/llms.txt

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

All projects displayed on the site are defined in a hardcoded projects: Project[] array at the top of src/components/Projects.tsx. There is no database or CMS — adding a project means adding a new object directly to this array, and removing one means deleting its entry. The array drives both the data and render order of the card grid.

The Project Type

Each entry in the projects array must conform to the Project interface defined in src/types.ts.
id
number
required
A unique numeric identifier for the project. It is used exclusively as the React key prop when rendering the card list and does not appear in the UI.
title
string
required
The project title displayed as a bold heading overlaid on the card image.
description
string
required
A brief description of the project shown in the white/dark panel below the card image.
imageUrl
string
required
Path to the card image, relative to the public/ directory root. For example, an image at public/icons/my-project.webp should be referenced as '/icons/my-project.webp'.
tags
string[]
required
An array of technology or category labels. Each tag is rendered as a small cyan badge overlaid on the bottom of the card image.
liveUrl
string
The URL of the live demo or deployed site. When provided, an external-link icon button appears on the card on hover. When omitted, the button is hidden entirely.
codeUrl
string
The URL of the source code repository (e.g., a GitHub link). When provided, a GitHub icon button appears on the card on hover. When omitted, the button is hidden entirely.

Existing Projects

The portfolio currently ships with four projects defined in src/components/Projects.tsx. Their images are stored in public/icons/:
IDTitleImage file
1DSS Comparador de Países Backendbackend.webp
2DSS Comparador de Países Frontendfrontend.webp
3Sitio Web de Portafolioportafolio.png
4Sistema para Empresa de Arepasarepas.png
When you add a fifth project, use id: 5 as the next available integer.

Adding a Project

1

Add the image to the public directory

Place your project image inside public/icons/ (or any subfolder under public/). Supported formats are .webp, .png, and .jpg. Using .webp is recommended for smaller file sizes and faster load times.
public/
└── icons/
    └── my-project.webp place your image here
2

Open the projects array

Open src/components/Projects.tsx and locate the projects constant near the top of the file, just below the imports.
const projects: Project[] = [
  // existing projects...
];
3

Append a new project object

Add a new object at the end of the array, filling in all required fields. Use the next available integer for id. Omit liveUrl or codeUrl if they are not applicable — their corresponding icon buttons will be automatically hidden.
{
  id: 5,
  title: 'My New Project',
  description: 'A short description of what this project does.',
  imageUrl: '/icons/my-project.webp',
  tags: ['React', 'TypeScript', 'Node.js'],
  liveUrl: 'https://my-project.com',
  codeUrl: 'https://github.com/myusername/my-project',
},
4

Save and verify

Save Projects.tsx. Vite’s Hot Module Replacement (HMR) reloads the page instantly — your new card should appear in the grid without a full browser refresh.

Removing a Project

To remove a project, delete its entire object from the projects array in src/components/Projects.tsx. No other files need to be changed. Reassigning id values after deletion is optional — they are only used as React key props and do not affect the UI or routing.

Reordering Projects

The grid renders cards in the exact order they appear in the projects array, using a two-column CSS grid (md:grid-cols-2). To change the display order, move the objects within the array. For example, to promote a project to the first position, cut its object from its current location and paste it as the first element of the array.
Images must be placed inside the public/ directory to be served correctly at the root URL path at runtime. Do not import them as ES module imports (e.g., import img from './my-project.webp'). Instead, always reference them with an absolute public path such as /icons/filename.webp. Vite copies everything in public/ verbatim to the build output, making these paths valid both in development and production.

Build docs developers (and LLMs) love