Skip to content

leandroppf/portfolio-leandroppf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

41 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Leandro Pedroso - Portfolio Website

A modern, responsive personal portfolio website showcasing professional experience, projects, and skills. Built with cutting-edge web technologies and designed with accessibility and performance in mind.

πŸš€ Technologies Used

Frontend Framework

  • Next.js 15.1.6 - React-based full-stack framework with App Router
  • React 19 - Latest version with enhanced features and performance
  • TypeScript 5 - Type-safe JavaScript development

Styling & UI

  • Tailwind CSS 3.4 - Utility-first CSS framework
  • Fira Code Font - Monospaced font with programming ligatures
  • Phosphor Icons - Modern icon library for React
  • Custom CSS Variables - For theme management and dark/light mode support

Developer Experience

Utilities & Libraries

  • clsx - Conditional className utility
  • tailwind-merge - Merge Tailwind CSS classes efficiently

πŸ“ Project Structure

β”œβ”€β”€ public/                  # Static assets
β”‚   β”œβ”€β”€ projects/           # Project images and assets
β”‚   β”œβ”€β”€ brand.svg          # Brand logo
β”‚   └── leandro_pedroso.pdf # Resume/CV
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/               # Next.js App Router directory
β”‚   β”‚   β”œβ”€β”€ components/    # React components
β”‚   β”‚   β”‚   β”œβ”€β”€ Experience.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ ExperienceCard.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Header.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Navigation.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ ProjectCard.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Projects.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Skills.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Spotlight.tsx
β”‚   β”‚   β”‚   └── ...
β”‚   β”‚   β”œβ”€β”€ globals.css    # Global styles and CSS variables
β”‚   β”‚   β”œβ”€β”€ layout.tsx     # Root layout component
β”‚   β”‚   └── page.tsx       # Home page
β”‚   β”œβ”€β”€ data/              # Content data
β”‚   β”‚   β”œβ”€β”€ experience.json # Professional experience data
β”‚   β”‚   └── project.json   # Portfolio projects data
β”‚   β”œβ”€β”€ models/            # TypeScript type definitions
β”‚   β”‚   β”œβ”€β”€ experience.ts  # Experience data types
β”‚   β”‚   └── project.ts     # Project data types
β”‚   └── utils/             # Utility functions
β”‚       └── cn.ts          # className utility function
β”œβ”€β”€ package.json           # Dependencies and scripts
β”œβ”€β”€ tailwind.config.ts     # Tailwind CSS configuration
β”œβ”€β”€ tsconfig.json          # TypeScript configuration
β”œβ”€β”€ next.config.ts         # Next.js configuration
β”œβ”€β”€ postcss.config.mjs     # PostCSS configuration
β”œβ”€β”€ eslint.config.mjs      # ESLint configuration
└── .prettierrc            # Prettier configuration

πŸ› οΈ Getting Started

Prerequisites

  • Node.js (v18 or higher)
  • npm, yarn, pnpm, or bun package manager

Installation

  1. Clone the repository

    git clone <repository-url>
    cd portfolio
  2. Install dependencies

    npm install
    # or
    yarn install
    # or
    pnpm install
    # or
    bun install

Development

Start the development server with Turbopack for faster builds:

npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev

The application will be available at http://localhost:3000.

Development with Debugging

For debugging purposes, you can start the development server with Node.js inspector:

npm run dev:inspect

This enables debugging capabilities for IDE integration.

πŸ—οΈ Build & Deploy

Building for Production

Create an optimized production build:

npm run build

This command:

  • Compiles TypeScript to JavaScript
  • Optimizes and bundles all assets
  • Generates static pages where possible
  • Creates a .next directory with production files

Running Production Build Locally

Test the production build locally:

npm run start

Deployment Options

Vercel (Recommended)

  1. Connect your repository to Vercel
  2. Vercel automatically detects Next.js and deploys with optimal settings
  3. Automatic deployments on every push to main branch

Other Platforms

  • Netlify: Works with Next.js static export
  • Docker: Can be containerized for any cloud provider
  • Traditional hosting: Use next export for static sites

Environment Variables

If you need environment variables, create a .env.local file:

NEXT_PUBLIC_SITE_URL=https://yourdomain.com
# Add other environment variables as needed

🎨 Customization

Content Management

Experience Data

Edit src/data/experience.json to update professional experience:

{
  "company": {
    "name": "Company Name",
    "website": "https://company.com",
    "location": {
      "city": "City",
      "state": "State",
      "country": "Country"
    }
  },
  "positions": [{
    "title": "Job Title",
    "description": "HTML-formatted description",
    "startDate": "Mon YYYY",
    "endDate": "Mon YYYY", // or "Present"
    "skills": ["Skill1", "Skill2"]
  }]
}

Projects Data

Edit src/data/project.json to update portfolio projects:

{
  "title": "Project Name",
  "description": "Project description",
  "imageURL": "/projects/image.png",
  "githubURL": "https://github.com/user/repo",
  "liveURL": "https://project-url.com",
  "technologies": ["Tech1", "Tech2"]
}

Styling & Theme

Color Scheme

Modify CSS variables in src/app/globals.css:

:root {
  --background: #fdf7e9;  /* Light background */
  --foreground: #ecb365;  /* Accent color */
  --primary: #2a4d69;     /* Primary text */
  --secondary: #5591b9;   /* Secondary text */
}

@media (prefers-color-scheme: dark) {
  :root {
    --background: #041c32;  /* Dark background */
    --foreground: #2a4d69;  /* Dark accent */
    --primary: #ecb365;     /* Dark primary text */
    --secondary: #a2d2ff;   /* Dark secondary text */
  }
}

Tailwind Configuration

Extend Tailwind CSS in tailwind.config.ts:

extend: {
  colors: {
    background: 'var(--background)',
    foreground: 'var(--foreground)',
    primary: 'var(--primary)',
    secondary: 'var(--secondary)',
    // Add custom colors
  },
  // Add custom spacing, fonts, etc.
}

🧩 Component Architecture

Core Components

  • Header.tsx: Hero section with personal information and navigation
  • Experience.tsx: Professional experience timeline
  • Projects.tsx: Portfolio projects showcase
  • Navigation.tsx: Smooth scrolling navigation menu
  • Spotlight.tsx: Interactive background effect
  • Section.tsx: Reusable section wrapper with consistent styling

Component Patterns

  • Composition: Components are designed to be composable and reusable
  • TypeScript: Full type safety with defined interfaces
  • Accessibility: ARIA labels, semantic HTML, keyboard navigation
  • Responsive Design: Mobile-first approach with Tailwind breakpoints

πŸ“¦ Library Documentation

@phosphor-icons/react

Modern, customizable icons with consistent design language.

import { GithubLogo, Globe } from '@phosphor-icons/react'

<GithubLogo size={20} className="text-primary" />

clsx & tailwind-merge

Utility for conditional and merged className management.

import { cn } from '@/utils/cn'

const className = cn(
  'base-class',
  isActive && 'active-class',
  'override-class'
)

Fira Code Font

Monospaced font with programming ligatures, loaded via next/font/google.

πŸ”§ Development Commands

# Development
npm run dev          # Start development server
npm run dev:inspect  # Start with debugging enabled

# Production
npm run build        # Build for production
npm run start        # Start production server

# Code Quality
npm run lint         # Run ESLint
npx prettier --write . # Format code with Prettier

πŸš€ Performance Features

  • Next.js App Router: Improved performance and developer experience
  • Static Generation: Pages pre-rendered at build time where possible
  • Image Optimization: Automatic image optimization with Next.js
  • Font Optimization: Self-hosted Google Fonts with preloading
  • CSS Optimization: Tailwind CSS purging and PostCSS optimization
  • Bundle Analysis: Optimized bundle size with tree shaking

🌐 Browser Support

  • Chrome (latest)
  • Firefox (latest)
  • Safari (latest)
  • Edge (latest)

πŸ“„ License

This project is personal portfolio code. Feel free to use as inspiration for your own portfolio, but please don't copy the content directly.

🀝 Contributing

This is a personal portfolio, but suggestions and improvements are welcome! Feel free to:

  1. Open an issue for bugs or suggestions
  2. Submit a pull request for improvements
  3. Share feedback on design or functionality

πŸ“ž Contact

  • Website: leandroppf.com
  • GitHub: Check the repository for contact information
  • Resume: Available at /leandro_pedroso.pdf

Built with ❀️ using Next.js, TypeScript, and Tailwind CSS.

About

Leandro Pedroso's Portfolio

Topics

Resources

Stars

Watchers

Forks

Contributors