<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>项目 on Coolzr&#39;s Blog</title>
    <link>https://blog.rzlnb.top/project/</link>
    <description>Recent content in 项目 on Coolzr&#39;s Blog</description>
    <image>
      <title>Coolzr&#39;s Blog</title>
      <url>https://blog.rzlnb.top/img/site-icon.png</url>
      <link>https://blog.rzlnb.top/img/site-icon.png</link>
    </image>
    <generator>Hugo -- 0.162.1</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sun, 29 Mar 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.rzlnb.top/project/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>DayDayWeather</title>
      <link>https://blog.rzlnb.top/project/daydayweather/</link>
      <pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.rzlnb.top/project/daydayweather/</guid>
      <description>将单体天气应用重构为高可用、可扩展的微服务系统（Spring Cloud / Redis）</description>
      <content:encoded><![CDATA[<h2 id="快速入口">快速入口</h2>
<p>开源仓库：<a href="https://github.com/rbetree/daydayweather" target="_blank" rel="noopener noreferrer" style="color:#42b983;">https://github.com/rbetree/daydayweather</a>
</p>
<h2 id="一句话介绍">一句话介绍</h2>
<p>DayDayWeather 是一个基于 Spring Boot / Spring Cloud 的天气预报微服务系统，用来练习“从单体到微服务”的拆分、服务治理与缓存加速的完整链路。</p>
<h2 id="解决什么">解决什么</h2>
<p>当查询类业务从“能跑”走向“可扩展”时，单体应用往往会在部署、扩容与依赖治理上变得笨重。这个项目以“城市信息”和“天气展示/聚合”为边界拆分服务，引入注册发现与声明式调用，并用 Redis 承接热点数据，形成一套可复现实验环境，方便验证服务拆分后的协作方式与性能优化思路。</p>
<p>在实现上，<code>citylist8820</code> 提供城市列表等基础数据，<code>showweather8810</code> 作为展示/聚合服务对外提供页面，并通过 OpenFeign 调用城市服务；共享的模型与工具沉淀在 <code>weather-common</code>，避免服务间复制粘贴导致的耦合与维护成本上升。</p>
<p>父 <code>pom.xml</code> 锁定 Spring Boot 2.7.18、Spring Cloud 2021.0.9，并将 <code>java.version</code> 固定为 17，让依赖基线与运行环境更可复现，也更适合作为长期练习与对比的样例工程。</p>
<h2 id="核心亮点">核心亮点</h2>
<ul>
<li>父 <code>pom.xml</code> 聚合多模块：<code>eureka8888</code>、<code>eureka9999</code>、<code>citylist8820</code>、<code>showweather8810</code> 与 <code>weather-common</code></li>
<li>双 Eureka 节点互注册，验证注册中心的基础高可用与故障切换</li>
<li>OpenFeign 将服务间 HTTP 调用收敛为接口声明，减少样板代码与错误分支</li>
<li>Redis 缓存城市列表与热点天气数据，降低下游接口压力并提升查询响应</li>
</ul>
<p>我把它当作一套“可观察、可重复”的微服务练习台：可以在注册中心观察实例上下线，在 Redis 中验证缓存写入与过期策略的效果，并通过 Feign 调用链路理解服务间依赖关系。</p>
<h2 id="快速开始">快速开始</h2>
<p>环境要求以仓库 <code>pom.xml</code> 为准：Java 17、Maven、Redis。启动顺序建议先注册中心（<code>8888</code>、<code>9999</code>），再启动业务服务（<code>8820</code>、<code>8810</code>）；本地访问天气页面：<code>http://localhost:8810</code>。</p>
<p>启动后可在 Eureka 控制台（<code>http://localhost:8888</code> / <code>http://localhost:9999</code>）查看服务注册情况；<code>showweather8810</code> 通过注册发现与 Feign 调用获取城市基础数据，并将热点结果写入 Redis，形成“注册发现 → 服务调用 → 缓存命中”的最小闭环。</p>
]]></content:encoded>
    </item>
    <item>
      <title>LLM Agent</title>
      <link>https://blog.rzlnb.top/project/llm-agent/</link>
      <pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.rzlnb.top/project/llm-agent/</guid>
      <description>多模型 LLM Windows 桌面客户端（.NET 8 / WinForms / SQLite）</description>
      <content:encoded><![CDATA[<h2 id="快速入口">快速入口</h2>
<p>下载 ：<a href="https://github.com/rbetree/llm-agent/releases" target="_blank" rel="noopener noreferrer" style="color:#42b983;">https://github.com/rbetree/llm-agent/releases</a>
</p>
<p>开源仓库：<a href="https://github.com/rbetree/llm-agent" target="_blank" rel="noopener noreferrer" style="color:#42b983;">https://github.com/rbetree/llm-agent</a>
</p>
<p>官网/文档：<a href="https://rbetree.github.io/llm-agent/" target="_blank" rel="noopener noreferrer" style="color:#42b983;">https://rbetree.github.io/llm-agent/</a>
</p>
<h2 id="一句话介绍">一句话介绍</h2>
<p>LLM Agent 是一个基于 .NET 8 WinForms 的多模型桌面聊天客户端：用一个统一界面接入多家大语言模型（LLM）服务商，管理会话、提示词与本地数据。</p>
<h2 id="解决什么">解决什么</h2>
<p>当你同时使用 OpenAI / Claude / Gemini 等不同厂商时，账号、Key、模型选择与对话历史往往分散在多个网页或工具里，迁移与复用成本高。LLM Agent 通过 Provider 适配层把不同服务的调用口径收敛到同一套交互里，并将会话与配置持久化到本地 SQLite；同时支持多用户数据隔离与自动登录，降低“多人共用一台电脑/多账号切换”的摩擦。对于需要在桌面端长时间对话、反复打磨 System Prompt 的场景，它更像一个可持续积累的个人工作台。</p>
<p>项目结构采用经典分层：<code>UI/</code> 负责界面与交互，<code>BLL/</code> 承载业务逻辑，<code>DAL/</code> 负责数据访问，<code>Model/</code> 定义实体；对接不同 LLM 的实现集中在 <code>API/Provider/</code>，便于新增厂商或替换接口而不影响上层 UI。配套文档站点位于 <code>Docs/</code>（VitePress），用于沉淀接入方式、架构说明与使用指南，减少“靠记忆配置”的成本。</p>
<h2 id="核心亮点">核心亮点</h2>
<ul>
<li>多 Provider 适配：内置 OpenAI/Azure OpenAI/Anthropic/Google/百度/智谱等，并支持 OpenAI-compatible 接口</li>
<li>流式响应 + Markdown 渲染（Markdig），提升长内容对话的阅读体验</li>
<li>会话与提示词库：支持新建/切换/导入/清空会话，提示词模板可复用</li>
<li>本地 SQLite 存储，多用户隔离；API Key 迁移到加密存储（<code>System.Security.Cryptography.ProtectedData</code>）</li>
<li>内置 WebView2：可在应用内访问厂商网页界面与资源（AIWeb 浏览）</li>
</ul>
<p>同时支持“渠道设置/独立配置”的思路：不同服务商或不同 Base URL 的参数可以分别保存，适合在同一客户端里管理多套 Key 与调用口径。</p>
<h2 id="快速开始">快速开始</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git clone https://github.com/rbetree/llm-agent.git
</span></span><span style="display:flex;"><span>cd llm-agent
</span></span><span style="display:flex;"><span>dotnet build -c Release
</span></span><span style="display:flex;"><span>dotnet run
</span></span></code></pre></div><p>也可以直接从仓库 Releases 下载预编译版本，并在应用内配置各服务商的 API Key 后开始对话。</p>
<p>注意：该项目目标框架为 <code>net8.0-windows</code>，运行环境以 Windows 为主；内置浏览能力依赖 WebView2，首次使用建议确认系统已安装对应运行时。若从源码构建，README 提供了 Visual Studio / .NET SDK 的准备与构建说明。</p>
]]></content:encoded>
    </item>
    <item>
      <title>XxSportsHall</title>
      <link>https://blog.rzlnb.top/project/xxsportshall/</link>
      <pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.rzlnb.top/project/xxsportshall/</guid>
      <description>已上线微信小程序 Mini Program + CloudBase 约课/购课闭环（三端）</description>
      <content:encoded><![CDATA[<h2 id="快速入口">快速入口</h2>
<p>已上线微信小程序（微信打开）：<a href="weixin://dl/business/?appid=wx3c0b6f4d7877b1f3&amp;path=projects/workfit/pages/default/index/default_index&amp;env_version=release">weixin://dl/business/?appid=wx3c0b6f4d7877b1f3&path=projects/workfit/pages/default/index/default_index&env_version=release</a>
（历史链接，若失效请更新）</p>
<p>二维码：<br>
<img alt="克莱尔搏击小程序二维码" loading="lazy" src="https://img.rzlnb.top/file/1773927871361_%E5%85%8B%E8%8E%B1%E5%B0%94%E6%90%8F%E5%87%BB%E5%B0%8F%E7%A8%8B%E5%BA%8F%E4%BA%8C%E7%BB%B4%E7%A0%81.jpg"></p>
<h2 id="一句话介绍">一句话介绍</h2>
<p>XxSportsHall 是一个从零开发并可交付的 WeChat Mini Program + CloudBase 项目，围绕拳馆/健身房的“购课 → 约课 → 核销 → 运营配置”构建三端合一的业务闭环。</p>
<h2 id="解决什么">解决什么</h2>
<p>线下约课通常依赖微信聊天/表格，容易出现未付费占名额、排期冲突难追踪、核销与统计靠人工等问题。本项目把关键状态流转收敛到云函数侧：先购课获得课时/权益，再约课占名额并扣课时，最终由教练扫码/手动核销；管理端在小程序内完成课程、课程包、门店、教练、排期与运营物料配置，形成可上线可运营的交付形态。</p>
<p>代码结构以交付为导向：小程序端在 <code>miniprogram/</code>，云函数端集中在 <code>cloudfunctions/mcloud</code>（单入口 + 路由），需求/排期/发布清单等沉淀在 <code>docs/</code>。云函数入口会统一设置 <code>TZ=Asia/Shanghai</code>，并对支付回调、云调用支付回调与定时任务等系统事件做分流处理后再进入业务路由，避免“无 OPENID 场景”误入常规鉴权链路导致失败。</p>
<h2 id="核心亮点">核心亮点</h2>
<ul>
<li>三端合一：学员/教练/管理端同一小程序内按权限展示入口与页面</li>
<li>业务强分离：先购课再约课，状态机集中在服务层避免页面分散逻辑</li>
<li>后端单入口：云函数 <code>cloudfunctions/mcloud</code> 通过 <code>route</code> 路由分发，Controller/Service/Model 分层</li>
<li>关键链路闭环：支付→权益生成→预约扣课时→核销→统计/运营配置</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>MeNav</title>
      <link>https://blog.rzlnb.top/project/menav/</link>
      <pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.rzlnb.top/project/menav/</guid>
      <description>个人导航站 static site generator（配置化 + 构建期生成 + 纯静态交付）</description>
      <content:encoded><![CDATA[<h2 id="快速入口">快速入口</h2>
<p>在线体验/Demo：<a href="https://rbetree.github.io/menav/" target="_blank" rel="noopener noreferrer" style="color:#42b983;">https://rbetree.github.io/menav/</a>
</p>
<p>开源仓库：<a href="https://github.com/rbetree/menav" target="_blank" rel="noopener noreferrer" style="color:#42b983;">https://github.com/rbetree/menav</a>
</p>
<h2 id="一句话介绍">一句话介绍</h2>
<p>MeNav 是一个用 Node.js 在构建期把「YAML 配置 + Handlebars 模板」渲染为纯静态站点的个人导航站生成器，可直接部署到 GitHub Pages 等静态托管。</p>
<h2 id="解决什么">解决什么</h2>
<p>导航条目一多，手工维护 HTML、Notion 或浏览器书签就会遇到“难搜索、难归类、难迁移、难版本管理”的问题。MeNav 把站点结构抽象成可版本化的配置文件：内容变更用 Git 追踪，构建产物只是一份 <code>dist/</code> 静态文件；需要离线构建时还能通过离线 dev 模式避免刷新联网缓存，保证生成结果可复现。</p>
<p>工程上，它把“生成器入口”和“站点内容”分开：生成入口固定在 <code>src/generator.js</code>（内部实现位于 <code>src/generator/main.js</code>），模板与页面组件集中在 <code>templates/</code>；而用户的站点内容与页面结构建议放在 <code>config/user/**</code>，避免直接改默认配置导致升级困难。对于书签迁移，导入脚本会将浏览器导出的 HTML 书签转换为 <code>config/user/pages/bookmarks.yml</code>，后续可以继续在 YAML 中做整理与分类。</p>
<p>另外，仓库提供 <code>sync-articles</code> / <code>sync-projects</code> 等同步脚本，用于在构建期刷新需要联网的数据；如果你希望完全离线或追求更强的可复现性，可以使用 <code>npm run dev:offline</code> 跳过联网缓存刷新，把站点构建限制在本地配置与模板范围内。</p>
<h2 id="核心亮点">核心亮点</h2>
<ul>
<li>配置驱动：页面与模块拆分在 <code>config/**</code>，适合长期迭代与迁移</li>
<li>构建期生成：输出纯静态 <code>dist/</code>，部署到 Pages/Vercel/CF Pages 即可访问</li>
<li>书签导入：把浏览器导出的 HTML 书签转换为站点配置（脚本：<code>npm run import-bookmarks</code>）</li>
<li>开发/离线模式：<code>npm run dev</code> 刷新联网缓存；<code>npm run dev:offline</code> 可离线启动</li>
<li>与 MarksVault 扩展联动：支持书签自动推送到仓库，驱动导航站自动更新</li>
</ul>
<h2 id="快速开始">快速开始</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git clone https://github.com/rbetree/menav.git
</span></span><span style="display:flex;"><span>cd menav
</span></span><span style="display:flex;"><span>npm ci
</span></span><span style="display:flex;"><span>npm run dev
</span></span></code></pre></div><p>需要生成静态站点时运行 <code>npm run build</code>（产物在 <code>dist/</code>）。</p>
<p>如果你计划部署到 GitHub Pages，README 提供了“Fork → 启用 Actions → 配置 Pages”的最短路径；需要容器化运行时也可以参考仓库内的 Docker 相关文件与说明，统一以静态文件交付。</p>
]]></content:encoded>
    </item>
    <item>
      <title>TeachDo</title>
      <link>https://blog.rzlnb.top/project/teachdo/</link>
      <pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.rzlnb.top/project/teachdo/</guid>
      <description>面向教师的 AI 备课平台（Outline / 教案 / PPT 生成与编辑 / KB-RAG / 导出）</description>
      <content:encoded><![CDATA[<h2 id="快速入口">快速入口</h2>
<p>开源仓库：<a href="https://github.com/rbetree/TeachDo" target="_blank" rel="noopener noreferrer" style="color:#42b983;">https://github.com/rbetree/TeachDo</a>
</p>
<h2 id="一句话介绍">一句话介绍</h2>
<p>TeachDo 是一套面向教师的 AI 备课工作台：以“课程/单元”为工作流单位，把大纲、教案、PPT 等产物做成可编辑、可导出、可沉淀复用的资产，而不是一次性生成结果。</p>
<h2 id="解决什么">解决什么</h2>
<p>备课过程通常跨越“材料收集 → 结构梳理 → 内容扩写 → 课件制作 → 导出交付”，单点工具难以覆盖全链路，也难保证可控与可复用。TeachDo 通过流式生成（SSE）+ 产物入库管理，将生成、编辑、引用知识库（KB-RAG）与导出串成闭环：前端统一走 <code>/api/*</code>，由 <code>backend/main_api</code> 作为 BFF 编排大纲服务、内容生成服务与 KB 服务，降低前端复杂度并便于后端演进。</p>
<p>仓库按能力拆成多服务：<code>backend/main_api</code> 负责统一对外接口与编排，<code>backend/simpleOutline</code> 负责大纲生成，<code>backend/slide_agent</code> 负责 PPT 逐页内容生成，<code>backend/personaldb</code> 负责 KB 的文件处理、向量化与检索；前端唯一入口在 <code>frontend/</code>（Vue 3 + Vite + TypeScript），开发环境通过代理把请求转发到主 API，减少跨域与环境切换成本。</p>
<p>从产物角度看，TeachDo 强调“能落地”：教案支持导出标准 <code>.docx</code>；PPT 生成支持模板选择与增量生成，产物默认以 Markdown 入库，最终 PPTX 在独立编辑器导出，确保生成结果可编辑、可复用、可追踪。</p>
<h2 id="核心亮点">核心亮点</h2>
<ul>
<li>SSE 流式输出：Outline/教案/PPT/助教对话可边生成边预览与中断</li>
<li>多服务拆分：<code>backend/</code> 下按能力分服务，<code>main_api</code> 聚合并对前端提供统一接口</li>
<li>KB-RAG：上传资料向量化，生成时可选择引用范围提升准确性与可控性</li>
<li>独立编辑器：PPT 产物默认入库为 Markdown，最终 PPTX 由编辑器导出</li>
<li>一键启动脚本：根目录 <code>start.py</code> 负责本地开发环境拉起与进程管理</li>
</ul>
<h2 id="快速开始">快速开始</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cp env_template.txt .env
</span></span><span style="display:flex;"><span>python3 start.py
</span></span></code></pre></div><p>启动后默认前端端口 <code>5174</code>，主 API <code>6800</code>（其余服务端口见 README）。</p>
<p><code>start.py</code> 面向本地开发“一键拉起”场景：会按配置启动前后端与相关服务，并在 <code>logs/</code> 下落日志方便排障。若你更偏好分别启动或容器化部署，仓库 README 也提供了对应方式与生产环境说明。</p>
]]></content:encoded>
    </item>
    <item>
      <title>MarksVault</title>
      <link>https://blog.rzlnb.top/project/marksvault/</link>
      <pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.rzlnb.top/project/marksvault/</guid>
      <description>浏览器书签管理扩展：整理 + 自动化任务 + 备份到 GitHub 私有仓库</description>
      <content:encoded><![CDATA[<h2 id="快速入口">快速入口</h2>
<p>下载：<a href="https://github.com/rbetree/MarksVault/releases" target="_blank" rel="noopener noreferrer" style="color:#42b983;">https://github.com/rbetree/MarksVault/releases</a>
</p>
<p>开源仓库：<a href="https://github.com/rbetree/MarksVault" target="_blank" rel="noopener noreferrer" style="color:#42b983;">https://github.com/rbetree/MarksVault</a>
</p>
<h2 id="一句话介绍">一句话介绍</h2>
<p>MarksVault 是一个面向现代浏览器的书签管理扩展：在保留浏览器原生书签体系的前提下，提供更友好的管理界面，并把书签数据安全备份到你自己的 GitHub 私有仓库，做到“可整理、可追溯、可恢复、可自控”。</p>
<h2 id="解决什么">解决什么</h2>
<p>浏览器自带书签常见痛点是：大量书签难以整理、跨设备迁移成本高、误删后恢复困难、以及缺少可审计的备份链路。MarksVault 将 GitHub 作为用户自有的远端存储：Token 连接后即可在扩展内一键备份/恢复，并支持把书签推送到指定仓库；同时引入任务系统，把“书签变更”“浏览器启动”等事件作为触发器，自动执行备份或同步动作，减少手工操作。对希望把书签纳入个人知识管理与版本控制的人来说，它相当于一个“书签保险箱”。</p>
<p>工程实现上，MarksVault 使用 WXT（Vite）做构建与多浏览器打包，核心入口包括后台 Service Worker（监听书签事件、执行任务）以及 Popup/Options 等 React 页面。数据存储策略也做了分层：GitHub Token 存在 <code>browser.storage.sync</code> 便于跨设备同步，其余业务数据落在 <code>browser.storage.local</code>；同时通过 <code>host_permissions</code> 将网络访问边界限制在 <code>https://api.github.com/*</code>，避免无关域名被误用。</p>
<h2 id="核心亮点">核心亮点</h2>
<ul>
<li>React + TypeScript + MUI 的 Popup/Options UI，支持列表/网格视图与基础编辑</li>
<li>GitHub 集成：使用个人 Token 操作私有仓库，实现备份/恢复/推送</li>
<li>自动化任务系统：事件触发 + 执行状态跟踪，适配 MV3 Service Worker 生命周期</li>
<li>多浏览器支持：Chrome/Edge（Manifest V3）与 Firefox（Manifest V2）分别构建</li>
<li>权限与边界清晰：核心权限 <code>bookmarks</code>/<code>storage</code>，GitHub 访问限定 <code>https://api.github.com/*</code></li>
<li>与 MeNav 联动：可将书签推送到导航站仓库，驱动静态站点自动更新书签页</li>
</ul>
<h2 id="快速开始">快速开始</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git clone https://github.com/rbetree/MarksVault.git
</span></span><span style="display:flex;"><span>cd MarksVault
</span></span><span style="display:flex;"><span>npm install
</span></span><span style="display:flex;"><span>npm run dev
</span></span></code></pre></div><p>开发模式下在浏览器扩展管理页加载构建产物：Chromium 系为 <code>.output/chrome-mv3-dev</code>（Firefox 见 README 的对应路径）。</p>
<p>需要切换浏览器目标时可用脚本 <code>npm run dev:edge</code> / <code>npm run dev:firefox</code>；生产构建输出目录与 zip 打包方式也在 README 中给出了对应命令与路径，便于发布与分发。</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
