大家好,r/SoloDevelopment。刚刚完成了第一个真正的个人项目,花费了约6周的晚上和周末时间(每天约2-3小时),并且在一份日常工作(一家SaaS公司的软件开发总监)和两个孩子和一位妻子的情况下。

这是什么:Deduce — 每日的浏览器谜题游戏。每个案件都有4-8名嫌疑人、证人陈述、证据和一个类似克莱朵(Cluedo)风格的指控网格(杀手×武器×地点)。有5个难度级别,每个难度级别的解决时间约为5-20分钟。每天都会推出新案件,现有案件库有250多个。

技术栈:

  • React + Vite 前端(TypeScript)

  • Node + Express 后端(TypeScript)

  • Postgres

  • Playwright用于PDF渲染(用于KDP印刷书籍)——在PDFKit出现布局一致性问题后,改用Playwright

  • Coolify在一台本地Proxmox机器上(通过Cloudflare隧道)

  • 自建的Umami用于分析(无cookie,无防御)

  • 运行该项目的实际成本:R0/月。案件生成所需的LLM API费用(Anthropic + OpenAI)是根据项目付费的,按批处理,不按每次游戏付费。

难点在哪儿:

  • 案件生成流程。LLMs会草拟场景,但经常产生矛盾或模糊的解决方案。

写了一个自定义的解答程序,验证每个案件都有一个逻辑上的唯一解答,才会发布。约有40%的LLM草案被拒绝。

  • 指控网格的用户体验。重写了三次。仍然不完全信任它。

  • KDP印刷书籍导出。花费了约5次发布时间来调试一个PDF缓存,结果是它是一个CSS min-height/max-height冲突问题——min-height: 11in在一个遗留样式表中默默地超越了max-height: 864px !important。教训:在Playwright中使用getComputedStyle,当CSS表现出不正常的行为时。

什么是成功的:

  • 日常内容发布计划作为一个强制函数。如果每天必须在午夜发布一个新的案件,就不会再进行无限的润色。

  • 将印刷版视为一个侧边产品,而不是一个端口——同样生成案件数据,但渲染为6×9 KDP内页。一个引擎,两个产品。

  • 平凡的技术栈。React + Postgres + Node = 没有惊喜,所有问题都是自己的问题。

下一步:

  • 移动端用户体验很糟糕(指控网格在窄屏幕上很拥挤)。已知。

  • 已经为Instagram的Reels变体做好准备,但尚未渲染。

  • 有5本KDP印刷书籍在排队中。

如果你想玩:https://deduce.studio

很高兴回答任何关于技术栈、案件验证器、LLM成本数学或KDP管道的问题。特别是欢迎 Solo dev 的问题。