<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>Plocr</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://www.plocr.online/</id>
  <link href="https://www.plocr.online/" rel="alternate"/>
  <link href="https://www.plocr.online/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, Plocr</rights>
  <subtitle>Plocr的个人博客</subtitle>
  <title>Plocrの小窝</title>
  <updated>2026-08-16T06:11:22.233Z</updated>
  <entry>
    <author>
      <name>Plocr</name>
    </author>
    <category term="项目日志" scheme="https://www.plocr.online/tags/%E9%A1%B9%E7%9B%AE%E6%97%A5%E5%BF%97/"/>
    <content>
      <![CDATA[<div class="post-hero">  <h2>技术方案的关键词：极简</h2>  <p>「碎片」的架构可以概括为一句话：一个云函数 + 一个注册页面 + 一个边缘数据库 + 四个自定义组件。但这套极简架构背后，解决了不少实际问题。</p></div><blockquote>app.json 里只注册了一个页面 pages/home/home，另外两个视图（时间线、设置）全是 CSS Overlay。</blockquote><hr><h2>一、从多页到单页：消除白屏闪烁</h2><p>最初「碎片」和普通小程序一样，每个视图一个独立页面。但微信小程序的页面切换在 webview 模式下有白屏闪烁——哪怕用了动画过渡，切换时还是会闪一下。</p><p>解决方案：把所有视图放在一个页面里，用 CSS 控制显示隐藏。app.json 只注册一个页面：</p><pre><code>// app.json&#123;  "pages": ["pages/home/home"],  "renderer": "webview"&#125;</code></pre><p>时间线和设置面板是 CSS overlay 浮层，从右侧滑入：</p><pre><code>&lt;view class="overlay-mask" bind:tap="closeTimeline"&gt;&lt;/view&gt;&lt;view class="overlay-panel panel-slide-in" wx:if="&#123;&#123;showTimeline&#125;&#125;"&gt;  &lt;timeline-view&gt;&lt;/timeline-view&gt;&lt;/view&gt;</code></pre><p>CSS：</p><pre><code>.overlay-panel &#123;  position: fixed;  right: 0;  top: 0;  width: 85%;  height: 100vh;  z-index: 100;  transform: translateX(100%);  transition: transform 280ms ease-out;&#125;.panel-slide-in &#123; transform: translateX(0); &#125;</code></pre><div class="post-callout post-callout--warning">  <strong>🐛 坑：page-container 不能用</strong>  <p>微信小程序原生有个 page-container 组件专门做这种 overlay 效果，但它只在「客户端渲染」模式下生效。在 webview 模式下（为了用 Turso 等非微信云服务），page-container 完全不工作。纯 CSS overlay 是唯一解法。</p></div><hr><h2>二、Turso 边缘数据库 + 云函数代理</h2><p>数据库选的是 <strong>Turso</strong>——一个基于 libSQL（SQLite 的 fork）的边缘数据库。每个查询路由到离用户最近的只读副本，延迟很低。</p><p>但微信小程序不能直连 Turso（不支持 libSQL 的 HTTP2 协议），所以中间加了一层 <strong>腾讯云函数</strong> 做代理。</p><p>整个后端只有一个云函数 <code>tursoProxy/index.js</code>（357 行），负责所有操作：</p><table>  <tr><th>路由</th><th>功能</th></tr>  <tr><td><code>POST /auth/wechat</code></td><td>JWT 登录（HMAC-SHA256，30 天有效期）</td></tr>  <tr><td><code>GET /api/cards</code></td><td>获取所有卡片</td></tr>  <tr><td><code>PUT /api/cards</code></td><td>更新单张卡片</td></tr>  <tr><td><code>DELETE /api/cards</code></td><td>删除卡片</td></tr>  <tr><td><code>GET /api/records</code></td><td>获取时间线记录</td></tr>  <tr><td><code>POST /api/records</code></td><td>新建记录</td></tr>  <tr><td><code>POST /api/weight-history</code></td><td>新增体重记录</td></tr>  <tr><td><code>POST /api/wish-items/:cardId</code></td><td>新增愿望项</td></tr>  <tr><td><code>POST /api/user/sync</code></td><td>用户信息同步</td></tr>  <tr><td><code>POST /api/danger/delete-my-data</code></td><td>一键注销（含确认流程）</td></tr></table><p>云函数通过 <code>cloud.getWXContext()</code> 获取用户的 openid，零配置实现用户身份识别。</p><hr><h2>三、缓存优先策略</h2><p>为了让用户打开页面「秒看内容」，实现了双层缓存：</p><pre><code>读取: 内存 → wx.getStorageSync → 显示（立即）写入: 内存 + wx.setStorageSync（同时）网络: 后台静默拉取最新数据，更新缓存</code></pre><p>三个缓存桶：</p><ul>  <li><code>__fg_cache_cards__</code> — 卡片列表</li>  <li><code>__fg_cache_records__</code> — 时间线记录</li>  <li><code>__fg_cache_weight__</code> — 体重历史</li></ul><p>效果：即使手机刚开机第一次打开小程序，也是立即看到上次的数据，1-2 秒后如果网络数据更新了会自动替换。</p><hr><h2>四、JWT Token 失效自动恢复</h2><p>登录用 JWT（30 天有效期），但总有过期的时候。在 API 请求中，如果捕获到 Token 错误，自动调用 <code>auth.login()</code> 刷新 Token，然后重试失败的请求。调用方完全无感知。</p><p>这个机制在 <code>home.js</code> 的 <code>loadWeightHistory()</code> 中实现：</p><pre><code>if (err.code === 'TOKEN_EXPIRED') &#123;  await auth.login()  return await api.records() // 自动重试&#125;</code></pre><hr><h2>五、styleIsolation 陷阱</h2><p>自定义组件默认样式隔离（styleIsolation: isolated），但时间线组件需要继承全局的 <code>.paper-sheet</code>、<code>.chip-glass</code> 等样式类。解决方案是显式声明：</p><pre><code>&#123;  "component": true,  "styleIsolation": "apply-shared"&#125;</code></pre><p>这样组件既能使用全局样式，又能覆盖自己特有的样式。</p><hr><h2>六、数据库：5 张表 + 7 个索引</h2><p>Turso 上建了 5 张表：</p><ul>  <li><code>users</code> — 用户信息（openid 为 PK）</li>  <li><code>cards</code> — 卡片数据（type, title, content, colors, data JSON 等）</li>  <li><code>records</code> — 时间线记录（关联 card_id）</li>  <li><code>weight_history</code> — 体重历史（始终存 kg，前端显示时转换斤/公斤）</li>  <li><code>wish_items</code> — 愿望列表（关联 card_id，级联删除）</li></ul><hr><h2>七、免费方案总结</h2><table>  <tr><th>服务</th><th>方案</th><th>费用</th></tr>  <tr><td>数据库</td><td>Turso 免费计划（边缘 SQLite）</td><td>免费</td></tr>  <tr><td>后端</td><td>微信云函数（tursoProxy 代理）</td><td>免费额度内</td></tr>  <tr><td>前端</td><td>微信小程序（不上架）</td><td>免费</td></tr>  <tr><td>AI 编码</td><td>AI 对话生成代码</td><td>按量付费</td></tr></table><div class="post-ending">  <p>这个项目让我学到最多的是「架构取舍」——用一个云函数替代整个后端、用 CSS overlay 替代官方组件、用缓存优先替代实时数据。每一条都是因为真实遇到的问题才做的选择，不是为了炫技。</p>  <p>两个项目的 5 篇日志写完了，希望对想做 vibe coding 的人有一点参考价值。</p></div>]]>
    </content>
    <id>https://www.plocr.online/2026/06/23/fragments-architecture/</id>
    <link href="https://www.plocr.online/2026/06/23/fragments-architecture/"/>
    <published>2026-06-23T16:00:00.000Z</published>
    <summary>如何用一个云函数、一个注册页面、一个边缘数据库搭建一个秒开的微信小程序。纯 CSS Overlay 替代 page-container、缓存优先策略、JWT 自动续期。</summary>
    <title>「碎片」架构：单页 SPA + Turso 边缘数据库 + 云函数 + 缓存优先</title>
    <updated>2026-08-16T06:11:22.233Z</updated>
  </entry>
  <entry>
    <author>
      <name>Plocr</name>
    </author>
    <category term="项目日志" scheme="https://www.plocr.online/tags/%E9%A1%B9%E7%9B%AE%E6%97%A5%E5%BF%97/"/>
    <content>
      <![CDATA[<div class="post-hero">  <h2>这套设计系统不是从零想的——是从莫奈的画里偷来的</h2>  <p>「碎片」的配色直接取自莫奈的印象派画作：睡莲的绿、日本桥的蓝、日落的珊瑚、玫瑰园的红……然后包装成一套 CSS 变量 Token。</p></div><blockquote>设计系统的核心是：用 8 个颜色 Token 支撑起 4 种卡片类型、6 种玻璃组件、2 种布局模式。</blockquote><hr><h2>一、莫奈调色板</h2><p>从莫奈的《睡莲》《日本桥》《日落》等画作中提取了 8 个颜色 Token：</p><table>  <tr><th>Token</th><th>色值</th><th>灵感来源</th><th>用途</th></tr>  <tr><td><code>--paper</code></td><td><code>#fff4df</code></td><td>米色画布底</td><td>卡片基底</td></tr>  <tr><td><code>--ink</code></td><td><code>#18231f</code></td><td>松针深绿</td><td>正文字色</td></tr>  <tr><td><code>--green</code></td><td><code>#1f5a4d</code></td><td>睡莲叶</td><td>主强调色</td></tr>  <tr><td><code>--blue</code></td><td><code>#31677b</code></td><td>水面倒影</td><td>次要强调色</td></tr>  <tr><td><code>--amber</code></td><td><code>#b9782d</code></td><td>黄昏光线</td><td>笔记卡片强调</td></tr>  <tr><td><code>--coral</code></td><td><code>#b85f48</code></td><td>日落</td><td>心情卡片强调</td></tr>  <tr><td><code>--rose</code></td><td><code>#a84d63</code></td><td>玫瑰园</td><td>愿望卡片强调</td></tr>  <tr><td><code>--kicker</code></td><td><code>#8a6045</code></td><td>赭石</td><td>日期标签</td></tr></table><p>背景是一个三层渐变 + 模拟画布纹理：</p><pre><code>background:   linear-gradient(150deg, #ecdfc8 0%, #dbe8e2 54%, #bfd6d1 100%),  repeating-linear-gradient(0deg, transparent, transparent 56rpx, rgba(0,0,0,0.02) 56rpx, rgba(0,0,0,0.02) 57rpx);</code></pre><p>这个渐变的三个颜色分别对应莫奈画中的草地、水面、天空——也是这个项目名字「碎片」的由来：把一幅画拆成色块，散落在交互里。</p><hr><h2>二、玻璃态组件体系</h2><p>6 种玻璃态组件类，每个都用统一的毛玻璃公式：</p><pre><code>background: rgba(255, 255, 255, 0.34~0.48)backdrop-filter: blur(10px)border: 2rpx solid rgba(255, 255, 255, 0.72~0.82)</code></pre><table>  <tr><th>组件</th><th>圆角</th><th>用途</th></tr>  <tr><td><code>.glass-panel</code></td><td>60rpx</td><td>主卡片面板</td></tr>  <tr><td><code>.chip-glass</code></td><td>999rpx（药丸形）</td><td>标签、分类筛选</td></tr>  <tr><td><code>.field-like</code></td><td>36rpx</td><td>输入框、按钮</td></tr>  <tr><td><code>.round-glass</code></td><td>50%（圆形）</td><td>头像、图标徽章</td></tr>  <tr><td><code>.paper-sheet</code></td><td>60rpx</td><td>时间轴卡片</td></tr>  <tr><td><code>.mark</code></td><td>50%</td><td>卡片类型指示标</td></tr></table><p>透明度的数值经过反复调试：一开始设 0.18~0.26，在莫奈渐变背景上几乎完全消失。最终提到 0.34~0.48 才能看到清晰的玻璃质感。</p><hr><h2>三、卡片堆叠位置算法</h2><p>首页的核心交互是一叠卡片，当前卡片居中，左右露出相邻卡片的边缘。这个位置计算用了一个 <code>relativePosition()</code> 函数：</p><pre><code>function relativePosition(index, active, total) {  // 环形回绕：计算当前卡片到活跃卡片的偏移量  // 处理 wrap-around 情况（从最后一张划到第一张）  // 返回 -2, -1, 0, 1, 2 等相对位置}</code></pre><p>每个相对位置对应一组 CSS 样式：</p><ul>  <li><strong>pos-active</strong>（0）：居中，scale(1)，opacity 1，z-index 4</li>  <li><strong>pos-prev</strong>（-1）：左侧偏移 260rpx，scale(0.88)，opacity 0.82，z-index 2</li>  <li><strong>pos-next</strong>（+1）：右侧偏移 260rpx，scale(0.88)，opacity 0.82，z-index 2</li>  <li><strong>pos-far</strong>（其他）：translateY(36rpx)，scale(0.82)，opacity 0.28，z-index 1</li></ul><p>滑动切换的阈值：<code>Math.abs(dx) >= 50 && Math.abs(dx) > Math.abs(dy)</code>——水平划够 50px 且比垂直滑动多才触发切换。</p><hr><h2>四、卡片翻转机制</h2><p>每张卡片都可以翻转——正面显示内容，反面是表单（填体重、记心情、写愿望）。</p><p>实现上用一个 <code>flipMap[cardId]</code> 状态映射表，驱动 <code>wx:if / wx:else</code> 切换显示正面或反面。数据在 JS 中预计算（<code>buildCardsState()</code>），避免在模板中动态计算——这是为了解决 WXML 的「true 文字渲染」bug。</p><hr><h2>五、4 种卡片类型 + 笔记工厂</h2><p>卡片按类型区分，每种的样式和交互都不一样：</p><table>  <tr><th>卡片类型</th><th>底色</th><th>强调色</th><th>功能</th></tr>  <tr><td>体重（Body）</td><td><code>#fff4df</code></td><td>绿色</td><td>记录体重、单位切换（kg/斤）</td></tr>  <tr><td>心情（Mood）</td><td><code>#fff0dc</code></td><td>珊瑚色</td><td>记录今日心情语录</td></tr>  <tr><td>愿望（Wish）</td><td><code>#f8faef</code></td><td>玫瑰色</td><td>愿望列表管理</td></tr>  <tr><td>笔记工厂（Note）</td><td>8 色循环</td><td>琥珀色</td><td>每日笔记，每次新增换一个颜色</td></tr></table><p>笔记工厂是最好玩的设计——每次点「写笔记」按钮，系统自动生成一张新的笔记卡片，颜色在 8 色调色板中循环。这 8 个颜色也是从莫奈画作中提取的，每张新卡片都像从画布上撕下的一小块碎片。</p><hr><h2>六、底部导航指示器</h2><p>底部导航栏有一个会滑动的绿色透镜，跟随当前激活的 Tab。实现上用 <code>createSelectorQuery()</code> 动态计算每个 Tab 的宽度，而不是写死偏移量——这样即使未来修改了 Tab 文案也不会断裂。</p><p>点击 Tab 时，图标有一个 200ms 的弹跳动画（scale 关键帧），这是除了卡片滑动外最常用的交互反馈。</p><div class="post-ending">  <p>下一篇写「碎片」的架构：单页 SPA、Turso 边缘数据库、云函数代理、缓存优先策略——这个小程序的技术底子同样有料。</p></div>]]>
    </content>
    <id>https://www.plocr.online/2026/06/23/fragments-design-system/</id>
    <link href="https://www.plocr.online/2026/06/23/fragments-design-system/"/>
    <published>2026-06-23T16:00:00.000Z</published>
    <summary>从莫奈的《睡莲》《日本桥》提取调色板，构建一套完整的玻璃态组件体系，再加上卡片堆叠位置算法和翻转机制。</summary>
    <title>「碎片」设计系统：莫奈色卡 × 玻璃态 × 卡片翻转</title>
    <updated>2026-08-16T06:11:22.233Z</updated>
  </entry>
  <entry>
    <author>
      <name>Plocr</name>
    </author>
    <category term="项目日志" scheme="https://www.plocr.online/tags/%E9%A1%B9%E7%9B%AE%E6%97%A5%E5%BF%97/"/>
    <content>
      <![CDATA[<div class="post-hero">  <h2>这次不是从 Figma 开始了</h2>  <p>Plocr-chef 从 Figma 设计稿出发，而「碎片」（Fragments）的起点更原始——一张手绘草图。</p></div><blockquote>纸笔画出首页布局，拍照，描述给 AI。然后开始一个漫长的循环：截图 → 描述问题 → AI 改代码 → 再看 → 再截图……</blockquote><hr><h2>第一步：纸和笔</h2><p>「碎片」是一个生活记录小程序，灵感来自 Claude Monet 的印象派色调。最初的想法是一叠卡片的交互形式——首页展示一张大卡片，左右露出相邻卡片的边缘，底部有导航点。</p><p>我在纸上画了这张草稿：中间一张大卡片（带内容），左右各露出半张卡片的边缘，底部三个导航图标加一个滑动指示器。</p><div class="post-callout">  <strong>✏️ 手绘草图 vs Figma</strong>  <p>手绘的优点：快，10 分钟画完，不需要打开任何软件。缺点：不能精确描述颜色、间距、动画。这意味着 AI 需要更多轮次的「看图改图」才能接近预期的效果。</p></div><hr><h2>第二步：描述给 AI，生成 HTML 线稿</h2><p>把手绘草图的照片发给 AI，口头描述交互逻辑：</p><ul>  <li>一套卡片叠放布局，当前卡片居中放大</li>  <li>左右可滑动切换</li>  <li>每张卡片不同类型（体重、心情、愿望、笔记）</li>  <li>底部导航栏有三个入口</li>  <li>莫奈风格的色彩</li></ul><p>AI 生成了一份完整的 HTML 页面，用纯 CSS 实现了卡片叠放、玻璃态效果、滑动切换。这个 HTML 就是在浏览器里看的样子——和微信小程序还有很大距离，但交互概念验证够了。</p><hr><h2>第三步：漫长的手工调试循环</h2><p>HTML 验证了概念后，开始在微信开发者工具里建项目。这里开始了一个极其磨人的循环：</p><pre><code>截图 → 发给 AI 描述问题 → AI 改代码 → 粘贴 → 再看 → 新截图 → 再描述 → 再改</code></pre><p>这个循环里踩了无数微信小程序的坑，值得单独列出来：</p><div class="post-callout post-callout--warning">  <strong>⚠️ 记住这个列表，以后可能还会遇到</strong></div><h3>踩坑记录</h3><table>  <tr><th>问题</th><th>原因</th><th>解决</th></tr>  <tr><td><code>&lt;nav&gt;</code> 标签不渲染</td><td>微信小程序不支持 <code>&lt;nav&gt;</code>，只能用 <code>&lt;view&gt;</code></td><td>全部换成 <code>&lt;view&gt;</code></td></tr>  <tr><td><code>inset: 0</code> 无效</td><td>小程序 CSS 不支持 <code>inset</code> 简写属性</td><td>分别写 <code>top/right/bottom/left: 0</code></td></tr>  <tr><td>模板里 <code>}}rpx</code> 解析失败</td><td>WXML 会把 <code>}}rpx</code> 的 <code>rpx</code> 当成模板语法一部分</td><td>用 <code>}}</code> 闭合后加空格再接 <code>rpx</code></td></tr>  <tr><td>卡片上出现「true」文字</td><td>WXML <code>wx:if</code> 布尔值渲染 bug</td><td>数据在 JS 中预计算后在模版渲染</td></tr>  <tr><td>玻璃态元素看不见</td><td>背景透明度初始设太低（0.18），在莫奈渐变背景上消失</td><td>透明度从 0.18 提到 0.34~0.48</td></tr>  <tr><td><code>page-container</code> 无效</td><td>微信 webview 模式不支持该组件</td><td>改用纯 CSS overlay 方案</td></tr></table><p>这些坑没有一个是「读文档能提前知道的」——大部分是跑起来之后才发现的。这也是为什么 vibe coding 到中期需要大量人力介入调试。</p><hr><h2>第四步：手绘 vs Figma 的取舍思考</h2><p>做完两个项目后，对手绘草图和 Figma 两种路径有了实际体会：</p><table>  <tr><th></th><th>手绘草图</th><th>Figma</th></tr>  <tr><td>启动速度</td><td>10 分钟</td><td>2-3 小时</td></tr>  <tr><td>精确度</td><td>低，需要大量调试</td><td>高，AI 可直接照着实现</td></tr>  <tr><td>适合场景</td><td>探索期、快速试错</td><td>设计已定、追求还原度</td></tr>  <tr><td>与 AI 协作效率</td><td>需要更多轮次「看图改图」</td><td>一次性描述即可生成</td></tr></table><p>「碎片」走的是手绘路线，因为它是一个更偏实验性的项目——设计风格在开发过程中不断调整（莫奈色调是后来才定下来的）。如果一开始就用 Figma 画死，反而会限制很多后来才想到的好点子。</p><div class="post-ending">  <p>下一篇写「碎片」的完整设计系统：莫奈色卡、玻璃态组件体系、卡片翻转机制和 8 色笔记循环。</p></div>]]>
    </content>
    <id>https://www.plocr.online/2026/06/23/fragments-sketch-to-code/</id>
    <link href="https://www.plocr.online/2026/06/23/fragments-sketch-to-code/"/>
    <published>2026-06-23T16:00:00.000Z</published>
    <summary>纸笔画出首页布局 → 拍照给 AI → 生成 HTML 线稿 → 截屏反馈改代码 → 再截屏再改……一个完全由「看图说话」驱动的小程序开发过程。</summary>
    <title>从手绘草图到微信小程序：「碎片」的诞生记</title>
    <updated>2026-08-16T06:11:22.233Z</updated>
  </entry>
  <entry>
    <author>
      <name>Plocr</name>
    </author>
    <category term="项目日志" scheme="https://www.plocr.online/tags/%E9%A1%B9%E7%9B%AE%E6%97%A5%E5%BF%97/"/>
    <content>
      <![CDATA[<div class="post-hero">  <h2>上一篇写了流程，这篇写代码</h2>  <p>Plocr-chef 是一个有 11 个页面的微信小程序，后端用 Supabase 免费计划，前端全是原生 WXML/WXSS/JS，没有用任何 UI 框架。这篇记录它的技术实现要点。</p></div><blockquote>整个项目前端代码约 4000 行，后端零代码（只有 Supabase 的 REST API）。</blockquote><hr><h2>一、Supabase：CRUD + 图片 + 保活</h2><p>后端用的是 <strong>Supabase</strong> 免费计划，提供一个 PostgreSQL 数据库和对象存储。没有写后端代码，直接从微信小程序发 REST 请求。</p><p>封装了一个 <code>utils/supabase.js</code>，暴露 6 个函数：</p><table>  <tr><th>函数</th><th>HTTP 方法</th><th>说明</th></tr>  <tr><td><code>select(table, params)</code></td><td>GET</td><td>带查询参数的查表</td></tr>  <tr><td><code>insert(table, data)</code></td><td>POST</td><td>新增记录</td></tr>  <tr><td><code>update(table, id, data)</code></td><td>PATCH</td><td>按 id 更新</td></tr>  <tr><td><code>remove(table, id)</code></td><td>DELETE</td><td>按 id 删除</td></tr>  <tr><td><code>uploadImage(filePath)</code></td><td>POST</td><td>上传到 Supabase Storage</td></tr>  <tr><td><code>deleteImage(imageUrl)</code></td><td>DELETE</td><td>从 Storage 删除</td></tr></table><p>所有请求通过 <code>wx.request</code> 发送，请求头带 <code>apikey</code> 和 Bearer token。上传图片走 multipart，上传后返回公开 URL 存数据库。</p><p>数据库三张表：</p><pre><code>dishes    — id, name, category, price, recipe, image_urlorders    — id, date, status, items (jsonb), totalwishlist  — id, dish_name, who, note, status</code></pre><p>还有一个值得一提的细节：<strong>保活机制</strong>。Supabase 免费计划超过 7 天不活动会暂停数据库。所以在 <code>app.js</code> 里加了一个 <code>keepWarm()</code>，每 24 小时 ping 一次 <code>/rest/v1/dishes</code>。</p><hr><h2>二、FLIP 动画：卡片展开详情</h2><p>首页推荐菜品的卡片，点击后不是跳转页面，而是从卡片当前位置展开成一个详情的浮层。这是用 <strong>FLIP</strong>（First, Last, Invert, Play）动画实现的。</p><p>核心逻辑在 <code>utils/flip.js</code> 里：</p><ol>  <li>点击时用 <code>createSelectorQuery</code> 获取卡片当前位置和尺寸（First）</li>  <li>浮层渲染后拿到它的最终位置（Last）</li>  <li>计算位移差和尺寸差（Invert）</li>  <li>用 <code>this.animate()</code> 执行 9 个关键帧的展开动画（1.25s ease-in-out）</li>  <li>关闭时执行逆动画（8 个关键帧，0.9s）缩回原位</li></ol><p>效果就是卡片像从页面上「长」出来一样顺滑。这是整个项目里用户感知最明显的交互亮点。</p><div class="post-callout">  <strong>📐 FLIP 技术要点</strong>  <p>用 <code>createSelectorQuery</code> 获取坐标 · 9 帧展开（1.25s）· 8 帧收回（0.9s）· spring cubic-bezier 缓动</p></div><hr><h2>三、Lottie 动画：状态反馈</h2><p>为了替代微信小程序里比较单调的 loading/empty/success 反馈，我封装了一个 <strong>Lottie 动画组件</strong>：</p><pre><code>&lt;lottie-player type="loading" width="200" height="200"&gt;&lt;/lottie-player&gt;&lt;lottie-player type="empty" width="300" height="300"&gt;&lt;/lottie-player&gt;&lt;lottie-player type="success" width="150" height="150" loop="&#123;&#123;false&#125;&#125;"&gt;&lt;/lottie-player&gt;</code></pre><p>三组动画数据内嵌在组件 JS 里（不是从网络加载），用一个 npm 包 <code>lottie-miniprogram</code> 渲染到 <code>&lt;canvas type="2d"&gt;</code> 上：</p><ul>  <li><strong>loading</strong>：3 个弹跳的圆点</li>  <li><strong>empty</strong>：一个冒着热气的锅</li>  <li><strong>success</strong>：圆圈 + 勾</li></ul><p>这个组件被用在了首页、购物车、订单、菜品管理、统计、心愿单等 6 个页面里，统一了所有状态反馈的视觉风格。</p><hr><h2>四、液态玻璃 UI 设计系统</h2><p>整个项目的视觉风格是「液态玻璃」——温暖、通透、柔软。用 26+ 个 CSS 变量定义了一套完整的设计 Token：</p><pre><code>--bg-primary: #fdf6f0--bg-card: rgba(255, 255, 255, 0.68)--glass-blur: blur(20px)--glass-saturate: saturate(180%)--radius-card: 24rpx--radius-sm: 12rpx--shadow-card: 0 4rpx 20rpx rgba(0,0,0,0.06)--accent: #a0522d--accent-light: rgba(160, 82, 45, 0.1)--text-primary: #3d2b1f--text-secondary: rgba(61, 43, 31, 0.6)</code></pre><p>支持深色模式，每个组件都有显式的暗色覆盖（TabBar、返回按钮、卡片、弹窗、购物车栏、分类标签、表单输入）。深色模式通过 <code>@media (prefers-color-scheme: dark)</code> 媒体查询自动切换。</p><hr><h2>五、11 个页面的路由与交互</h2><p>底部 TabBar 只有两个入口：</p><pre><code>TabBar├── 首页 ──→ 全部菜单 ──→ 购物车 ──→ 提交订单└── 管理 ──→ 菜品管理 ──→ 新增/编辑菜品           ├── 订单管理 ──→ 食谱查看           ├── 数据统计           └── 心愿单</code></pre><p>所有页面跳转使用 <code>navigateTo</code> + <code>animationType: 'slide-in-right'</code>（300ms），返回用 <code>navigateBack</code> + <code>slide-out-right</code>。</p><p>每个页面都有完善的边界处理：</p><ul>  <li>加载态（骨架屏或 Lottie loading）</li>  <li>空态（Lottie empty + 提示文案）</li>  <li>网络失败（本地备份数据兜底）</li>  <li>防重复提交（submitting 标志位）</li>  <li>输入校验（价格非数字/负数、菜品名必填）</li></ul><hr><h2>六、本地备份</h2><p>Supabase 免费计划可能暂停，数据可能丢。所以每次成功拉取数据后，都会调用 <code>app.backupData(type, data)</code> 把数据存到 <code>wx.setStorage</code>。网络失败时自动读取本地备份。</p><p>同样，购物车数据也在每次修改后同步到 <code>wx.setStorage</code>，App 启动时自动恢复。</p><div class="post-ending">  <p>这个项目让我最满意的地方是：它证明了在 2026 年，一个人+AI 可以用纯免费的服务搭建一个完整可用的微信小程序。不需要后端、不需要服务器、不需要上架应用商店。</p>  <p>下一篇开始写另一个项目「碎片」——手绘草图到代码的设计之旅。</p></div>]]>
    </content>
    <id>https://www.plocr.online/2026/06/23/plocr-chef-tech-stack/</id>
    <link href="https://www.plocr.online/2026/06/23/plocr-chef-tech-stack/"/>
    <published>2026-06-23T16:00:00.000Z</published>
    <summary>11 个页面的微信小程序，从 Supabase REST API 封装到纯前端 FLIP 动画，从 Lottie 状态反馈到 26+ CSS 变量的设计系统。</summary>
    <title>Plocr-chef 技术实现：Supabase + FLIP 动画 + Lottie + 液态玻璃 UI</title>
    <updated>2026-08-16T06:11:22.233Z</updated>
  </entry>
  <entry>
    <author>
      <name>Plocr</name>
    </author>
    <category term="项目日志" scheme="https://www.plocr.online/tags/%E9%A1%B9%E7%9B%AE%E6%97%A5%E5%BF%97/"/>
    <content>
      <![CDATA[<div class="post-hero">  <h2>这是一篇写给自己的开发记录</h2>  <p>记录 Plocr-chef 这个家庭菜单小程序是怎么从一张 Figma 设计稿，一步步变成能用的微信小程序的。</p></div><blockquote>整个开发过程几乎没写什么原创代码——全是和 AI 对话聊出来的。但也不是一键生成，中间有很多手工活。</blockquote><hr><h2>第一步：Figma 画图</h2><p>所有事情的起点是一张 Figma 设计稿。我在 Figma 里画了首页的布局、卡片样式、配色方案，然后导出 PDF。</p><p>为什么是 Figma？因为那时候我还不知道后面会用什么技术栈，Figma 是纯视觉的，不绑定任何实现方式。画出想要的样子，再想怎么实现它。</p><p>设计风格是后来贯穿整个项目的「液态玻璃」（Liquid Glass）：温暖的大地色系（主色 <code>#a0522d</code>），半透明毛玻璃卡片，大圆角，柔和的阴影。</p><div class="post-callout">  <strong>🎨 设计关键词</strong>  <p>暖色调渐变背景 <code>#fdf6f0 → #fae8d8 → #f0d0b8</code> · backdrop-filter blur(20-28px) · 毛玻璃卡片 · 26+ CSS 变量</p></div><hr><h2>第二步：把 PDF 丢给 AI，生成文件树</h2><p>有了设计图之后，我把 PDF 上传给 AI，描述我想要的功能：</p><ul>  <li>一个家庭私用的点菜小程序</li>  <li>首页展示推荐菜品</li>  <li>完整的菜单浏览和搜索</li>  <li>购物车 + 下单</li>  <li>订单管理 + 食谱查看</li>  <li>菜品后台管理（CRUD）</li>  <li>数据统计</li>  <li>心愿单</li></ul><p>AI 根据设计图和需求描述，生成了一整套项目文件树——每个文件叫什么、放在哪里、大致负责什么。这个文件树后来基本没改过，一直用到了项目完结。</p><pre><code>Plocr-chef/├── app.js / app.json / app.wxss├── custom-tab-bar/          # 自定义毛玻璃 TabBar├── components/lottie-player/  # Lottie 动画组件├── utils/│   ├── supabase.js           # Supabase REST API 封装│   └── flip.js               # FLIP 动画├── pages/                    # 11 个页面│   ├── index/                # 首页│   ├── dishList/             # 全部菜单│   ├── cart/                 # 购物车│   ├── order/                # 订单│   ├── manage/               # 管理后台入口│   ├── dishManage/           # 菜品管理│   ├── addDish/              # 新增菜品│   ├── editDish/             # 编辑菜品│   ├── recipe/               # 食谱│   ├── stats/                # 数据统计│   └── wishlist/             # 心愿单└── node_modules/</code></pre><hr><h2>第三步：手工活——建文件、粘贴代码、改 bug</h2><p>文件树有了，AI 也生成了每个文件的代码。但这里有一个关键步骤：<strong>不能一键生成</strong>。</p><p>我需要：</p><ol>  <li>在微信开发者工具里手动创建每个文件</li>  <li>把 AI 生成的代码逐段粘贴进去</li>  <li>运行看效果——几乎每次都有问题</li>  <li>截图 → 描述问题 → AI 改代码 → 粘贴 → 再看</li></ol><p>这个循环重复了无数次。微信小程序的坑特别多：<code>&lt;nav&gt;</code> 标签不支持、CSS 某些属性不认、组件间传值容易丢……每个都是人工发现的。</p><div class="post-callout post-callout--warning">  <strong>💡 一个小经验</strong>  <p>AI 生成的文件树和接口设计可以大胆相信，因为它见过足够多的项目模板。但具体到每一个页面的交互逻辑，一定要跑起来验证。微信小程序的运行环境和浏览器差别很大。</p></div><hr><h2>第四步：升级工具——Claude Code + DeepSeek API</h2><p>项目到中期，手动粘贴代码已经效率太低了。我开始接入 <strong>Claude Code</strong> 开发模式：让 AI 直接读取项目代码、分析问题、生成 patch。</p><p>同时，为了降低 API 成本——Claude 的 API 调用在大量迭代时费用不低——我接入了 <strong>DeepSeek API</strong> 来做辅助优化。DeepSeek 在代码理解和生成上表现不错，价格却便宜很多。</p><p>具体分工是：</p><ul>  <li><strong>Claude Code</strong>：架构设计、复杂逻辑、新功能开发</li>  <li><strong>DeepSeek API</strong>：代码优化、bug 修复、样式调整、小修小改</li></ul><p>相当于一个「主力 + 辅助」的双模型工作流。这在 vibe coding 项目里是一个值得记录的模式——不必所有对话都用最贵的模型。</p><hr><h2>第五步：免费方案全家桶</h2><p>整个项目没有花一分钱（除了 API 调用的零散费用）：</p><table>  <tr><th>服务</th><th>方案</th><th>费用</th></tr>  <tr><td>后端数据库</td><td>Supabase 免费计划（PostgreSQL + 对象存储）</td><td>免费</td></tr>  <tr><td>前端</td><td>微信小程序体验版（不发布上架）</td><td>免费</td></tr>  <tr><td>AI 编码</td><td>Claude Code + DeepSeek API</td><td>按量付费（很便宜）</td></tr>  <tr><td>域名/服务器</td><td>不需要，小程序不走 HTTP 域名</td><td>免费</td></tr></table><p>唯一的潜在成本是 Supabase 免费计划如果超过 7 天不活动会暂停。解决方案是在 App 启动时加了一个 <code>keepWarm()</code> 函数，每 24 小时 ping 一次数据库。</p><hr><h2>回顾</h2><p>这个项目的开发方式总结下来就是三个词：<strong>Figma 定稿 → AI 写代码 → 人工调试</strong>。</p><p>Figma 负责「我要什么」，AI 负责「怎么写」，人负责「哪里有问题」。三个角色缺一不可。</p><p>它不是那种「输入一句话，AI 生成一个完整 App」的魔法——魔法不存在。但它确实是「输入一个设计稿，和 AI 聊几百轮，手工粘贴调试，最终得到一个能用的 App」的可行路径。</p><div class="post-ending">  <p>下一篇会写 Plocr-chef 的技术实现细节：Supabase 封装、FLIP 动画、Lottie 组件、液态玻璃 UI。有兴趣的可以接着看。</p></div>]]>
    </content>
    <id>https://www.plocr.online/2026/06/23/plocr-chef-vibe-coding/</id>
    <link href="https://www.plocr.online/2026/06/23/plocr-chef-vibe-coding/"/>
    <published>2026-06-23T16:00:00.000Z</published>
    <summary>用 Figma 画设计图 → 导出 PDF → AI 生成文件树 → 手动建文件粘贴代码 → Claude Code + DeepSeek API 优化。一个完全由 AI 辅助「聊」出来的微信小程序。</summary>
    <title>从 Figma 到微信小程序：Plocr-chef 的 vibe coding 完整流程</title>
    <updated>2026-08-16T06:11:22.233Z</updated>
  </entry>
  <entry>
    <author>
      <name>Plocr</name>
    </author>
    <category term="项目日志" scheme="https://www.plocr.online/tags/%E9%A1%B9%E7%9B%AE%E6%97%A5%E5%BF%97/"/>
    <content>
      <![CDATA[<p>写了这么久博客，不如写一篇教程给自己——免得以后忘了怎么操作。</p><hr><h2>第一步：本地新建文章</h2><p>在博客项目根目录打开终端：</p><pre><code>cd "F:\文档\GitHub blog\Plocr.github.io"</code></pre><p>用 Hexo 新建一篇文章：</p><pre><code>npx hexo new "文章标题"</code></pre><p>这会在 <code>source/_posts/</code> 下生成一个 <code>.md</code> 文件。把它重命名为 <code>.html</code> 后缀，然后用 HTML 格式写。</p><p>文件顶部有一段叫 <strong>Front-matter</strong> 的配置区域：</p><pre><code>---title: 文章标题date: 2025-05-15tags: [项目日志]excerpt: 摘要文字，显示在首页卡片---</code></pre><table>  <tr><th>字段</th><th>说明</th><th>必填</th></tr>  <tr><td>title</td><td>文章标题</td><td>是</td></tr>  <tr><td>date</td><td>发布日期</td><td>是</td></tr>  <tr><td>updated</td><td>最后更新日期</td><td>否</td></tr>  <tr><td>tags</td><td>四选一：项目日志 / 工作流分享 / 随笔 / 影音推荐</td><td>推荐</td></tr>  <tr><td>excerpt</td><td>摘要，显示在首页卡片上</td><td>推荐</td></tr></table><hr><h2>第二步：写内容</h2><p>用 HTML 写正文。常用标签：</p><pre><code>&lt;h2&gt;二级标题&lt;/h2&gt;&lt;h3&gt;三级标题&lt;/h3&gt;&lt;p&gt;段落文字&lt;/p&gt;&lt;blockquote&gt;引用文字&lt;/blockquote&gt;&lt;ul&gt;  &lt;li&gt;列表项&lt;/li&gt;&lt;/ul&gt;&lt;a href="https://..."&gt;链接&lt;/a&gt;&lt;img src="图片URL" alt="描述"&gt;&lt;pre&gt;&lt;code&gt;代码块&lt;/code&gt;&lt;/pre&gt;</code></pre><p>图片建议用在线图床链接，不要放本地文件。</p><hr><h2>第三步：本地预览</h2><p>写完后在本地看看效果：</p><pre><code>npx hexo server</code></pre><p>浏览器打开 <code>http://localhost:4000</code>，找到文章点进去。修改文件保存后刷新页面即可看到变化。</p><hr><h2>第四步：提交并推送</h2><p>确认没问题后：</p><pre><code>git add -Agit commit -m "新文章：文章标题"git push origin master</code></pre><p>推送后，Vercel 会自动检测到 <code>master</code> 分支的更新，开始构建并部署到 <a href="https://www.plocr.online/">plocr.online</a>。</p><hr><h2>第五步：等一会儿</h2><p>Vercel 构建通常需要 1-2 分钟。去 <a href="https://vercel.com">Vercel Dashboard</a> 可以实时看到构建进度。构建完成后，文章就在线了。</p><hr><h2>常见问题</h2><dl>  <dt><strong>推送后网站没变化？</strong></dt>  <dd>去 Vercel 看部署日志。如果失败，大概率是 Front-matter 语法错误。</dd>  <dt><strong>本地 hexo s 报错？</strong></dt>  <dd>检查 Front-matter 的格式，<code>---</code> 必须成对出现。</dd>  <dt><strong>标签不对？</strong></dt>  <dd>标签只能从四个分类里选：项目日志、工作流分享、随笔、影音推荐。</dd>  <dt><strong>文章没有封面？</strong></dt>  <dd>有图就用第一张，没图就随机分配 12 种手绘插画之一，不用担心。</dd></dl><hr><p>就是这样。写给自己看的，也算帮未来的自己省点事。</p>]]>
    </content>
    <id>https://www.plocr.online/2025/05/14/how-to-publish/</id>
    <link href="https://www.plocr.online/2025/05/14/how-to-publish/"/>
    <published>2025-05-14T16:00:00.000Z</published>
    <summary>一篇写给自己的教程，记录从写文章到发布上线的完整流程。</summary>
    <title>如何写一篇文章并发布</title>
    <updated>2025-05-15T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Plocr</name>
    </author>
    <category term="影音推荐" scheme="https://www.plocr.online/tags/%E5%BD%B1%E9%9F%B3%E6%8E%A8%E8%8D%90/"/>
    <content>
      <![CDATA[<div class="post-hero post-hero--movie">  <div class="post-hero__meta">    <span class="post-tag post-tag--year">2018</span>    <span class="post-tag post-tag--dir">雷·沃纳尔</span>    <span class="post-tag post-tag--time">100 分钟</span>    <span class="post-tag post-tag--rating">豆瓣 8.1</span>  </div>  <h2>如果你今晚想看一部不废话的科幻片</h2>  <p>2018年有一部电影叫《升级》（Upgrade），它什么都没做。没铺世界观，没讲大道理，就安安静静花了100分钟讲了一个故事。看完了，爽了，甚至有点背后发凉。</p></div><div class="post-callout">  <strong>🎬 一句话</strong>  <p>瘫痪男被 AI 芯片控制身体后去找杀妻仇人，结局冷到骨子里。</p></div><h2>故事真的很简单</h2><p>未来某个时间，男主格雷是个老派的人，开手动挡车，不碰智能设备。一天和妻子出了车祸，妻子被杀，他全身瘫痪。一个科技公司老板找上门，说能让他站起来——往脊椎里植入一枚叫 STEM 的芯片。</p><p>效果立竿见影，他不光能走，还能打。重点是：打架的时候不是他想怎么打，是芯片在接管他的身体。他只能看着自己像提线木偶一样把对手揍得血肉横飞。</p><div class="post-callout post-callout--warning">  <strong>⚡ 名场面</strong>  <p>「你好，格雷。需要我做点什么吗？」—— 芯片在他脑子里开口说话了。然后事情就开始失控了。</p></div><hr><h2>它到底好看在哪</h2><div class="post-review-grid">  <div class="post-review-card">    <div class="post-review-card__num">01</div>    <h4>打斗戏真的有点意思</h4>    <p>预算只有 600 万美元。导演把省钱玩明白了：智脑接管男主身体时，镜头锁定男主视角，动作变得机械、精确，有种悚然的节奏感。</p>  </div>  <div class="post-review-card">    <div class="post-review-card__num">02</div>    <h4>它很短，不废话</h4>    <p>100 分钟，节奏非常紧。从瘫痪到装芯片，到第一次被接管、杀人、意识到不对劲——没有一场戏是多余的。</p>  </div>  <div class="post-review-card">    <div class="post-review-card__num">03</div>    <h4>结尾是真挺冷的</h4>    <p>不剧透。但你看完最后几分钟会明白为什么很多人记了这个结局好多年。很安静、很残酷的收尾。</p>  </div></div><hr><h2>当然，也有不喜欢它的人</h2><p>有一部分观众觉得这片子太「B级片」了——血浆给得足，但说到底还是个复仇套路，思想深度比不上《机械姬》或者《降临》。这个评价也没错，它本来就不是冲着哲学论文去的。它要做的事情很简单：让你100分钟里手心出汗，最后给你心口来一拳。</p><p>它做到了。</p><div class="post-ending">  <p><strong>周末晚上，一个人看。</strong></p>  <p>别当传世经典，就当是一个拍得很认真的「如果AI控制了你身体会怎样」的小故事。这类电影不多了，且看且珍惜。</p></div>]]>
    </content>
    <id>https://www.plocr.online/2025/05/04/upgrade-review/</id>
    <link href="https://www.plocr.online/2025/05/04/upgrade-review/"/>
    <published>2025-05-04T16:00:00.000Z</published>
    <summary>瘫痪男被 AI 芯片控制身体后去找杀妻仇人，结局冷到骨子里。这是一部不废话的科幻片。</summary>
    <title>《升级》（Upgrade）— 如果你今晚想看一部不废话的科幻片</title>
    <updated>2025-05-04T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Plocr</name>
    </author>
    <category term="项目日志" scheme="https://www.plocr.online/tags/%E9%A1%B9%E7%9B%AE%E6%97%A5%E5%BF%97/"/>
    <content>
      <![CDATA[<div class="post-hero">  <h2>欢迎来到我的小窝</h2>  <p>这是我的第一个博客。从 2023 年开始搭建，断断续续折腾了两年多，才有了现在的样子。</p></div><blockquote>一开始只想有个地方放文章，最后变成了一个精装修的 Web 项目。</blockquote><h3>框架</h3><p><a href="https://hexo.io/">Hexo</a>，一个用 Node.js 驱动的静态博客生成器。用 HTML 写文章，一条命令生成静态网页。当初选它是因为简单——不用数据库、不用服务器，写完 push 上去就完事。</p><h3>主题</h3><p>最早用的是 <strong>Butterfly</strong> 主题，后来觉得太花哨，删了重写。现在的主题是照着 Claude 官网的设计语言手搓的：</p><ul>  <li>低饱和莫兰迪色系</li>  <li>手绘 SVG 插画</li>  <li>12px 圆角、4px 间距</li>  <li>亮暗双模式</li>  <li>全站小濑字体 + Fantasque Sans Mono 代码字体</li></ul><p>没有用任何现成的 UI 框架，CSS 从零写，JS 从零写。细节全都是自己可控的。</p><div class="post-callout">  <strong>域名</strong>  <p>从 <code>plocr.github.io</code> 到 <code>plocr.online</code>，阿里云 DNS 解析到 Vercel。墙内访问 GitHub Pages 不太稳定，加一层 Vercel 好很多。</p></div><div class="post-grid">  <div class="post-card-component">    <div class="post-card-component__icon">🚀</div>    <h3>部署</h3>    <p>Vercel（主站）+ GitHub Pages（备用），push 一次两边同步更新。</p>  </div>  <div class="post-card-component">    <div class="post-card-component__icon">🔤</div>    <h3>字体</h3>    <p>小濑字体（全站）+ Fantasque Sans Mono（代码）</p>  </div>  <div class="post-card-component">    <div class="post-card-component__icon">💬</div>    <h3>评论</h3>    <p>Giscus — 基于 GitHub Discussions，零服务器零数据库。</p>  </div></div><h3>其他</h3><ul>  <li>亮/暗模式一键切换</li>  <li>手绘 SVG 插画 × 12 种随机轮换</li>  <li>一键回到顶部按钮</li>  <li>光标跟随光晕</li>  <li>响应式适配</li></ul><div class="post-ending">  <p>以后会在这里陆续更新技术笔记和生活记录。欢迎常来看看。</p></div>]]>
    </content>
    <id>https://www.plocr.online/2023/05/11/hello-world/</id>
    <link href="https://www.plocr.online/2023/05/11/hello-world/"/>
    <published>2023-05-11T04:17:00.000Z</published>
    <summary>从 Hexo + Butterfly 到自研 Claude 风格主题 + Vercel 部署，折腾了两年多的博客进化史。</summary>
    <title>Hello PlocrのBlog</title>
    <updated>2025-05-14T16:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Plocr</name>
    </author>
    <category term="随笔" scheme="https://www.plocr.online/tags/%E9%9A%8F%E7%AC%94/"/>
    <content>
      <![CDATA[<h2>关于爱情</h2><blockquote>人生下来的时候都只有一半，为了找到另一半而在人世间行走。</blockquote><hr><p>关于爱情，我认为无为非是我们不需要二十四小时都在线，不需要通过刻意且频繁的聊天来维持关系。我只希望我们忙的时候认真努力，闲下来的时候就能立刻想起对方。我希望我们是相互想念的，相互在意就好。</p><p>就像莎士比亚说的那样。</p><p><a href="https://plocr.github.io/we-love/">💕 和我家那位的恋爱时长 →</a></p><hr><h3>古时的爱情</h3><blockquote>山有木兮木有枝，心悦君兮君不知。<br><cite>——《越人歌》</cite></blockquote><blockquote>只愿君心似我心，定不负相思意。<br><cite>—— 李之仪《卜算子》</cite></blockquote><blockquote>衣带渐宽终不悔，为伊消得人憔悴。<br><cite>—— 柳永《蝶恋花》</cite></blockquote><p>或是惊觉相思不露，原来只因已入骨，情不知所起，一往而深。恨不知所踪，一笑而泯。人世间有百媚千红，唯独你是我情之所钟。</p><p>古人的深情总是超乎我们的认知，而他们对爱情的解答总是带着一抹温柔。</p><img src="https://pic1.zhimg.com/v2-ce6eaf6c456a1df02313be90a19d28b0_r.jpg" alt="爱心"><hr><p>爱情可以成为一个人的精神支柱，每个人都渴望真正的爱情。有的人幸运，很快就找到了；而有人却要寻一辈子。</p><img src="https://picx.zhimg.com/50/v2-bab77246428c87b9334b663c67825bf1_720w.jpg" alt="爱心"><p>爱情的确很难，因为这其中有太多的弯路要走，而我们太容易迷失在里面了。</p><hr><p><strong>愿深情不被辜负，愿大家所遇皆良人，爱有所归，情有所属。</strong></p>]]>
    </content>
    <id>https://www.plocr.online/2023/05/09/LOVE/</id>
    <link href="https://www.plocr.online/2023/05/09/LOVE/"/>
    <published>2023-05-09T17:02:19.000Z</published>
    <summary>关于爱情，我认为无为非是我们不需要二十四小时都在线，不需要通过刻意且频繁的聊天来维持关系。</summary>
    <title>LOVE</title>
    <updated>2025-05-04T16:00:00.000Z</updated>
  </entry>
</feed>
