This is my personal portfolio website, built with Astro and Tailwind CSS. It’s designed to showcase my projects, skills, and experience in a clean, fast, and modern way.
🌐 Live Site: https://nacholz.com/
- ⚡ Blazing fast performance with Astro’s static site generation
- 🎨 Modern design using Tailwind CSS utilities
- 📱 Fully responsive on desktop, tablet, and mobile
- 🌙 Dark mode support with theme toggle
- 🧩 Reusable components for projects, experience, and skills sections
- 🌐 Multi-language support (English / Spanish) with i18n
- 🏷️ Technology tags system with consistent styling across components
- 🖼️ Image previews for projects and experience with hover effects
- 🔗 Social links integration (GitHub, LinkedIn, etc.)
- 🤖 SEO optimized with robots.txt generation
- 📦 Component-based architecture for easy maintenance
- Framework: Astro v4.4.5
- Styling: Tailwind CSS v3.4.1
- Language: TypeScript v5.3.3
- Font: Onest Variable from Google Fonts
- Icons: Custom SVG icon components
- Deployment: Static site generation
- Package Manager: npm/pnpm/bun supported
NachoLZ-Astro-Portfolio/
├── 📁 public/ # Static assets
│ ├── 📁 experience/ # Experience section images
│ ├── 📁 projects/ # Project screenshots
│ ├── favicon.svg # Site favicon
│ └── *.webp # Optimized images
├── 📁 src/
│ ├── 📁 components/ # Reusable Astro components
│ │ ├── 📁 icons/ # SVG icon components
│ │ │ ├── React.astro # Technology icons
│ │ │ ├── TypeScript.astro
│ │ │ ├── Unity.astro
│ │ │ └── ... # 25+ technology icons
│ │ ├── AboutMe.astro # About section
│ │ ├── Experience.astro # Work experience timeline
│ │ ├── ExperienceItem.astro # Individual experience card
│ │ ├── Projects.astro # Projects showcase
│ │ ├── TechTags.astro # Shared technology tags
│ │ ├── Hero.astro # Landing hero section
│ │ ├── Header.astro # Navigation header
│ │ ├── Footer.astro # Site footer
│ │ ├── ThemeToggle.astro # Dark/light mode toggle
│ │ ├── LanguageToggle.astro # Language switcher
│ │ └── ... # Other UI components
│ ├── 📁 i18n/ # Internationalization
│ │ ├── en.json # English translations
│ │ ├── es.json # Spanish translations
│ │ └── index.ts # i18n configuration
│ ├── 📁 layouts/ # Page layouts
│ │ └── Layout.astro # Base layout template
│ ├── 📁 pages/ # Route pages
│ │ ├── index.astro # Homepage
│ │ └── components.astro # Component showcase
│ └── env.d.ts # TypeScript environment types
├── astro.config.mjs # Astro configuration
├── tailwind.config.mjs # Tailwind CSS configuration
├── tsconfig.json # TypeScript configuration
├── package.json # Dependencies and scripts
└── README.md # Project documentation
Make sure you have one of these package managers installed:
-
Clone the repository
git clone https://github.com/NachoLZ/NachoLZ-Astro-Portfolio.git cd NachoLZ-Astro-Portfolio -
Install dependencies
# Using npm npm install # Using pnpm (recommended) pnpm install # Using bun bun install
-
Start the development server
# Using npm npm run dev # Using pnpm pnpm dev # Using bun bun run dev
-
Open your browser Navigate to
http://localhost:4321to see the portfolio in action! 🎉
| Script | Command | Description |
|---|---|---|
| Development | npm run dev |
Start development server with hot reload |
| Build | npm run build |
Build for production (includes type checking) |
| Preview | npm run preview |
Preview production build locally |
| Type Check | astro check |
Run TypeScript type checking |
- Create a new icon in
src/components/icons/YourTech.astro - Add to TechTags.astro:
import YourTech from "./icons/YourTech.astro"; export const TAGS = { // ... existing tags YOURTECH: { name: "Your Technology", class: "bg-[#yourcolor] text-white", icon: YourTech, }, };
- Use in components:
tags: [TAGS.YOURTECH, TAGS.REACT]
Edit src/components/Projects.astro:
const PROJECTS = [
{
title: "Your Project Name",
description: "Project description...",
link: "https://your-project.com",
github: "https://github.com/you/project",
image: "/projects/your-project.webp",
tags: [TAGS.REACT, TAGS.TYPESCRIPT],
},
// ... other projects
];Edit src/components/Experience.astro:
const EXPERIENCE = [
{
date: "Start Date – End Date",
title: "Your Position",
company: "Company Name",
description: "What you did...",
image: "/experience/company.webp",
tags: [TAGS.REACT, TAGS.NODEJS],
link: "https://company.com",
github: "https://github.com/company/project"
},
// ... other experiences
];The portfolio supports multiple languages using Astro's i18n features:
- English (
en): Default language - Spanish (
es): Secondary language
- Create translation file:
src/i18n/fr.json(for French) - Update i18n config:
src/i18n/index.ts - Add language toggle: Update
LanguageToggle.astro
Centralized technology tags with consistent styling:
- 25+ technology icons (React, TypeScript, Unity, Python, etc.)
- Consistent color schemes matching official brand colors
- Reusable across components (Experience, Projects)
Interactive image previews with:
- Hover animations (scale, shadow effects)
- Responsive design (mobile-friendly)
- Optimized WebP format for fast loading
Dark/light mode support:
- System preference detection
- Manual toggle in header
- Persistent user choice (localStorage)
npm run buildThis creates a dist/ folder with optimized static files ready for deployment.
- Connect your GitHub repository to Vercel
- Vercel auto-detects Astro and configures build settings
- Deploy automatically on every push to main branch
- Connect repository to Netlify
- Build settings:
- Build command:
npm run build - Publish directory:
dist
- Build command:
- Enable GitHub Pages in repository settings
- Use GitHub Actions for automated deployment
- Configure base URL in
astro.config.mjsif needed
- ✅ Chrome (latest)
- ✅ Firefox (latest)
- ✅ Safari (latest)
- ✅ Edge (latest)
- ✅ Mobile browsers (iOS Safari, Chrome Mobile)
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License - see the LICENSE.md file for details.
This means you can:
- ✅ Share — copy and redistribute the material in any medium or format
- ✅ Adapt — remix, transform, and build upon the material
Under the following terms:
- 📝 Attribution — You must give appropriate credit
- 🚫 NonCommercial — You may not use the material for commercial purposes
Ignacio Lizana
- 🌐 Portfolio: https://nacholz.com/
- 💼 LinkedIn: Your LinkedIn
- 🐙 GitHub: @NachoLZ
- 📧 Email: ignaciolizana96@gmail.com
- Astro - Amazing static site generator
- Tailwind CSS - Utility-first CSS framework
- Heroicons - Beautiful SVG icons
- Vercel - Deployment platform
- Community - Thanks to all contributors and supporters!
⭐ Star this repository if you found it helpful!
Made with ❤️ and ☕ by Ignacio Lizana