<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>项目 on Vindrin</title><link>https://vindrin.top/zh-cn/project/</link><description>Recent content in 项目 on Vindrin</description><generator>Hugo</generator><language>zh-CN</language><managingEditor>vindrin@outlook.com (Vindrin)</managingEditor><webMaster>vindrin@outlook.com (Vindrin)</webMaster><lastBuildDate>Fri, 10 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://vindrin.top/zh-cn/project/rss.xml" rel="self" type="application/rss+xml"/><item><title>RSS 阅读 Bot</title><link>https://vindrin.top/zh-cn/project/rss-reader-bot/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>vindrin@outlook.com (Vindrin)</author><guid>https://vindrin.top/zh-cn/project/rss-reader-bot/</guid><description>&lt;h1 id="rss-阅读-bot"&gt;RSS 阅读 Bot&lt;/h1&gt;
&lt;p&gt;一个 Telegram 机器人，自动拉取你订阅的 RSS 源，每天发送一条摘要消息。&lt;/p&gt;
&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;我关注超过 15 个博客和新闻源，每天手动逐个查看太累了。一个 bot，每天一条消息，搞定。&lt;/p&gt;
&lt;h2 id="架构"&gt;架构&lt;/h2&gt;
&lt;div class="code-block code-line-numbers open" style="counter-reset: code-block 0"&gt;
 &lt;div class="code-header language-"&gt;
 &lt;span class="code-title"&gt;&lt;i class="arrow fas fa-angle-right" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;span class="ellipses"&gt;&lt;i class="fas fa-ellipsis-h" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;span class="copy" title="复制到剪贴板"&gt;&lt;i class="far fa-copy" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RSS 源 → 解析器 → 去重 → 摘要格式化 → Telegram Bot API&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id="核心功能"&gt;核心功能&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;通过 bot 命令添加/删除订阅（&lt;code&gt;/add&lt;/code&gt;、&lt;code&gt;/remove&lt;/code&gt;、&lt;code&gt;/list&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;定时每日推送摘要&lt;/li&gt;
&lt;li&gt;标记文章为已读&lt;/li&gt;
&lt;li&gt;关键词过滤&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="部署"&gt;部署&lt;/h2&gt;
&lt;div class="code-block code-line-numbers open" style="counter-reset: code-block 0"&gt;
 &lt;div class="code-header language-bash"&gt;
 &lt;span class="code-title"&gt;&lt;i class="arrow fas fa-angle-right" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;span class="ellipses"&gt;&lt;i class="fas fa-ellipsis-h" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;span class="copy" title="复制到剪贴板"&gt;&lt;i class="far fa-copy" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install feedparser python-telegram-bot apscheduler
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;TELEGRAM_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_token_here
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python bot.py&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id="状态"&gt;状态&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;v1.0.0&lt;/code&gt; — 已稳定运行 2 个月，无故障。&lt;/p&gt;</description></item><item><title>终端仪表盘</title><link>https://vindrin.top/zh-cn/project/terminal-dashboard/</link><pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate><author>vindrin@outlook.com (Vindrin)</author><guid>https://vindrin.top/zh-cn/project/terminal-dashboard/</guid><description>&lt;h1 id="终端仪表盘"&gt;终端仪表盘&lt;/h1&gt;
&lt;p&gt;完全运行在终端里的实时系统监控工具。&lt;/p&gt;
&lt;h2 id="为什么是终端"&gt;为什么是终端？&lt;/h2&gt;
&lt;p&gt;有时候 SSH 进一台没有 GUI 的机器，需要查看 CPU、内存、磁盘和网络状态，却不想安装笨重的监控软件，终端仪表盘就是答案。&lt;/p&gt;
&lt;h2 id="用到的库"&gt;用到的库&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Textual&lt;/strong&gt; — TUI 框架&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;psutil&lt;/strong&gt; — 系统指标采集&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;rich&lt;/strong&gt; — 漂亮的表格和图表&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="界面预览ascii"&gt;界面预览（ASCII）&lt;/h2&gt;
&lt;div class="code-block code-line-numbers open" style="counter-reset: code-block 0"&gt;
 &lt;div class="code-header language-"&gt;
 &lt;span class="code-title"&gt;&lt;i class="arrow fas fa-angle-right" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;span class="ellipses"&gt;&lt;i class="fas fa-ellipsis-h" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;span class="copy" title="复制到剪贴板"&gt;&lt;i class="far fa-copy" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;┌── CPU ──────────────────┐ ┌── 内存 ──────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 核心 0 ████░░░░ 42% │ │ 已用 6.2GB / 16GB 38% │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ 核心 1 ██░░░░░░ 21% │ │ 交换 0.1GB / 4GB 2% │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└─────────────────────────┘ └──────────────────────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;┌── 磁盘 ─────────────────────────────────────────────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ C:\ 80GB / 250GB 32% ██████░░░░░░░░░░░░░░░░░░░░ │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ D:\ 167GB / 250GB 67% ██████████████░░░░░░░░░░░░ │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└─────────────────────────────────────────────────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id="状态"&gt;状态&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;v0.1.0&lt;/code&gt; — 功能完整，样式待打磨。&lt;/p&gt;</description></item><item><title>Markdown 笔记同步 CLI 工具</title><link>https://vindrin.top/zh-cn/project/markdown-note-sync/</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate><author>vindrin@outlook.com (Vindrin)</author><guid>https://vindrin.top/zh-cn/project/markdown-note-sync/</guid><description>&lt;h1 id="markdown-笔记同步-cli-工具"&gt;Markdown 笔记同步 CLI 工具&lt;/h1&gt;
&lt;p&gt;用 Markdown 记笔记，随处同步，不依赖任何专有格式。&lt;/p&gt;
&lt;h2 id="问题背景"&gt;问题背景&lt;/h2&gt;
&lt;p&gt;我在多台机器上用 Markdown 记笔记，想要比 Obsidian Sync 更简单的方案——只需要一个 CLI 工具，能 diff 并推送变更就够了。&lt;/p&gt;
&lt;h2 id="命令示例"&gt;命令示例&lt;/h2&gt;
&lt;div class="code-block code-line-numbers open" style="counter-reset: code-block 0"&gt;
 &lt;div class="code-header language-bash"&gt;
 &lt;span class="code-title"&gt;&lt;i class="arrow fas fa-angle-right" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;span class="ellipses"&gt;&lt;i class="fas fa-ellipsis-h" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;span class="copy" title="复制到剪贴板"&gt;&lt;i class="far fa-copy" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 初始化同步配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mnotes init --remote user@server:/notes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 双向同步&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mnotes sync
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 同步前预览差异&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mnotes diff&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id="工作原理"&gt;工作原理&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;对本地所有 &lt;code&gt;.md&lt;/code&gt; 文件计算哈希值&lt;/li&gt;
&lt;li&gt;与远程哈希索引比对&lt;/li&gt;
&lt;li&gt;推送新增/修改的文件，拉取远程独有的文件&lt;/li&gt;
&lt;li&gt;冲突处理：两份都保留，附加时间戳后缀&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="依赖"&gt;依赖&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;paramiko&lt;/code&gt; — SSH 连接&lt;/li&gt;
&lt;li&gt;&lt;code&gt;watchdog&lt;/code&gt; — 可选，文件变更时自动同步&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="状态"&gt;状态&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;v0.2.1&lt;/code&gt; — 双机同步稳定版。三端同步是未来计划。&lt;/p&gt;</description></item><item><title>本地 AI 图像分类器</title><link>https://vindrin.top/zh-cn/project/ai-image-classifier/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><author>vindrin@outlook.com (Vindrin)</author><guid>https://vindrin.top/zh-cn/project/ai-image-classifier/</guid><description>&lt;h1 id="本地-ai-图像分类器"&gt;本地 AI 图像分类器&lt;/h1&gt;
&lt;p&gt;用文字描述来分类图片，完全本地运行，不依赖任何云 API。&lt;/p&gt;
&lt;h2 id="原理"&gt;原理&lt;/h2&gt;
&lt;p&gt;使用 &lt;strong&gt;OpenAI CLIP&lt;/strong&gt; 计算图片与一组文字标签之间的相似度，得分最高的标签即为分类结果。&lt;/p&gt;
&lt;div class="code-block code-line-numbers open" style="counter-reset: code-block 0"&gt;
 &lt;div class="code-header language-python"&gt;
 &lt;span class="code-title"&gt;&lt;i class="arrow fas fa-angle-right" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;span class="ellipses"&gt;&lt;i class="fas fa-ellipsis-h" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;span class="copy" title="复制到剪贴板"&gt;&lt;i class="far fa-copy" aria-hidden="true"&gt;&lt;/i&gt;&lt;/span&gt;
 &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;PIL&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;clip&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;torch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;preprocess&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;clip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ViT-B/32&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;preprocess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;photo.jpg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unsqueeze&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;labels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a cat&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;a dog&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;a car&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;a tree&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;clip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tokenize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;no_grad&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;logits&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;probs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logits&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;softmax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dim&lt;/span&gt;&lt;span class="o"&gt;=-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;best&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;probs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argmax&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;预测结果：&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;best&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id="界面"&gt;界面&lt;/h2&gt;
&lt;p&gt;基于 Flask 的 Web UI，拖入图片，输入标签，立即得到分类结果。&lt;/p&gt;
&lt;h2 id="状态"&gt;状态&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;v0.1.0&lt;/code&gt; — 概念验证版。CPU 可运行，大批量图片较慢。&lt;/p&gt;</description></item><item><title>vindrin.top — 个人网站</title><link>https://vindrin.top/zh-cn/project/personal-website/</link><pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate><author>vindrin@outlook.com (Vindrin)</author><guid>https://vindrin.top/zh-cn/project/personal-website/</guid><description>&lt;h1 id="vindrintop--个人网站"&gt;vindrin.top — 个人网站&lt;/h1&gt;
&lt;p&gt;就是你现在看到的这个网站。&lt;/p&gt;
&lt;h2 id="目标"&gt;目标&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一个干净的地方发布文章和项目&lt;/li&gt;
&lt;li&gt;中英双语&lt;/li&gt;
&lt;li&gt;快速、静态、不需要后端&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="技术栈"&gt;技术栈&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;生成器&lt;/strong&gt;：Hugo Extended&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主题&lt;/strong&gt;：LoveIt（深度定制）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;托管&lt;/strong&gt;：Cloudflare Pages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;域名&lt;/strong&gt;：vindrin.top&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="自定义功能"&gt;自定义功能&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;主页动态视频背景&lt;/li&gt;
&lt;li&gt;导航栏中英语言切换&lt;/li&gt;
&lt;li&gt;About 页：活动热力图 + 分页日志&lt;/li&gt;
&lt;li&gt;毛玻璃导航栏，支持日/夜模式切换&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="部署方式"&gt;部署方式&lt;/h2&gt;
&lt;p&gt;每次推送到 &lt;code&gt;main&lt;/code&gt; 分支，Cloudflare Pages 自动触发构建，零停机部署。&lt;/p&gt;</description></item><item><title>GitPush Manager</title><link>https://vindrin.top/zh-cn/project/gitpush-manager/</link><pubDate>Wed, 10 Sep 2025 00:00:00 +0000</pubDate><author>vindrin@outlook.com (Vindrin)</author><guid>https://vindrin.top/zh-cn/project/gitpush-manager/</guid><description>&lt;h1 id="gitpush-manager"&gt;GitPush Manager&lt;/h1&gt;
&lt;p&gt;用 &lt;strong&gt;pywebview + Flask&lt;/strong&gt; 构建的轻量桌面应用，把常用的 Git 操作变成一个可视化界面。&lt;/p&gt;
&lt;h2 id="动机"&gt;动机&lt;/h2&gt;
&lt;p&gt;每天重复敲同样的三条 Git 命令几十次，这个工具把它们变成一次点击。&lt;/p&gt;
&lt;h2 id="功能"&gt;功能&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一个界面完成暂存、提交、推送&lt;/li&gt;
&lt;li&gt;多仓库管理&lt;/li&gt;
&lt;li&gt;提交信息模板&lt;/li&gt;
&lt;li&gt;推送历史日志&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="技术栈"&gt;技术栈&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;后端&lt;/strong&gt;：Python + Flask&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;前端&lt;/strong&gt;：HTML/CSS/JS via pywebview&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;打包&lt;/strong&gt;：PyInstaller&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="状态"&gt;状态&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;v0.3.0&lt;/code&gt; — 个人使用稳定版。多仓库支持进行中。&lt;/p&gt;</description></item></channel></rss>