- 上线语言版本
- 3
- Lighthouse 目标分
- 95+
- LCP 预算
- < 2.5s
客户
自有项目 —— 观白工作室
服务内容
网站开发 · UI/UX 设计 · 多语言本地化 · 后端开发
技术方案
Next.js · FastAPI · PostgreSQL · TypeScript
挑战观白工作室开张的时候没有作品集。一家做网站、App 和微信小程序的工作室,不能只靠承诺开场,所以第一个项目只能是自己的官网——而且它得经得起我们请客户用来审视我们的那套标准。
三个约束决定了它的样子。它必须在英文、中文和西班牙文里同时成立,每一种语言读起来都像是最先写的那一版,而不是最后翻出来的。它必须让我们自己的服务承诺变得可以度量:“一个工作日内回复”这句话,如果背后没有一个能被查询的响应时间数字,就等于什么都没说。它还必须是我们打算长期复用的那套交付底座——Next.js、FastAPI、PostgreSQL——的第一次真实实现,而不是一张用完即弃的营销页。
我们做了什么
五个栏目——首页、案例、报价、团队、联系——由同一套内容模型驱动,在三种语言下完整对齐。新增一个页面或一种语言,是一次内容改动,不是一次重做。视觉上刻意去掉边框:结构由字体、留白和色彩来承担,而不是靠框线和分隔线。
线索流程把数据库当作唯一的事实来源。表单提交先写入 Postgres,邮件只是通知。即使邮件服务出问题,线索依然在库里,依然会出现在收件箱。
- 限流写在 Postgres 里,而不是进程内存里。Serverless 实例之间不共享内存,内存里的计数器等于每个实例各算一份,那其实就等于没有限流。
- 垃圾提交由蜜罐字段吸收,而不是验证码,真实访客不必再去证明自己是人。
- 后台收件箱为每一条询盘打上首次响应时间,把 24 小时响应这件事,从一句宣称变成一个我们需要拿数据交代的指标。
- 分析统计和错误监控在上线第一天就位,而不是等出了第一次事故再补。
后端只对外提供一套 API 契约。今天由网页端调用;将来的 iOS App、Android App 或小程序可以调用同样的接口,不需要第二套后端。
结果
官网以三种语言上线,五个栏目内容对等。性能是开发阶段的硬约束,而不是上线之后的收尾工作:移动端 LCP 预算控制在 2.5 秒以内,Lighthouse 目标 95 分以上,在代码合并之前就检查,而不是等有人抱怨之后。
更实际的意义在于,它现在是我们的参考实现。这里的每一个技术选择——共享的 API 契约、放在数据库里的限流、本地化模型、监控配置——都是下一个客户项目的起点,而且已经在一个属于我们自己的线上站点上跑过一遍。
想做一个类似的项目?
大多数项目都是从一段简短描述和一个大致预算开始的。剩下的交给我们。