Toastmasters、咖啡与功能发布:30分钟构建

Toastmasters、咖啡与功能发布:30分钟构建

Randal Eastman
Randal Eastman Founder & CEO
• 1 分钟阅读

今早从演讲准备开始。以生产部署结束。

我正在为我的Toastmasters俱乐部(Pitchmasters)准备一个关于本周正确创建Updates博客和CMS的演讲。在梳理故事大纲时,我突然意识到:我的Updates文章属于不同类型,但系统中没有捕获这一点。

有些文章是观察(“看看这个品牌趋势”)。有些是反思(“这是我学到的东西”)。有些是构建更新(“这是我们发布的内容”)。没什么复杂的——只是一种表明意图的简单方式。

于是我给Claude发消息:“我们应该添加文章类型。”

30分钟后:功能设计完成,迁移脚本编写完成,数据库更新完成,Hub UI增强完成,Hugo模板更新视觉徽章完成,双向同步确认完成,生产部署完成。

构建序列

1. 设计 (5分钟)

我们定义了三种初始文章类型:

  • Build 🔧:技术更新、功能发布、基础设施工作
  • Reflect 💡:个人见解、经验教训、战略思考
  • Announce 📢:平台新闻、产品发布、重大里程碑

简单、清晰、立即有用。不过度思考。每种类型都有独特的图标和颜色以实现视觉区分。

2. 数据库迁移 (3分钟)

-- 向updates表添加post_type列
ALTER TABLE updates
ADD COLUMN post_type text
CHECK (post_type IN ('build', 'reflect', 'announce'));

-- 根据内容分析回填现有文章
UPDATE updates SET post_type = 'build'
WHERE slug IN ('building-updates-cms', 'monorepo-migration-complete',
               'pwa-launch-offline-ready', 'dark-mode-launch', ...);

UPDATE updates SET post_type = 'announce'
WHERE slug IN ('welcome-to-updates', 'domain-migration-brandmine-ai', ...);

UPDATE updates SET post_type = 'reflect'
WHERE slug IN ('backlog-breakthrough', 'why-we-chose-supabase', ...);

简洁的DDL,约束验证,周到的回填。从一开始就适合生产。

3. Hub集成 (10分钟)

在Updates表单中添加了postType字段,带有下拉选择器。使用与现有分类字段(markets、sectors)相同的枚举模式。在编辑视图中立即获得视觉反馈。

4. Hugo同步 (8分钟)

更新了两个同步脚本:

  • sync-updates-to-supabase.js - 从YAML front matter读取postType
  • sync-updates-from-supabase.js - 从数据库将post_type写入Hugo文件

运行sync-from将回填的类型拉入Hugo。所有13篇现有文章现在都正确分类了。

5. Hugo视觉设计 (6分钟)

在Hugo Updates列表页面添加了精致、低调的徽章:

  • 半透明带背景模糊(玻璃拟态)
  • Lucide SVG图标(Wrench、Lightbulb、Megaphone)
  • 10%不透明度背景,与hero图片融合
  • 微交互(悬停时轻微上升)
  • 完整的深色模式支持

2025极简主义:信息而非噪音。

6. 视觉验证 (4分钟)

打开Hub → Updates列表。扫描新的文章类型列。每篇文章都显示正确的分类。过滤器工作正常。表单验证可靠。

打开Hugo网站 → /updates/。徽章渲染完美。浅色模式简洁。深色模式自动适应。

完成。

为什么这么快?

三个架构决策使这成为可能:

1. 数据库优先设计

我们的Updates CMS使用Supabase作为真实数据源。Hugo文件是生成的产物。当我们添加字段时:

  • 向数据库添加列
  • 更新同步脚本
  • 在Hub中进行视觉验证

无需与静态文件格式搏斗或跨数十个文件手动编辑front matter。

2. 每层的枚举类型

PostgreSQL CHECK约束、TypeScript enum、React Admin choices数组——相同的值,从数据库到UI的类型安全。添加新文章类型?在一个地方更改,编译时在所有地方验证。

3. 双向同步脚本

我们几个月前在Hugo和Supabase之间建立了强大的同步。添加新字段意味着在两个函数中更新映射逻辑。基础设施自动处理验证、错误检查和备份。

Toastmasters联系

为什么我在演讲准备期间构建这个?

因为最好的文档是现场演示。

我可以告诉Pitchmasters"我们构建了一个CMS"(他们会礼貌地点头)。或者我可以展示给他们:“我今天早上有个想法,在咖啡前部署了它,这是提交历史。”

好工具让发布变得容易。轻松发布创造证据。证据讲述的故事比幻灯片更好。

这解锁了什么

文章类型不仅仅是元数据。它们实现了:

过滤视图

在技术变更日志上仅显示构建更新。为趋势研究人员展示观察。将反思分组为创始人旅程叙事。

视觉区分

已实现:Hugo卡片上带有不同颜色和图标的精致徽章。Build文章(蓝色扳手),Reflect文章(琥珀色灯泡),Announce文章(青色扩音器)。简洁、极简、信息丰富。

内容智能

跟踪我们发布的内容:构建多吗,观察少吗?内容组合是否符合受众需求?

未来功能

按文章类型的RSS订阅。电子邮件摘要分段。基于类型+分类的"更多类似内容"推荐。

30分钟的教训

约束孕育清晰

有限的时间迫使你严格界定范围。我们没有构建复杂的多维内容分类系统。我们在下拉列表中添加了三个词。

基础设施复利

每个先前的技术决策(数据库架构设计、同步脚本架构、TypeScript类型安全)都使这变得快速。良好的基础不仅防止问题——它们加速增长。

快速发布,更快验证

我们本可以花3小时规划完美的文章类型系统。相反,我们在30分钟内发布并用真实数据验证。现在我们知道它是否有用。

元层次

这篇博客文章?在Updates CMS中编写,分类为postType: build,自动同步到Hugo,部署到三种语言。它在Updates页面上有一个蓝色扳手徽章,因为它是build类型的文章。

发布时间:从"保存草稿"到"检查实时网站"6分钟。

这才是真正的成就。不是功能。是让功能如此容易的机制。


完整实施细节:


Pitchmasters演讲倒计时:3天。现在我有了更好的故事要讲。

想关注构建过程? LinkedInTwitter/X