# 📸 Astro Photography Portfolio Template A modern, fast, and highly customizable photography portfolio template built with [Astro](https://astro.build). Ideal for photographers who want to showcase their work through a sleek, performant, and professional website. ## ✨ Features - Lightning-fast performance with Astro - Fully responsive design - Optimized image loading and handling - Easy to customize - Easy to organized gallery via a yaml file - Multiple albums support - Image zoom capabilities - Automatic deployment to GitHub pages - Script to automatically create a gallery from images ## 🚀 Getting Started ### Prerequisites - Check [AstroJS](https://docs.astro.build/en/install-and-setup/) documentation for prerequisites - Basic knowledge of Astro and web development ### Installation 1. click "Use this template" on GitHub 2. Clone your newly created template 3. Install dependencies: ```bash npm install # or yarn install ``` 3. Start the development server: ```bash npm run dev # or yarn dev ``` ## 📝 Make it your own ### Configuration Edit the `astro.config.ts` file to update your github pages details: ```typescript export default defineConfig({ site: '', base: '', // ... }); ``` Edit the `site.config.mts` file to update your personal information: ```typescript export default { title: 'SR', favicon: 'favicon.ico', owner: 'Sara Richard', // ... Other configurations }; ``` ### Customize site icon Replace `public/favicon.ico` with your icon and change the configuration if your file has a different name/location. ### Customize the About page - Replace the profile image (see [site.config.mts](site.config.mts) for configuration) - Edit content in [about page](./src/pages/about.astro) ### Adding Your Photos 1. Place your images in the `src/gallery/` directory 2. Update the gallery details in `src/gallery/gallery.yaml`. Optionally, you can run `npm run generate` to generate a gallery.yaml file from the images in the directory. 3. Update meta-data for images in the `src/gallery/gallery.yaml` file. 4. Images are automatically optimized during build ### Adding photos to the featured section "featured" is a builtin collection, and images can be added to it by specifying it in the collections parameter like any other collection. # 📸 Phase 1 二次开发技术文档 项目名称: Astro Photography Portfolio (Customized) 版本: Phase 1 Completed 日期: 2025-11-26 ## 1. 核心功能变更概览 本次二次开发主要针对原版模版进行了跨平台兼容性修复、国际化 (i18n) 重构、视觉交互升级以及性能优化。 ### 🛠️ 系统与脚本优化 1. **跨平台路径修复 (`npm run generate`)** - **问题**: 原脚本在 Windows 下生成的 `gallery.yaml` 路径包含反斜杠 `\`,导致 Astro 在 Linux/Mac 环境或部署时无法识别图片。 - **解决**: 修改 `src/data/gallery-generator.ts`,引入 `toUnixPath` 函数,强制将所有路径分隔符转换为 Unix 风格 `/`。 - **新增**: 脚本现在会自动识别文件名中包含 `_featured` 的图片,并自动添加 `featured` 标签。 - **新增**: 图片生成顺序改为按 EXIF 拍摄时间倒序排列(最新的在前)。 2. **EXIF 数据透传与展示** - **问题**: 原版 `gallery.yaml` 虽然有 EXIF 数据,但前端并未读取和展示。 - **解决**: - 修改 `src/data/galleryData.ts` 和 `imageStore.ts`,确保 `exif` 对象被完整传递给前端组件。 - 修改 `src/data/imageStore.ts` 中的 `builtInCollections`,添加 `cover` 到白名单,防止报错。 - 修改 `src/components/PhotoGrid.astro`,格式化 EXIF 数据 (相机、焦段、光圈、ISO) 并注入到 Lightbox (GLightbox) 的描述中。 3. **性能优化 (缩略图策略)** - **优化**: 在 `PhotoGrid.astro` 中,强制使用 Astro 的 `` 组件。 - **效果**: 首页和列表页不再加载几千像素的原图,而是加载自动生成的 WebP 缩略图,大幅提升加载速度。 ### 🌍 国际化 (i18n) 重构 1. **目录结构变更** - 原 `src/pages/*` 下的文件被移动至 `src/pages/zh/` (中文版) 和 `src/pages/en/` (英文版)。 - 根目录 `src/pages/index.astro` 仅作为重定向器,根据 `base` 路径自动跳转至默认语言 `/zh/`。 - 组件引用的 Import 路径已全部修正为相对路径 (`../../../` 等)。 2. **双语支持** - 新建 `src/i18n/ui.ts` 管理翻译字典。 - `src/components/NavBar.astro` 支持语言切换按钮,自动根据当前 URL 切换 `/zh/` 和 `/en/` 前缀。 - 首页组件 (`LandingHero`, `FeaturedGallery`) 被改造为支持 `props` 传参,允许在不同语言的 `index.astro` 中传入对应的翻译文案。 ### 🎨 UI 与视觉升级 1. **全屏动态轮播背景 (`HeroBackground`)** - 新建 `src/components/HeroBackground.astro` 组件。 - **逻辑**: 自动读取 `gallery.yaml` 中包含 `cover` 标签的图片。如果未找到,则回退显示前 3 张图片。 - **效果**: 全屏淡入淡出轮播,并添加深色遮罩以保证前景文字可读性。 2. **自适应导航栏 (`NavBar`)** - **逻辑**: 页面顶部时背景透明、文字白色(配合深色轮播图);向下滚动后背景变白、文字变黑(保证阅读清晰度)。 - **修复**: 解决了 Astro Frontmatter 格式错误导致的页面顶部出现白色空白条和 `---` 符号的问题。 ------ ## 2. 使用指南 (给用户/朋友) ### 如何管理图片 所有操作均在 `src/gallery/gallery.yaml` 或文件系统中进行。 1. **添加新图片**: 将图片放入 `src/gallery/xxx/` 文件夹。 2. **生成数据**: 运行 `npm run generate`。 3. **设置精选 (Featured)**: - 方法 A: 图片文件名包含 `_featured` (如 `img_featured.jpg`),重新运行脚本。 - 方法 B: 在 `gallery.yaml` 中手动给图片添加 `- featured` 标签。 4. **设置首页轮播图 (Cover)**: - 在 `gallery.yaml` 中手动给图片添加 `- cover` 标签。 - *注意*: `cover` 标签不会出现在网站的分类过滤器中,仅用于首页背景。 ------ ## 3. 开发指南:如何添加新菜单项 如果你想添加一个全新的页面(例如:“视频 / Video”),请严格按照以下步骤操作: ### 第一步:创建页面文件 你需要分别为中文版和英文版创建页面文件。 1. **中文版**: 新建 `src/pages/zh/video.astro` 代码段 ``` --- import MainLayout from '../../layouts/MainLayout.astro'; ---

我的视频

``` 2. **英文版**: 新建 `src/pages/en/video.astro` (内容同上,语言改 `lang="en"`)。 ### 第二步:定义菜单名称 打开 `src/i18n/ui.ts`,在字典中添加新菜单的翻译。 TypeScript ``` export const ui = { zh: { 'nav.home': '首页', 'nav.gallery': '作品集', 'nav.about': '关于我', 'nav.video': '视频', // <--- 新增 }, en: { 'nav.home': 'Home', 'nav.gallery': 'Gallery', 'nav.about': 'About', 'nav.video': 'Video', // <--- 新增 }, }; ``` ### 第三步:添加到导航栏 打开 `src/components/NavBar.astro`,将新项加入 `menuItems` 数组。 TypeScript ``` // ... const menuItems = [ { name: t['nav.home'], link: homePath }, { name: t['nav.gallery'], link: `${homePath}/collections` }, // 新增下面这一行 { name: t['nav.video'], link: `${homePath}/video` }, { name: t['nav.about'], link: `${homePath}/about` }, ]; // ... ``` ------ ## 4. 已知待优化项 (Phase 2 计划) 1. **分类名称国际化**: 目前分类显示为文件夹名称(英文),尚未对接翻译字典。 2. **CMS 后台集成**: 计划集成 Decap CMS,实现图形化管理图片和配置,无需接触代码。 ------ **Document End**