<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Engineering Practice on ByF (BaiFan) · Daily Deep Think</title><link>https://blog.baifan.site/en/categories/engineering-practice/</link><description>Recent content in Engineering Practice on ByF (BaiFan) · Daily Deep Think</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>blog@baifan.site (ByF (BaiFan))</managingEditor><webMaster>blog@baifan.site (ByF (BaiFan))</webMaster><copyright>CC BY-NC 4.0</copyright><lastBuildDate>Tue, 29 Sep 2026 00:40:00 +0800</lastBuildDate><atom:link href="https://blog.baifan.site/en/categories/engineering-practice/index.xml" rel="self" type="application/rss+xml"/><item><title>OpenAI Gave Me Six Months of ChatGPT Pro for Maintaining Open Source</title><link>https://blog.baifan.site/en/codex-for-open-source/</link><pubDate>Sat, 19 Sep 2026 23:02:35 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/codex-for-open-source/</guid><description>&lt;p&gt;An email popped up in my inbox today: &amp;ldquo;You can just build things, enjoy 6 months on us.&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;Sender: the Codex team at OpenAI. The first line, in big letters: &amp;ldquo;You&amp;rsquo;re in.&amp;rdquo; Then: &amp;ldquo;Thanks for maintaining open source projects.&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;I stared at that line three times and couldn&amp;rsquo;t help laughing out loud.&lt;/p&gt;&#10;&lt;figure class="my-6 flex flex-col items-center"&gt;&#10; &lt;img src="https://blog.baifan.site/pictures/posts/codex-open-source-email.png" alt="Free ride: secured" style="max-width: 800px;" class="rounded-lg shadow-md mx-auto center" loading="lazy" /&gt;&#10; &#10; &lt;figcaption class="mt-2 text-center text-sm text-neutral-500 dark:text-neutral-400 italic"&gt;Free ride: secured&lt;/figcaption&gt;&#10; &#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;A while back I filled out their Codex for Open Source application on a whim. Didn&amp;rsquo;t expect much — I just listed the PRs I&amp;rsquo;d submitted to context-mode, plus my own byf and dev-skills.&lt;/p&gt;</description></item><item><title>Cursor Local (Private Inference) Downloads for All Platforms</title><link>https://blog.baifan.site/en/cursor-local-download/</link><pubDate>Tue, 18 Aug 2026 14:42:15 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/cursor-local-download/</guid><description>&lt;p&gt;The direct links below always point to the latest local build:&lt;/p&gt;&#10;&lt;!-- more --&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Windows&#10; &lt;div id="windows" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#windows" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Version&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Link&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;x64 (user installer)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://api2.cursor.sh/updates/download/golden/win32-x64-user/cursor-local/latestWindows" target="_blank" rel="noreferrer"&gt;https://api2.cursor.sh/updates/download/golden/win32-x64-user/cursor-local/latestWindows&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ARM64&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://api2.cursor.sh/updates/download/golden/win32-arm64-user/cursor-local/latestWindows" target="_blank" rel="noreferrer"&gt;https://api2.cursor.sh/updates/download/golden/win32-arm64-user/cursor-local/latestWindows&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10;&lt;h2 class="relative group"&gt;macOS&#10; &lt;div id="macos" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#macos" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Version&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Link&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Apple Silicon (M-series, recommended)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://api2.cursor.sh/updates/download/golden/darwin-arm64-user/cursor-local/latestMac" target="_blank" rel="noreferrer"&gt;https://api2.cursor.sh/updates/download/golden/darwin-arm64-user/cursor-local/latestMac&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Intel chips&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://api2.cursor.sh/updates/download/golden/darwin-x64-user/cursor-local/latestMac" target="_blank" rel="noreferrer"&gt;https://api2.cursor.sh/updates/download/golden/darwin-x64-user/cursor-local/latestMac&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Universal&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://api2.cursor.sh/updates/download/golden/darwin-universal-user/cursor-local/latestMac" target="_blank" rel="noreferrer"&gt;https://api2.cursor.sh/updates/download/golden/darwin-universal-user/cursor-local/latestMac&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Linux (Ubuntu/Debian)&#10; &lt;div id="linux-ubuntudebian" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#linux-ubuntudebian" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Version&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Link&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;x64 AppImage&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://api2.cursor.sh/updates/download/golden/linux-x64-user/cursor-local/latestLinux" target="_blank" rel="noreferrer"&gt;https://api2.cursor.sh/updates/download/golden/linux-x64-user/cursor-local/latestLinux&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ARM64 AppImage&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://api2.cursor.sh/updates/download/golden/linux-arm64-user/cursor-local/latestLinux" target="_blank" rel="noreferrer"&gt;https://api2.cursor.sh/updates/download/golden/linux-arm64-user/cursor-local/latestLinux&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;</description></item><item><title>Give AI a Rulebook: From Wishing Upon It to Making It Behave</title><link>https://blog.baifan.site/en/give-ai-a-rulebook/</link><pubDate>Wed, 05 Aug 2026 14:28:39 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/give-ai-a-rulebook/</guid><description>&lt;p&gt;Let me start with something that actually happened.&lt;/p&gt;&#10;&lt;p&gt;In early 2025, I added a feature to an internal system: export to Excel. Small requirement — I didn&amp;rsquo;t even write it up, just typed &amp;ldquo;add an export button to the list page&amp;rdquo; into the chat box.&lt;/p&gt;&#10;&lt;p&gt;The AI delivered in ten minutes. Frontend changes, new endpoint, SQL — all in one pass. I was pleased when I opened the PR, right up until review revealed: the export columns didn&amp;rsquo;t match the list page, a hundred thousand rows would hang the service outright, there was no permission check, and the tests only covered the happy path.&lt;/p&gt;</description></item><item><title>Agent Interview Questions: Who Has Actually Done the Work</title><link>https://blog.baifan.site/en/agent-interview-questions/</link><pubDate>Mon, 13 Jul 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/agent-interview-questions/</guid><description>&lt;!-- more --&gt;&#10;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Attachment download&lt;/strong&gt;: &lt;a href="https://blog.baifan.site/files/agent-interview-questions.pdf" &gt;Agent Interview Questions.pdf&lt;/a&gt; — handy for printing or offline reading&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 class="relative group"&gt;Why Would You Need Multiple Agents&#10; &lt;div id="why-would-you-need-multiple-agents" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-would-you-need-multiple-agents" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;An opening question to separate people who have &amp;ldquo;read the articles&amp;rdquo; from people who have &amp;ldquo;actually built one&amp;rdquo;.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;The bad answer:&lt;/strong&gt; &amp;ldquo;Multi-agent enables parallel processing, which improves system throughput and robustness.&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;Every word of that is correct, but if you follow up with &amp;ldquo;so after splitting into two agents, did throughput actually double?&amp;rdquo;, they stall. The reality: inter-agent communication has overhead, coordination has complexity, and after the split total throughput may well drop. Adding agents is not like adding CPU cores.&lt;/p&gt;</description></item><item><title>What Trellis Does, and Whether It Fixes AI Coding Standards</title><link>https://blog.baifan.site/en/trellis-ai-coding-framework-guide/</link><pubDate>Thu, 30 Apr 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/trellis-ai-coding-framework-guide/</guid><description>&lt;p&gt;The most annoying thing about coding with AI isn&amp;rsquo;t that it writes bugs — it&amp;rsquo;s that it writes them differently every time. Same requirement, three conversations, three implementations. The standards live in your head; the AI doesn&amp;rsquo;t know them.&lt;/p&gt;&#10;&lt;!-- more --&gt;&#10;&lt;p&gt;Trellis tries to solve this. It&amp;rsquo;s not yet another AI coding assistant — it&amp;rsquo;s a framework for injecting project standards into AI: the AI reads your standards before writing code, gets checked automatically after writing, and once the check is done, anything newly learned gets distilled back into the standards. The more you use it, the better the AI knows your project.&lt;/p&gt;</description></item><item><title>Dissecting a PPT Agent: From Research to SVG Output</title><link>https://blog.baifan.site/en/ppt-agent-workflow-deep-dive/</link><pubDate>Tue, 28 Apr 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/ppt-agent-workflow-deep-dive/</guid><description>&lt;p&gt;Conclusion first: this is not another &amp;ldquo;type a topic → force it into a template → output garbage&amp;rdquo; AI PPT tool.&lt;/p&gt;&#10;&lt;p&gt;It runs a complete expert workflow — requirement research, material retrieval, outline planning, layout planning, visual design — where every step allows manual fine-tuning, or the whole thing can run automatically end to end. In terms of output, pages generated with Gemini 3 Flash already reach commercial delivery quality.&lt;/p&gt;</description></item><item><title>All the Tmux You'll Ever Use: Sessions, Panes, Detach</title><link>https://blog.baifan.site/en/tmux-practical-guide/</link><pubDate>Tue, 21 Apr 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/tmux-practical-guide/</guid><description>&lt;p&gt;You SSH into a server to run a long task, the network drops, and the task is gone. Tmux exists to solve exactly this — it decouples the terminal session from the window, so the process keeps running after you close the terminal.&lt;/p&gt;&#10;&lt;!-- more --&gt;&#10;&lt;figure class="my-6 flex flex-col items-center"&gt;&#10; &lt;img src="https://blog.baifan.site/pictures/posts/tmux-session-window-pane.svg" alt="Tmux session-window-pane structure diagram" style="max-width: 800px;" class="rounded-lg shadow-md mx-auto center" loading="lazy" /&gt;&#10; &#10; &lt;figcaption class="mt-2 text-center text-sm text-neutral-500 dark:text-neutral-400 italic"&gt;Tmux&amp;#39;s three layers: a Session contains Windows, a Window contains Panes&lt;/figcaption&gt;&#10; &#10;&lt;/figure&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;The Core Problem It Solves&#10; &lt;div id="the-core-problem-it-solves" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-core-problem-it-solves" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;An ordinary terminal window is bound to its processes. Close the window and the processes die. Same story when SSH drops.&lt;/p&gt;</description></item><item><title>AI API Suffixes: What They Mean and Why They Exist</title><link>https://blog.baifan.site/en/ai-api-suffixes-explained/</link><pubDate>Tue, 14 Apr 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/ai-api-suffixes-explained/</guid><description>&lt;p&gt;We often see URLs like these:&lt;/p&gt;&#10;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-plaintext" data-lang="plaintext"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/v1/chat/completions&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/v1/messages&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/v1/responses&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;/div&gt;&#10;&lt;p&gt;These suffixes are not decoration — they define a complete request and response data structure. Pick the wrong one and your code either errors out or silently loses data.&lt;/p&gt;&#10;&lt;!-- more --&gt;&#10;&lt;p&gt;This article starts at &lt;code&gt;/v1/completions&lt;/code&gt; and works its way to &lt;code&gt;/v1/responses&lt;/code&gt;, explaining what each suffix stands for, why it was designed that way, and where the common pitfalls are.&lt;/p&gt;</description></item><item><title>Oracle's Free 4-Core 24GB Server: From Signup to Running</title><link>https://blog.baifan.site/en/oracle-free-vps-guide/</link><pubDate>Tue, 07 Apr 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/oracle-free-vps-guide/</guid><description>&lt;p&gt;Oracle&amp;rsquo;s Always Free plan gives you a 4-core, 24 GB ARM server every month — no expiry, no charge. The same specs cost $80–100/month on AWS. This post strings together signup, pitfalls, instance creation, and keep-alive.&lt;/p&gt;&#10;&lt;!-- more --&gt;&#10;&lt;figure class="my-6 flex flex-col items-center"&gt;&#10; &lt;img src="https://blog.baifan.site/pictures/posts/oracle-free-vps-flow.svg" alt="Oracle free VPS full workflow" style="max-width: 800px;" class="rounded-lg shadow-md mx-auto center" loading="lazy" /&gt;&#10; &#10; &lt;figcaption class="mt-2 text-center text-sm text-neutral-500 dark:text-neutral-400 italic"&gt;Oracle free VPS: the full path from preparation to running&lt;/figcaption&gt;&#10; &#10;&lt;/figure&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;What You Get&#10; &lt;div id="what-you-get" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-you-get" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Oracle&amp;rsquo;s free tier is called &lt;strong&gt;Always Free&lt;/strong&gt;. Not a trial, not a limited-time promo.&lt;/p&gt;</description></item><item><title>Codex Keeps Reconnecting? Four Fixes</title><link>https://blog.baifan.site/en/codex-websocket-reconnect-fix/</link><pubDate>Tue, 31 Mar 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/codex-websocket-reconnect-fix/</guid><description>&lt;!-- more --&gt;&#10;&lt;p&gt;Codex talks to the ChatGPT backend over WebSocket by default. If your network path involves Clash, a corporate proxy, cross-border transit, or Cloudflare challenge pages, that long-lived WebSocket gets killed easily — and you end up staring at &lt;code&gt;Reconnecting... 1/5&lt;/code&gt; over and over. Turn off WebSocket and switch to plain HTTP streaming requests, and the problem mostly disappears.&lt;/p&gt;&#10;&lt;figure class="my-6 flex flex-col items-center"&gt;&#10; &lt;img src="https://blog.baifan.site/pictures/posts/codex-websocket-reconnect-solutions.svg" alt="Comparison of the four fixes" style="max-width: 900px;" class="rounded-lg shadow-md mx-auto " loading="lazy" /&gt;&#10; &#10; &lt;figcaption class="mt-2 text-center text-sm text-neutral-500 dark:text-neutral-400 italic"&gt;Comparison of the four fixes&lt;/figcaption&gt;&#10; &#10;&lt;/figure&gt;&#10;&#10;&#10;&lt;h2 class="relative group"&gt;Why WebSocket Breaks Behind Proxies&#10; &lt;div id="why-websocket-breaks-behind-proxies" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-websocket-breaks-behind-proxies" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;The WebSocket protocol starts with an HTTP Upgrade request; only after the server returns 101 does it switch to the long-lived connection. That long-lived connection is exactly where the problem sits — proxy servers, firewalls, and CDN nodes all run timeout policies on idle connections, and Cloudflare&amp;rsquo;s challenge mechanism can inject an interstitial page mid-path. Any link in that chain kills the connection, and the Codex client starts &lt;code&gt;Reconnecting&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Third-Party Telegram Clients: What to Use and What to Avoid</title><link>https://blog.baifan.site/en/third-party-telegram-clients/</link><pubDate>Tue, 24 Mar 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/third-party-telegram-clients/</guid><description>&lt;p&gt;Conclusion first: there are a lot of third-party Telegram clients, quality varies wildly, and you should avoid the closed-source ones as a rule. Since 2021, Telegram has required first-time registration to receive its verification code on the official mobile client — desktop and third-party clients can&amp;rsquo;t register directly. That&amp;rsquo;s already a signal.&lt;/p&gt;&#10;&lt;!-- more --&gt;&#10;&lt;figure class="my-6 flex flex-col items-center"&gt;&#10; &lt;img src="https://blog.baifan.site/pictures/posts/third-party-telegram-clients-overview.svg" alt="Distribution of third-party Telegram clients" style="max-width: 800px;" class="rounded-lg shadow-md mx-auto center" loading="lazy" /&gt;&#10; &#10; &lt;figcaption class="mt-2 text-center text-sm text-neutral-500 dark:text-neutral-400 italic"&gt;Third-party Telegram clients by platform: an overview&lt;/figcaption&gt;&#10; &#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;This post is a curated list. The source is a roundup post by &lt;a href="https://t.me/LCGFX/2794" target="_blank" rel="noreferrer"&gt;Telegram&amp;rsquo;s @LCGFX&lt;/a&gt;; I&amp;rsquo;ve reorganized it by platform and added open-source status and risk judgments.&lt;/p&gt;</description></item><item><title>SMS Verification Platforms: My Honest, Ad-Free Rundown</title><link>https://blog.baifan.site/en/sms-verification-platforms/</link><pubDate>Tue, 10 Mar 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/sms-verification-platforms/</guid><description>&lt;p&gt;Signing up for services like GPT, Claude, or Telegram needs a number that can receive verification codes — but you may not want to hand over your own phone number. That demand spawned a batch of SMS verification platforms: some free, some paid, some aimed at developers. Here are four I&amp;rsquo;ve actually used; as of May 20, 2026, all were still accessible. Platform status changes at any time, so open the site and check yourself before using one.&lt;/p&gt;</description></item><item><title>The Engineering Reality of Multi-Agent Collaboration: Triggers, Topologies, and Deterministic Merging</title><link>https://blog.baifan.site/en/multi-agent-collaboration-engineering/</link><pubDate>Tue, 03 Mar 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/multi-agent-collaboration-engineering/</guid><description>&lt;p&gt;Packing multiple probabilistically sampled large language model instances into a single codebase or production pipeline is, fundamentally, constructing a distributed system over an unreliable network using stochastic state machines. The axiomatic foundations of classical distributed computing—deterministic state transitions, reproducible failure modes, Byzantine fault tolerance, and atomic commits—collapse almost entirely when applied to modern generative models.&lt;/p&gt;&#10;&lt;!-- more --&gt;&#10;&lt;p&gt;Tech social media abounds with utopian product demos: one agent searches documentation, another implements business logic, a third writes unit tests, and a fourth conducts code review, while an orchestrator agent glides over the process like an infallible engineering manager. Yet anyone who has pushed such topologies into a 500,000-line monolithic repository or a high-concurrency production environment knows the reality: the system rapidly degenerates into distributed chaos. Unsynchronized modifications cause silent overwrites and split-brain states; non-deterministic rollouts cause cognitive divergence; token consumption explodes in a positive-feedback avalanche; and parent and child processes lock each other in cognitive livelocks.&lt;/p&gt;</description></item><item><title>Reverse Engineering Claude Science: From 54 Tables to Modern TCM</title><link>https://blog.baifan.site/en/ai-agent-platform-to-tcm-future/</link><pubDate>Fri, 20 Feb 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/ai-agent-platform-to-tcm-future/</guid><description>&lt;p&gt;A 67 MB DMG installer, 164 MB unpacked, hiding Anthropic&amp;rsquo;s Claude Science (internal codename Operon). After reverse engineering it, I found 54 SQLite tables, a 9-layer security model, 30+ bioinformatics skills, and a complete AI agent platform for computational biology.&lt;/p&gt;&#10;&lt;p&gt;On the other side is TCMSP, an AI-native Traditional Chinese Medicine systems pharmacology platform under active development. Looking at the two projects side by side, some design ideas are worth cross-referencing.&lt;/p&gt;</description></item><item><title>A Guide to SSH Remote Development in the Codex App</title><link>https://blog.baifan.site/en/codex-ssh-remote-development-guide/</link><pubDate>Tue, 10 Feb 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/codex-ssh-remote-development-guide/</guid><description>&lt;!-- more --&gt;&#10;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Update note&lt;/strong&gt;: This post is based on the Codex App as of May 2026. SSH Remote is still in alpha, and the configuration methods and UI entry points may change with new releases. If anything here has gone stale, refer to the &lt;a href="https://github.com/openai/codex" target="_blank" rel="noreferrer"&gt;official documentation&lt;/a&gt; for the latest.&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;p&gt;The Codex App now supports connecting to remote machines over SSH; the feature is currently in alpha.&lt;/p&gt;&#10;&lt;p&gt;If you develop on remote servers, train models, or run environments there, this is worth a try. It lets you connect to a remote server directly inside Codex and work in the remote filesystem and shell — no more jumping back and forth between a local terminal, VSCode Remote, SSH, and tmux.&lt;/p&gt;</description></item><item><title>Linux Out of Memory? ZRAM Compression and Practical Config</title><link>https://blog.baifan.site/en/zram-memory-optimization-linux/</link><pubDate>Sat, 31 Jan 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/zram-memory-optimization-linux/</guid><description>&lt;!-- more --&gt;&#10;&lt;p&gt;Running out of memory is the norm on Linux devices — especially small-memory VPSes, Raspberry Pis, and old laptops. The traditional fix is adding a SWAP partition, but many people find the box actually gets laggier after adding one.&lt;/p&gt;&#10;&lt;p&gt;Starting from how things work under the hood, this post compares SWAP and ZRAM so you know exactly &lt;strong&gt;which to use in which scenario, and how to configure them&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>VPS Scene 101: The Complete Dictionary of Hosting Slang</title><link>https://blog.baifan.site/en/vps-glossary-jargon-guide/</link><pubDate>Tue, 27 Jan 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/vps-glossary-jargon-guide/</guid><description>&lt;!-- more --&gt;&#10;&lt;p&gt;The VPS scene runs on a distinctive system of slang that reads like hieroglyphics to newcomers. This post collects the common terms and abbreviations so you can get up to speed fast.&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;People and Identity&#10; &lt;div id="people-and-identity" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#people-and-identity" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&#10;&lt;h3 class="relative group"&gt;MJJ&#10; &lt;div id="mjj" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#mjj" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h3&gt;&#10;&lt;p&gt;Originally referred to users hanging around the Hostloc forum; now a blanket term for anyone obsessed with tinkering with VPSes. It comes from a Hostloc forum meme, short for 买鸡鸡/没鸡鸡 (&amp;ldquo;bought a chicken / no chicken&amp;rdquo; — interpret it however you like). It started as a slur but gradually evolved into a self-deprecating badge of in-group identity, and in most contexts today it carries no malice (though some also use MJJ for players who pay little and demand much).&lt;/p&gt;</description></item><item><title>Pi Coding Agent: The Complete Guide to Minimalist Coding</title><link>https://blog.baifan.site/en/pi-coding-agent-complete-guide/</link><pubDate>Tue, 13 Jan 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/pi-coding-agent-complete-guide/</guid><description>&lt;!-- more --&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Preface&#10; &lt;div id="preface" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#preface" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;In the author&amp;rsquo;s own words, Pi Coding Agent is an &lt;strong&gt;opinionated, minimalist&lt;/strong&gt; coding agent. After using it for a while, I consider it one of the best AI agent CLIs available today.&lt;/p&gt;&#10;&lt;p&gt;Projects that blow up tend to attract low-quality issues and AI-generated PRs, and the name &lt;strong&gt;pi&lt;/strong&gt; is a clever touch — it gets associated with the mathematical constant, which is exactly what the author intended: keep the profile low and the community quality high.&lt;/p&gt;</description></item><item><title>Self-Hosted AI API Pipeline: From Domain Email to Sub2API</title><link>https://blog.baifan.site/en/self-hosted-ai-api-pipeline/</link><pubDate>Tue, 06 Jan 2026 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/self-hosted-ai-api-pipeline/</guid><description>&lt;p&gt;I originally wrote this post for a friend; I&amp;rsquo;m just cleaning it up a bit and publishing it.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ll assume you&amp;rsquo;ve never touched domain email, Cloudflare Workers, SMS-code platforms, registration bots, or AI API relays before. Wherever possible I&amp;rsquo;ll explain things in terms of &amp;ldquo;why this step exists&amp;rdquo; and &amp;ldquo;how to confirm you did it right&amp;rdquo;. When you get stuck, you can just paste the error into an AI and ask — in my testing, Codex handles this kind of deployment doc and config troubleshooting reasonably well. But sanitize API keys, passwords, cookies, and tokens before sending them to an AI. Don&amp;rsquo;t ask me how I know.&lt;/p&gt;</description></item><item><title>Claude Skills Progressive Disclosure via MCP: Skill in Anywhere</title><link>https://blog.baifan.site/en/mcp-claude-skills-progressive-disclosure/</link><pubDate>Fri, 26 Dec 2025 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/mcp-claude-skills-progressive-disclosure/</guid><description>&lt;figure&gt;&#10; &lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="auto"&#10; alt="Claude Code Skill in Anywhere"&#10; width="2560"&#10; height="1440"&#10; src="https://blog.baifan.site/pictures/note/claudecodeskills_hu_3030e75c3d7e5ea7.png"&#10; srcset="https://blog.baifan.site/pictures/note/claudecodeskills_hu_3030e75c3d7e5ea7.png 800w,/pictures/note/claudecodeskills_hu_48299efe0d2363fe.png 1280w"&#10; sizes="(min-width: 768px) 50vw, 65vw"&#10; data-zoom-src="https://blog.baifan.site/pictures/note/claudecodeskills.png"&#10; /&gt;&#10; &#10; &lt;figcaption&gt;Claude Code Skill in Anywhere&lt;/figcaption&gt;&#10; &lt;/figure&gt;&#10;&#10;&lt;h1 class="relative group"&gt;Implementing Claude Skills&amp;rsquo; Progressive Disclosure via MCP: Reusing Claude Code Skills Anywhere&#10; &lt;div id="implementing-claude-skills-progressive-disclosure-via-mcp-reusing-claude-code-skills-anywhere" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#implementing-claude-skills-progressive-disclosure-via-mcp-reusing-claude-code-skills-anywhere" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&#10;&lt;h3 class="relative group"&gt;— A feasible approach to capability encapsulation and dynamic context extension (technical proposal and verification)&#10; &lt;div id="-a-feasible-approach-to-capability-encapsulation-and-dynamic-context-extension-technical-proposal-and-verification" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-a-feasible-approach-to-capability-encapsulation-and-dynamic-context-extension-technical-proposal-and-verification" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h3&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Preface&#10; &lt;div id="preface" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#preface" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Claude Skills introduced a remarkably advanced concept:&#10;&lt;strong&gt;encapsulating professional knowledge, process standards, and task methods into &amp;ldquo;skill packages&amp;rdquo; that load dynamically, only when a task actually needs them.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>PDF2Markdown: Complete Guide to Smart PDF Article Extraction</title><link>https://blog.baifan.site/en/pdf2markdown-intelligent-pdf-extraction-tool/</link><pubDate>Tue, 25 Nov 2025 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/pdf2markdown-intelligent-pdf-extraction-tool/</guid><description>&lt;h1 class="relative group"&gt;PDF2Markdown - An Intelligent Article Extraction Tool for Large PDF Documents&#10; &lt;div id="pdf2markdown---an-intelligent-article-extraction-tool-for-large-pdf-documents" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pdf2markdown---an-intelligent-article-extraction-tool-for-large-pdf-documents" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;&lt;a href="https://python.org" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Python Version"&#10; src="https://img.shields.io/badge/python-3.13&amp;#43;-blue.svg"&#10; &gt;&lt;/figure&gt;&#10;&lt;/a&gt;&#10;&lt;a href="https://github.com/astral-sh/ruff" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Code Style"&#10; src="https://img.shields.io/badge/code%20style-ruff-green.svg"&#10; &gt;&lt;/figure&gt;&#10;&lt;/a&gt;&#10;&lt;a href="https://mypy.readthedocs.io/" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="Type Checking"&#10; src="https://img.shields.io/badge/type%20checking-mypy-blue.svg"&#10; &gt;&lt;/figure&gt;&#10;&lt;/a&gt;&#10;&lt;a href="LICENSE" &gt;&lt;figure&gt;&lt;img&#10; class="my-0 rounded-md"&#10; loading="lazy"&#10; decoding="async"&#10; fetchpriority="low"&#10; alt="License"&#10; src="https://img.shields.io/badge/license-MIT-green.svg"&#10; &gt;&lt;/figure&gt;&#10;&lt;/a&gt;&lt;/p&gt;&#10;&#10;&lt;h2 class="relative group"&gt;Project Overview&#10; &lt;div id="project-overview" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#project-overview" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;PDF2Markdown is an intelligent content extraction tool built specifically for large scanned PDF files. It combines traditional OCR technology with modern AI large language models to intelligently extract pure article content from documents, automatically filtering out non-article elements such as images and tables. Mixed Chinese-English documents are fully supported.&lt;/p&gt;</description></item><item><title>Distributed Heartbeats and Failure Detection: Partitions, Leases, and Deterministic Design</title><link>https://blog.baifan.site/en/distributed-system-heartbeat-mechanism/</link><pubDate>Sat, 27 Sep 2025 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/distributed-system-heartbeat-mechanism/</guid><description>&lt;p&gt;Anyone who has debugged an early-morning production outage knows that the most dangerous failure in a distributed system is rarely a clean crash (Fail-Stop). It is the gray failure: transient unresponsiveness caused by Stop-the-World garbage collection, virtual machine CPU steal time, packet drops in network switches, or TCP half-open sockets. In an asynchronous network, physical wall-clock time offers no causal order guarantees. Handing a periodic ping packet the unilateral authority to decide node mortality turns that probe into a hair-trigger for cascading failovers and split-brain states.&lt;/p&gt;</description></item><item><title>PostgreSQL + pgvector in Docker: A Complete Setup Guide</title><link>https://blog.baifan.site/en/postgresql-pgvector-docker-installation-guide/</link><pubDate>Tue, 02 Sep 2025 14:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/postgresql-pgvector-docker-installation-guide/</guid><description>&lt;h1 class="relative group"&gt;🐘 Installing and Deploying PostgreSQL + pgvector in Docker&#10; &lt;div id="-installing-and-deploying-postgresql--pgvector-in-docker" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-installing-and-deploying-postgresql--pgvector-in-docker" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;p&gt;This article shows how to quickly deploy a PostgreSQL database with the &lt;strong&gt;pgvector&lt;/strong&gt; extension in a &lt;strong&gt;Docker Compose&lt;/strong&gt; environment, so your local or development setup can support vector retrieval and AI applications (LangChain, RAG, semantic search, and the like).&lt;/p&gt;&#10;&lt;hr&gt;&#10;&#10;&lt;h2 class="relative group"&gt;📦 1. Prepare the Environment&#10; &lt;div id="-1-prepare-the-environment" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-1-prepare-the-environment" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;p&gt;Make sure your system has:&lt;/p&gt;</description></item><item><title>Timeline Recorder: Technical Architecture from MVP to Scale</title><link>https://blog.baifan.site/en/time-line-editor-architecture-design/</link><pubDate>Mon, 14 Jul 2025 09:00:00 +0800</pubDate><author>blog@baifan.site (ByF (BaiFan))</author><guid>https://blog.baifan.site/en/time-line-editor-architecture-design/</guid><description>&lt;h1 class="relative group"&gt;Timeline Recorder: Requirements &amp;amp; Technical Architecture (MVP → Scalable)&#10; &lt;div id="timeline-recorder-requirements--technical-architecture-mvp--scalable" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#timeline-recorder-requirements--technical-architecture-mvp--scalable" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h1&gt;&#10;&lt;blockquote&gt;&lt;p&gt;Target: personal/small-team local or centralized deployment; web + CLI + TUI; text/images/linked audio and video; draft/publish; users may edit only their own content; everyone&amp;rsquo;s content viewable, with mute support; no built-in transcription; decentralization as an optional later capability.&lt;/p&gt;&#10;&lt;/blockquote&gt;&lt;hr&gt;&#10;&#10;&lt;h2 class="relative group"&gt;0. Background and Goals&#10; &lt;div id="0-background-and-goals" class="anchor"&gt;&lt;/div&gt;&#10; &#10; &lt;span&#10; class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;&#10; &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#0-background-and-goals" aria-label="Anchor"&gt;#&lt;/a&gt;&#10; &lt;/span&gt;&#10; &#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Goal&lt;/strong&gt;: build a &amp;ldquo;local-first, centrally deployable&amp;rdquo; timeline recorder that guarantees data sovereignty and simple deployment; an extremely fast capture experience without sacrificing a clean timeline.&lt;/p&gt;</description></item></channel></rss>