<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/_style/default.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>中文 — lepture</title><description>关于编程、开源、阅读、旅行与日常生活的记录。</description><link>https://lepture.com/zh/</link><language>zh</language><atom:link href="https://lepture.com/zh/feed.xml" rel="self" type="application/rss+xml"/><image><url>https://lepture.com/avatar.jpg</url><title>lepture</title><link>https://lepture.com/zh/</link></image><item><title>开发 Prosefly</title><link>https://lepture.com/zh/blog/building-prosefly</link><guid isPermaLink="true">https://lepture.com/zh/blog/building-prosefly</guid><description>为什么做 Prosefly、先做了什么，以及 Cloudflare 选型时走过的弯路。</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;为什么又做一个&quot;&gt;为什么又做一个&lt;/h2&gt;
&lt;p&gt;我已经做了 Typlog，为什么又要做 &lt;a href=&quot;/zh/projects/prosefly&quot;&gt;Prosefly&lt;/a&gt;？我觉得现在更适合做静态网站了。尤其是有了 AI 之后，内容保存成 Markdown、MDX 文件，和网站代码放在一起，AI 就可以直接读取、修改，也方便同时调整文章和页面。&lt;/p&gt;
&lt;p&gt;不过，保存成文件和怎样写文章，是两回事。我还是想要一个友好的可视化编辑界面。调整格式、插入图片这些操作，用编辑器做会舒服一些，没有必要每次都去改源码。&lt;/p&gt;
&lt;p&gt;有了 AI，自己做一个 theme 也容易多了。网站可以按自己的想法改，文章需要哪些 frontmatter 字段，也可以跟着网站一起定义。比如写书评时，想加作者和评分，就可以在 schema 里加上。&lt;/p&gt;
&lt;p&gt;在 Typlog 里，这些字段都是我预先定义好的，用户不方便改。Prosefly 则直接读取项目中用文本定义的 frontmatter schema，再按它生成编辑界面。这样我做新模板时，就不用先考虑平台有没有提供对应的字段。&lt;/p&gt;
&lt;h2 id=&quot;开发顺序&quot;&gt;开发顺序&lt;/h2&gt;
&lt;p&gt;我先花了很久设计 visual editor。当时还没有开始做完整的平台，主要精力都放在编辑器上：最终保存的是 Markdown、MDX，写作时又希望有可视化的体验，我想先把这一部分做得差不多。&lt;/p&gt;
&lt;p&gt;等编辑器接近完成，才开始做 Prosefly。不过，之后也没有马上写 web app。我先创建了 GitHub org，做了几个 Astro theme 和 template，然后才开始开发 Prosefly platform。&lt;/p&gt;
&lt;p&gt;先做模板，有机会把内容组织和 frontmatter 的定义放进一个实际的网站里，看看编辑器怎样配合。到开始写平台时，已经有了可以编辑的内容，也有了使用这些内容的网站。&lt;/p&gt;
&lt;h2 id=&quot;选型走了弯路&quot;&gt;选型走了弯路&lt;/h2&gt;
&lt;p&gt;平台用的是 Cloudflare Workers，需要按 org 分开管理数据。我一开始选了 &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/&quot;&gt;Workers for Platforms&lt;/a&gt;。它可以让平台部署和运行用户的 Worker 代码，但我当时主要想解决的是不同组织的数据分离。&lt;/p&gt;
&lt;p&gt;结果把项目弄得特别复杂。编辑器已经花了很多时间，模板也做了几个，到了平台这一层，却越做越麻烦，一度打算放弃。&lt;/p&gt;
&lt;p&gt;后来才发现，&lt;a href=&quot;https://developers.cloudflare.com/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt; 就可以做我需要的数据分离。每个 org 的数据放在各自的 Durable Object 里，应用还是同一个应用，不需要为此去部署和管理不同的 Worker。换成这个方案后，平台简单了很多，我才继续做了下去。&lt;/p&gt;</content:encoded></item></channel></rss>