起点

最初只是工作区里的几个项目:两个聊天分析工具、一个 QQ 助手、一部长篇小说。它们散在不同文件夹里,启动方式各不相同。我想要一个页面,让别人一眼看到我做过什么;也想要一个入口,自己点开就能用。

于是先有了展示页,再有了本机项目台,最后把它们拆成“公网作品集”和“本地工具”两层。你现在看到的,是公网这一层。

DeepSeek Harness 在里面做了什么

这个站不是“一键生成”的。更准确地说,是把它当成一个能改文件、能跑命令、能截图对比的协作者:

  • 先用对话描述想要的感觉:“低调、单色、宋体标题、不要大标语”;
  • 它改 HTML / CSS / JavaScript,启动本地服务器;
  • 用浏览器截图看效果,再继续提意见:“字太小”“切换要过渡”“项目名换掉”;
  • 最后一起处理部署、域名、HTTPS、安全头和留言区。

有效的地方在于:每次只改一件事,改完立刻看效果。比一次性写一大段需求,再对着一个不满意的大成品发愁,要快得多。

文件结构

整站没有框架、没有构建步骤,双击 `index.html` 就能打开:

website/
├─ index.html
├─ assets/
│  ├─ style.css          # 配色、排版、响应式
│  ├─ theme-init.js      # 首屏前设置明暗,避免闪白
│  ├─ main.js            # 主题、留言、表单、动画
│  ├─ comments-config.js # Supabase 的两个值
│  └─ img/
├─ projects/             # 每个项目的详情页
├─ netlify.toml          # CSP / HSTS 等响应头
├─ comments.sql          # 留言表 + 防刷 trigger
└─ README.md

设计

颜色只有黑、白、灰三种,靠层次和留白,而不是靠颜色。标题用宋体,正文用等线;中文网站用宋体能压住气质,等线在小字号下更干净。

明暗两套主题全部用 CSS 变量控制,切换时只改 `data-theme`:

:root {
  --bg: #f6f5f1;
  --ink: #141414;
  --muted: #6b6861;
}

html[data-theme="dark"] {
  --bg: #0c0c0c;
  --ink: #f2f0ea;
  --muted: #928e85;
}

首屏不放自我介绍,只留头像、名字和一句很短的话;字号从最初的 115px 降到 48px。低调不是没有东西,而是把东西放在该在的位置。

功能

  • 项目详情页:每个项目单独一页,讲清楚它解决什么、怎么用、技术边界;
  • 想法区:访客可以留下想要的小工具,部署到 Netlify 后进后台;
  • 留言区:匿名,只填昵称;用 Supabase 存,RLS 只允许读和插入;
  • 明暗切换:跟随系统,也可以手动切换,选择记在 localStorage;
  • 安全头:CSP、HSTS、防点击劫持,写在 `netlify.toml` 里。

上线

部署用的是 Netlify:把 `website` 文件夹拖进去,拿到 `*.netlify.app`;然后在腾讯云 DNSPod 加两条记录——

@     A       75.2.60.5
www   CNAME   yqlong.netlify.app

DNS 生效后,Netlify 自动签发 Let's Encrypt 证书,HTTP 跳 HTTPS,`www` 跳主域名。证书会自动续,不需要买 SSL。

几个实际踩过的坑:`.cn` 域名必须先实名;DNS 没加记录时 Netlify 会一直 Pending,证书也会失败;证书签发通常几分钟,不要反复点重试;CSP 会拦外部脚本,之后加统计工具要同步改 `netlify.toml`。

如果重来一次

  • 先写内容,再做动效。没有内容的动画只是噪音;
  • 移动端要早点看,不要等桌面版“完美”了再适配;
  • 用真实截图/示例图,但不要把私人聊天记录放上去;
  • 先上线,再优化。一个能打开的网址,比一个永远在本地打磨的版本有用。

如果你也想做一个:从一个 `index.html` 开始,先放一张图、一段话;然后再加第二个页面、暗色模式、域名。它不需要一开始就长成现在这样。