Skip to main content

Overview

The terminal component is a core feature of the portfolio. It allows visitors to navigate your content using Unix-like commands. All terminal data is defined in app/textos.ts under the terminal key.
The terminal uses slug-based navigation. Each project, job, and degree must have a unique slug for the show command to work.

Terminal Structure

The terminal object contains:
app/textos.ts
terminal: {
  prompt: "[email protected]",
  about: [...],           // About section (array of strings)
  proyectos: [...],       // Projects array
  trabajos: [...],        // Work experience array
  estudios: [...],        // Education array
}

Terminal Commands

Visitors can use these commands in the terminal:
CommandDescriptionExample
helpShow available commandshelp
aboutDisplay about informationabout
clearClear the terminalclear
show proyectosList all projectsshow proyectos
show proyectos/{slug}Show specific projectshow proyectos/Arcadiax
show trabajosList all work experienceshow trabajos
show trabajos/{slug}Show specific jobshow trabajos/NFQ
show estudiosList all educationshow estudios
show estudios/{slug}Show specific degreeshow estudios/grado-informatica

Slug-Based Navigation

What is a Slug?

A slug is a unique, URL-friendly identifier for each content item:
  • Used in terminal commands: show proyectos/my-project-slug
  • Must be unique within each category (proyectos, trabajos, estudios)
  • Should be lowercase and use hyphens instead of spaces

Slug Naming Guidelines

✅ Good Slugs

  • arcadiax
  • grado-informatica
  • pipeline-positionholdings
  • automatizacion-francia

❌ Bad Slugs

  • Arcadia X (spaces)
  • Grado en Ingeniería (spaces, accents)
  • Pipeline_PositionHoldings (mixed case)
  • proyecto 1 (space + number)

Projects Data Structure

Interface

interface Proyecto {
  slug: string;        // Unique identifier
  name: string;        // Display name
  description: string; // Detailed description
  tech: string[];      // Array of technologies
  url: string;         // Project URL (can be empty)
}

Real Example

app/textos.ts
proyectos: [
  {
    slug: "Arcadiax",
    name: "Arcadiax",
    description: "ArcadiaX es un ecosistema tecnológico personal que integra sistemas distribuidos, inteligencia artificial y hardware conectado para crear una infraestructura doméstica unificada orientada al control, la automatización y la experiencia multimedia",
    tech: ["React", "TypeScript", "Node.js"],
    url: "https://proyecto1.com",
  },
  {
    slug: "Automatizacion_Francia",
    name: "Automatizacion Fichero Francia para NFQ",
    description: "Desarrollo de un sistema para automatizar cálculos de NAV, control de FX y validaciones financieras mediante Excel + scripts de validación.",
    tech: ["Python", "PostgreSQL", "Excel"],
    url: "",
  },
]

Adding a New Project

1

Choose a unique slug

Decide on a slug that isn’t used by other projects:
slug: "my-new-project"
2

Add all required fields

{
  slug: "my-new-project",
  name: "My New Project",
  description: "A comprehensive description of what this project does and its impact.",
  tech: ["Next.js", "Tailwind CSS", "Prisma"],
  url: "https://github.com/username/my-new-project",
}
3

Test the terminal command

After saving, test in the terminal:
show proyectos/my-new-project

Work Experience Data Structure

Interface

interface Trabajo {
  slug: string;         // Unique identifier
  empresa: string;      // Company name
  rol: string;          // Your role
  periodo: string;      // Time period
  descripcion: string;  // Job description
  proyectos?: string;   // Optional: related projects
}

Real Example

app/textos.ts
trabajos: [
  {
    slug: "Everis",
    empresa: "Everis",
    rol: "En practicas",
    periodo: "Marzo 2018 - Junio 2018",
    descripcion: "Mi responsabilidad consistía en desarrollar un proceso automatizado para gestionar la baja de las líneas móviles de Orange.",
  },
  {
    slug: "NFQ",
    empresa: "NFQ",
    rol: "Consultor en banca",
    periodo: "Octubre 2025 - Actual",
    descripcion: "En NFQ Advisory Solutions trabajo en ingeniería de datos financiera, desarrollando y optimizando pipelines entre AWS y BigQuery. Automatizo procesos críticos, validaciones y migraciones de datos en entornos cloud.",
    proyectos: "Proyectos: {Automatización Francia, Pipeline PositionHoldings}"
  },
]

Adding a New Job

trabajos: [
  {
    slug: "NFQ",
    empresa: "NFQ",
    rol: "Consultor en banca",
    periodo: "Octubre 2025 - Actual",
    descripcion: "En NFQ Advisory Solutions trabajo en ingeniería de datos financiera...",
    proyectos: "Proyectos: {Automatización Francia, Pipeline PositionHoldings}"
  },
]

Education Data Structure

Interface

interface Estudio {
  slug: string;      // Unique identifier
  titulo: string;    // Degree title
  centro: string;    // Institution and description
  periodo: string;   // Time period
}

Real Example

app/textos.ts
estudios: [
  {
    slug: "grado-informatica",
    titulo: "Grado en Ingeniería Informática",
    centro: "En la universidad he adquirido una base sólida en arquitectura de computadores, sistemas operativos, redes y estructuras de datos, comprendiendo cómo funcionan los sistemas desde el hardware hasta el software. Además, he desarrollado capacidad para diseñar, implementar y analizar sistemas fiables y eficientes, aplicando principios de ingeniería en proyectos reales.",
    periodo: "2018 – 2026",
  },
  {
    slug: "DAM",
    titulo: "Desarrollo de aplicaciones multiplataforma",
    centro: "En el ciclo de Desarrollo de Aplicaciones Multiplataforma (DAM) adquirí experiencia en programación orientada a objetos, desarrollo de aplicaciones móviles y de escritorio, y diseño de bases de datos relacionales. Además, aprendí a estructurar proyectos completos siguiendo buenas prácticas, trabajando con APIs, entornos cliente-servidor y despliegues básicos en entornos reales.",
    periodo: "2016 – 2018",
  },
]

Adding a New Degree

1

Choose a slug

Use a descriptive slug:
slug: "master-ai"
2

Add all fields

{
  slug: "master-ai",
  titulo: "Master in Artificial Intelligence",
  centro: "Advanced studies in machine learning, deep learning, and neural networks. Completed thesis on natural language processing applications.",
  periodo: "2023 – 2025",
}
3

Verify navigation

Test the command:
show estudios/master-ai

Data Validation Tips

Each slug must be unique within its category. Duplicate slugs will cause navigation issues.
// ❌ BAD: Duplicate slugs
proyectos: [
  { slug: "project", name: "Project 1", ... },
  { slug: "project", name: "Project 2", ... }, // Duplicate!
]

// ✅ GOOD: Unique slugs
proyectos: [
  { slug: "project-1", name: "Project 1", ... },
  { slug: "project-2", name: "Project 2", ... },
]
If using TypeScript, ensure all required fields are present. Missing fields will cause compilation errors.
// ❌ BAD: Missing required fields
{ slug: "project", name: "Project" } // Missing description, tech, url

// ✅ GOOD: All fields present
{
  slug: "project",
  name: "Project",
  description: "Description here",
  tech: ["React"],
  url: "",
}
Use consistent date formatting across all entries:
// Consistent format
periodo: "Marzo 2018 - Junio 2018"   // For completed periods
periodo: "Octubre 2025 - Actual"     // For current positions
periodo: "2016 – 2018"               // For education (using en-dash)
After adding or modifying entries:
  1. Save the file
  2. Refresh your development server
  3. Open the terminal
  4. Test each new slug:
    show proyectos/new-project-slug
    show trabajos/new-job-slug
    show estudios/new-degree-slug
    

Terminal Prompt Customization

The terminal prompt appears before each command:
app/textos.ts
terminal: {
  prompt: "[email protected]",
  // ...
}
Customize it to match your domain or style:

Common Issues

Slug not found in terminal: Ensure the slug exactly matches (case-sensitive) and is defined in the correct array.
Terminal command not working: Check for typos in slugs and ensure there are no special characters or spaces.
Missing content: Verify all required fields are present for each entry. Optional fields like proyectos in trabajos can be omitted.

Portfolio Content

Learn about all content sections in textos.ts

Calendar Events

Add calendar events linked to your work history

Build docs developers (and LLMs) love