jackdeng.cc — 个人主页站点
进行中你正在看的这个网站:前端和 Payload CMS 3 做在同一个 Next.js 16 应用里,数据放在 Supabase 的 Postgres,部署在 Vercel,中英双语。
技术栈
Next.js 16Payload CMS 3PostgreSQLSupabaseVercelTailwind CSSTypeScript
架构
- Payload 3 直接跑在 Next.js App Router 里,后台和网站是同一个应用、同一次部署;中英双语走 next-intl(
/en、/zh)。 - 页面静态生成,每小时兜底刷新一次;在后台保存内容时,页面、sitemap 和搜索缓存会立刻失效。
- Supabase 只当 Postgres 用,Data API 已关闭。
anon和authenticated两个角色对站点的表没有任何权限,每张表都开了 RLS。
部署与验证
- 分支保护只认一个 CI 检查。它依次跑类型检查、单元测试、中英文案的 key 核对,再用一次性的 Postgres 比对「迁移建出来的库」和「代码定义的结构」,最后灌入示例数据、构建、启动,跑一遍冒烟检查。
- 每次生产部署之后、以及每天一次,同一个冒烟脚本会请求线上页面,包括应该返回 404 的路径和所有站内链接。
- 迁移都是手写的。删列分两步:先上线新结构、旧列留着,确认没问题再单独删。
- 会写生产库的脚本,不带
--apply时只打印要改什么,不写库。
踩过的坑
- 查询不传语言时,Payload 会回落到中文,英文页上冒出中文。这个坑前后踩了三次。
- 评论原来分两个请求:先验人机,再写库,两步之间没有绑定,跳过第一步也能直接写评论。现在验证和写库在同一个请求里完成。
- 文章还是草稿时,它的 404 响应里带着标题。修掉之后,CI 的冒烟检查会建一篇草稿,确认两种语言下都是 404,响应里也找不到标题。
其他项目
B2B 客户门户进行中
给客户用的 B2B 门户,后面接 NetSuite。2026 年 9 月部署到公司服务器,目前内部在用,还没开放给客户。
.NET 10ASP.NET CoreEF Core
DataHub 数据中台进行中
公司内部的数据中台,用 C#/.NET 重写:原来分成三个服务的旧系统合成一个 ASP.NET Core 应用。2026 年 6 月上线,之后一直按 tag 发版。
.NET 10ASP.NET CoreDapper
企业制造数据分析平台进行中
基于 dbt + Databricks 的数据管道,采用 Medallion(Bronze→Silver→Gold→Mart)分层架构,将原始 ERP 数据转化为可直接用于分析的模型,支撑制造运营、库存、销售与人力效率报表。
dbtDatabricksUnity Catalog