最近在做一些纪念日相关的东西,就想把两个人的照片整理成一个相册。我先去找有没有现成的项目,搜到不少婚礼主题的页面,但一直没有找到很合用的。我想记下来的东西还包括平时的生活,而且以后还能接着往里面加,过几年再回头看。找了一圈,就开始按自己的需求一点点做。

另外,之前参加一个朋友的婚礼,他们做了一个有点像博物馆的东西,我对那个印象挺深。所以做这个站点的时候,我也想放一点这样的体验进去:可以慢慢逛,看看照片,也看看照片背后的事情。

接下来才是拆需求。照片肯定要有,日期、地点和当时的事情也得一起留下。只按时间排,可能还是不够;有时候想看的是某一年的生活,有时候想起的是某个地方,也有些事情还没发生,只是两个人说过以后想一起做。顺着这些需要,才慢慢做出了相册、关系时间线、年度回顾、地点地图,还有“以后一起”的愿望清单。

现在我把它整理成了可以复制、修改和部署的 Astro 模板,用 MIT 许可开源。可以先打开在线演示看看,下面的截图也来自这个演示站。示例用的是虚构人物和原创抽象插画,使用时再换成自己的照片和故事。

记忆怎么变成一个站点

这里面需要先想清楚的,是一条记忆怎么记录,以及它和其他内容怎么连起来。现在每条记忆都带着日期、中英文标题和描述、照片,也可以关联地点。同一条记忆会出现在相册里,也能从地图、时间线或年度回顾里找到。照片和基本信息只存一份,修改时也能少改几个地方。

首页和相册

首页先放几条精选记忆。演示里是河边散步、春日野餐和一次小小的庆祝,换成自己的内容时,可以重新挑。往下滚动,就能接着看相册。

首页也放了纪念日和生日。纪念日卡片有倒计时,点“重看这段回忆”,可以看纪念日的信息,以及最多三条日期匹配的回忆标题。生日按钮则会打开一个祝福画面。

相册里可以按标题或地点搜索,也能按年份筛选。只是想随便翻翻的话,就切到翻页模式。一张照片打开后,日期、说明和地点都在旁边,能一起看当时发生了什么。

相册翻页模式,左侧显示河岸散步插画,右侧保留日期、标题、故事和地点

翻页时,照片和当时的记录放在同一页里。

时间线和年度回顾

关系时间线画了两条线,把两个人各自经历的阶段放进去,再接上相遇、一起生活、居住地点和对应年份的记忆。中间没有记录的年份会折叠起来,想看完整的时间跨度时再展开。这样也不用为了填满每一年硬补内容。示例中的人物和经历是虚构的,使用时可以改成自己的阶段,不一定要照着“两个人相遇”这套结构来。

关系时间线演示,两个人的轨迹与年份、居住地点和相关回忆排列在一起

时间线把各自的经历和两个人共同的记忆接在一起。

年度回顾可以给那一年写一个主题,再挑几条想特别留下的记忆,下面继续放当年的其他记录。挑出来的重点可以另写标题和说明,照片还是用原来的,点卡片也能回到相册。哪几条算年度重点、哪些事情放进时间线,要自己选;这些内容不会只靠日期自动排出来。

地点地图和“以后一起”

地图可以从地点找记忆。选一个地方,会看到相关的照片和文字,也可以按日期继续找。它只表示大概位置,不负责导航。以后还可以在熟悉的地点藏一点东西,比如点开标记时出现一幅手绘图。这类彩蛋目前还只是想法。

地点地图演示,手绘地图上的地点标记与选中地点的记忆卡片一起显示

同一批记忆,也可以换成按地点来找。

“以后一起”放还没发生的事:想去的地方、想做的事、想过的日子。没有截止日期,也没有进度条,先把这些愿望记下来就好。目前它和已经发生的记忆是分开的,之后可以考虑接起来。愿望实现了,补上日期、照片和地点,就能成为一条记忆,再出现在相册、地图和年度回顾里。

内容怎么维护

单纯存照片,用云相册会省事一些。我自己做站点,是想把这些记录按自己的想法放在一起,也方便以后继续改。项目用 Astro 生成静态页面,不需要数据库或常驻服务器,还配了 GitHub Pages 的发布流程。部署这一步已经比较方便,配置好仓库就可以用。

现在没有可视化编辑器,内容直接在仓库文件里改。记忆放在 src/data/memories.js,每条有固定的 id;地点、年度回顾、时间线和愿望也分别放在 src/data/ 下。中英文界面文案在 src/i18n/copy.js,站点名称、时区、纪念日、生日和部署路径在 src/config/site.js。

模板支持中英文,记忆、地点、回顾和愿望都要准备两种文案。顶部可以切换语言,选择会保存在当前浏览器里,新访客默认看到中文。

纪念日和生日的效果,平时不一定碰得上,所以我留了一个调试面板。改一下模拟日期就能预览,也能直接跳到相册和地图。换好自己的内容之后,可以在配置里关掉它。

示例图片放在 src/assets/images/demo/。换照片时,要一起改记忆里的图片路径和替代文本。地点地图的插画和 Leaflet 文件也放在仓库里,页面不用请求在线地图瓦片或外部字体。

用 AI 帮忙整理

内容少的时候,自己改几个文件还好。加一条回忆,看起来只是加张照片、写几句话,但还可能要关联地点,放进年度回顾或时间线,再补中英文文案和图片说明。东西多了以后,这些零碎的修改确实有点麻烦。

我觉得这种项目很适合让 AI 帮忙维护。可以先把素材和想法交给代码助手,让它照着项目里已有的格式整理,补一版中英文文案,直接改文件。改完再看 diff,核对它改了什么,日期、地点和引用有没有弄错。如果删掉一条记忆,也要检查其他页面有没有还在引用这个 id。

但哪些事情值得记,哪几条想放进年度回顾,时间线怎么写才像自己的经历,还是得自己想。先把这些想清楚,再让 AI 帮着改文件,会方便很多。目前站点没有内置 AI,这里说的是用代码助手维护仓库。

检查和公开内容

改完内容后,可以跑这两条命令:

npm run validate
npm run audit:public

数据校验会检查日期、重复 id、地点和记忆引用,以及中英文内容有没有缺。公开内容审计用来排查仓库里的私人资料。不过故事有没有记错、照片能不能公开,还要自己看。

开源演示里的名字、日期、地点和经历都是虚构的,图片也换成了原创抽象插画。这个模板没有登录和访问控制,公开部署后的内容可以被访问,所以使用时也得想好哪些东西放进来。

以后还可以试试给某条记忆加一段语音,或者在纪念日时并排看不同年份的照片。不过我觉得,这个站点不用反复打开。自己记着,想起来的时候添一点记忆碎片就好了。日子是一点点积累起来的,里面有很多细节,也有温度。对我来说,共同的回忆是最重要的。