Skip to content

Luisfben/luisfben.github.io

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Professional Portfolio - Luis Fernando Benavides Rengifo

Modern and professional web portfolio built with React + Vite, designed to reflect contemporary technical authority and senior software development experience.

πŸš€ Features

  • ✨ Modern Design 2024-2025: Glassmorphism, dark/light mode, micro-interactions
  • 🌐 Multilingual (i18n): Full support for Spanish and English
  • 🎨 Theme System: Real-time switchable dark/light mode
  • πŸ“± Responsive Design: Optimized for all devices
  • ⚑ Performance: Optimized build with Vite
  • 🎯 SEO Friendly: Meta tags and semantic structure
  • β™Ώ Accessibility: ARIA labels and keyboard navigation

πŸ› οΈ Technologies Used

Technology Version Purpose
React 18.2.0 UI Framework
Vite 5.0.8 Build tool and dev server
CSS Modules - Locally scoped styles
Context API - Global state (theme/language)

πŸ“ Project Structure

/
β”œβ”€β”€ public/
β”‚   β”œβ”€β”€ assets/              # Images, icons
β”‚   └── favicon.svg          # Site favicon
β”‚
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ common/          # Reusable components
β”‚   β”‚   β”‚   β”œβ”€β”€ Button.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Card.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ SectionTitle.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ ThemeToggle.jsx
β”‚   β”‚   β”‚   └── LanguageToggle.jsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ layout/          # Layout components
β”‚   β”‚   β”‚   β”œβ”€β”€ Header.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Footer.jsx
β”‚   β”‚   β”‚   └── Layout.jsx
β”‚   β”‚   β”‚
β”‚   β”‚   └── sections/        # Page sections
β”‚   β”‚       β”œβ”€β”€ Hero.jsx
β”‚   β”‚       β”œβ”€β”€ About.jsx
β”‚   β”‚       β”œβ”€β”€ TechStack.jsx
β”‚   β”‚       β”œβ”€β”€ Services.jsx
β”‚   β”‚       β”œβ”€β”€ Portfolio.jsx
β”‚   β”‚       └── Contact.jsx
β”‚   β”‚
β”‚   β”œβ”€β”€ contexts/
β”‚   β”‚   β”œβ”€β”€ ThemeContext.jsx      # Dark/light theme management
β”‚   β”‚   └── LanguageContext.jsx   # ES/EN language management
β”‚   β”‚
β”‚   β”œβ”€β”€ locales/
β”‚   β”‚   β”œβ”€β”€ es.json          # Spanish translations
β”‚   β”‚   └── en.json          # English translations
β”‚   β”‚
β”‚   β”œβ”€β”€ styles/
β”‚   β”‚   β”œβ”€β”€ variables.css    # CSS variables (colors, typography)
β”‚   β”‚   └── global.css       # Global styles and reset
β”‚   β”‚
β”‚   β”œβ”€β”€ hooks/
β”‚   β”‚   └── useIntersectionObserver.js  # Animation hook
β”‚   β”‚
β”‚   β”œβ”€β”€ App.jsx              # Main component
β”‚   └── main.jsx             # Entry point
β”‚
β”œβ”€β”€ index.html
β”œβ”€β”€ package.json
β”œβ”€β”€ vite.config.js
└── README.md

Architecture Advantages

  • Separation of concerns: UI, logic, data, and styles clearly separated
  • Scalability: Easy to add new sections or components
  • Maintainability: Centralized localization, modular components
  • Reusability: Common components shared throughout the app

πŸš€ Installation and Setup

Prerequisites

  • Node.js 16+
  • npm or yarn

Installation

# Clone the repository
git clone https://github.com/luisfben/luisfben.github.io.git
cd luisfben.github.io

# Install dependencies
npm install

Development

# Start development server
npm run dev

# The application will be available at http://localhost:5173

Production Build

# Generate optimized build
npm run build

# Preview the build
npm run preview

🌐 Internationalization System (i18n)

How It Works

The i18n system uses React Context API + JSON files to handle translations:

  1. Translation files: src/locales/es.json and src/locales/en.json
  2. Context Provider: LanguageContext dynamically loads translations
  3. Custom hook: useLanguage() provides t() function for translating

Add/Modify Translations

Edit the JSON files in src/locales/:

// src/locales/es.json
{
  "nav": {
    "about": "Sobre mΓ­",
    "services": "Servicios"
  },
  "hero": {
    "title": "Arquitecto de Software"
  }
}

Use Translations in Components

import { useLanguage } from '../../contexts/LanguageContext';

const MyComponent = () => {
  const { t } = useLanguage();
  
  return <h1>{t('hero.title')}</h1>;
};

Add a New Language

  1. Create file src/locales/[code].json (e.g., fr.json)
  2. Copy structure from es.json and translate
  3. Add option in LanguageToggle.jsx:
<button onClick={() => setLanguage('fr')}>FR</button>

🎨 Theme System (Dark/Light Mode)

CSS Variables

Themes are defined in src/styles/variables.css:

:root[data-theme="dark"] {
  --bg: #0b0f1a;
  --text: #e7eaf4;
  --primary: #0ea5e9;
}

:root[data-theme="light"] {
  --bg: #f7f8fb;
  --text: #0b1220;
  --primary: #0ea5e9;
}

Change Theme

The theme is managed with ThemeContext:

import { useTheme } from '../../contexts/ThemeContext';

const MyComponent = () => {
  const { theme, toggleTheme } = useTheme();
  
  return <button onClick={toggleTheme}>Toggle Theme</button>;
};

πŸ“ Modify Content

Portfolio Projects

Edit the translations in src/locales/es.json and en.json:

{
  "portfolio": {
    "projects": {
      "myProject": {
        "title": "My Project",
        "description": "Project description",
        "role": "My role",
        "impact": "Impact achieved"
      }
    }
  }
}

Then add the project in Portfolio.jsx:

const projects = [
  {
    key: 'myProject',
    tech: ['React', 'Node.js'],
    gradient: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
  }
];

Services

Similar to portfolio, edit the translations and update Services.jsx.

Testimonials

Testimonials are completely defined in the translation files:

{
  "testimonials": {
    "items": [
      {
        "name": "Client",
        "role": "Position",
        "company": "Company",
        "text": "Testimonial...",
        "rating": 5
      }
    ]
  }
}

🎨 Style Customization

Colors

Modify the variables in src/styles/variables.css:

:root {
  --primary: #0ea5e9;      /* Primary color */
  --primary-2: #22d3ee;    /* Secondary primary color */
  --accent: #a78bfa;       /* Accent color */
}

Typography

Fonts are loaded from Google Fonts in index.html. To change:

  1. Update the link in index.html
  2. Modify the variables in variables.css:
:root {
  --font-primary: 'YourFont', sans-serif;
  --font-mono: 'YourMonoFont', monospace;
}

Spacing and Sizes

Spacing system based on 8px:

:root {
  --space-1: 0.5rem;   /* 8px */
  --space-2: 1rem;     /* 16px */
  --space-4: 2rem;     /* 32px */
  /* ... */
}

πŸš€ Deployment

GitHub Pages

# Build
npm run build

# Deploy (configure GitHub Pages to serve from /dist)

Vercel

# Connect repository on vercel.com
# Automatic deploy on every push

Netlify

# Connect repository on netlify.com
# Build command: npm run build
# Publish directory: dist

πŸ—οΈ Architecture Decisions

Why React + Vite?

  • React: Mature ecosystem, reusable components, large community
  • Vite: Ultra-fast build, instant HMR, minimal configuration

Why CSS Modules?

  • Automatic scoping (no name conflicts)
  • No runtime required (vs styled-components)
  • Easy maintenance and debugging
  • Optimal performance

Why Context API instead of Redux?

  • Sufficient for simple state (theme/language)
  • No external dependencies
  • Less boilerplate
  • Native to React

Why not localStorage?

  • Development environment restriction
  • In-memory state is sufficient for this application
  • Easy to migrate to localStorage in the future if needed

πŸ“‹ Important Considerations

Performance

  • Optimized images with loading="lazy"
  • CSS Modules for automatic code splitting
  • Vite automatically optimizes the bundle

SEO

  • Meta tags in index.html
  • Semantic HTML5 structure
  • Descriptive texts in Spanish and English

Accessibility

  • ARIA labels on interactive buttons
  • Functional keyboard navigation
  • WCAG AA color contrast

Browser Support

  • Modern browsers (last 2 versions)
  • Chrome, Firefox, Safari, Edge
  • Responsive: mobile, tablet, desktop

🀝 Contributing

This is a personal project, but suggestions are welcome:

  1. Fork the project
  2. Create a branch (git checkout -b feature/improvement)
  3. Commit changes (git commit -m 'Add improvement')
  4. Push to the branch (git push origin feature/improvement)
  5. Open a Pull Request

πŸ“„ License

Β© 2025 Luis Fernando Benavides Rengifo. All rights reserved.

πŸ“§ Contact


Made with β™₯ by Luis Fernando Benavides Rengifo

About

Proyecto final de marca personal. ->

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 61.5%
  • CSS 37.5%
  • HTML 1.0%