Redprints CFP:基于Rails + Inertia.js构建的开源CFP管理应用
在Evil Martians,我们在编写定制软件时拥有强大的开源优先文化。这意味着我们始终在思考可以将项目的哪些部分作为库或工具开源并与社区分享。今天,我们很高兴推出Redprints CFP——一个为最近SF Ruby会议提案选择流程提供支持的开源CFP应用。
项目命名由来
“Redprints”一词是“blueprint”和“Red planet”的文字游戏(毕竟我们来自火星)。Redprints是一个完整的、生产就绪的应用程序,既展示了现代开发实践,又解决了实际问题。
为什么选择自建CFP应用?
首先,我们对现有的商业解决方案都不满意——特别是考虑到它们的价格和限制。作为各种CFP平台的常规用户,我们知道我们可以做得更好。
其次,我们一直在寻找在真实场景中测试新技术的方法。构建CFP应用为我们提供了在生产环境中挑战Inertia.js for Rails的绝佳机会。
Redprints CFP应用功能概览
提案提交
提案提交过程简单直接:
- 演讲者通过社交登录注册(默认支持GitHub和Google;其他平台可通过OmniAuth插件轻松配置)
- 提交表单包含熟悉的字段(可配置标签和限制),并允许在一个地方更新演讲者和提案详情
- 演讲者可以创建草稿稍后完成
管理和评审提案
组织者获得一个管理仪表板,用于管理整个CFP流程:
- 设置评估规则和标准并分配评审人
- 跟踪评估进度并做出最终决定
应用支持为不同的轨道或评审人组设置不同的评估流程。评审人可以看到或看不到演讲者详情(您可以在这些模式之间随时切换)。
技术亮点
Inertia.js + Rails组合
我们选择了手工制作的后端和氛围编码的前端。这也是我们选择Inertia.js和React的原因之一:能够快速制作外观良好的UI,并轻松复制粘贴到Rails代码库中。
Bundlebun集成
Bundlebun是提供Bun可执行文件并将其集成到Rails资源管道中的gem。单个二进制文件为您带来完整的现代JavaScript运行时!
Avo用于快速管理后台开发
我们在内部应用中使用Avo构建管理面板,对于此类用例来说这是一个改变游戏规则的工具。我们的理念:将所有不需要向非管理员用户公开的内容都保留在Avo中——通过不重复造轮子来节省时间。
表单对象设计
应用程序围绕表单构建:提案表单、评审表单和最终结果提交表单。所有这些表单都超越了典型Active Record模型的职责。
例如,提案表单管理两个模型:提案本身和所有提交者提案共享的演讲者资料。我们将所有字段聚合在一个表单对象中,该类类似于经典模型(更准确地说,是活动模型),并在表单类中处理草稿和最终提交逻辑。
页面对象用于可靠测试
我们使用SitePrism页面对象进行系统测试,遵循我们"System of a Test"系列中的模式。页面对象使我们的测试更易于维护和阅读,对于复杂的表单交互尤其重要。
其他开发工具
- 使用Lookbook进行邮件预览
- 使用Litestream进行SQLite复制
- 使用Overmind和lefthook Ruby gem包装器简化开发工作流程
Redprints CFP已经过生产环境测试且准备就绪。无论您是在组织本地聚会还是国际会议,这个redprint都为您提供了坚实的基础。
探索代码,部署您自己的实例,并告诉我们您用它构建了什么!