feat(art): replace all 72 posts' artwork with the v2 pipeline
Deploy / build (push) Successful in 17s

Every post now carries one unique local-ComfyUI/Ideogram 4 base frame, composited
into EN + ZH share cards, a banner and list thumbs.

- the shipped prompts_catalog held only 21 distinct metaphors for 72 posts (16
  shared one visual), so all 72 were rewritten as unique object+state metaphors
  and 10 frames re-rolled after OCR found pseudo-text rendered at legible size
- render_from_art.mjs emits JPEG by default (558 KB PNG -> 84 KB mozjpeg q85);
  the ZH 1200x630 card did not exist before this batch
- 288 frontmatter fields migrated; the 144 v1 PNGs are gone
- PostList's thumb helper keys off the base slug (a ZH card is zh-<slug>.jpg while
  the thumb is <slug>-800.webp, which 404'd the whole ZH listing)
- [...slug].astro's <picture> regex accepts .jpg
- the repo now carries the art inputs (metaphors.json, captions/<slug>.json,
  refreshed prompts_catalog.json) so a frame is reproducible from git alone
This commit is contained in:
hoelee committed 2026-10-19 04:18:59 +08:00
1 parent 72a9a2af6f
commit 327d516ed9
802 files changed
+1289 -519

No files matched your search

@@ -5,8 +5,8 @@ pubDate: 2025-05-06
updatedDate: 2026-10-16
category: notes
tags: ["email", "dns", "mailcow", "smtp", "deliverability"]
ogImage: /og/adding-a-domain-to-someone-elses-mail-server.png
banner: /banners/adding-a-domain-to-someone-elses-mail-server.png
ogImage: /og/adding-a-domain-to-someone-elses-mail-server.jpg
banner: /banners/adding-a-domain-to-someone-elses-mail-server.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2025-06-11
updatedDate: 2026-09-29
category: engineering
tags: ["i18n", "nginx", "vue", "javascript", "self-hosting"]
ogImage: "/og/adding-english-mode-to-a-chinese-only-web-app.png"
banner: "/banners/adding-english-mode-to-a-chinese-only-web-app.png"
ogImage: "/og/adding-english-mode-to-a-chinese-only-web-app.jpg"
banner: "/banners/adding-english-mode-to-a-chinese-only-web-app.jpg"
draft: false
---
@@ -4,8 +4,8 @@ description: "Compositing furniture photos into styled room scenes with fal.ai F
pubDate: 2026-09-11
category: case-studies
tags: [fal-ai, flux, ai-image, javascript, canvas, ecommerce]
ogImage: /og/ai-furniture-compositing-with-flux-kontext.png
banner: /banners/ai-furniture-compositing-with-flux-kontext.png
ogImage: /og/ai-furniture-compositing-with-flux-kontext.jpg
banner: /banners/ai-furniture-compositing-with-flux-kontext.jpg
---
A furniture client came to me with a problem that every small e-commerce seller
@@ -5,8 +5,8 @@ pubDate: 2026-09-20
updatedDate: 2026-10-16
category: devops
tags: ["authentik", "css", "self-hosting", "debugging", "browser"]
ogImage: /og/authentik-css-greater-than-bug.png
banner: /banners/authentik-css-greater-than-bug.png
ogImage: /og/authentik-css-greater-than-bug.jpg
banner: /banners/authentik-css-greater-than-bug.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2026-08-12
updatedDate: 2026-09-29
category: devops
tags: ["authentik", "forward-auth", "cloudflare", "nginx", "docker", "self-hosting"]
ogImage: /og/authentik-forward-auth-gate-wasnt-live.png
banner: /banners/authentik-forward-auth-gate-wasnt-live.png
ogImage: /og/authentik-forward-auth-gate-wasnt-live.jpg
banner: /banners/authentik-forward-auth-gate-wasnt-live.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "A year's worth of authentik major-version upgrade pain: storage mo
pubDate: 2026-09-09
category: devops
tags: [authentik, sso, docker, portainer, self-hosting, oidc, upgrade]
ogImage: /og/authentik-major-upgrade-gotchas.png
banner: /banners/authentik-major-upgrade-gotchas.png
ogImage: /og/authentik-major-upgrade-gotchas.jpg
banner: /banners/authentik-major-upgrade-gotchas.jpg
---
I run authentik as the single sign-on gate in front of my self-hosted stack —
@@ -4,8 +4,8 @@ description: "CyberPanel v2 killed the documented JSON API and left only the Ang
pubDate: 2026-09-09
category: devops
tags: [cyberpanel, api, reverse-engineering, automation, django, self-hosting, curl]
ogImage: /og/automating-cyberpanel-without-the-ui.png
banner: /banners/automating-cyberpanel-without-the-ui.png
ogImage: /og/automating-cyberpanel-without-the-ui.jpg
banner: /banners/automating-cyberpanel-without-the-ui.jpg
---
I run CyberPanel 2.4.4.1 inside an Ubuntu VM on my home lab to host a handful
@@ -4,8 +4,8 @@ description: "Compare the best AI video generators in 2026 — free vs paid plan
pubDate: 2026-09-11
category: ai
tags: [ai-video, video-generation, ltx, open-weights, pricing, veo]
ogImage: /og/best-ai-video-generators-2026.png
banner: /banners/best-ai-video-generators-2026.png
ogImage: /og/best-ai-video-generators-2026.jpg
banner: /banners/best-ai-video-generators-2026.jpg
---
Which AI video generator should you actually use in 2026 — and how much of it can you really get for free?
@@ -5,8 +5,8 @@ pubDate: 2026-10-14
updatedDate: 2026-10-16
category: tutorials
tags: ["ffmpeg", "hevc", "qsv", "transcoding", "video"]
ogImage: /og/calibrating-intel-quick-sync-hevc-quality.png
banner: /banners/calibrating-intel-quick-sync-hevc-quality.png
ogImage: /og/calibrating-intel-quick-sync-hevc-quality.jpg
banner: /banners/calibrating-intel-quick-sync-hevc-quality.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2024-12-10
updatedDate: 2026-09-29
category: web3
tags: [solidity, chainlink, vrf, foundry, hardhat, blockchain]
ogImage: /og/chainlink-vrf-v2-lottery-contract.png
banner: /banners/chainlink-vrf-v2-lottery-contract.png
ogImage: /og/chainlink-vrf-v2-lottery-contract.jpg
banner: /banners/chainlink-vrf-v2-lottery-contract.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "A container on my NAS kept stopping unexpectedly while Docker repo
pubDate: 2026-10-16
category: devops
tags: ["docker", "oom", "traefik", "synology", "crawlers"]
ogImage: /og/docker-reported-exit-0-the-oom-killer-disagreed.png
banner: /banners/docker-reported-exit-0-the-oom-killer-disagreed.png
ogImage: /og/docker-reported-exit-0-the-oom-killer-disagreed.jpg
banner: /banners/docker-reported-exit-0-the-oom-killer-disagreed.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "A measured comparison of HEVC encoders on real files: NVENC at cq2
pubDate: 2026-10-08
category: tutorials
tags: [ffmpeg, hevc, x265, nvenc, video]
ogImage: /og/does-hevc-actually-shrink-your-files.png
banner: /banners/does-hevc-actually-shrink-your-files.png
ogImage: /og/does-hevc-actually-shrink-your-files.jpg
banner: /banners/does-hevc-actually-shrink-your-files.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2025-01-22
updatedDate: 2026-10-16
category: engineering
tags: ["pdf", "fonts", "mpdf", "typography", "php"]
ogImage: /og/embedding-fonts-so-a-pdf-looks-the-same-everywhere.png
banner: /banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.png
ogImage: /og/embedding-fonts-so-a-pdf-looks-the-same-everywhere.jpg
banner: /banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "Same HEVC file, same stutter in VLC, Chrome and an iPad — offlin
pubDate: 2026-10-08
category: devops
tags: [ffmpeg, nvdec, hevc, transcoding, video]
ogImage: /og/every-player-stuttered-the-file-was-fine.png
banner: /banners/every-player-stuttered-the-file-was-fine.png
ogImage: /og/every-player-stuttered-the-file-was-fine.jpg
banner: /banners/every-player-stuttered-the-file-was-fine.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "The five-step AI roadmap circulates on every feed. Here is the hon
pubDate: 2026-10-13
category: ai
tags: ["llm", "rag", "agents", "self-hosting", "whisper", "mem0"]
ogImage: /og/five-step-ai-roadmap-what-i-actually-run.png
banner: /banners/five-step-ai-roadmap-what-i-actually-run.png
ogImage: /og/five-step-ai-roadmap-what-i-actually-run.jpg
banner: /banners/five-step-ai-roadmap-what-i-actually-run.jpg
draft: false
---
+2 -2
View File
@@ -5,8 +5,8 @@ pubDate: 2024-10-08
updatedDate: 2026-09-29
category: web3
tags: [solidity, foundry, erc721, nft, svg, base64, onchain]
ogImage: /og/fully-on-chain-svg-nfts.png
banner: /banners/fully-on-chain-svg-nfts.png
ogImage: /og/fully-on-chain-svg-nfts.jpg
banner: /banners/fully-on-chain-svg-nfts.jpg
draft: false
---
@@ -5,8 +5,8 @@ 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
banner: /banners/hardening-a-tor-onion-service.png
ogImage: /og/hardening-a-tor-onion-service.jpg
banner: /banners/hardening-a-tor-onion-service.jpg
---
I got curious about the darknet. Not the marketplaces, the boring half of it: people self-hosting things the way the internet worked before registrars and cloud dashboards, running software they control at an address they own.
+2 -2
View File
@@ -5,8 +5,8 @@ pubDate: 2024-09-24
updatedDate: 2026-09-05
category: notes
tags: [intro]
ogImage: /og/hello-world.png
banner: /banners/hello-world.png
ogImage: /og/hello-world.jpg
banner: /banners/hello-world.jpg
---
Welcome. This is where I write about what I build and learn — mostly
@@ -4,8 +4,8 @@ description: "A customer-support AI bot that answers questions and provisions fr
pubDate: 2026-09-06
category: case-studies
tags: [telegram, docker, cloudflare, litellm, typescript, ai]
ogImage: /og/how-i-built-the-digikedai-telegram-bot.png
banner: /banners/how-i-built-the-digikedai-telegram-bot.png
ogImage: /og/how-i-built-the-digikedai-telegram-bot.jpg
banner: /banners/how-i-built-the-digikedai-telegram-bot.jpg
---
Digi Kedai sells digital products — online courses, ebooks, and templates — and
+2 -2
View File
@@ -4,8 +4,8 @@ description: "A walkthrough of the end-to-end pipeline that builds and serves th
pubDate: 2026-09-04
category: case-studies
tags: [astro, gitea, ci-cd, self-hosting, docker, cloudflare]
ogImage: /og/how-i-host-this-blog.png
banner: /banners/how-i-host-this-blog.png
ogImage: /og/how-i-host-this-blog.jpg
banner: /banners/how-i-host-this-blog.jpg
---
This blog is itself a project I built to demonstrate the kind of work I do.
@@ -4,8 +4,8 @@ description: "I wrote the lyrics, tuned the prompts, and shipped seven songs wit
pubDate: 2026-09-11
category: case-studies
tags: [suno, ai-music, music, lyrics, prompting, ai]
ogImage: /og/how-i-made-my-own-songs-with-suno-ai.png
banner: /banners/how-i-made-my-own-songs-with-suno-ai.png
ogImage: /og/how-i-made-my-own-songs-with-suno-ai.jpg
banner: /banners/how-i-made-my-own-songs-with-suno-ai.jpg
---
I make my own songs. Not by playing an instrument — by writing lyrics,
@@ -5,8 +5,8 @@ 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
banner: /banners/how-i-vetted-20-vps-providers-with-parallel-subagents.png
ogImage: /og/how-i-vetted-20-vps-providers-with-parallel-subagents.jpg
banner: /banners/how-i-vetted-20-vps-providers-with-parallel-subagents.jpg
---
## Why it matters
@@ -5,8 +5,8 @@ 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
banner: /banners/how-to-verify-a-hosting-provider-before-you-buy.png
ogImage: /og/how-to-verify-a-hosting-provider-before-you-buy.jpg
banner: /banners/how-to-verify-a-hosting-provider-before-you-buy.jpg
---
Every hosting provider's homepage is a list of promises: *"in business since 2005"*,
@@ -5,8 +5,8 @@ pubDate: 2025-07-08
updatedDate: 2026-09-29
category: ai
tags: [ai-agent, shopee, automation, human-in-the-loop, ecommerce, cron]
ogImage: /og/i-let-an-agent-manage-my-shopee-vouchers.png
banner: /banners/i-let-an-agent-manage-my-shopee-vouchers.png
ogImage: /og/i-let-an-agent-manage-my-shopee-vouchers.jpg
banner: /banners/i-let-an-agent-manage-my-shopee-vouchers.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "Three ways a network-mounted drive lied to my conversion pipeline:
pubDate: 2026-10-08
category: devops
tags: [storage, smb, verification, ffmpeg, python]
ogImage: /og/it-reported-success-nothing-had-changed.png
banner: /banners/it-reported-success-nothing-had-changed.png
ogImage: /og/it-reported-success-nothing-had-changed.jpg
banner: /banners/it-reported-success-nothing-had-changed.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "How a JPA @Version field turns a silent lost update into a 409 con
pubDate: 2026-08-19
category: engineering
tags: [java, spring, jpa, hibernate, rest, testing]
ogImage: /og/jpa-version-field-lost-update.png
banner: /banners/jpa-version-field-lost-update.png
ogImage: /og/jpa-version-field-lost-update.jpg
banner: /banners/jpa-version-field-lost-update.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "Loop engineering is 2026's term for designing the system that prom
pubDate: 2026-10-01
category: case-studies
tags: ["loop-engineering", "ai-agents", "cron", "self-hosting", "automation", "monitoring"]
ogImage: "/og/loop-engineering-without-a-coding-agent.png"
banner: "/banners/loop-engineering-without-a-coding-agent.png"
ogImage: "/og/loop-engineering-without-a-coding-agent.jpg"
banner: "/banners/loop-engineering-without-a-coding-agent.jpg"
draft: false
---
@@ -4,8 +4,8 @@ description: "I moved a 17,000-line CodeIgniter 4 app from Windows IIS to OpenLi
pubDate: 2026-09-27
category: engineering
tags: [codeigniter, php, openspeedway, cyberpanel, iis, migration, litespeed, linux]
ogImage: /og/migrating-codeigniter-iis-to-openlitespeed.png
banner: /banners/migrating-codeigniter-iis-to-openlitespeed.png
ogImage: /og/migrating-codeigniter-iis-to-openlitespeed.jpg
banner: /banners/migrating-codeigniter-iis-to-openlitespeed.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2026-10-15
updatedDate: 2026-10-16
category: notes
tags: ["rclone", "backup", "google-drive", "oauth", "restic"]
ogImage: /og/my-backup-was-using-someone-elses-api-quota.png
banner: /banners/my-backup-was-using-someone-elses-api-quota.png
ogImage: /og/my-backup-was-using-someone-elses-api-quota.jpg
banner: /banners/my-backup-was-using-someone-elses-api-quota.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "My self-hosted n8n 1.x to 2.40.1 upgrade surfaced seven silent bre
pubDate: 2026-09-18
category: devops
tags: [n8n, docker, upgrade, self-hosting, debugging, automation]
ogImage: /og/n8n-v1-to-v2-upgrade-gotchas.png
banner: /banners/n8n-v1-to-v2-upgrade-gotchas.png
ogImage: /og/n8n-v1-to-v2-upgrade-gotchas.jpg
banner: /banners/n8n-v1-to-v2-upgrade-gotchas.jpg
---
I run n8n as the automation backbone for my self-hosted stack — it handles
@@ -4,8 +4,8 @@ description: "NocoDB's OIDC environment variables are real and validated at star
pubDate: 2026-09-29
category: notes
tags: ["nocodb", "sso", "oidc", "self-hosting", "licensing", "docker"]
ogImage: /og/nocodb-sso-is-a-licensed-feature.png
banner: /banners/nocodb-sso-is-a-licensed-feature.png
ogImage: /og/nocodb-sso-is-a-licensed-feature.jpg
banner: /banners/nocodb-sso-is-a-licensed-feature.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "A web-analytics tracker has to be public and its dashboard must no
pubDate: 2026-09-30
category: devops
tags: ["umami", "authentik", "sso", "nginx", "docker", "privacy"]
ogImage: "/og/one-hostname-public-tracker-sso-dashboard.png"
banner: "/banners/one-hostname-public-tracker-sso-dashboard.png"
ogImage: "/og/one-hostname-public-tracker-sso-dashboard.jpg"
banner: "/banners/one-hostname-public-tracker-sso-dashboard.jpg"
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2026-07-29
updatedDate: 2026-09-29
category: case-studies
tags: [prometheus, grafana, unraid, synology, dsm, cadvisor, monitoring, homelab]
ogImage: /og/one-prometheus-for-unraid-synology-and-a-vps.png
banner: /banners/one-prometheus-for-unraid-synology-and-a-vps.png
ogImage: /og/one-prometheus-for-unraid-synology-and-a-vps.jpg
banner: /banners/one-prometheus-for-unraid-synology-and-a-vps.jpg
draft: false
---
@@ -5,8 +5,8 @@ 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
banner: /banners/passbolt-hang-three-failure-modes.png
ogImage: /og/passbolt-hang-three-failure-modes.jpg
banner: /banners/passbolt-hang-three-failure-modes.jpg
---
I run Passbolt — an open-source password manager for teams — on a Synology
@@ -4,8 +4,8 @@ description: "MySQL Workbench 26.7.0 connects to MySQL 8.4 but fails on MariaDB
pubDate: 2026-09-19
category: devops
tags: [mysql, mariadb, workbench, debugging, electron, mysql-sh, cyberpanel, self-hosting]
ogImage: /og/patching-workbench-26-for-mariadb.png
banner: /banners/patching-workbench-26-for-mariadb.png
ogImage: /og/patching-workbench-26-for-mariadb.jpg
banner: /banners/patching-workbench-26-for-mariadb.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2025-06-24
updatedDate: 2026-10-06
category: devops
tags: ["nginx", "docker", "self-hosting", "seo", "branding"]
ogImage: "/og/putting-a-front-door-on-an-app-you-cant-modify.png"
banner: "/banners/putting-a-front-door-on-an-app-you-cant-modify.png"
ogImage: "/og/putting-a-front-door-on-an-app-you-cant-modify.jpg"
banner: "/banners/putting-a-front-door-on-an-app-you-cant-modify.jpg"
draft: false
---
@@ -4,8 +4,8 @@ description: "Point NocoDB at a MySQL/MariaDB database on another machine withou
pubDate: 2026-09-29
category: devops
tags: ["nocodb", "mysql", "mariadb", "docker", "networking", "dashboard"]
ogImage: /og/read-only-nocodb-dashboard-for-a-remote-database.png
banner: /banners/read-only-nocodb-dashboard-for-a-remote-database.png
ogImage: /og/read-only-nocodb-dashboard-for-a-remote-database.jpg
banner: /banners/read-only-nocodb-dashboard-for-a-remote-database.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2025-10-01
updatedDate: 2026-09-26
category: notes
tags: [docker, openapi, api, documentation, debugging, reverse-engineering]
ogImage: /og/reading-a-containers-own-api-docs.png
banner: /banners/reading-a-containers-own-api-docs.png
ogImage: /og/reading-a-containers-own-api-docs.jpg
banner: /banners/reading-a-containers-own-api-docs.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "I migrated from paid RDPGuard 7.8.7 to open-source IPBan 4.1.0 —
pubDate: 2026-09-19
category: devops
tags: [windows, security, rdp, ipban, rdpguard, brute-force, firewall, self-hosting]
ogImage: /og/replacing-rdpguard-with-ipban.png
banner: /banners/replacing-rdpguard-with-ipban.png
ogImage: /og/replacing-rdpguard-with-ipban.jpg
banner: /banners/replacing-rdpguard-with-ipban.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "One operator, three hosts, 162 containers in 78 compose stacks —
pubDate: 2026-10-06
category: case-studies
tags: [docker, traefik, monitoring, infrastructure, devops]
ogImage: /og/running-production-infrastructure-solo.png
banner: /banners/running-production-infrastructure-solo.png
ogImage: /og/running-production-infrastructure-solo.jpg
banner: /banners/running-production-infrastructure-solo.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "A reading app needed TTS. Cloud free tiers expire tokens in 10 min
pubDate: 2026-09-18
category: ai
tags: [n8n, tts, azure, google-cloud, docker, automation, sidecar]
ogImage: /og/running-tts-as-a-service-with-token-sidecars.png
banner: /banners/running-tts-as-a-service-with-token-sidecars.png
ogImage: /og/running-tts-as-a-service-with-token-sidecars.jpg
banner: /banners/running-tts-as-a-service-with-token-sidecars.jpg
---
I run a self-hosted reading server for ebooks. It has a "read aloud" feature,
@@ -4,8 +4,8 @@ description: "Scraping bot-walled marketplace listings for a client's used-elect
pubDate: 2026-09-13
category: engineering
tags: ["scraping", "cdp", "headless-chrome", "anti-bot", "shopee", "python"]
ogImage: "/og/scraping-bot-walled-marketplace-warm-browser-session.png"
banner: "/banners/scraping-bot-walled-marketplace-warm-browser-session.png"
ogImage: "/og/scraping-bot-walled-marketplace-warm-browser-session.jpg"
banner: "/banners/scraping-bot-walled-marketplace-warm-browser-session.jpg"
draft: false
---
@@ -4,8 +4,8 @@ description: "How I built a five-workflow entitlement system that grants, expire
pubDate: 2026-09-18
category: case-studies
tags: [n8n, nocodb, alist, access-control, docker, automation, digital-goods]
ogImage: /og/self-healing-digital-goods-entitlements.png
banner: /banners/self-healing-digital-goods-entitlements.png
ogImage: /og/self-healing-digital-goods-entitlements.jpg
banner: /banners/self-healing-digital-goods-entitlements.jpg
---
I sell digital products — files, artwork, licensed assets — and deliver them
@@ -4,8 +4,8 @@ description: "I run a self-hosted speech-to-text API on a single GPU PC. Dictati
pubDate: 2026-09-19
category: case-studies
tags: [whisper, cuda, stt, n8n, nginx, self-hosting, ai]
ogImage: /og/self-hosted-speech-to-text-api.png
banner: /banners/self-hosted-speech-to-text-api.png
ogImage: /og/self-hosted-speech-to-text-api.jpg
banner: /banners/self-hosted-speech-to-text-api.jpg
---
Typing is the slowest thing most offices do all day. An average person types
@@ -4,8 +4,8 @@ description: "A private, self-hosted memory layer for AI agents — mem0 API + L
pubDate: 2026-09-16
category: case-studies
tags: [mem0, docker, postgres, pgvector, litellm, ai, sharing]
ogImage: /og/self-hosting-mem0-memory-stack.png
banner: /banners/self-hosting-mem0-memory-stack.png
ogImage: /og/self-hosting-mem0-memory-stack.jpg
banner: /banners/self-hosting-mem0-memory-stack.jpg
---
An AI agent that forgets everything between conversations is a tool you have
@@ -4,8 +4,8 @@ description: "From a single HTML file to a shipped WordPress plugin: the fal.ai
pubDate: 2026-09-18
category: case-studies
tags: [wordpress, php, fal-ai, docker, ai-image, javascript]
ogImage: /og/shipping-an-ai-photo-editor-as-a-wordpress-plugin.png
banner: /banners/shipping-an-ai-photo-editor-as-a-wordpress-plugin.png
ogImage: /og/shipping-an-ai-photo-editor-as-a-wordpress-plugin.jpg
banner: /banners/shipping-an-ai-photo-editor-as-a-wordpress-plugin.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2026-04-14
updatedDate: 2026-09-29
category: notes
tags: [smart, smartctl, unraid, monitoring, bash, disks, homelab]
ogImage: /og/smartctl-exit-code-32-skips-the-disks-that-matter.png
banner: /banners/smartctl-exit-code-32-skips-the-disks-that-matter.png
ogImage: /og/smartctl-exit-code-32-skips-the-disks-that-matter.jpg
banner: /banners/smartctl-exit-code-32-skips-the-disks-that-matter.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2026-10-14
updatedDate: 2026-10-16
category: devops
tags: ["synology", "btrfs", "snapshots", "storage", "nas"]
ogImage: /og/space-reclamation-wasnt-stuck-it-was-waiting.png
banner: /banners/space-reclamation-wasnt-stuck-it-was-waiting.png
ogImage: /og/space-reclamation-wasnt-stuck-it-was-waiting.jpg
banner: /banners/space-reclamation-wasnt-stuck-it-was-waiting.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "One of my scheduled jobs failed 29 times in a row because I put a
pubDate: 2026-10-01
category: notes
tags: ["loop-engineering", "cron", "ai-agents", "automation"]
ogImage: "/og/stop-writing-agent-prompts-for-deterministic-work.png"
banner: "/banners/stop-writing-agent-prompts-for-deterministic-work.png"
ogImage: "/og/stop-writing-agent-prompts-for-deterministic-work.jpg"
banner: "/banners/stop-writing-agent-prompts-for-deterministic-work.jpg"
draft: false
---
@@ -5,8 +5,8 @@ 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
banner: /banners/syncing-a-self-improving-ai-agent-across-machines.png
ogImage: /og/syncing-a-self-improving-ai-agent-across-machines.jpg
banner: /banners/syncing-a-self-improving-ai-agent-across-machines.jpg
---
My agent learns. Every time I walk it through a non-trivial workflow — how to
@@ -5,8 +5,8 @@ pubDate: 2025-09-10
updatedDate: 2026-09-26
category: notes
tags: [synology, dsm, rest-api, tls, 2fa, debugging, authentication]
ogImage: /og/synology-api-401-with-the-correct-password.png
banner: /banners/synology-api-401-with-the-correct-password.png
ogImage: /og/synology-api-401-with-the-correct-password.jpg
banner: /banners/synology-api-401-with-the-correct-password.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2025-08-20
updatedDate: 2026-09-26
category: devops
tags: [synology, dsm, docker, portainer, rest-api, spreadsheet, debugging, self-hosting]
ogImage: /og/synology-spreadsheet-api-is-a-container.png
banner: /banners/synology-spreadsheet-api-is-a-container.png
ogImage: /og/synology-spreadsheet-api-is-a-container.jpg
banner: /banners/synology-spreadsheet-api-is-a-container.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2026-09-16
category: devops
tags: [unraid, sata, ssd, storage, troubleshooting, smart, fio, cable]
draft: false
ogImage: /og/that-dying-ssd-was-just-a-bad-sata-cable.png
banner: /banners/that-dying-ssd-was-just-a-bad-sata-cable.png
ogImage: /og/that-dying-ssd-was-just-a-bad-sata-cable.jpg
banner: /banners/that-dying-ssd-was-just-a-bad-sata-cable.jpg
---
Every storage guide tells you to start with SMART and trust the event log. I did. Both pointed at one verdict: this SSD is dying. I was one config change away from RMA-ing a healthy drive.
@@ -4,8 +4,8 @@ description: "Two weeks after a btrfs RAID1 pool corrupted on healthy-looking NV
pubDate: 2026-09-18
category: devops
tags: [unraid, btrfs, trim, ssd, raid, data-loss, smart, troubleshooting, seagate]
ogImage: /og/the-cause-was-trim-not-the-ssds.png
banner: /banners/the-cause-was-trim-not-the-ssds.png
ogImage: /og/the-cause-was-trim-not-the-ssds.jpg
banner: /banners/the-cause-was-trim-not-the-ssds.jpg
---
Two weeks ago I published how a btrfs RAID1 pool on two healthy-looking Samsung
@@ -5,8 +5,8 @@ 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
banner: /banners/the-nocodb-attachment-that-wouldnt-update.png
ogImage: /og/the-nocodb-attachment-that-wouldnt-update.jpg
banner: /banners/the-nocodb-attachment-that-wouldnt-update.jpg
---
Backfilling 300 rows in NocoDB surfaced two small gotchas that each ate a chunk of
@@ -4,8 +4,8 @@ description: "My production reading service runs a build whose official Docker H
pubDate: 2026-10-06
category: devops
tags: ["docker", "self-hosting", "upstream", "maintenance", "registry"]
ogImage: "/og/the-upstream-was-deleted-then-came-back-rewritten.png"
banner: "/banners/the-upstream-was-deleted-then-came-back-rewritten.png"
ogImage: "/og/the-upstream-was-deleted-then-came-back-rewritten.jpg"
banner: "/banners/the-upstream-was-deleted-then-came-back-rewritten.jpg"
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2025-02-20
updatedDate: 2026-10-16
category: engineering
tags: ["javascript", "i18n", "debugging", "frontend"]
ogImage: /og/two-ways-a-javascript-file-stops-working-and-looks-fine.png
banner: /banners/two-ways-a-javascript-file-stops-working-and-looks-fine.png
ogImage: /og/two-ways-a-javascript-file-stops-working-and-looks-fine.jpg
banner: /banners/two-ways-a-javascript-file-stops-working-and-looks-fine.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "My Unraid array stop hung forever at unmounting disks because an 8
pubDate: 2026-09-15
category: devops
tags: [unraid, swap, btrfs, zram, docker, user-scripts]
ogImage: /og/unraid-stop-array-hangs-on-swapfile.png
banner: /banners/unraid-stop-array-hangs-on-swapfile.png
ogImage: /og/unraid-stop-array-hangs-on-swapfile.jpg
banner: /banners/unraid-stop-array-hangs-on-swapfile.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "The official CodeIgniter 4.7 upgrade guide lists eight breaking ch
pubDate: 2026-09-27
category: notes
tags: [codeigniter, php, upgrade, composer, breaking-changes, config, framework]
ogImage: /og/upgrading-codeigniter-46-to-47.png
banner: /banners/upgrading-codeigniter-46-to-47.png
ogImage: /og/upgrading-codeigniter-46-to-47.jpg
banner: /banners/upgrading-codeigniter-46-to-47.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "Using Chinese LLM APIs (GLM-5.3, DeepSeek V4) from Malaysia: how I
pubDate: 2026-09-11
category: ai
tags: [llm, api, deepseek, glm, alipay, malaysia]
ogImage: /og/using-chinese-llm-apis-from-malaysia.png
banner: /banners/using-chinese-llm-apis-from-malaysia.png
ogImage: /og/using-chinese-llm-apis-from-malaysia.jpg
banner: /banners/using-chinese-llm-apis-from-malaysia.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2026-09-28
updatedDate: 2026-09-29
category: engineering
tags: [php, codeigniter, pdf, css, print, testing]
ogImage: /og/verifying-a-pdf-report-page-by-page.png
banner: /banners/verifying-a-pdf-report-page-by-page.png
ogImage: /og/verifying-a-pdf-report-page-by-page.jpg
banner: /banners/verifying-a-pdf-report-page-by-page.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "Six checks that catch a repo which doesn't do what its docs claim
pubDate: 2026-09-29
category: devops
tags: ["open-source", "due-diligence", "oidc", "self-hosting", "docker"]
ogImage: "/og/vetting-an-open-source-dependency-before-you-bet-on-it.png"
banner: "/banners/vetting-an-open-source-dependency-before-you-bet-on-it.png"
ogImage: "/og/vetting-an-open-source-dependency-before-you-bet-on-it.jpg"
banner: "/banners/vetting-an-open-source-dependency-before-you-bet-on-it.jpg"
draft: false
---
@@ -4,8 +4,8 @@ description: "A btrfs RAID1 pool on two healthy-looking NVMe drives quietly corr
pubDate: 2026-09-16
category: devops
tags: [unraid, btrfs, nvme, raid, storage, data-loss, troubleshooting]
ogImage: /og/when-smart-says-healthy-but-your-raid-is-corrupting-data.png
banner: /banners/when-smart-says-healthy-but-your-raid-is-corrupting-data.png
ogImage: /og/when-smart-says-healthy-but-your-raid-is-corrupting-data.jpg
banner: /banners/when-smart-says-healthy-but-your-raid-is-corrupting-data.jpg
---
Every storage guide tells you the same thing: trust SMART, check the event
@@ -4,8 +4,8 @@ description: "Over 30 days, autonomous coding agents added 518,000 lines across
pubDate: "2026-10-18"
category: "engineering"
tags: ["ai", "git", "devops", "testing", "refactoring"]
ogImage: "/og/why-500000-lines-of-commit-churn-only-left-230000-in-production.png"
banner: "/banners/why-500000-lines-of-commit-churn-only-left-230000-in-production.png"
ogImage: "/og/why-500000-lines-of-commit-churn-only-left-230000-in-production.jpg"
banner: "/banners/why-500000-lines-of-commit-churn-only-left-230000-in-production.jpg"
---
Last week I did something I almost never bother to do: I counted my own
@@ -4,8 +4,8 @@ description: "Chrome's \"continue where you left off\" never fires inside a Dock
pubDate: 2026-09-29
category: devops
tags: [docker, chrome, cdp, persistence, synology, self-hosting]
ogImage: /og/why-chrome-forgets-its-tabs-in-a-container.png
banner: /banners/why-chrome-forgets-its-tabs-in-a-container.png
ogImage: /og/why-chrome-forgets-its-tabs-in-a-container.jpg
banner: /banners/why-chrome-forgets-its-tabs-in-a-container.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "Claude Opus and GPT are stronger than anything I can run locally.
pubDate: 2026-09-21
category: ai
tags: [local-llm, gpu, llama-cpp, lm-studio, agents, self-hosting, cost]
ogImage: /og/why-i-still-bought-a-local-gpu.png
banner: /banners/why-i-still-bought-a-local-gpu.png
ogImage: /og/why-i-still-bought-a-local-gpu.jpg
banner: /banners/why-i-still-bought-a-local-gpu.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "Why my on-chain NFT art changed on Windows: core.autocrlf injects
pubDate: 2026-08-19
category: web3
tags: [foundry, solidity, svg, base64, git, windows, crlf]
ogImage: /og/why-my-on-chain-nft-art-changed-on-windows.png
banner: /banners/why-my-on-chain-nft-art-changed-on-windows.png
ogImage: /og/why-my-on-chain-nft-art-changed-on-windows.jpg
banner: /banners/why-my-on-chain-nft-art-changed-on-windows.jpg
draft: false
---
@@ -5,8 +5,8 @@ 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
banner: /banners/why-telegram-bot-notifications-die.png
ogImage: /og/why-telegram-bot-notifications-die.jpg
banner: /banners/why-telegram-bot-notifications-die.jpg
---
I run a small monitoring bot that watches Carousell for newly-listed
@@ -5,8 +5,8 @@ pubDate: 2025-03-19
updatedDate: 2026-09-29
category: devops
tags: [cdp, chrome, react, browser-automation, debugging, python]
ogImage: /og/why-your-cdp-clicks-silently-fail.png
banner: /banners/why-your-cdp-clicks-silently-fail.png
ogImage: /og/why-your-cdp-clicks-silently-fail.jpg
banner: /banners/why-your-cdp-clicks-silently-fail.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2026-05-17
updatedDate: 2026-09-29
category: devops
tags: [grafana, prometheus, dashboards, monitoring, promql, observability]
ogImage: /og/why-your-grafana-dashboard-shows-no-data.png
banner: /banners/why-your-grafana-dashboard-shows-no-data.png
ogImage: /og/why-your-grafana-dashboard-shows-no-data.jpg
banner: /banners/why-your-grafana-dashboard-shows-no-data.jpg
draft: false
---
@@ -5,8 +5,8 @@ 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
banner: /banners/why-your-headless-browser-cant-scrape-everything.png
ogImage: /og/why-your-headless-browser-cant-scrape-everything.jpg
banner: /banners/why-your-headless-browser-cant-scrape-everything.jpg
---
I hit the same wall a few weeks apart, on two different second-hand marketplaces,
@@ -5,8 +5,8 @@ pubDate: 2026-06-24
updatedDate: 2026-09-29
category: devops
tags: [monitoring, alerting, prometheus, grafana, storage, capacity, observability]
ogImage: /og/your-disk-full-alert-is-lying.png
banner: /banners/your-disk-full-alert-is-lying.png
ogImage: /og/your-disk-full-alert-is-lying.jpg
banner: /banners/your-disk-full-alert-is-lying.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2025-05-06
updatedDate: 2026-10-16
category: notes
tags: ["email", "dns", "mailcow", "smtp", "deliverability"]
ogImage: /og/adding-a-domain-to-someone-elses-mail-server.png
banner: /banners/adding-a-domain-to-someone-elses-mail-server.png
ogImage: /og/zh-adding-a-domain-to-someone-elses-mail-server.jpg
banner: /banners/adding-a-domain-to-someone-elses-mail-server.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2025-06-11
updatedDate: 2026-09-29
category: engineering
tags: ["i18n", "nginx", "vue", "javascript", "self-hosting"]
ogImage: "/og/adding-english-mode-to-a-chinese-only-web-app.png"
banner: "/banners/adding-english-mode-to-a-chinese-only-web-app.png"
ogImage: "/og/zh-adding-english-mode-to-a-chinese-only-web-app.jpg"
banner: "/banners/adding-english-mode-to-a-chinese-only-web-app.jpg"
draft: false
---
@@ -4,8 +4,8 @@ description: "用 fal.ai FLUX.1 Kontext 把家具产品照合成到风格化房
pubDate: 2026-09-11
category: case-studies
tags: [fal-ai, flux, ai-image, javascript, canvas, ecommerce]
ogImage: /og/ai-furniture-compositing-with-flux-kontext.png
banner: /banners/ai-furniture-compositing-with-flux-kontext.png
ogImage: /og/zh-ai-furniture-compositing-with-flux-kontext.jpg
banner: /banners/ai-furniture-compositing-with-flux-kontext.jpg
---
一位家具客户带着一个每个小电商卖家最终都会撞上的问题来找我:他们的产品图都是**孤立的产品照**——一张白底桌子、一张白底椅子——但顾客不会从一片白茫茫的虚无里买家具,他们买的是*房间*。给每个产品、每种室内风格都拍一次实体棚拍,对一个人的生意来说根本不可能。
@@ -5,8 +5,8 @@ pubDate: 2026-09-20
updatedDate: 2026-10-16
category: devops
tags: ["authentik", "css", "self-hosting", "debugging", "browser"]
ogImage: /og/authentik-css-greater-than-bug.png
banner: /banners/authentik-css-greater-than-bug.png
ogImage: /og/zh-authentik-css-greater-than-bug.jpg
banner: /banners/authentik-css-greater-than-bug.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2026-08-12
updatedDate: 2026-09-29
category: devops
tags: ["authentik", "forward-auth", "cloudflare", "nginx", "docker", "self-hosting"]
ogImage: /og/authentik-forward-auth-gate-wasnt-live.png
banner: /banners/authentik-forward-auth-gate-wasnt-live.png
ogImage: /og/zh-authentik-forward-auth-gate-wasnt-live.jpg
banner: /banners/authentik-forward-auth-gate-wasnt-live.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "一年份的 authentik 大版本升级踩坑记录:存储挂载
pubDate: 2026-09-09
category: devops
tags: [authentik, sso, docker, portainer, self-hosting, oidc, upgrade]
ogImage: /og/authentik-major-upgrade-gotchas.png
banner: /banners/authentik-major-upgrade-gotchas.png
ogImage: /og/zh-authentik-major-upgrade-gotchas.jpg
banner: /banners/authentik-major-upgrade-gotchas.jpg
---
我把 authentik 当作自托管体系前面的单点登录闸门——邮箱、仪表盘、Synology
@@ -4,8 +4,8 @@ description: "CyberPanel v2 砍掉了有文档的 JSON API,只留下 Angular
pubDate: 2026-09-09
category: devops
tags: [cyberpanel, api, reverse-engineering, automation, django, self-hosting, curl]
ogImage: /og/automating-cyberpanel-without-the-ui.png
banner: /banners/automating-cyberpanel-without-the-ui.png
ogImage: /og/zh-automating-cyberpanel-without-the-ui.jpg
banner: /banners/automating-cyberpanel-without-the-ui.jpg
---
我在家庭实验里的一台 Ubuntu 虚拟机里跑着 CyberPanel 2.4.4.1,用来托管几个小站,
@@ -4,8 +4,8 @@ description: "对比 2026 年最好的 AI 视频生成器——免费与付费
pubDate: 2026-09-11
category: ai
tags: [ai-video, video-generation, ltx, open-weights, pricing, veo]
ogImage: /og/best-ai-video-generators-2026.png
banner: /banners/best-ai-video-generators-2026.png
ogImage: /og/zh-best-ai-video-generators-2026.jpg
banner: /banners/best-ai-video-generators-2026.jpg
---
2026 年,你究竟该用哪个 AI 视频生成器?其中又有多少是真免费的?
@@ -5,8 +5,8 @@ pubDate: 2026-10-14
updatedDate: 2026-10-16
category: tutorials
tags: ["ffmpeg", "hevc", "qsv", "transcoding", "video"]
ogImage: /og/calibrating-intel-quick-sync-hevc-quality.png
banner: /banners/calibrating-intel-quick-sync-hevc-quality.png
ogImage: /og/zh-calibrating-intel-quick-sync-hevc-quality.jpg
banner: /banners/calibrating-intel-quick-sync-hevc-quality.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2024-12-10
updatedDate: 2026-09-29
category: web3
tags: [solidity, chainlink, vrf, foundry, hardhat, blockchain]
ogImage: /og/chainlink-vrf-v2-lottery-contract.png
banner: /banners/chainlink-vrf-v2-lottery-contract.png
ogImage: /og/zh-chainlink-vrf-v2-lottery-contract.jpg
banner: /banners/chainlink-vrf-v2-lottery-contract.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "NAS 上的容器不停「意外停止」,而 Docker 报的是 ex
pubDate: 2026-10-16
category: devops
tags: ["docker", "oom", "traefik", "synology", "crawlers"]
ogImage: /og/docker-reported-exit-0-the-oom-killer-disagreed.png
banner: /banners/docker-reported-exit-0-the-oom-killer-disagreed.png
ogImage: /og/zh-docker-reported-exit-0-the-oom-killer-disagreed.jpg
banner: /banners/docker-reported-exit-0-the-oom-killer-disagreed.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "在真实文件上对 HEVC 编码器做的实测对比:NVENC cq2
pubDate: 2026-10-08
category: tutorials
tags: [ffmpeg, hevc, x265, nvenc, video]
ogImage: /og/does-hevc-actually-shrink-your-files.png
banner: /banners/does-hevc-actually-shrink-your-files.png
ogImage: /og/zh-does-hevc-actually-shrink-your-files.jpg
banner: /banners/does-hevc-actually-shrink-your-files.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2025-01-22
updatedDate: 2026-10-16
category: engineering
tags: ["pdf", "fonts", "mpdf", "typography", "php"]
ogImage: /og/embedding-fonts-so-a-pdf-looks-the-same-everywhere.png
banner: /banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.png
ogImage: /og/zh-embedding-fonts-so-a-pdf-looks-the-same-everywhere.jpg
banner: /banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "同一个 HEVC 文件,在 VLC、Chrome 和 iPad 上(离线)
pubDate: 2026-10-08
category: devops
tags: [ffmpeg, nvdec, hevc, transcoding, video]
ogImage: /og/every-player-stuttered-the-file-was-fine.png
banner: /banners/every-player-stuttered-the-file-was-fine.png
ogImage: /og/zh-every-player-stuttered-the-file-was-fine.jpg
banner: /banners/every-player-stuttered-the-file-was-fine.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "AI 五步学习路线(基础、提示词、RAG、Agent、微调
pubDate: 2026-10-13
category: ai
tags: ["llm", "rag", "agents", "self-hosting", "whisper", "mem0"]
ogImage: /og/five-step-ai-roadmap-what-i-actually-run.png
banner: /banners/five-step-ai-roadmap-what-i-actually-run.png
ogImage: /og/zh-five-step-ai-roadmap-what-i-actually-run.jpg
banner: /banners/five-step-ai-roadmap-what-i-actually-run.jpg
draft: false
---
@@ -5,8 +5,8 @@ pubDate: 2024-10-08
updatedDate: 2026-09-29
category: web3
tags: [solidity, foundry, erc721, nft, svg, base64, onchain]
ogImage: /og/fully-on-chain-svg-nfts.png
banner: /banners/fully-on-chain-svg-nfts.png
ogImage: /og/zh-fully-on-chain-svg-nfts.jpg
banner: /banners/fully-on-chain-svg-nfts.jpg
draft: false
---
@@ -5,8 +5,8 @@ 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
banner: /banners/hardening-a-tor-onion-service.png
ogImage: /og/zh-hardening-a-tor-onion-service.jpg
banner: /banners/hardening-a-tor-onion-service.jpg
---
我对暗网产生了好奇。不是集市那一面,而是无聊的那一半:人们像注册商和云控制台出现之前那样自托管——跑自己维护的软件,用一个自己掌控的地址就能访问。
+2 -2
View File
@@ -5,8 +5,8 @@ pubDate: 2024-09-24
updatedDate: 2026-09-05
category: notes
tags: [intro]
ogImage: /og/hello-world.png
banner: /banners/hello-world.png
ogImage: /og/zh-hello-world.jpg
banner: /banners/hello-world.jpg
---
欢迎。这里写下我构建与学习的东西——主要是工程、DevOps 和自托管,中间也会
@@ -4,8 +4,8 @@ description: "一个全天候解答顾客问题、并在 Telegram 和 WhatsApp
pubDate: 2026-09-06
category: case-studies
tags: [telegram, docker, cloudflare, litellm, typescript, ai]
ogImage: /og/how-i-built-the-digikedai-telegram-bot.png
banner: /banners/how-i-built-the-digikedai-telegram-bot.png
ogImage: /og/zh-how-i-built-the-digikedai-telegram-bot.jpg
banner: /banners/how-i-built-the-digikedai-telegram-bot.jpg
---
Digi Kedai 销售数字产品——在线课程、电子书、模板——每一单都会带来一连串同样的顾客问题:*「这门课有免费试看吗?」「我怎么拿到账号?」「我该买哪个套餐?」*。对一个人的生意来说,人工回复根本忙不过来。于是我打造了一个 AI 客服机器人,全天候解答这些问题,甚至能在无人介入的情况下自动发放免费试用账号。
+2 -2
View File
@@ -4,8 +4,8 @@ description: "这篇文章完整拆解了这个网站背后的构建与部署管
pubDate: 2026-09-04
category: case-studies
tags: [astro, gitea, ci-cd, self-hosting, docker, cloudflare]
ogImage: /og/how-i-host-this-blog.png
banner: /banners/how-i-host-this-blog.png
ogImage: /og/zh-how-i-host-this-blog.jpg
banner: /banners/how-i-host-this-blog.jpg
---
这个博客本身,就是我用来说明「我到底会做什么」的一个项目。下面是完整的
@@ -4,8 +4,8 @@ description: "自己写词、调风格提示词,用 Suno AI 做出七首原创
pubDate: 2026-09-11
category: case-studies
tags: [suno, ai-music, music, lyrics, prompting, ai]
ogImage: /og/how-i-made-my-own-songs-with-suno-ai.png
banner: /banners/how-i-made-my-own-songs-with-suno-ai.png
ogImage: /og/zh-how-i-made-my-own-songs-with-suno-ai.jpg
banner: /banners/how-i-made-my-own-songs-with-suno-ai.jpg
---
我做自己的歌。不是靠弹奏乐器——而是写歌词、打磨风格提示词,让 Suno AI
@@ -5,8 +5,8 @@ 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
banner: /banners/how-i-vetted-20-vps-providers-with-parallel-subagents.png
ogImage: /og/zh-how-i-vetted-20-vps-providers-with-parallel-subagents.jpg
banner: /banners/how-i-vetted-20-vps-providers-with-parallel-subagents.jpg
---
## 为什么这很重要
@@ -5,8 +5,8 @@ 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
banner: /banners/how-to-verify-a-hosting-provider-before-you-buy.png
ogImage: /og/zh-how-to-verify-a-hosting-provider-before-you-buy.jpg
banner: /banners/how-to-verify-a-hosting-provider-before-you-buy.jpg
---
每家主机服务商的首页都是一串承诺:_「自 2005 年起运营」_、_「保证在线率」_、
@@ -5,8 +5,8 @@ pubDate: 2025-07-08
updatedDate: 2026-09-29
category: ai
tags: [ai-agent, shopee, automation, human-in-the-loop, ecommerce, cron]
ogImage: /og/i-let-an-agent-manage-my-shopee-vouchers.png
banner: /banners/i-let-an-agent-manage-my-shopee-vouchers.png
ogImage: /og/zh-i-let-an-agent-manage-my-shopee-vouchers.jpg
banner: /banners/i-let-an-agent-manage-my-shopee-vouchers.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "网络挂载盘对我的转换流水线撒的三种谎:一次 40
pubDate: 2026-10-08
category: devops
tags: [storage, smb, verification, ffmpeg, python]
ogImage: /og/it-reported-success-nothing-had-changed.png
banner: /banners/it-reported-success-nothing-had-changed.png
ogImage: /og/zh-it-reported-success-nothing-had-changed.jpg
banner: /banners/it-reported-success-nothing-had-changed.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "在 REST + JPA 的读-改-写流程里,两个编辑同时保存
pubDate: 2026-08-19
category: engineering
tags: [java, spring, jpa, hibernate, rest, testing]
ogImage: /og/jpa-version-field-lost-update.png
banner: /banners/jpa-version-field-lost-update.png
ogImage: /og/zh-jpa-version-field-lost-update.jpg
banner: /banners/jpa-version-field-lost-update.jpg
draft: false
---
@@ -4,8 +4,8 @@ description: "Loop engineering 是 2026 年对「设计让 agent 自己反复跑
pubDate: 2026-10-01
category: case-studies
tags: ["loop-engineering", "ai-agents", "cron", "self-hosting", "automation", "monitoring"]
ogImage: "/og/loop-engineering-without-a-coding-agent.png"
banner: "/banners/loop-engineering-without-a-coding-agent.png"
ogImage: "/og/zh-loop-engineering-without-a-coding-agent.jpg"
banner: "/banners/loop-engineering-without-a-coding-agent.jpg"
draft: false
---
@@ -4,8 +4,8 @@ description: "我把一个 17,000 行的 CodeIgniter 4 应用从 Windows IIS 搬
pubDate: 2026-09-27
category: engineering
tags: [codeigniter, php, openspeedway, cyberpanel, iis, migration, litespeed, linux]
ogImage: /og/migrating-codeigniter-iis-to-openlitespeed.png
banner: /banners/migrating-codeigniter-iis-to-openlitespeed.png
ogImage: /og/zh-migrating-codeigniter-iis-to-openlitespeed.jpg
banner: /banners/migrating-codeigniter-iis-to-openlitespeed.jpg
draft: false
---
Loaded 100 of 802 files, more files were not shown because too many files have changed in this diff. Show more