This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
npm run dev # Start dev server at localhost:4321 (with --host)
npm run build # Production build to dist/
npm run preview # Preview production buildNode >=18.20.8 required. ES modules project.
This is a personal portfolio site built with Astro 5 (static/island architecture), Tailwind CSS 4 (via @tailwindcss/vite), and GSAP for scroll animations.
- Projects & Photos: Stored as JSON in
src/data/(projects.json,photos.jsonwith 1000+ entries) - Blog posts: Astro Content Collections using MDX in
src/content/blog/, schema defined insrc/content/config.ts - Static assets:
public/images/(photos asDSC_*.jpg, project screenshots, profile images)
src/pages/index.astro— Homepage with hero, featured projects carousel, skills gridsrc/pages/projects.astro— Projects grid with client-side search & category filteringsrc/pages/photography.astro— Photo gallery with category filtering, favorites showcase, EXIF metadatasrc/pages/blog/index.astroandsrc/pages/blog/[slug].astro— Blog listing and dynamic postssrc/pages/photo/[filename].astro— Dynamic photo detail pages
- Dark mode: Class-based (
darkon<html>), persisted in localStorage keytheme, with system preference fallback - Layout: Single
BaseLayout.astrowraps all pages (meta tags, fonts, dark mode script, global styles) - Filtering: Projects and photos use client-side DOM manipulation (vanilla JS in
<script>tags), not framework reactivity - Animations: GSAP ScrollTrigger on homepage; Tailwind keyframe animations (fade-in, slide-up, scale-in) defined in
tailwind.config.mjs - Components:
Header.astro(fixed nav with mobile menu, auto-hides on scroll),ProjectCard.astro(typed props interface),PhotoModal.astro,AboutMe.astro
Global styles in src/styles/global.css. Custom color palette (full slate spectrum), Inter font family, and animations configured in tailwind.config.mjs. Uses glassmorphic effects and gradient text (.gradient-text class in BaseLayout).