Sisuca/portfolio-isabel-abad
GitHub: Sisuca/portfolio-isabel-abad
一个聚焦前端安全、SEO 与架构健壮性的 Astro 样板项目,解决如何在 Vercel 上实现安全可控且可扩展的静态站点部署。
Stars: 0 | Forks: 0
# 作品集 - Isabel Abad
🔗 **演示:** [https://www.isabelabad.es](https://www.isabelabad.es)
面向产品的专业作品集,使用 Astro 开发并部署在 Vercel 上,专注于 **前端安全**、**技术 SEO** 和 **优秀的架构实践**。
## 项目重点
这个作品集不仅被设计为一个展示网站,而是作为一个接近生产环境的项目,用于应用以下技术:
- 前端安全加固
- 架构决策(SSR vs Hybrid)
- 技术 SEO 优化
- 类型定义与可维护性的最佳实践
## 成果
- 安全性提升:从初始配置提升至 **B+ / A (Mozilla Observatory)**
- 消除了 Astro v5 的警告(content collections 和类型)
- 为混合环境(SSR + 静态)做好准备的架构
- 可扩展的基础架构,添加新项目时无需修改路由代码
## 技术栈
- **框架:** Astro (SSR/Hybrid)
- **语言:** TypeScript
- **样式:** Tailwind CSS
- **内容:** Markdown + Content Collections
- **邮件:** Resend
- **部署:** Vercel
## 安全性
该项目已通过安全审计,在标准安全分析(Mozilla Observatory)中获得了 **A / B+** 的评分。
- 实现了具有严格模型(`default-src 'none'`)的 **Content Security Policy (CSP)**,在安全性和兼容性之间取得平衡(由于 Astro/Tailwind 的限制,受控使用 `unsafe-inline`)。
- 在 Vercel 中配置了安全的 HTTP headers(`vercel.json`)。
- 防御 XSS、Clickjacking 和 MIME sniffing。
- 限制外部来源和资源。
## 架构决策
在开发过程中为保证稳健性和可扩展性而做出的关键决策:
- **架构:** 在 Astro 中使用 SSR/Hybrid 以支持动态功能(联系表单),同时保持其余页面为静态。
- **路由管理:** 实现自定义工具(`getSlug`)以适应 Astro v5 API 的变化(处理 `id` vs `slug`)。
- **内容:** 在 `content.config.ts` (Astro v5) 中显式定义集合,避免使用已弃用的自动生成。
- **SEO:** 手动创建 `sitemap.xml`,以避免与 Vercel adapter 产生冲突并确保正确建立索引。
## 关键经验
- 适应框架变化(Astro v5:移除 `slug`)
- 在真实环境中管理前端安全(CSP、HTTP headers)
- 在简洁性与稳健性之间做出决策(SSR vs 静态)
- 严格类型定义对于避免 runtime 错误的重要性
## 技术 SEO
- 实施 `sitemap.xml` 和 `robots.txt`。
- 为爬取和索引优化的语义化结构。
- 配置了 Meta 标签和规范 URLs。
## 项目结构
```
/
├── public/
│ ├── images/ # Imágenes optimizadas
│ ├── certificates/ # PDFs de certificados
│ ├── sitemap.xml # SEO: Mapa del sitio
│ ├── robots.txt # SEO: Control de indexación
│ └── favicon.svg # Favicon
├── src/
│ ├── components/ # Componentes reutilizables (UI)
│ ├── content/
│ │ └── projects/ # Proyectos en Markdown
│ ├── content.config.ts # Definición de colecciones (Astro v5)
│ ├── layouts/ # Plantillas principales
│ ├── pages/ # Rutas de la aplicación
│ │ ├── index.astro
│ │ ├── cv.astro
│ │ └── projects/ # Rutas dinámicas ([slug])
│ ├── styles/ # Estilos globales
│ └── utils/ # Helpers (getSlug)
├── astro.config.mjs # Configuración de Astro
├── tailwind.config.mjs # Configuración de Tailwind
├── vercel.json # Headers de seguridad HTTP
└── package.json
```
## 命令
| 命令 | 操作 |
| ----------------- | ------------------------------------------- |
| `npm install` | 安装依赖 |
| `npm run dev` | 启动 `localhost:4321` 本地服务器 |
| `npm run build` | 构建生产版本到 `./dist/` |
| `npm run preview` | 在本地预览构建产物 |
## 环境变量
为了使联系表单正常工作,请创建一个 `.env` 文件:
```
RESEND_API_KEY=re_tu_clave_api
CONTACT_EMAIL=tu_email@ejemplo.com
```
## 作者
由 Isabel Abad 开发 —— 专注于产品、数据和数字营销的 Frontend Developer。
## 许可证
MIT
标签:Asto框架, SEO优化, Vercel部署, 个人作品集, 前端安全加固, 前端开发