# Koya's 个人博客 > 小全栈的开发记录:Cloudflare、AI 应用、SaaS 架构与远程开发。从真实项目出发,分享设计取舍、代码实践和踩坑经验。 作者:Koya。主要语言:简体中文。这里是已发布文章的内容索引;正文、版本背景、发布日期与参考来源见各篇原文。 ## 站点与作者 - [文章列表](https://blog.douni.one/blog): 全部技术文章与项目复盘 - [项目](https://blog.douni.one/projects): 个人项目 - [关于我](https://blog.douni.one/about): 作者 Koya、博客主题与内容来源 - [联系我](https://blog.douni.one/contact): 问题反馈、内容勘误与联系邮箱 - [隐私政策](https://blog.douni.one/privacy): 账号、评论、统计、广告与 Cookie 的使用说明 - [使用条款](https://blog.douni.one/terms): 内容引用、留言与站点使用说明 - [GitHub](https://github.com/virgoone): 作者公开代码 - [X](https://x.com/koyaguo): 作者公开资料 ## 已发布文章 - [把个人博客搬到 Cloudflare:TanStack Start、D1 与 R2 的一次重构](https://blog.douni.one/blog-cloudflare-architecture): 一个 Cloudflare Worker 如何同时运行 TanStack Start 和 Elysia?记录个人博客用 D1、R2 保存内容,保留段落评论,完成服务端渲染、搜索发现与同域访问统计的架构取舍。 - [Claude Code 服务器使用指南:tmux 断线重连与账号风险排查](https://blog.douni.one/claude-code-server-tmux-guide): Claude Code 放到服务器后,SSH 断开怎样找回任务?从 Mac 连接、tmux 会话管理到 continue/resume 恢复,讲清断线、进程退出与账号限制的区别,并给出可验证的排查步骤。 - [从 3 MiB 到 64 MiB:重看 Fluxship 的 Cloudflare 部署方案](https://blog.douni.one/fluxship-cloudflare-node-deployment): 沿着 Fluxship 的 11 个部署提交,复盘 OpenNext、vinext、依赖拆分与运行时修复,再看 Cloudflare 放宽到 64 MiB 后,Node 与 Next.js 项目该怎样部署和验收。 - [一张语文周清卷,怎样从截图走到可修改的 Word](https://blog.douni.one/class-theme-paper-from-source-to-export): 一道题可能有两个空,一次修改要同时出现在学生卷和答案卷里。记录 class 如何把截图里的语文练习,做成能修改、能保存、能打印的 Word 和 PDF。 - [用 Cloudflare 做一本会同步的账本:Open Cookie 的全栈技术设计](https://blog.douni.one/open-cookie-cloudflare-local-first): 从 Cloudflare 双 Worker、D1 与 R2,到 PGlite、Expo SQLite 和 Durable Objects:拆开小鹿记的记账模型、Outbox、幂等、增量同步、冲突处理与 AI 草稿链路。 - [把家搬进浏览器:我用 AI 和 Three.js 做了「噜噜的家」](https://blog.douni.one/lulu-home-3d): 从户型图和实拍照片开始,用 AI、React 与 Three.js 搭出一个能逛房、切换灯光和逗猫的网页。记录坐标与比例、家具还原、门窗穿模、照片猫贴地,以及上线后补齐留言和访问统计的过程。 - [Home Assistant 折腾记:先别动主路由](https://blog.douni.one/home-assistant-planning): Home Assistant 应不应该装在 OpenWrt 主路由上?结合 TR3000 的内存、存储和家电兼容性,记录安装前的方案取舍,以及为什么先让路由器专心负责网络。 - [Mac + 日本服务器:把开发环境留在远端](https://blog.douni.one/mac-japan-server-remote-development): Mac 如何通过 Tailscale、SSH 和 VS Code Remote SSH 使用远程服务器?记录环境配置、tmux 长任务、端口转发,以及连接超时和 Shell 启动问题的排查过程。 - [从 Excel 到班主任工作台:一次本地优先桌面应用实践](https://blog.douni.one/class-local-first-desktop): 记录 class 在 8 月 10—11 日的第一版桌面实践:把班主任日常流程接到本地 SQLite,处理跨日请假、重复积分与数据关联,并完成导出回读和桌面冷启动验收。 - [Cudy TR3000 256MB 版刷 OpenWrt + OpenClash:把小米 AX3000 Mesh 改成全屋 AP](https://blog.douni.one/cudy-tr3000-openwrt-openclash): Cudy TR3000 256MB 版如何刷 OpenWrt、安装 OpenClash,并让小米 AX3000 Mesh 作为全屋 AP?记录固件版本核对、刷机步骤、网络分工和安装命令。 - [Bunship 的 Provider 扩展设计:支付与文件上传如何接入](https://blog.douni.one/bunship-payment-upload-providers): Bunship 如何接入不同支付和上传 Provider?拆解支付事件归一化、订单与积分边界、用户上传目标选择,以及权限校验和资源地址的处理方式。 - [Bunship 生成任务设计:从一次请求到多 Provider 协同](https://blog.douni.one/bunship-ai-generation-workflow): AI 生成任务怎样可靠接入多个 Provider?从 Bunship 实现拆解事务、Dispatch Outbox、队列适配、执行租约和状态回传,说明失败与重复执行的处理边界。 - [把短剧创作搬进一张画布:Shortdrama Studio 开发手记](https://blog.douni.one/shortdrama-studio-development): 把故事、角色、镜头和素材放进同一张画布,再让 Agent、生成任务与协作围绕创作过程运转。记录 Shortdrama Studio 从想法到工作台的十来天。 - [Shortdrama Studio 技术设计:画布、Agent 与异步任务怎样协同](https://blog.douni.one/shortdrama-studio-technical-design): 沿着一次镜头生成,拆开 Shortdrama Studio 的技术设计:素材槽位、任务租约、Yjs 协作与 Agent 执行边界,以及那些由真实故障逼出来的取舍。 - [把 AI 短剧工作台部署到 Cloudflare:Workers、Queues 与双 Durable Object 的分工](https://blog.douni.one/shortdrama-cloudflare-architecture): 沿着 Shortdrama Studio 的实际代码,拆开单 Worker、Turso、R2、生成队列和两类 Durable Object:页面、画布协作、Agent 与异步生成怎样分工,以及最后版本仍需补齐的恢复边界。 - [Bunship 上线了:把 AI 产品背后的重复工作,做成一套起点](https://blog.douni.one/bunship-launch-ai-saas-template): Bunship AI SaaS 模板上线记录:把图片生成、任务队列、积分计费、管理后台和项目文档接成一条完整流程,说明适用场景、已实现能力与启动方式。 - [解锁DeepSeek-R1满血性能-AI 代码助手接入攻略](https://blog.douni.one/deepseek-r1-code-copilot): DeepSeek R1 如何接入 VS Code 代码助手?记录 Cline 第三方 API 与腾讯云 AI 助手的配置,解释满血版和蒸馏版的区别;模型与额度以服务商当前说明为准。 - [Web设计中的单位转换 —— rem、px与rm的对比与应用](https://blog.douni.one/web-rem-px-rm): 梳理 CSS 中 px、em、rem 的参照关系与换算场景,结合根字号和组件字号,理解网页布局与文字尺寸应如何选择长度单位。 - [2025 注册⾹港Stripe个⼈账户并实现全球收款](https://blog.douni.one/worldfirst-stripe-account): 记录 2025 年一次 Stripe 与万里汇关联收款的实践,包括收款账户准备、Stripe 资料填写和身份验证流程。属于历史经验,当前资格与审核要求以平台规则为准。 - [使用 webworker 计算文件 MD5 和获取图片元数据](https://blog.douni.one/web-worker-md5): 大文件计算 MD5 如何减少主线程卡顿?结合 File.slice、SparkMD5 和 Web Worker 做分片计算,并用 OffscreenCanvas 与 ImageBitmap 获取图片宽高及颜色信息。 - [VSCode 中安装 Cline(Claude Dev) 插件使用 Gemini2.0 模型和 Grok 模型](https://blog.douni.one/vscode-cline-claude-dev-gemini2-grok-model): 记录在 VS Code 安装 Cline,并通过 OpenRouter、Google Gemini 或 OpenAI Compatible 接入 Gemini 2.0 与 Grok 的配置过程,附页面生成示例。模型和免费额度属于当时的使用记录。 - [如何本地部署 laf - k8s学习篇](https://blog.douni.one/deploy-laf): 在 Ubuntu 服务器自建 laf 测试环境的实践:准备域名和证书、执行部署、调整运行配置,并排查 Kubernetes DNS、镜像访问及 npm 依赖安装问题。 - [How To Fix - CORS Error while uploading files on Cloudflare R2 using presigned URLs.](https://blog.douni.one/how-to-fix-cors-error-while-uploading-files-on-cloudflare-r2-using-presigned-urls): Cloudflare R2 预签名 URL 上传为什么出现 CORS 或 403?记录一次浏览器 PUT 上传排障,重点检查存储桶 CORS 的 AllowedHeaders 与上传请求的 Content-Type。 - [使用sitemap和stream模块在Next.js项目中生成sitemap](https://blog.douni.one/nextjs-sitemap): 记录 Next.js Pages Router 项目生成 sitemap.xml 的两种方式:使用 sitemap 与 stream 写入 public,或通过 getServerSideProps 动态输出站点地图。 - [在Node.js中使用File、Blob、Buffer、String相互转换并上传至OSS](https://blog.douni.one/file-blob-buffer-string): 围绕 Node.js 与浏览器文件上传,整理 File、Blob、Buffer、String 的转换思路,以及构造文件对象、处理二进制数据和上传 AWS S3 的示例。 - [为什么在 JavaScript 中 0.1 + 0.2 的结果不等于 0.3?](https://blog.douni.one/js-ieee754): 为什么 JavaScript 的 0.1 + 0.2 不等于 0.3?从 IEEE 754 浮点数表示出发,理解二进制小数与计算精度问题。 - [关闭Cloudflare Pages的访问策略](https://blog.douni.one/cf-access-policy): 记录误开启 Cloudflare Pages 访问策略后的恢复过程:通过 API 查询对应 Access 应用标识,再移除不需要的访问策略。操作会改变站点的访问保护。 - [如何使用Notion AI生成一些关于VUE的面试问题和答案](https://blog.douni.one/notion-ai-vue): 一次早期 Notion AI 体验记录:让 AI 推荐 Vue 3 技术选题并生成面试问答,保留当时的生成效果,供观察 AI 技术内容的表现与局限。 - [如何使用 HTTPS 进行本地开发](https://blog.douni.one/local-dev-https): 本地开发什么时候需要 HTTPS?记录使用 mkcert 创建受信任证书、配置本地域名和开发服务的过程,并区分 localhost 与自定义域名下的使用场景。 - [一次奇怪的数据分析需求](https://blog.douni.one/puppeteer-case): 专心写代码时,突然被合作业务方找上门想分析下负责的低代码平台组件使用率和复用率,当时我的表情是:what?你们最开始立项的时候都没提,等我接手平台时提这样的需求我能咋办?不支持啊 - [关于低代码平台的一些思考](https://blog.douni.one/lowcode-notes): 从实际低代码平台开发出发,梳理设计器、物料平台和后台服务的分工,讨论业务模型、组件复用、模板管理,以及怎样判断平台是否真正节省开发时间。 - [如何封装一个自己的瑞士军刀脚手架](https://blog.douni.one/custom-edge-cli-tools): 如何定制前端项目脚手架?复盘 Lark CLI、CLI Service 与项目模板的分工,记录命令组织、构建配置、Webpack 5 升级和企业项目初始化流程。 - [提升流利说图片生产10倍效率的方法](https://blog.douni.one/laix-puppeteer-use): 复盘流利说图片渲染服务:用 Puppeteer 统一内容生产,结合连接池、CDN 缓存与启动参数优化,记录性能数据、业务接入和后续架构方向。 - [使用css给你的网站启用“暗黑模式”](https://blog.douni.one/css-dark-theme): 用 CSS prefers-color-scheme 跟随系统切换深色与浅色主题。记录博客接入暗黑模式的做法,以及当时的浏览器兼容性观察。 - [解决移动端fixed输入框问题](https://blog.douni.one/mobile-input-fixed): 移动端软键盘弹出后,fixed 输入框为什么会被遮挡?记录 iOS 与 Android 下的定位、transform 和焦点事件排查,以及不同方案的实际表现。 - [基于Gitea+Drone搭建自己的CI/CD平台](https://blog.douni.one/drone-ci-build): 在自建 Gitea 上接入 Drone CI/CD:记录 Docker Compose 部署、Nginx 代理与流水线配置,并用 Node.js 项目的推送构建验证自动化流程。 - [搭建自己的Git服务器-Gitea安装教程](https://blog.douni.one/build-own-git-server): 用 Gitea 搭建自己的 Git 服务:比较自托管方案,记录 Docker Compose 安装、数据库初始化、Nginx 代理与 HTTPS 域名配置。 - [深入研究Virtual DOM【转载】](https://blog.douni.one/virtual-dom): 转载文章:深入研究Virtual DOM - [在 Node.js 中为 Restful API 编写单元测试](https://blog.douni.one/write-unit-tests-for-restful-api-in-nodejs): 为 Node.js RESTful API 编写测试的入门记录,结合 F.I.R.S.T 原则和 Arrange、Act、Assert,讨论测试数据隔离、重复执行与结果断言。 - [使用flvjs封装html5 video player](https://blog.douni.one/flv-html5-player): 如何让 HTML5 播放器支持 FLV 视频?记录基于 flv.js 封装轻量播放器的实现思路、资源类型判断,以及 vplyr 项目的代码和演示入口。 - [npm安装node-sass正确姿势](https://blog.douni.one/npm-install-node-sass): 记录旧项目 npm install node-sass 失败时的二进制下载排障,解释 SASS_BINARY_SITE 与 .npmrc 的作用。文中的镜像地址和依赖版本属于历史环境。 - [给hexo增加webp图片支持](https://blog.douni.one/hexo-webp-support): 为 Hexo NexT 主题增加 WebP 图片支持的旧版实践:检测浏览器能力,在懒加载前切换图片地址,并记录首次进入页面时遇到的判断时机问题。 - [使用vue2.0开发的开眼h5实现](https://blog.douni.one/vuejs-01): 用 Vue 2 仿写开眼 H5 的学习记录:从 vue-cli 初始化项目,到 Vue Router、Vuex、视频详情页,再到构建与静态托管部署。 - [安装discourse遇到的各种坑](https://blog.douni.one/discourse): 在 AWS EC2 部署 Discourse 的踩坑记录:安装 Docker、初始化论坛、调整 Nginx 反向代理,并配置 GitHub 第三方登录。适用于了解当时的部署过程。 ## Optional - [RSS](https://blog.douni.one/feed.xml): 最近发布的文章订阅源 - [Sitemap](https://blog.douni.one/sitemap.xml): 可索引页面地址与修改日期