Files
class/README.md
T
2026-07-18 15:05:37 +08:00

4.7 KiB
Raw Blame History

612 班级纪念站

这是一个用 Astro 搭建的班级纪念网站,用来保存毕业后的班级记忆:时间线、照片墙、同学近况、综合试卷和留言墙。

功能

  • 首页:班级纪念入口、导航和基础统计。
  • 三年时间线:记录高中阶段的重要片段。
  • 照片墙:按专题整理课堂日常、班级活动、毕业当天和随手抓拍。
  • 如今的我们:展示同学卡片和个人近况页面。
  • 综合试卷:把纪念试卷做成网页,并保留 Word 原卷下载。
  • 留言墙:接入 Twikoo 后可在页面中留言。
  • 全站搜索:通过 Typesense 搜索并筛选时间线、照片、文章和同学公开资料。
  • PWA:支持添加到主屏幕,并离线访问站点外壳及已浏览的同源内容。

技术栈

  • Astro 6
  • TypeScript
  • 原生 CSS
  • Twikoo 评论系统

快速开始

npm install
npm run dev

本地开发服务启动后,按终端提示打开页面即可。

常用命令:

npm run dev      # 启动开发服务器
npm run build    # 构建静态站点到 dist
npm run preview  # 预览构建结果
npm run search:sync # 将公开内容同步到 Typesense

npm run build 会在 Astro 构建完成后生成带内容版本号的 Service Worker,并预缓存页面、样式、脚本、应用图标和首页主视觉。照片等大体积资源采用访问后缓存,第三方接口始终走网络。

Typesense 全站搜索

复制 .env.example 中的配置到本地 .env.env.local 或部署平台的环境变量。npm run search:sync 会自动读取这两个本地文件,且 .env.local 中的同名配置优先:

  • PUBLIC_TYPESENSE_* 会进入浏览器,只能使用具有搜索权限的 Search-only Key。
  • TYPESENSE_ADMIN_API_KEY 只用于同步索引,不能添加 PUBLIC_ 前缀。

配置完成后直接执行,不需要在终端中逐个设置环境变量:

npm run search:key
npm run search:sync
npm run build

npm run search:key 使用 TYPESENSE_ADMIN_API_KEY 创建一个仅能搜索 class_memories 集合的只读密钥,并自动写入 .env.local。如果已经存在只读密钥,脚本会停止;需要轮换时使用 npm run search:key -- --force

同步脚本会在集合不存在时创建 class_memories,然后批量更新现有搜索文档。部署流程应在内容更新后先执行同步,再构建和发布站点。

项目结构

.
|-- public/
|   `-- assets/              # 静态图片、试卷附件等资源
|-- scripts/                 # GitHub Issue 自动更新数据脚本
|-- src/
|   |-- data/                # 站点内容数据
|   |   |-- site.ts          # 站点标题、导航、联系方式
|   |   |-- timeline.ts      # 时间线内容
|   |   |-- photos.ts        # 照片墙入口数据
|   |   |-- photo-topics/    # 各照片专题
|   |   |-- people.ts        # 同学资料
|   |   |-- exam.ts          # 综合试卷内容与评分配置
|   |   `-- messages.ts      # 留言墙文案与 Twikoo 配置
|   |-- layouts/             # 通用页面布局
|   |-- pages/               # 路由页面
|   `-- styles/              # 全局和页面样式
|-- astro.config.mjs
`-- package.json

内容维护

大部分网站内容都在 src/data 目录中维护。

  • 修改站点名称、首页文案、导航和联系方式:编辑 src/data/site.ts
  • 修改时间线:编辑 src/data/timeline.ts
  • 修改照片墙专题:编辑 src/data/photo-topics/*.ts
  • 修改同学资料:编辑 src/data/people.ts
  • 修改试卷内容和答案:编辑 src/data/exam.ts
  • 修改留言墙文案和 Twikoo 配置:编辑 src/data/messages.ts

新增静态资源时,放到 public/assets 下。页面中引用资源时使用以 /assets/ 开头的路径,例如:

photo: "/assets/photos/example.jpg"

留言墙配置

留言墙使用 Twikoo。需要在本地或部署平台中配置环境变量:

PUBLIC_TWIKOO_ENV_ID=你的_Twikoo_envId

如果没有配置该变量,留言页会显示待配置提示,不会加载评论区。

GitHub Issue 自动更新

仓库中包含用于收集内容更新的 Issue 模板和 GitHub Actions

  • people-update:根据 Issue 表单更新 src/data/people.ts
  • photo-update:根据 Issue 表单更新对应的照片专题数据

提交或编辑对应 Issue 后,工作流会运行脚本并自动创建更新 PR,方便审核后合并。

构建与部署

执行:

npm run build

构建产物会生成到 dist/。这个项目是静态站点,可以部署到 GitHub Pages、Vercel、Netlify 或任意静态资源服务器。

部署前建议检查 astro.config.mjs 中的 site 字段,把它改成真实站点地址。