# frontend

Astro 前台站点，当前运行模式为：

- `output: 'server'`
- `@astrojs/node` standalone
- 少量 Svelte 组件用于客户端激活

## 常用命令

```powershell
pnpm install
pnpm dev
pnpm build
```

默认本地开发端口：

- frontend: `4321`

## API 地址约定

前台现在区分两类 API 地址：

- `INTERNAL_API_BASE_URL`
  - 给 Astro SSR / Node 服务端渲染访问 backend 用
  - docker compose 默认推荐：`http://backend:5150/api`
- `PUBLIC_API_BASE_URL`
  - 给浏览器里的评论、AI 问答、搜索等请求用
  - 如果不设置，生产环境会回退到“当前访问主机 + `:5150/api`”

如果你走正式域名 / HTTPS / 反向代理，建议显式设置：

```env
PUBLIC_API_BASE_URL=https://api.blog.init.cool
```

## 图片处理链

前台现在额外带了一个 SSR 图片优化端点：

- `/_img`

它会对**同域图片**做：

- 响应式尺寸裁切/缩放
- `AVIF / WebP / JPEG|PNG` 输出
- 前台卡片 / 文章页封面的 `srcset` 生成

如果你的封面图来自额外 CDN / R2 公网域名，需要给 frontend 运行时增加：

```env
PUBLIC_IMAGE_ALLOWED_HOSTS=cdn.example.com,pub-xxxx.r2.dev
```

admin 侧上传封面时也会额外做：

- 上传前压缩
- 16:9 封面规范化
- 优先转为 `AVIF / WebP`

## GEO / AI 搜索补充

前台现在额外提供：

- `/llms.txt`
- `/llms-full.txt`
- `/indexnow-key.txt`（仅在配置 `INDEXNOW_KEY` 时可用）

如果你想在发布后主动推送 IndexNow，可以配置：

```env
INDEXNOW_KEY=your-indexnow-key
SITE_URL=https://your-frontend.example.com
PUBLIC_API_BASE_URL=https://your-frontend.example.com/api
```

然后运行：

```powershell
pnpm indexnow:submit
```

脚本会自动收集首页、文章、分类、标签、评测等 canonical URL 并提交到 IndexNow。
