跳转到正文
全部文章
产品更新

diuu:一个能登录、能写作、能双语发布的轻量网站起点

基于 mkfast-lite 的网站实现,接入 Google 登录、D1 内容存储与中英文独立发布后台,让草稿、发布和阅读形成完整路径。

做一个小网站,并不一定需要先搭建一整套庞大的后台。首页、登录、内容发布和多语言,往往就能支撑最初的产品展示与持续更新。

diuu 以开源 mkfast-lite 模板为起点,在已有的多语言网站和认证能力上,接入了一个可以实际使用的博客后台。它的目标很直接:把必要的路径做完整,让创作者把精力留给产品和内容。

从一个清楚的网站开始

前台使用 React、TanStack Start 和 TanStack Router,沿用暖纸底色、橙黄强调和黑色描边。网站支持明暗主题,也有英文与简体中文两套界面。

博客英文入口是 /blog,中文入口是 /zh/blog。读者可以浏览文章、按分类筛选、搜索关键词和翻页,再进入详情阅读。每篇文章都有自己的标题、摘要和分享信息;已发布内容也会进入站点地图。

这些能力服务于一个简单目标:让读者顺利找到内容,并安静地读完它。

登录与内容放在同一套应用里

应用部署到 Cloudflare Workers,使用 Cloudflare D1 保存认证与博客数据,数据库结构由 Drizzle 管理。

登录通过 Better Auth 提供,支持 Google 和邮箱密码。当前博客后台采用一个明确的小范围权限规则:只有与 BLOG_ADMIN_USER_ID 环境变量匹配的站内用户 ID,才能管理内容。

管理入口放在 Header,只对管理员显示。入口可见性只是界面提示,后台读取、保存、发布和下架仍会在服务端重新检查会话身份。修改请求还会检查来源。

这种做法适合当前的单管理员发布场景;它没有把一个小博客扩展成复杂的组织与角色系统。

保存草稿,不等于修改线上文章

博客后台支持 Markdown 编辑、预览、保存草稿、发布和下架。正文支持常见的标题、列表、链接和代码排版,原始 HTML 不会作为可执行内容渲染。

我们把可编辑草稿与发布快照分开保存:

  1. 新建文章后,先在后台整理标题、摘要与正文。
  2. 保存草稿,只更新编辑内容;读者继续看到已经发布的版本。
  3. 确认预览之后,发布当前语言,才会更新线上页面。
  4. 下架会关闭公开访问,但保留草稿和发布记录,方便以后重新发布。

文章第一次发布后,共享链接会锁定,避免后续编辑意外改变已分享的地址。保存与发布也携带版本号;遇到并发修改时会报冲突,而不是覆盖另一份内容。

未保存修改时离开编辑页,或切换编辑语言,界面会提供保存后继续、放弃修改和取消三个选择。

两种语言,各自准备好再发布

多语言内容不是把同一篇正文复制到两个地址。中文和英文分别维护标题、摘要、正文及 SEO 信息,也分别保存、发布和下架。

中文准备好时,可以先发布中文;英文还在修改,就继续留在草稿里。单独下架一种语言,不会影响另一种语言。需要整篇撤下时,后台也提供明确的整篇下架操作。

前台语言切换只关联已经发布的译文。某个语言尚未发布时,系统会明确说明,不会用另一种语言的正文填充该地址。

让范围保持轻量

这一版完成的是网站、登录与博客的核心路径。它没有加入评论、用户投稿、定时发布、自动翻译、支付、邮件订阅或图片上传。

封面目前使用 HTTPS 图片地址,并要求填写图片说明。固定界面文案由 Paraglide 管理,文章内容则存入数据库;在线修改文章不需要重新编译界面翻译,也不需要重新部署整个网站。

如果下一步确实需要更多能力,可以从真实使用中决定扩展顺序。现在,先写好第一篇文章,让已经准备好的内容与读者见面。