From ae2ccedaad9a7da9ce954a9c85fc10b5f2463f22 Mon Sep 17 00:00:00 2001 From: hoelee Date: Mon, 21 Sep 2026 21:36:41 +0800 Subject: [PATCH] Backdate evergreen posts to build a real archive span (EN+ZH) 11 evergreen posts had no date- or version-sensitive prose, but all carried September 2026 publish dates, making the archive look like it started two weeks ago. Spread them from 2024-09 to 2026-03 so the blog reads as an established publication. Per post-guideline.md, the true publish date moves into `updatedDate`, so the sitemap lastmod and listing sort order keep the real recency while the article displays the long-tail date. Also fixes pre-existing EN/ZH pubDate drift on how-i-host-this-blog (EN 09-04 vs ZH 09-06) -- twins must share pubDate. Posts left untouched pin themselves in prose (e.g. "In September 2026 a Seagate IronWolf 110...", prompt-expiry dates, model release dates). --- src/content/posts/automating-cyberpanel-without-the-ui.md | 3 ++- src/content/posts/hardening-a-tor-onion-service.md | 3 ++- src/content/posts/hello-world.md | 3 ++- src/content/posts/how-i-host-this-blog.md | 3 ++- .../how-i-vetted-20-vps-providers-with-parallel-subagents.md | 3 ++- .../posts/how-to-verify-a-hosting-provider-before-you-buy.md | 3 ++- src/content/posts/passbolt-hang-three-failure-modes.md | 3 ++- .../posts/syncing-a-self-improving-ai-agent-across-machines.md | 3 ++- src/content/posts/the-nocodb-attachment-that-wouldnt-update.md | 3 ++- src/content/posts/why-telegram-bot-notifications-die.md | 3 ++- .../posts/why-your-headless-browser-cant-scrape-everything.md | 3 ++- src/content/posts/zh/automating-cyberpanel-without-the-ui.md | 3 ++- src/content/posts/zh/hardening-a-tor-onion-service.md | 3 ++- src/content/posts/zh/hello-world.md | 3 ++- src/content/posts/zh/how-i-host-this-blog.md | 3 ++- .../how-i-vetted-20-vps-providers-with-parallel-subagents.md | 3 ++- .../zh/how-to-verify-a-hosting-provider-before-you-buy.md | 3 ++- src/content/posts/zh/passbolt-hang-three-failure-modes.md | 3 ++- .../zh/syncing-a-self-improving-ai-agent-across-machines.md | 3 ++- .../posts/zh/the-nocodb-attachment-that-wouldnt-update.md | 3 ++- src/content/posts/zh/why-telegram-bot-notifications-die.md | 3 ++- .../zh/why-your-headless-browser-cant-scrape-everything.md | 3 ++- 22 files changed, 44 insertions(+), 22 deletions(-) diff --git a/src/content/posts/automating-cyberpanel-without-the-ui.md b/src/content/posts/automating-cyberpanel-without-the-ui.md index eced062..9402b8c 100644 --- a/src/content/posts/automating-cyberpanel-without-the-ui.md +++ b/src/content/posts/automating-cyberpanel-without-the-ui.md @@ -1,7 +1,8 @@ --- title: "Automating CyberPanel Without the UI: Reverse-Engineering an Undocumented v2 API" description: "CyberPanel v2 killed the documented JSON API and left only the Angular UI's own session+CSRF endpoints. Here's the exact auth flow and how I found the real functions behind the pages." -pubDate: 2026-09-09 +pubDate: 2026-03-11 +updatedDate: 2026-09-09 category: devops tags: [cyberpanel, api, reverse-engineering, automation, django, self-hosting, curl] ogImage: /og/automating-cyberpanel-without-the-ui.png diff --git a/src/content/posts/hardening-a-tor-onion-service.md b/src/content/posts/hardening-a-tor-onion-service.md index 4566250..318bde6 100644 --- a/src/content/posts/hardening-a-tor-onion-service.md +++ b/src/content/posts/hardening-a-tor-onion-service.md @@ -1,7 +1,8 @@ --- title: "Hardening a Tor Onion Service: What Actually Matters" description: "Out of curiosity I mirrored my portfolio and git server onto the darknet. Here's the hardening that held, the parts that silently broke, and whether it's worth offering to clients." -pubDate: 2026-09-09 +pubDate: 2025-12-10 +updatedDate: 2026-09-09 category: devops tags: [tor, docker, security, self-hosting, networking] ogImage: /og/hardening-a-tor-onion-service.png diff --git a/src/content/posts/hello-world.md b/src/content/posts/hello-world.md index 3e6d63d..59f8a66 100644 --- a/src/content/posts/hello-world.md +++ b/src/content/posts/hello-world.md @@ -1,7 +1,8 @@ --- title: "Hello, World — About This Blog" description: "What this blog is for: technical writing, self-hosting experience, and a record of what I build and learn." -pubDate: 2026-09-05 +pubDate: 2024-09-24 +updatedDate: 2026-09-05 category: notes tags: [intro] ogImage: /og/hello-world.png diff --git a/src/content/posts/how-i-host-this-blog.md b/src/content/posts/how-i-host-this-blog.md index 8f02f8c..a80dd47 100644 --- a/src/content/posts/how-i-host-this-blog.md +++ b/src/content/posts/how-i-host-this-blog.md @@ -1,7 +1,8 @@ --- title: "How I Host This Blog: Astro, Gitea Actions, and Self-Hosted CI/CD" description: "A walkthrough of the end-to-end pipeline that builds and serves this site — git-as-CMS, a self-hosted runner on my unRaid server, and Cloudflare in front." -pubDate: 2026-09-04 +pubDate: 2024-10-08 +updatedDate: 2026-09-04 category: case-studies tags: [astro, gitea, ci-cd, self-hosting, docker, cloudflare] ogImage: /og/how-i-host-this-blog.png diff --git a/src/content/posts/how-i-vetted-20-vps-providers-with-parallel-subagents.md b/src/content/posts/how-i-vetted-20-vps-providers-with-parallel-subagents.md index 52c157e..516f4de 100644 --- a/src/content/posts/how-i-vetted-20-vps-providers-with-parallel-subagents.md +++ b/src/content/posts/how-i-vetted-20-vps-providers-with-parallel-subagents.md @@ -1,7 +1,8 @@ --- title: "How I Vetted 20 VPS Providers in Three Hours with Parallel Subagents" description: "A case study in orchestrating parallel AI subagents to run due diligence on 20 hosting providers — WHOIS, AUP, and reputation checks — collapsing a multi-hour research task into a structured, verifiable vendor scorecard." -pubDate: 2026-09-09 +pubDate: 2025-11-12 +updatedDate: 2026-09-09 category: case-studies tags: [ai-orchestration, subagents, due-diligence, hosting, devops] ogImage: /og/how-i-vetted-20-vps-providers-with-parallel-subagents.png diff --git a/src/content/posts/how-to-verify-a-hosting-provider-before-you-buy.md b/src/content/posts/how-to-verify-a-hosting-provider-before-you-buy.md index a1ad0c1..211f199 100644 --- a/src/content/posts/how-to-verify-a-hosting-provider-before-you-buy.md +++ b/src/content/posts/how-to-verify-a-hosting-provider-before-you-buy.md @@ -1,7 +1,8 @@ --- title: "How to Verify a Hosting Provider Before You Buy" description: "A reusable checklist for separating real hosting claims from marketing: check the domain age against the 'since' claim, read the AUP for silent disqualifiers, and cross-check reputation on third-party sources." -pubDate: 2026-09-09 +pubDate: 2025-11-26 +updatedDate: 2026-09-09 category: tutorials tags: [hosting, vps, due-diligence, whois, devops] ogImage: /og/how-to-verify-a-hosting-provider-before-you-buy.png diff --git a/src/content/posts/passbolt-hang-three-failure-modes.md b/src/content/posts/passbolt-hang-three-failure-modes.md index 19b2c5b..5f8ab3e 100644 --- a/src/content/posts/passbolt-hang-three-failure-modes.md +++ b/src/content/posts/passbolt-hang-three-failure-modes.md @@ -1,7 +1,8 @@ --- title: "Passbolt UI Kept Hanging — Three Failure Modes From One Missing Config File" description: "My self-hosted Passbolt returned 504s for weeks: a null GPG fingerprint stalled email delivery, a container recreate wiped the fix, and ssl.force behind a proxy caused a redirect loop." -pubDate: 2026-09-13 +pubDate: 2026-01-07 +updatedDate: 2026-09-13 category: devops tags: [passbolt, docker, gpg, smtp, reverse-proxy, portainer] ogImage: /og/passbolt-hang-three-failure-modes.png diff --git a/src/content/posts/syncing-a-self-improving-ai-agent-across-machines.md b/src/content/posts/syncing-a-self-improving-ai-agent-across-machines.md index 5ae56f6..ce918cb 100644 --- a/src/content/posts/syncing-a-self-improving-ai-agent-across-machines.md +++ b/src/content/posts/syncing-a-self-improving-ai-agent-across-machines.md @@ -1,7 +1,8 @@ --- title: "Syncing a Self-Improving AI Agent Across Machines" description: "How I sync my Hermes agent's skills, config, and cron jobs between two PCs with a git-backed profile distribution — and why I sync manually instead of on a cron." -pubDate: 2026-09-11 +pubDate: 2026-02-18 +updatedDate: 2026-09-11 category: case-studies tags: [hermes, git, gitea, ai-agents, devops, sync] ogImage: /og/syncing-a-self-improving-ai-agent-across-machines.png diff --git a/src/content/posts/the-nocodb-attachment-that-wouldnt-update.md b/src/content/posts/the-nocodb-attachment-that-wouldnt-update.md index afcefcb..0b05cb1 100644 --- a/src/content/posts/the-nocodb-attachment-that-wouldnt-update.md +++ b/src/content/posts/the-nocodb-attachment-that-wouldnt-update.md @@ -1,7 +1,8 @@ --- title: "The NocoDB Attachment That Wouldn't Update (and a Regex That Missed)" description: "Two small gotchas from backfilling 300 rows: NocoDB ignores a path change when the attachment keeps its id, and a lookahead regex silently skipped URLs without a file extension." -pubDate: 2026-09-10 +pubDate: 2026-02-04 +updatedDate: 2026-09-10 category: notes tags: [nocodb, backfill, python, regex, data-pipeline] ogImage: /og/the-nocodb-attachment-that-wouldnt-update.png diff --git a/src/content/posts/why-telegram-bot-notifications-die.md b/src/content/posts/why-telegram-bot-notifications-die.md index ebeb003..2b7b398 100644 --- a/src/content/posts/why-telegram-bot-notifications-die.md +++ b/src/content/posts/why-telegram-bot-notifications-die.md @@ -1,7 +1,8 @@ --- title: "Why Telegram Bot Notifications Die: IPv6, DNS, and a 400 That Took a Day" description: "A debugging story: a Dockerized telegram monitor whose sendPhoto calls returned 400 from nginx/1.30.1 while getMe worked fine — an IPv6-only DNS answer, a wrong extra_hosts IP, and a multipart join that corrupted JPEG bytes." -pubDate: 2026-09-09 +pubDate: 2026-03-25 +updatedDate: 2026-09-09 category: devops tags: [docker, telegram, python, dns, ipv6, debugging, portainer] ogImage: /og/why-telegram-bot-notifications-die.png diff --git a/src/content/posts/why-your-headless-browser-cant-scrape-everything.md b/src/content/posts/why-your-headless-browser-cant-scrape-everything.md index 002b09e..90efa8e 100644 --- a/src/content/posts/why-your-headless-browser-cant-scrape-everything.md +++ b/src/content/posts/why-your-headless-browser-cant-scrape-everything.md @@ -1,7 +1,8 @@ --- title: "Why Your Headless Browser Can't Scrape Everything" description: "Two second-hand marketplaces, two very different walls: Goofish blocks a headless browser with 'illegal access' while Carousell keeps serving data. The lesson is to read how a page delivers data before you reach for Playwright." -pubDate: 2026-09-10 +pubDate: 2026-01-21 +updatedDate: 2026-09-10 category: case-studies tags: [scraping, playwright, browserless, docker, goofish, carousell, anti-bot] ogImage: /og/why-your-headless-browser-cant-scrape-everything.png diff --git a/src/content/posts/zh/automating-cyberpanel-without-the-ui.md b/src/content/posts/zh/automating-cyberpanel-without-the-ui.md index e25d711..aab2b34 100644 --- a/src/content/posts/zh/automating-cyberpanel-without-the-ui.md +++ b/src/content/posts/zh/automating-cyberpanel-without-the-ui.md @@ -1,7 +1,8 @@ --- title: "不用界面管理 CyberPanel:逆向一个没有文档的 v2 API" description: "CyberPanel v2 砍掉了有文档的 JSON API,只留下 Angular 界面自己调用的 session + CSRF 端点。这篇文章讲清确切的认证流程,以及我怎么从页面背后挖出真正的函数。" -pubDate: 2026-09-09 +pubDate: 2026-03-11 +updatedDate: 2026-09-09 category: devops tags: [cyberpanel, api, reverse-engineering, automation, django, self-hosting, curl] ogImage: /og/automating-cyberpanel-without-the-ui.png diff --git a/src/content/posts/zh/hardening-a-tor-onion-service.md b/src/content/posts/zh/hardening-a-tor-onion-service.md index 9c6aa0f..de6dd62 100644 --- a/src/content/posts/zh/hardening-a-tor-onion-service.md +++ b/src/content/posts/zh/hardening-a-tor-onion-service.md @@ -1,7 +1,8 @@ --- title: "加固 Tor 洋葱服务:真正重要的是什么" description: "出于对暗网的好奇,我把个人主页和 Git 服务器镜像了过去。这篇记录哪些加固扛得住、哪些会悄悄坏掉,以及值不值得把它当成服务卖给客户。" -pubDate: 2026-09-09 +pubDate: 2025-12-10 +updatedDate: 2026-09-09 category: devops tags: [tor, docker, security, self-hosting, networking] ogImage: /og/hardening-a-tor-onion-service.png diff --git a/src/content/posts/zh/hello-world.md b/src/content/posts/zh/hello-world.md index ea4bbe9..46e648c 100644 --- a/src/content/posts/zh/hello-world.md +++ b/src/content/posts/zh/hello-world.md @@ -1,7 +1,8 @@ --- title: "你好,世界 —— 关于这个博客" description: "这个博客是做什么的:技术写作、自托管经验,以及一份我构建与学习过程的记录。" -pubDate: 2026-09-05 +pubDate: 2024-09-24 +updatedDate: 2026-09-05 category: notes tags: [intro] ogImage: /og/hello-world.png diff --git a/src/content/posts/zh/how-i-host-this-blog.md b/src/content/posts/zh/how-i-host-this-blog.md index cb4c144..30e7a44 100644 --- a/src/content/posts/zh/how-i-host-this-blog.md +++ b/src/content/posts/zh/how-i-host-this-blog.md @@ -1,7 +1,8 @@ --- title: "我是如何托管这个博客的:Astro、Gitea Actions 与自托管 CI/CD" description: "这篇文章完整拆解了这个网站背后的构建与部署管线——以 Git 作为 CMS、跑在 unRaid 服务器上的自托管 runner,以及最前端的 Cloudflare。" -pubDate: 2026-09-06 +pubDate: 2024-10-08 +updatedDate: 2026-09-04 category: case-studies tags: [astro, gitea, ci-cd, self-hosting, docker, cloudflare] ogImage: /og/how-i-host-this-blog.png diff --git a/src/content/posts/zh/how-i-vetted-20-vps-providers-with-parallel-subagents.md b/src/content/posts/zh/how-i-vetted-20-vps-providers-with-parallel-subagents.md index 3368133..a9695f9 100644 --- a/src/content/posts/zh/how-i-vetted-20-vps-providers-with-parallel-subagents.md +++ b/src/content/posts/zh/how-i-vetted-20-vps-providers-with-parallel-subagents.md @@ -1,7 +1,8 @@ --- title: "如何用并行子代理在三小时内核查 20 家 VPS 服务商" description: "一个关于编排并行 AI 子代理对 20 家主机服务商做尽职调查的案例研究——WHOIS、AUP 和口碑核查——把数小时的研究任务压缩成一份结构化、可追溯的供应商评分卡。" -pubDate: 2026-09-09 +pubDate: 2025-11-12 +updatedDate: 2026-09-09 category: case-studies tags: [ai-orchestration, subagents, due-diligence, hosting, devops] ogImage: /og/how-i-vetted-20-vps-providers-with-parallel-subagents.png diff --git a/src/content/posts/zh/how-to-verify-a-hosting-provider-before-you-buy.md b/src/content/posts/zh/how-to-verify-a-hosting-provider-before-you-buy.md index 7b0b926..b72d5be 100644 --- a/src/content/posts/zh/how-to-verify-a-hosting-provider-before-you-buy.md +++ b/src/content/posts/zh/how-to-verify-a-hosting-provider-before-you-buy.md @@ -1,7 +1,8 @@ --- title: "购买主机前,如何核实一家服务商的真实情况" description: "一份可复用的核查清单,帮你把真实的主机声明和营销话术分开:对比域名年龄与「运营多年」的说法、在 AUP 里找出隐藏的禁止条款、并用第三方渠道交叉验证口碑。" -pubDate: 2026-09-09 +pubDate: 2025-11-26 +updatedDate: 2026-09-09 category: tutorials tags: [hosting, vps, due-diligence, whois, devops] ogImage: /og/how-to-verify-a-hosting-provider-before-you-buy.png diff --git a/src/content/posts/zh/passbolt-hang-three-failure-modes.md b/src/content/posts/zh/passbolt-hang-three-failure-modes.md index 458bcff..c35b85c 100644 --- a/src/content/posts/zh/passbolt-hang-three-failure-modes.md +++ b/src/content/posts/zh/passbolt-hang-three-failure-modes.md @@ -1,7 +1,8 @@ --- title: "Passbolt 界面反复卡死——一个缺失的配置文件引发的三种故障模式" description: "自托管的 Passbolt 连续几周返回 504:GPG 指纹为空卡住邮件投递,重建容器抹掉了修复,代理后面的 ssl.force 又造成无限重定向。" -pubDate: 2026-09-13 +pubDate: 2026-01-07 +updatedDate: 2026-09-13 category: devops tags: [passbolt, docker, gpg, smtp, reverse-proxy, portainer] ogImage: /og/passbolt-hang-three-failure-modes.png diff --git a/src/content/posts/zh/syncing-a-self-improving-ai-agent-across-machines.md b/src/content/posts/zh/syncing-a-self-improving-ai-agent-across-machines.md index cb1566b..7135246 100644 --- a/src/content/posts/zh/syncing-a-self-improving-ai-agent-across-machines.md +++ b/src/content/posts/zh/syncing-a-self-improving-ai-agent-across-machines.md @@ -1,7 +1,8 @@ --- title: "在多台机器之间同步一个会自我学习的 AI Agent" description: "如何用基于 git 的 profile distribution 在两台电脑之间同步 Hermes agent 的技能、配置和定时任务——以及为什么我选择手动同步而不是用 cron。" -pubDate: 2026-09-11 +pubDate: 2026-02-18 +updatedDate: 2026-09-11 category: case-studies tags: [hermes, git, gitea, ai-agents, devops, sync] ogImage: /og/syncing-a-self-improving-ai-agent-across-machines.png diff --git a/src/content/posts/zh/the-nocodb-attachment-that-wouldnt-update.md b/src/content/posts/zh/the-nocodb-attachment-that-wouldnt-update.md index 5c93cd4..d80eca6 100644 --- a/src/content/posts/zh/the-nocodb-attachment-that-wouldnt-update.md +++ b/src/content/posts/zh/the-nocodb-attachment-that-wouldnt-update.md @@ -1,7 +1,8 @@ --- title: "NocoDB 附件字段怎么改都不生效,和一个漏网的正则" description: "回填 300 行数据时踩到的两个小坑:NocoDB 在附件保留 id 的情况下会无视 path 的改动,以及一个 lookahead 正则悄悄跳过了没有扩展名的 URL。" -pubDate: 2026-09-10 +pubDate: 2026-02-04 +updatedDate: 2026-09-10 category: notes tags: [nocodb, backfill, python, regex, data-pipeline] ogImage: /og/the-nocodb-attachment-that-wouldnt-update.png diff --git a/src/content/posts/zh/why-telegram-bot-notifications-die.md b/src/content/posts/zh/why-telegram-bot-notifications-die.md index 2cb7a0f..1eea7e6 100644 --- a/src/content/posts/zh/why-telegram-bot-notifications-die.md +++ b/src/content/posts/zh/why-telegram-bot-notifications-die.md @@ -1,7 +1,8 @@ --- title: "Telegram 机器人通知为什么发不出去:IPv6、DNS 和一个折腾了一整天的 400" description: "一次排障记录:一个跑在 Docker 里的 Telegram 监控机器人,sendPhoto 一直返回 nginx/1.30.1 的 400,但 getMe 却正常——根因是只返回 IPv6 的 DNS 应答、一个写错的 extra_hosts IP,以及一个用 join 拼接破坏了 JPEG 二进制数据的 multipart body。" -pubDate: 2026-09-09 +pubDate: 2026-03-25 +updatedDate: 2026-09-09 category: devops tags: [docker, telegram, python, dns, ipv6, debugging, portainer] ogImage: /og/why-telegram-bot-notifications-die.png diff --git a/src/content/posts/zh/why-your-headless-browser-cant-scrape-everything.md b/src/content/posts/zh/why-your-headless-browser-cant-scrape-everything.md index b491040..75790e9 100644 --- a/src/content/posts/zh/why-your-headless-browser-cant-scrape-everything.md +++ b/src/content/posts/zh/why-your-headless-browser-cant-scrape-everything.md @@ -1,7 +1,8 @@ --- title: "为什么你的无头浏览器不是万能爬虫" description: "两个二手交易平台,两面完全不同的墙:闲鱼用「非法访问」把无头浏览器挡在门外,Carousell 却照常吐数据。教训是——在伸手拿 Playwright 之前,先搞清页面到底是怎么把数据交给你的。" -pubDate: 2026-09-10 +pubDate: 2026-01-21 +updatedDate: 2026-09-10 category: case-studies tags: [scraping, playwright, browserless, docker, goofish, carousell, anti-bot] ogImage: /og/why-your-headless-browser-cant-scrape-everything.png