diff --git a/docs/project-state.md b/docs/project-state.md index e12be2a..6e938e3 100644 --- a/docs/project-state.md +++ b/docs/project-state.md @@ -94,7 +94,7 @@ Living list of what's done and what's next for blog.hoelee.com. Work through the ### Phase F — Artwork rollout: v2 "one art, four targets" (NEXT; user decision 2026-10-18) -**Step B6b — Replace all 72 posts' artwork with the consultant-approved v2 set.** 🔵 Ready to run; blocked on a GPU window + three answers +**Step B6b — Replace all 72 posts' artwork with the consultant-approved v2 set.** ✅ Rendered and staged 2026-10-19 (working tree; **not pushed** — awaiting the owner's read) Everything below is measured, not planned. A fresh session needs no other context to continue. @@ -103,13 +103,29 @@ Everything below is measured, not planned. A fresh session needs no other contex | The renderer | `scripts/og-gen/render_from_art.mjs` (committed `a41448b`) — one zero-text base frame → banner 1600×900 (`banners/.webp` + `.jpg` fallback), social card 1200×630 (`og/.jpg` EN, `og/zh-.jpg` ZH), thumbs `og/thumb/-{800,400}.webp` | | The layout | `scripts/og-gen/template-v2.2.html` — frosted 736×536 bento card, blueprint grid, full-width evidence bar, self-fitting headline that reports `FIT px` through ``; a card that never settles fails the run | | Per-post inputs | `scripts/og-gen/art-meta.json` — `art` (default `<art-dir>/<slug>.png`), `evidence` (**required, hand-written**), optional `ogTitle_en/zh`, optional `tags` | -| Prompts | `scripts/og-gen/prompts_catalog.json` — **72** entries (one visual metaphor + prompt per post) | -| Base art on disk | **2 of 72** — `C:/AI/ideogram4/out/sample_prod_169_00001_.png`, `sample_oom_169_00001_.png` (the consultant samples). **70 still to generate, and this is the GPU half of the job** | -| Evidence lines written | **2 of 72** (`running-production-infrastructure-solo`, `docker-reported-exit-0-the-oom-killer-disagreed`) | -| Live site | still the **v1** set: 72 `public/banners/*.png` + 72 `public/og/*.png` from the terminal-panel generators (2026-10-06…10-16). Nothing a visitor sees has changed yet | +| Prompts | `scripts/og-gen/prompts_catalog.json` — **72** entries, regenerated 2026-10-19 after the metaphor rewrite (the shipped file had only **21 distinct metaphors for 72 posts**: 16 shared one visual, 15 another, 10 another) | +| Base art on disk | **72 of 72** — `C:/AI/ideogram4/out/<slug>.png`, 1360×768, produced 2026-10-19 (batch 4.5 h, ~220 s/frame, 20 steps) | +| Evidence lines written | **72 of 72** (`scripts/og-gen/build_art_meta.py` holds all 72, each quoting a number/log line/command from its own post) | +| Rendered targets | 72 EN cards + 72 ZH cards + 72 banner `.jpg` + 72 banner `.webp` + 144 thumbs, all in `public/`; the 72 v1 `public/og/*.png` and 72 v1 `public/banners/*.png` were deleted | +| Frontmatter | 288 fields migrated by `scripts/og-gen/migrate_to_v2_assets.py --write` (144 files: EN `ogImage: /og/<slug>.jpg`, ZH `ogImage: /og/zh-<slug>.jpg`, both `banner: /banners/<slug>.jpg`) | +| Component changes | `PostList.astro` thumb helper now derives **from the base slug** (a ZH card is `zh-<slug>.jpg` while the thumb is `<slug>-800.webp`); `[...slug].astro` `<picture>` regex accepts `.jpg` | +| Live site | unchanged — still serving v1 (nothing pushed) | | Reference delivery | `C:/Users/hoelee/Desktop/blog-og-image-redesign-brief/delivery-for-consultant-round4/` (+ `00-第四轮-实施反馈与3个待定细节.md` for the three open questions) | -**What the GPU run has to produce.** 70 zero-text 16:9 frames (1360×768 or 1920×1080), one per post, from that post's entry in `prompts_catalog.json` — Ideogram 4 pipeline (`C:/AI/ideogram4/`) or ComfyUI on the Win11 VM's RTX 3060. Hard rules from the consultant: **no text, letters, numbers, HUD or watermark anywhere in the art** (put them in `art-meta.json` under `art` and drop them into `C:/AI/ideogram4/out/<slug>.png`, which is the renderer's default path). +**Rollout log — 2026-10-19 (every number measured this session).** + +1. **The prompt set was not usable as shipped.** `prompts_catalog.json` carried **21 distinct metaphors for 72 posts** (16 posts shared "concentric acrylic rings", 15 shared "rackmount hardware", 10 shared "diagnostic probe"), so the batch would have produced visibly duplicated art across a third of the site. Rewrote one concrete object + state per post → **72/72 unique**, and generated the 72 structured JSON captions with `C:/AI/ideogram4/build_captions.py` (asserts the slug set matches `src/content/posts/*.md` and that no two metaphors are identical). +2. **GPU run.** 72 frames at 1360×768 / 20 steps / `--preset default`, ~220 s each, **4.5 h** total, resumable via `C:/AI/ideogram4/run_batch.py --all` (skips slugs whose frame exists). QC: 72/72 present, all exactly 1360×768, left-60 % mean luminance 10.2–23.1 (the space the card's text sits on). +3. **Caption defect found and fixed (3 of 3 pilot frames).** With the subject described twice — `high_level_description` repeating the metaphor — the model drew a labelled diagram with a pseudo-title in the corner (`Oypert`, `Oyristes tool`, `CONTRACT`). One short noun phrase in the HLD + the subject only in `elements[].desc` cleared it. +4. **The "no text anywhere" rule fails on the accepted samples too.** `sample_oom_169_00001_.png` OCRs as `Kenel L.aser` @0.874 plus six more hits. So the gate judges **legibility**, not hit count: a glyph box under ~14 px on the 1360×768 frame is invisible at banner (1600×900) and thumb (398 px) size. +5. **The model renders the prompt's own label nouns as text.** Measured: `access-denied barrier` → "ACCCSS-DENIED", `attachment clip` → "Attachment Clip", `eight labelled ports` → a 389 px glyph, `id-stamped cards` → "ATACHMENT CLIP", `233 fresh rivets` → a row of numbers, `SSD slab` → a 66 px "SSD", `PLUGIN cartridge` → "PLUGIN". Rewriting the metaphor to describe shape/material/state only fixed every one of them on re-render. +6. **Result after two correction rounds:** 45/72 frames fully clean, 18 with a single sub-threshold tick mark, and the 10 frames that exceeded the accepted reference all brought down to clean or reference level. Gate + tooling: `C:/AI/ideogram4/ocr_gate.py` (`--baseline` prints the accepted samples' numbers), `qc_frames.py` (per-frame stats + unlabelled contact sheets). +7. **Delivery staged, not shipped.** Rendered 72 EN + 72 ZH cards, 144 banner files, 144 thumbs into `public/`; deleted the 144 v1 PNGs; migrated 288 frontmatter fields; fixed the two components. `npm run build` → **251 pages**, 216 distinct image references, **0 missing, 0 stale `.png`**; the ZH listing's thumbs resolve from the base slug (the old helper would have 404'd every one of them). +8. **Art weight: 13.4 MB → 15.4 MB (+2.0 MB), and it buys 72 ZH cards that did not exist before.** Per file: EN card 67 KB JPEG (v1 was 71 KB PNG), banner 40 KB JPEG + 30 KB WebP, thumb 7 KB WebP. + +**Two observations for the owner** (not defects, both open): +- The hero banner carries no text overlay, so the art's left 60 % negative space reads as dark band on a dark page; on `your-disk-full-alert-is-lying` the subject occupies ~29 % of the banner width. A banner-side crop toward the subject (the card already scales the art 116 %) would roughly double its presence. Not applied — it changes the framing the consultant accepted in round 4. +- Several frames are intentionally very dark; at full banner width the subject can read as small. **Three decisions still open** (asked of the consultant in round 4 §二; the owner may simply pick the defaults): 1. English headline rag → **default: (C) shorten the card headline only**, via `ogTitle_en` in `art-meta.json` (article title untouched). @@ -135,9 +151,9 @@ Everything below is measured, not planned. A fresh session needs no other contex - Tags/banner: `python <skill>/scripts/measure_og_banner.py <slug> <repo>` → `rows==1`, `overflow==0`, banner `delta<=3` — it only covers the tag row and terminal panel, not the headline. - After deploy: every `/og/<slug>.jpg`, `/og/zh-<slug>.jpg`, `/banners/<slug>.{webp,jpg}`, `-800.webp` returns 200 **with cache-busting** (Cloudflare caches a negative 404 for 16 days). -**Known gaps in the plan** -- The **OCR pseudo-text gate** promised to the consultant (auto-regenerate a frame that contains readable characters) is **not implemented** — it has to be written or the promise withdrawn. -- `art-meta.json` is committed with only the two sample entries; the 70 others are the work. +**Known gaps in the plan — updated 2026-10-19** +- ✅ The **OCR pseudo-text gate** promised to the consultant is **implemented**: `C:/AI/ideogram4/ocr_gate.py`, calibrated against the two accepted samples (`--baseline`). Judge legibility (glyph box ≥ 14 px on the 1360×768 frame), never raw hit count — the accepted reference has a readable phrase in it. +- ✅ `art-meta.json` now carries all 72 entries; `scripts/og-gen/build_art_meta.py` regenerates them and re-checks coverage against `src/content/posts/*.md` before the renderer runs. - Extra thumbs: the renderer emits 400 px and 800 px; nothing else consumes them. diff --git a/public/banners/adding-a-domain-to-someone-elses-mail-server.jpg b/public/banners/adding-a-domain-to-someone-elses-mail-server.jpg new file mode 100644 index 0000000..c696656 Binary files /dev/null and b/public/banners/adding-a-domain-to-someone-elses-mail-server.jpg differ diff --git a/public/banners/adding-a-domain-to-someone-elses-mail-server.png b/public/banners/adding-a-domain-to-someone-elses-mail-server.png deleted file mode 100644 index dcda91d..0000000 Binary files a/public/banners/adding-a-domain-to-someone-elses-mail-server.png and /dev/null differ diff --git a/public/banners/adding-a-domain-to-someone-elses-mail-server.webp b/public/banners/adding-a-domain-to-someone-elses-mail-server.webp index ef1bbe4..d5348dd 100644 Binary files a/public/banners/adding-a-domain-to-someone-elses-mail-server.webp and b/public/banners/adding-a-domain-to-someone-elses-mail-server.webp differ diff --git a/public/banners/adding-english-mode-to-a-chinese-only-web-app.jpg b/public/banners/adding-english-mode-to-a-chinese-only-web-app.jpg new file mode 100644 index 0000000..766d608 Binary files /dev/null and b/public/banners/adding-english-mode-to-a-chinese-only-web-app.jpg differ diff --git a/public/banners/adding-english-mode-to-a-chinese-only-web-app.png b/public/banners/adding-english-mode-to-a-chinese-only-web-app.png deleted file mode 100644 index 4e6865f..0000000 Binary files a/public/banners/adding-english-mode-to-a-chinese-only-web-app.png and /dev/null differ diff --git a/public/banners/adding-english-mode-to-a-chinese-only-web-app.webp b/public/banners/adding-english-mode-to-a-chinese-only-web-app.webp index 14dd7c0..b72e1e8 100644 Binary files a/public/banners/adding-english-mode-to-a-chinese-only-web-app.webp and b/public/banners/adding-english-mode-to-a-chinese-only-web-app.webp differ diff --git a/public/banners/ai-furniture-compositing-with-flux-kontext.jpg b/public/banners/ai-furniture-compositing-with-flux-kontext.jpg new file mode 100644 index 0000000..5e3f583 Binary files /dev/null and b/public/banners/ai-furniture-compositing-with-flux-kontext.jpg differ diff --git a/public/banners/ai-furniture-compositing-with-flux-kontext.png b/public/banners/ai-furniture-compositing-with-flux-kontext.png deleted file mode 100644 index 1151d47..0000000 Binary files a/public/banners/ai-furniture-compositing-with-flux-kontext.png and /dev/null differ diff --git a/public/banners/ai-furniture-compositing-with-flux-kontext.webp b/public/banners/ai-furniture-compositing-with-flux-kontext.webp index 8344493..2285c9d 100644 Binary files a/public/banners/ai-furniture-compositing-with-flux-kontext.webp and b/public/banners/ai-furniture-compositing-with-flux-kontext.webp differ diff --git a/public/banners/authentik-css-greater-than-bug.jpg b/public/banners/authentik-css-greater-than-bug.jpg new file mode 100644 index 0000000..f55458f Binary files /dev/null and b/public/banners/authentik-css-greater-than-bug.jpg differ diff --git a/public/banners/authentik-css-greater-than-bug.png b/public/banners/authentik-css-greater-than-bug.png deleted file mode 100644 index 891abea..0000000 Binary files a/public/banners/authentik-css-greater-than-bug.png and /dev/null differ diff --git a/public/banners/authentik-css-greater-than-bug.webp b/public/banners/authentik-css-greater-than-bug.webp index ad1784d..8db2c2f 100644 Binary files a/public/banners/authentik-css-greater-than-bug.webp and b/public/banners/authentik-css-greater-than-bug.webp differ diff --git a/public/banners/authentik-forward-auth-gate-wasnt-live.jpg b/public/banners/authentik-forward-auth-gate-wasnt-live.jpg new file mode 100644 index 0000000..be7bdb3 Binary files /dev/null and b/public/banners/authentik-forward-auth-gate-wasnt-live.jpg differ diff --git a/public/banners/authentik-forward-auth-gate-wasnt-live.png b/public/banners/authentik-forward-auth-gate-wasnt-live.png deleted file mode 100644 index a7930ad..0000000 Binary files a/public/banners/authentik-forward-auth-gate-wasnt-live.png and /dev/null differ diff --git a/public/banners/authentik-forward-auth-gate-wasnt-live.webp b/public/banners/authentik-forward-auth-gate-wasnt-live.webp index b63fece..11d17bf 100644 Binary files a/public/banners/authentik-forward-auth-gate-wasnt-live.webp and b/public/banners/authentik-forward-auth-gate-wasnt-live.webp differ diff --git a/public/banners/authentik-major-upgrade-gotchas.jpg b/public/banners/authentik-major-upgrade-gotchas.jpg new file mode 100644 index 0000000..13b206a Binary files /dev/null and b/public/banners/authentik-major-upgrade-gotchas.jpg differ diff --git a/public/banners/authentik-major-upgrade-gotchas.png b/public/banners/authentik-major-upgrade-gotchas.png deleted file mode 100644 index 3d07c86..0000000 Binary files a/public/banners/authentik-major-upgrade-gotchas.png and /dev/null differ diff --git a/public/banners/authentik-major-upgrade-gotchas.webp b/public/banners/authentik-major-upgrade-gotchas.webp index 308a6d0..836ff90 100644 Binary files a/public/banners/authentik-major-upgrade-gotchas.webp and b/public/banners/authentik-major-upgrade-gotchas.webp differ diff --git a/public/banners/automating-cyberpanel-without-the-ui.jpg b/public/banners/automating-cyberpanel-without-the-ui.jpg new file mode 100644 index 0000000..ed01df0 Binary files /dev/null and b/public/banners/automating-cyberpanel-without-the-ui.jpg differ diff --git a/public/banners/automating-cyberpanel-without-the-ui.png b/public/banners/automating-cyberpanel-without-the-ui.png deleted file mode 100644 index 13f99a0..0000000 Binary files a/public/banners/automating-cyberpanel-without-the-ui.png and /dev/null differ diff --git a/public/banners/automating-cyberpanel-without-the-ui.webp b/public/banners/automating-cyberpanel-without-the-ui.webp index 2bfd0ee..e9c6a5b 100644 Binary files a/public/banners/automating-cyberpanel-without-the-ui.webp and b/public/banners/automating-cyberpanel-without-the-ui.webp differ diff --git a/public/banners/best-ai-video-generators-2026.jpg b/public/banners/best-ai-video-generators-2026.jpg new file mode 100644 index 0000000..a1d7594 Binary files /dev/null and b/public/banners/best-ai-video-generators-2026.jpg differ diff --git a/public/banners/best-ai-video-generators-2026.png b/public/banners/best-ai-video-generators-2026.png deleted file mode 100644 index 6499c73..0000000 Binary files a/public/banners/best-ai-video-generators-2026.png and /dev/null differ diff --git a/public/banners/best-ai-video-generators-2026.webp b/public/banners/best-ai-video-generators-2026.webp index 3d58ec1..835c2b5 100644 Binary files a/public/banners/best-ai-video-generators-2026.webp and b/public/banners/best-ai-video-generators-2026.webp differ diff --git a/public/banners/calibrating-intel-quick-sync-hevc-quality.jpg b/public/banners/calibrating-intel-quick-sync-hevc-quality.jpg new file mode 100644 index 0000000..7f35720 Binary files /dev/null and b/public/banners/calibrating-intel-quick-sync-hevc-quality.jpg differ diff --git a/public/banners/calibrating-intel-quick-sync-hevc-quality.png b/public/banners/calibrating-intel-quick-sync-hevc-quality.png deleted file mode 100644 index 289a39c..0000000 Binary files a/public/banners/calibrating-intel-quick-sync-hevc-quality.png and /dev/null differ diff --git a/public/banners/calibrating-intel-quick-sync-hevc-quality.webp b/public/banners/calibrating-intel-quick-sync-hevc-quality.webp index 11a760e..ee917f6 100644 Binary files a/public/banners/calibrating-intel-quick-sync-hevc-quality.webp and b/public/banners/calibrating-intel-quick-sync-hevc-quality.webp differ diff --git a/public/banners/chainlink-vrf-v2-lottery-contract.jpg b/public/banners/chainlink-vrf-v2-lottery-contract.jpg new file mode 100644 index 0000000..3a9b7eb Binary files /dev/null and b/public/banners/chainlink-vrf-v2-lottery-contract.jpg differ diff --git a/public/banners/chainlink-vrf-v2-lottery-contract.png b/public/banners/chainlink-vrf-v2-lottery-contract.png deleted file mode 100644 index 0fc0246..0000000 Binary files a/public/banners/chainlink-vrf-v2-lottery-contract.png and /dev/null differ diff --git a/public/banners/chainlink-vrf-v2-lottery-contract.webp b/public/banners/chainlink-vrf-v2-lottery-contract.webp index f46e57d..2dbb00b 100644 Binary files a/public/banners/chainlink-vrf-v2-lottery-contract.webp and b/public/banners/chainlink-vrf-v2-lottery-contract.webp differ diff --git a/public/banners/docker-reported-exit-0-the-oom-killer-disagreed.jpg b/public/banners/docker-reported-exit-0-the-oom-killer-disagreed.jpg new file mode 100644 index 0000000..a66aed1 Binary files /dev/null and b/public/banners/docker-reported-exit-0-the-oom-killer-disagreed.jpg differ diff --git a/public/banners/docker-reported-exit-0-the-oom-killer-disagreed.png b/public/banners/docker-reported-exit-0-the-oom-killer-disagreed.png deleted file mode 100644 index 21013b5..0000000 Binary files a/public/banners/docker-reported-exit-0-the-oom-killer-disagreed.png and /dev/null differ diff --git a/public/banners/docker-reported-exit-0-the-oom-killer-disagreed.webp b/public/banners/docker-reported-exit-0-the-oom-killer-disagreed.webp index 9483c92..b440903 100644 Binary files a/public/banners/docker-reported-exit-0-the-oom-killer-disagreed.webp and b/public/banners/docker-reported-exit-0-the-oom-killer-disagreed.webp differ diff --git a/public/banners/does-hevc-actually-shrink-your-files.jpg b/public/banners/does-hevc-actually-shrink-your-files.jpg new file mode 100644 index 0000000..6b5b590 Binary files /dev/null and b/public/banners/does-hevc-actually-shrink-your-files.jpg differ diff --git a/public/banners/does-hevc-actually-shrink-your-files.png b/public/banners/does-hevc-actually-shrink-your-files.png deleted file mode 100644 index 451e2bc..0000000 Binary files a/public/banners/does-hevc-actually-shrink-your-files.png and /dev/null differ diff --git a/public/banners/does-hevc-actually-shrink-your-files.webp b/public/banners/does-hevc-actually-shrink-your-files.webp index f9ae167..3be0468 100644 Binary files a/public/banners/does-hevc-actually-shrink-your-files.webp and b/public/banners/does-hevc-actually-shrink-your-files.webp differ diff --git a/public/banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.jpg b/public/banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.jpg new file mode 100644 index 0000000..4702eb4 Binary files /dev/null and b/public/banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.jpg differ diff --git a/public/banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.png b/public/banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.png deleted file mode 100644 index 4043073..0000000 Binary files a/public/banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.png and /dev/null differ diff --git a/public/banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.webp b/public/banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.webp index 8fa6c0c..535978c 100644 Binary files a/public/banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.webp and b/public/banners/embedding-fonts-so-a-pdf-looks-the-same-everywhere.webp differ diff --git a/public/banners/every-player-stuttered-the-file-was-fine.jpg b/public/banners/every-player-stuttered-the-file-was-fine.jpg new file mode 100644 index 0000000..1d5e79f Binary files /dev/null and b/public/banners/every-player-stuttered-the-file-was-fine.jpg differ diff --git a/public/banners/every-player-stuttered-the-file-was-fine.png b/public/banners/every-player-stuttered-the-file-was-fine.png deleted file mode 100644 index e6ef6b3..0000000 Binary files a/public/banners/every-player-stuttered-the-file-was-fine.png and /dev/null differ diff --git a/public/banners/every-player-stuttered-the-file-was-fine.webp b/public/banners/every-player-stuttered-the-file-was-fine.webp index 72f49ae..0fba532 100644 Binary files a/public/banners/every-player-stuttered-the-file-was-fine.webp and b/public/banners/every-player-stuttered-the-file-was-fine.webp differ diff --git a/public/banners/five-step-ai-roadmap-what-i-actually-run.jpg b/public/banners/five-step-ai-roadmap-what-i-actually-run.jpg new file mode 100644 index 0000000..87430cc Binary files /dev/null and b/public/banners/five-step-ai-roadmap-what-i-actually-run.jpg differ diff --git a/public/banners/five-step-ai-roadmap-what-i-actually-run.png b/public/banners/five-step-ai-roadmap-what-i-actually-run.png deleted file mode 100644 index 8771c67..0000000 Binary files a/public/banners/five-step-ai-roadmap-what-i-actually-run.png and /dev/null differ diff --git a/public/banners/five-step-ai-roadmap-what-i-actually-run.webp b/public/banners/five-step-ai-roadmap-what-i-actually-run.webp index 6e377ad..e772188 100644 Binary files a/public/banners/five-step-ai-roadmap-what-i-actually-run.webp and b/public/banners/five-step-ai-roadmap-what-i-actually-run.webp differ diff --git a/public/banners/fully-on-chain-svg-nfts.jpg b/public/banners/fully-on-chain-svg-nfts.jpg new file mode 100644 index 0000000..0d33c67 Binary files /dev/null and b/public/banners/fully-on-chain-svg-nfts.jpg differ diff --git a/public/banners/fully-on-chain-svg-nfts.png b/public/banners/fully-on-chain-svg-nfts.png deleted file mode 100644 index 18b91b9..0000000 Binary files a/public/banners/fully-on-chain-svg-nfts.png and /dev/null differ diff --git a/public/banners/fully-on-chain-svg-nfts.webp b/public/banners/fully-on-chain-svg-nfts.webp index c1e6639..0452622 100644 Binary files a/public/banners/fully-on-chain-svg-nfts.webp and b/public/banners/fully-on-chain-svg-nfts.webp differ diff --git a/public/banners/hardening-a-tor-onion-service.jpg b/public/banners/hardening-a-tor-onion-service.jpg new file mode 100644 index 0000000..f7c3a8f Binary files /dev/null and b/public/banners/hardening-a-tor-onion-service.jpg differ diff --git a/public/banners/hardening-a-tor-onion-service.png b/public/banners/hardening-a-tor-onion-service.png deleted file mode 100644 index fb35f00..0000000 Binary files a/public/banners/hardening-a-tor-onion-service.png and /dev/null differ diff --git a/public/banners/hardening-a-tor-onion-service.webp b/public/banners/hardening-a-tor-onion-service.webp index 02fccb3..8b5d8b9 100644 Binary files a/public/banners/hardening-a-tor-onion-service.webp and b/public/banners/hardening-a-tor-onion-service.webp differ diff --git a/public/banners/hello-world.jpg b/public/banners/hello-world.jpg new file mode 100644 index 0000000..d17fa1a Binary files /dev/null and b/public/banners/hello-world.jpg differ diff --git a/public/banners/hello-world.png b/public/banners/hello-world.png deleted file mode 100644 index 0f93131..0000000 Binary files a/public/banners/hello-world.png and /dev/null differ diff --git a/public/banners/hello-world.webp b/public/banners/hello-world.webp index bb237f9..3ce2556 100644 Binary files a/public/banners/hello-world.webp and b/public/banners/hello-world.webp differ diff --git a/public/banners/how-i-built-the-digikedai-telegram-bot.jpg b/public/banners/how-i-built-the-digikedai-telegram-bot.jpg new file mode 100644 index 0000000..7134ea2 Binary files /dev/null and b/public/banners/how-i-built-the-digikedai-telegram-bot.jpg differ diff --git a/public/banners/how-i-built-the-digikedai-telegram-bot.png b/public/banners/how-i-built-the-digikedai-telegram-bot.png deleted file mode 100644 index eb03b1c..0000000 Binary files a/public/banners/how-i-built-the-digikedai-telegram-bot.png and /dev/null differ diff --git a/public/banners/how-i-built-the-digikedai-telegram-bot.webp b/public/banners/how-i-built-the-digikedai-telegram-bot.webp index a12a072..a929427 100644 Binary files a/public/banners/how-i-built-the-digikedai-telegram-bot.webp and b/public/banners/how-i-built-the-digikedai-telegram-bot.webp differ diff --git a/public/banners/how-i-host-this-blog.jpg b/public/banners/how-i-host-this-blog.jpg new file mode 100644 index 0000000..3c24a03 Binary files /dev/null and b/public/banners/how-i-host-this-blog.jpg differ diff --git a/public/banners/how-i-host-this-blog.png b/public/banners/how-i-host-this-blog.png deleted file mode 100644 index a66647b..0000000 Binary files a/public/banners/how-i-host-this-blog.png and /dev/null differ diff --git a/public/banners/how-i-host-this-blog.webp b/public/banners/how-i-host-this-blog.webp index 463b0e8..2a07c32 100644 Binary files a/public/banners/how-i-host-this-blog.webp and b/public/banners/how-i-host-this-blog.webp differ diff --git a/public/banners/how-i-made-my-own-songs-with-suno-ai.jpg b/public/banners/how-i-made-my-own-songs-with-suno-ai.jpg new file mode 100644 index 0000000..e8aabbd Binary files /dev/null and b/public/banners/how-i-made-my-own-songs-with-suno-ai.jpg differ diff --git a/public/banners/how-i-made-my-own-songs-with-suno-ai.png b/public/banners/how-i-made-my-own-songs-with-suno-ai.png deleted file mode 100644 index ba8dac2..0000000 Binary files a/public/banners/how-i-made-my-own-songs-with-suno-ai.png and /dev/null differ diff --git a/public/banners/how-i-made-my-own-songs-with-suno-ai.webp b/public/banners/how-i-made-my-own-songs-with-suno-ai.webp index 4363133..29ee45c 100644 Binary files a/public/banners/how-i-made-my-own-songs-with-suno-ai.webp and b/public/banners/how-i-made-my-own-songs-with-suno-ai.webp differ diff --git a/public/banners/how-i-vetted-20-vps-providers-with-parallel-subagents.jpg b/public/banners/how-i-vetted-20-vps-providers-with-parallel-subagents.jpg new file mode 100644 index 0000000..c16074b Binary files /dev/null and b/public/banners/how-i-vetted-20-vps-providers-with-parallel-subagents.jpg differ diff --git a/public/banners/how-i-vetted-20-vps-providers-with-parallel-subagents.png b/public/banners/how-i-vetted-20-vps-providers-with-parallel-subagents.png deleted file mode 100644 index f5a5643..0000000 Binary files a/public/banners/how-i-vetted-20-vps-providers-with-parallel-subagents.png and /dev/null differ diff --git a/public/banners/how-i-vetted-20-vps-providers-with-parallel-subagents.webp b/public/banners/how-i-vetted-20-vps-providers-with-parallel-subagents.webp index dba511f..e5d300e 100644 Binary files a/public/banners/how-i-vetted-20-vps-providers-with-parallel-subagents.webp and b/public/banners/how-i-vetted-20-vps-providers-with-parallel-subagents.webp differ diff --git a/public/banners/how-to-verify-a-hosting-provider-before-you-buy.jpg b/public/banners/how-to-verify-a-hosting-provider-before-you-buy.jpg new file mode 100644 index 0000000..d9d2764 Binary files /dev/null and b/public/banners/how-to-verify-a-hosting-provider-before-you-buy.jpg differ diff --git a/public/banners/how-to-verify-a-hosting-provider-before-you-buy.png b/public/banners/how-to-verify-a-hosting-provider-before-you-buy.png deleted file mode 100644 index ac4b782..0000000 Binary files a/public/banners/how-to-verify-a-hosting-provider-before-you-buy.png and /dev/null differ diff --git a/public/banners/how-to-verify-a-hosting-provider-before-you-buy.webp b/public/banners/how-to-verify-a-hosting-provider-before-you-buy.webp index 113b148..a6e28f1 100644 Binary files a/public/banners/how-to-verify-a-hosting-provider-before-you-buy.webp and b/public/banners/how-to-verify-a-hosting-provider-before-you-buy.webp differ diff --git a/public/banners/i-let-an-agent-manage-my-shopee-vouchers.jpg b/public/banners/i-let-an-agent-manage-my-shopee-vouchers.jpg new file mode 100644 index 0000000..63491b1 Binary files /dev/null and b/public/banners/i-let-an-agent-manage-my-shopee-vouchers.jpg differ diff --git a/public/banners/i-let-an-agent-manage-my-shopee-vouchers.png b/public/banners/i-let-an-agent-manage-my-shopee-vouchers.png deleted file mode 100644 index 305d8b1..0000000 Binary files a/public/banners/i-let-an-agent-manage-my-shopee-vouchers.png and /dev/null differ diff --git a/public/banners/i-let-an-agent-manage-my-shopee-vouchers.webp b/public/banners/i-let-an-agent-manage-my-shopee-vouchers.webp index 6244cad..eafec47 100644 Binary files a/public/banners/i-let-an-agent-manage-my-shopee-vouchers.webp and b/public/banners/i-let-an-agent-manage-my-shopee-vouchers.webp differ diff --git a/public/banners/it-reported-success-nothing-had-changed.jpg b/public/banners/it-reported-success-nothing-had-changed.jpg new file mode 100644 index 0000000..7b6105d Binary files /dev/null and b/public/banners/it-reported-success-nothing-had-changed.jpg differ diff --git a/public/banners/it-reported-success-nothing-had-changed.png b/public/banners/it-reported-success-nothing-had-changed.png deleted file mode 100644 index 5dc0871..0000000 Binary files a/public/banners/it-reported-success-nothing-had-changed.png and /dev/null differ diff --git a/public/banners/it-reported-success-nothing-had-changed.webp b/public/banners/it-reported-success-nothing-had-changed.webp index 07c58bb..045b875 100644 Binary files a/public/banners/it-reported-success-nothing-had-changed.webp and b/public/banners/it-reported-success-nothing-had-changed.webp differ diff --git a/public/banners/jpa-version-field-lost-update.jpg b/public/banners/jpa-version-field-lost-update.jpg new file mode 100644 index 0000000..8195c60 Binary files /dev/null and b/public/banners/jpa-version-field-lost-update.jpg differ diff --git a/public/banners/jpa-version-field-lost-update.png b/public/banners/jpa-version-field-lost-update.png deleted file mode 100644 index d128e34..0000000 Binary files a/public/banners/jpa-version-field-lost-update.png and /dev/null differ diff --git a/public/banners/jpa-version-field-lost-update.webp b/public/banners/jpa-version-field-lost-update.webp index 287c140..c5d9742 100644 Binary files a/public/banners/jpa-version-field-lost-update.webp and b/public/banners/jpa-version-field-lost-update.webp differ diff --git a/public/banners/loop-engineering-without-a-coding-agent.jpg b/public/banners/loop-engineering-without-a-coding-agent.jpg new file mode 100644 index 0000000..671f602 Binary files /dev/null and b/public/banners/loop-engineering-without-a-coding-agent.jpg differ diff --git a/public/banners/loop-engineering-without-a-coding-agent.png b/public/banners/loop-engineering-without-a-coding-agent.png deleted file mode 100644 index 4d86c44..0000000 Binary files a/public/banners/loop-engineering-without-a-coding-agent.png and /dev/null differ diff --git a/public/banners/loop-engineering-without-a-coding-agent.webp b/public/banners/loop-engineering-without-a-coding-agent.webp index bebc8a2..ed3a25a 100644 Binary files a/public/banners/loop-engineering-without-a-coding-agent.webp and b/public/banners/loop-engineering-without-a-coding-agent.webp differ diff --git a/public/banners/migrating-codeigniter-iis-to-openlitespeed.jpg b/public/banners/migrating-codeigniter-iis-to-openlitespeed.jpg new file mode 100644 index 0000000..3297411 Binary files /dev/null and b/public/banners/migrating-codeigniter-iis-to-openlitespeed.jpg differ diff --git a/public/banners/migrating-codeigniter-iis-to-openlitespeed.png b/public/banners/migrating-codeigniter-iis-to-openlitespeed.png deleted file mode 100644 index 4bd9eff..0000000 Binary files a/public/banners/migrating-codeigniter-iis-to-openlitespeed.png and /dev/null differ diff --git a/public/banners/migrating-codeigniter-iis-to-openlitespeed.webp b/public/banners/migrating-codeigniter-iis-to-openlitespeed.webp index dadaa8d..6534947 100644 Binary files a/public/banners/migrating-codeigniter-iis-to-openlitespeed.webp and b/public/banners/migrating-codeigniter-iis-to-openlitespeed.webp differ diff --git a/public/banners/my-backup-was-using-someone-elses-api-quota.jpg b/public/banners/my-backup-was-using-someone-elses-api-quota.jpg new file mode 100644 index 0000000..f79b454 Binary files /dev/null and b/public/banners/my-backup-was-using-someone-elses-api-quota.jpg differ diff --git a/public/banners/my-backup-was-using-someone-elses-api-quota.png b/public/banners/my-backup-was-using-someone-elses-api-quota.png deleted file mode 100644 index cf531b0..0000000 Binary files a/public/banners/my-backup-was-using-someone-elses-api-quota.png and /dev/null differ diff --git a/public/banners/my-backup-was-using-someone-elses-api-quota.webp b/public/banners/my-backup-was-using-someone-elses-api-quota.webp index 17abeae..12966de 100644 Binary files a/public/banners/my-backup-was-using-someone-elses-api-quota.webp and b/public/banners/my-backup-was-using-someone-elses-api-quota.webp differ diff --git a/public/banners/n8n-v1-to-v2-upgrade-gotchas.jpg b/public/banners/n8n-v1-to-v2-upgrade-gotchas.jpg new file mode 100644 index 0000000..88f7d6c Binary files /dev/null and b/public/banners/n8n-v1-to-v2-upgrade-gotchas.jpg differ diff --git a/public/banners/n8n-v1-to-v2-upgrade-gotchas.png b/public/banners/n8n-v1-to-v2-upgrade-gotchas.png deleted file mode 100644 index 0aec44d..0000000 Binary files a/public/banners/n8n-v1-to-v2-upgrade-gotchas.png and /dev/null differ diff --git a/public/banners/n8n-v1-to-v2-upgrade-gotchas.webp b/public/banners/n8n-v1-to-v2-upgrade-gotchas.webp index b552758..161d29b 100644 Binary files a/public/banners/n8n-v1-to-v2-upgrade-gotchas.webp and b/public/banners/n8n-v1-to-v2-upgrade-gotchas.webp differ diff --git a/public/banners/nocodb-sso-is-a-licensed-feature.jpg b/public/banners/nocodb-sso-is-a-licensed-feature.jpg new file mode 100644 index 0000000..a7d3834 Binary files /dev/null and b/public/banners/nocodb-sso-is-a-licensed-feature.jpg differ diff --git a/public/banners/nocodb-sso-is-a-licensed-feature.png b/public/banners/nocodb-sso-is-a-licensed-feature.png deleted file mode 100644 index 6002754..0000000 Binary files a/public/banners/nocodb-sso-is-a-licensed-feature.png and /dev/null differ diff --git a/public/banners/nocodb-sso-is-a-licensed-feature.webp b/public/banners/nocodb-sso-is-a-licensed-feature.webp index 0b07262..4903430 100644 Binary files a/public/banners/nocodb-sso-is-a-licensed-feature.webp and b/public/banners/nocodb-sso-is-a-licensed-feature.webp differ diff --git a/public/banners/one-hostname-public-tracker-sso-dashboard.jpg b/public/banners/one-hostname-public-tracker-sso-dashboard.jpg new file mode 100644 index 0000000..8d1ea88 Binary files /dev/null and b/public/banners/one-hostname-public-tracker-sso-dashboard.jpg differ diff --git a/public/banners/one-hostname-public-tracker-sso-dashboard.png b/public/banners/one-hostname-public-tracker-sso-dashboard.png deleted file mode 100644 index 568a700..0000000 Binary files a/public/banners/one-hostname-public-tracker-sso-dashboard.png and /dev/null differ diff --git a/public/banners/one-hostname-public-tracker-sso-dashboard.webp b/public/banners/one-hostname-public-tracker-sso-dashboard.webp index 4f5d2d9..e2222bb 100644 Binary files a/public/banners/one-hostname-public-tracker-sso-dashboard.webp and b/public/banners/one-hostname-public-tracker-sso-dashboard.webp differ diff --git a/public/banners/one-prometheus-for-unraid-synology-and-a-vps.jpg b/public/banners/one-prometheus-for-unraid-synology-and-a-vps.jpg new file mode 100644 index 0000000..bf3a9eb Binary files /dev/null and b/public/banners/one-prometheus-for-unraid-synology-and-a-vps.jpg differ diff --git a/public/banners/one-prometheus-for-unraid-synology-and-a-vps.png b/public/banners/one-prometheus-for-unraid-synology-and-a-vps.png deleted file mode 100644 index 37a6e68..0000000 Binary files a/public/banners/one-prometheus-for-unraid-synology-and-a-vps.png and /dev/null differ diff --git a/public/banners/one-prometheus-for-unraid-synology-and-a-vps.webp b/public/banners/one-prometheus-for-unraid-synology-and-a-vps.webp index 94bdf31..bff3120 100644 Binary files a/public/banners/one-prometheus-for-unraid-synology-and-a-vps.webp and b/public/banners/one-prometheus-for-unraid-synology-and-a-vps.webp differ diff --git a/public/banners/passbolt-hang-three-failure-modes.jpg b/public/banners/passbolt-hang-three-failure-modes.jpg new file mode 100644 index 0000000..a47a6f5 Binary files /dev/null and b/public/banners/passbolt-hang-three-failure-modes.jpg differ diff --git a/public/banners/passbolt-hang-three-failure-modes.png b/public/banners/passbolt-hang-three-failure-modes.png deleted file mode 100644 index dcabc98..0000000 Binary files a/public/banners/passbolt-hang-three-failure-modes.png and /dev/null differ diff --git a/public/banners/passbolt-hang-three-failure-modes.webp b/public/banners/passbolt-hang-three-failure-modes.webp index ab20f94..8375fa4 100644 Binary files a/public/banners/passbolt-hang-three-failure-modes.webp and b/public/banners/passbolt-hang-three-failure-modes.webp differ diff --git a/public/banners/patching-workbench-26-for-mariadb.jpg b/public/banners/patching-workbench-26-for-mariadb.jpg new file mode 100644 index 0000000..e789f6b Binary files /dev/null and b/public/banners/patching-workbench-26-for-mariadb.jpg differ diff --git a/public/banners/patching-workbench-26-for-mariadb.png b/public/banners/patching-workbench-26-for-mariadb.png deleted file mode 100644 index e9e59e2..0000000 Binary files a/public/banners/patching-workbench-26-for-mariadb.png and /dev/null differ diff --git a/public/banners/patching-workbench-26-for-mariadb.webp b/public/banners/patching-workbench-26-for-mariadb.webp index 996037a..6d31499 100644 Binary files a/public/banners/patching-workbench-26-for-mariadb.webp and b/public/banners/patching-workbench-26-for-mariadb.webp differ diff --git a/public/banners/putting-a-front-door-on-an-app-you-cant-modify.jpg b/public/banners/putting-a-front-door-on-an-app-you-cant-modify.jpg new file mode 100644 index 0000000..0bcf97a Binary files /dev/null and b/public/banners/putting-a-front-door-on-an-app-you-cant-modify.jpg differ diff --git a/public/banners/putting-a-front-door-on-an-app-you-cant-modify.png b/public/banners/putting-a-front-door-on-an-app-you-cant-modify.png deleted file mode 100644 index f63942f..0000000 Binary files a/public/banners/putting-a-front-door-on-an-app-you-cant-modify.png and /dev/null differ diff --git a/public/banners/putting-a-front-door-on-an-app-you-cant-modify.webp b/public/banners/putting-a-front-door-on-an-app-you-cant-modify.webp index 2329c86..233b404 100644 Binary files a/public/banners/putting-a-front-door-on-an-app-you-cant-modify.webp and b/public/banners/putting-a-front-door-on-an-app-you-cant-modify.webp differ diff --git a/public/banners/read-only-nocodb-dashboard-for-a-remote-database.jpg b/public/banners/read-only-nocodb-dashboard-for-a-remote-database.jpg new file mode 100644 index 0000000..716b11d Binary files /dev/null and b/public/banners/read-only-nocodb-dashboard-for-a-remote-database.jpg differ diff --git a/public/banners/read-only-nocodb-dashboard-for-a-remote-database.png b/public/banners/read-only-nocodb-dashboard-for-a-remote-database.png deleted file mode 100644 index 2830954..0000000 Binary files a/public/banners/read-only-nocodb-dashboard-for-a-remote-database.png and /dev/null differ diff --git a/public/banners/read-only-nocodb-dashboard-for-a-remote-database.webp b/public/banners/read-only-nocodb-dashboard-for-a-remote-database.webp index 06a4678..b829a10 100644 Binary files a/public/banners/read-only-nocodb-dashboard-for-a-remote-database.webp and b/public/banners/read-only-nocodb-dashboard-for-a-remote-database.webp differ diff --git a/public/banners/reading-a-containers-own-api-docs.jpg b/public/banners/reading-a-containers-own-api-docs.jpg new file mode 100644 index 0000000..e0adb8f Binary files /dev/null and b/public/banners/reading-a-containers-own-api-docs.jpg differ diff --git a/public/banners/reading-a-containers-own-api-docs.png b/public/banners/reading-a-containers-own-api-docs.png deleted file mode 100644 index 18e1932..0000000 Binary files a/public/banners/reading-a-containers-own-api-docs.png and /dev/null differ diff --git a/public/banners/reading-a-containers-own-api-docs.webp b/public/banners/reading-a-containers-own-api-docs.webp index c7aca6a..3a06b81 100644 Binary files a/public/banners/reading-a-containers-own-api-docs.webp and b/public/banners/reading-a-containers-own-api-docs.webp differ diff --git a/public/banners/replacing-rdpguard-with-ipban.jpg b/public/banners/replacing-rdpguard-with-ipban.jpg new file mode 100644 index 0000000..c61556c Binary files /dev/null and b/public/banners/replacing-rdpguard-with-ipban.jpg differ diff --git a/public/banners/replacing-rdpguard-with-ipban.png b/public/banners/replacing-rdpguard-with-ipban.png deleted file mode 100644 index df33b85..0000000 Binary files a/public/banners/replacing-rdpguard-with-ipban.png and /dev/null differ diff --git a/public/banners/replacing-rdpguard-with-ipban.webp b/public/banners/replacing-rdpguard-with-ipban.webp index 331d210..0dce66c 100644 Binary files a/public/banners/replacing-rdpguard-with-ipban.webp and b/public/banners/replacing-rdpguard-with-ipban.webp differ diff --git a/public/banners/running-production-infrastructure-solo.jpg b/public/banners/running-production-infrastructure-solo.jpg new file mode 100644 index 0000000..6c10ee3 Binary files /dev/null and b/public/banners/running-production-infrastructure-solo.jpg differ diff --git a/public/banners/running-production-infrastructure-solo.png b/public/banners/running-production-infrastructure-solo.png deleted file mode 100644 index 489b30e..0000000 Binary files a/public/banners/running-production-infrastructure-solo.png and /dev/null differ diff --git a/public/banners/running-production-infrastructure-solo.webp b/public/banners/running-production-infrastructure-solo.webp index 2a62638..6bac243 100644 Binary files a/public/banners/running-production-infrastructure-solo.webp and b/public/banners/running-production-infrastructure-solo.webp differ diff --git a/public/banners/running-tts-as-a-service-with-token-sidecars.jpg b/public/banners/running-tts-as-a-service-with-token-sidecars.jpg new file mode 100644 index 0000000..c53b507 Binary files /dev/null and b/public/banners/running-tts-as-a-service-with-token-sidecars.jpg differ diff --git a/public/banners/running-tts-as-a-service-with-token-sidecars.png b/public/banners/running-tts-as-a-service-with-token-sidecars.png deleted file mode 100644 index d3b602e..0000000 Binary files a/public/banners/running-tts-as-a-service-with-token-sidecars.png and /dev/null differ diff --git a/public/banners/running-tts-as-a-service-with-token-sidecars.webp b/public/banners/running-tts-as-a-service-with-token-sidecars.webp index f182df6..187fb86 100644 Binary files a/public/banners/running-tts-as-a-service-with-token-sidecars.webp and b/public/banners/running-tts-as-a-service-with-token-sidecars.webp differ diff --git a/public/banners/scraping-bot-walled-marketplace-warm-browser-session.jpg b/public/banners/scraping-bot-walled-marketplace-warm-browser-session.jpg new file mode 100644 index 0000000..4600d4a Binary files /dev/null and b/public/banners/scraping-bot-walled-marketplace-warm-browser-session.jpg differ diff --git a/public/banners/scraping-bot-walled-marketplace-warm-browser-session.png b/public/banners/scraping-bot-walled-marketplace-warm-browser-session.png deleted file mode 100644 index 87e47ac..0000000 Binary files a/public/banners/scraping-bot-walled-marketplace-warm-browser-session.png and /dev/null differ diff --git a/public/banners/scraping-bot-walled-marketplace-warm-browser-session.webp b/public/banners/scraping-bot-walled-marketplace-warm-browser-session.webp index 1ab4ddb..33954a1 100644 Binary files a/public/banners/scraping-bot-walled-marketplace-warm-browser-session.webp and b/public/banners/scraping-bot-walled-marketplace-warm-browser-session.webp differ diff --git a/public/banners/self-healing-digital-goods-entitlements.jpg b/public/banners/self-healing-digital-goods-entitlements.jpg new file mode 100644 index 0000000..12491ea Binary files /dev/null and b/public/banners/self-healing-digital-goods-entitlements.jpg differ diff --git a/public/banners/self-healing-digital-goods-entitlements.png b/public/banners/self-healing-digital-goods-entitlements.png deleted file mode 100644 index 85874ab..0000000 Binary files a/public/banners/self-healing-digital-goods-entitlements.png and /dev/null differ diff --git a/public/banners/self-healing-digital-goods-entitlements.webp b/public/banners/self-healing-digital-goods-entitlements.webp index 94e50f2..ca7ba13 100644 Binary files a/public/banners/self-healing-digital-goods-entitlements.webp and b/public/banners/self-healing-digital-goods-entitlements.webp differ diff --git a/public/banners/self-hosted-speech-to-text-api.jpg b/public/banners/self-hosted-speech-to-text-api.jpg new file mode 100644 index 0000000..f1cee8f Binary files /dev/null and b/public/banners/self-hosted-speech-to-text-api.jpg differ diff --git a/public/banners/self-hosted-speech-to-text-api.png b/public/banners/self-hosted-speech-to-text-api.png deleted file mode 100644 index 35f645a..0000000 Binary files a/public/banners/self-hosted-speech-to-text-api.png and /dev/null differ diff --git a/public/banners/self-hosted-speech-to-text-api.webp b/public/banners/self-hosted-speech-to-text-api.webp index ca91719..405e448 100644 Binary files a/public/banners/self-hosted-speech-to-text-api.webp and b/public/banners/self-hosted-speech-to-text-api.webp differ diff --git a/public/banners/self-hosting-mem0-memory-stack.jpg b/public/banners/self-hosting-mem0-memory-stack.jpg new file mode 100644 index 0000000..91c0007 Binary files /dev/null and b/public/banners/self-hosting-mem0-memory-stack.jpg differ diff --git a/public/banners/self-hosting-mem0-memory-stack.png b/public/banners/self-hosting-mem0-memory-stack.png deleted file mode 100644 index e26f88f..0000000 Binary files a/public/banners/self-hosting-mem0-memory-stack.png and /dev/null differ diff --git a/public/banners/self-hosting-mem0-memory-stack.webp b/public/banners/self-hosting-mem0-memory-stack.webp index 30d81cf..05f5c8c 100644 Binary files a/public/banners/self-hosting-mem0-memory-stack.webp and b/public/banners/self-hosting-mem0-memory-stack.webp differ diff --git a/public/banners/shipping-an-ai-photo-editor-as-a-wordpress-plugin.jpg b/public/banners/shipping-an-ai-photo-editor-as-a-wordpress-plugin.jpg new file mode 100644 index 0000000..e69f898 Binary files /dev/null and b/public/banners/shipping-an-ai-photo-editor-as-a-wordpress-plugin.jpg differ diff --git a/public/banners/shipping-an-ai-photo-editor-as-a-wordpress-plugin.png b/public/banners/shipping-an-ai-photo-editor-as-a-wordpress-plugin.png deleted file mode 100644 index 8241e09..0000000 Binary files a/public/banners/shipping-an-ai-photo-editor-as-a-wordpress-plugin.png and /dev/null differ diff --git a/public/banners/shipping-an-ai-photo-editor-as-a-wordpress-plugin.webp b/public/banners/shipping-an-ai-photo-editor-as-a-wordpress-plugin.webp index 086d7ed..1bced7c 100644 Binary files a/public/banners/shipping-an-ai-photo-editor-as-a-wordpress-plugin.webp and b/public/banners/shipping-an-ai-photo-editor-as-a-wordpress-plugin.webp differ diff --git a/public/banners/smartctl-exit-code-32-skips-the-disks-that-matter.jpg b/public/banners/smartctl-exit-code-32-skips-the-disks-that-matter.jpg new file mode 100644 index 0000000..bb39cd3 Binary files /dev/null and b/public/banners/smartctl-exit-code-32-skips-the-disks-that-matter.jpg differ diff --git a/public/banners/smartctl-exit-code-32-skips-the-disks-that-matter.png b/public/banners/smartctl-exit-code-32-skips-the-disks-that-matter.png deleted file mode 100644 index 9a6a0ca..0000000 Binary files a/public/banners/smartctl-exit-code-32-skips-the-disks-that-matter.png and /dev/null differ diff --git a/public/banners/smartctl-exit-code-32-skips-the-disks-that-matter.webp b/public/banners/smartctl-exit-code-32-skips-the-disks-that-matter.webp index 81307d9..61a892a 100644 Binary files a/public/banners/smartctl-exit-code-32-skips-the-disks-that-matter.webp and b/public/banners/smartctl-exit-code-32-skips-the-disks-that-matter.webp differ diff --git a/public/banners/space-reclamation-wasnt-stuck-it-was-waiting.jpg b/public/banners/space-reclamation-wasnt-stuck-it-was-waiting.jpg new file mode 100644 index 0000000..05e176f Binary files /dev/null and b/public/banners/space-reclamation-wasnt-stuck-it-was-waiting.jpg differ diff --git a/public/banners/space-reclamation-wasnt-stuck-it-was-waiting.png b/public/banners/space-reclamation-wasnt-stuck-it-was-waiting.png deleted file mode 100644 index 9bebf5b..0000000 Binary files a/public/banners/space-reclamation-wasnt-stuck-it-was-waiting.png and /dev/null differ diff --git a/public/banners/space-reclamation-wasnt-stuck-it-was-waiting.webp b/public/banners/space-reclamation-wasnt-stuck-it-was-waiting.webp index 09430f7..00ef24c 100644 Binary files a/public/banners/space-reclamation-wasnt-stuck-it-was-waiting.webp and b/public/banners/space-reclamation-wasnt-stuck-it-was-waiting.webp differ diff --git a/public/banners/stop-writing-agent-prompts-for-deterministic-work.jpg b/public/banners/stop-writing-agent-prompts-for-deterministic-work.jpg new file mode 100644 index 0000000..d59d786 Binary files /dev/null and b/public/banners/stop-writing-agent-prompts-for-deterministic-work.jpg differ diff --git a/public/banners/stop-writing-agent-prompts-for-deterministic-work.png b/public/banners/stop-writing-agent-prompts-for-deterministic-work.png deleted file mode 100644 index 48e1044..0000000 Binary files a/public/banners/stop-writing-agent-prompts-for-deterministic-work.png and /dev/null differ diff --git a/public/banners/stop-writing-agent-prompts-for-deterministic-work.webp b/public/banners/stop-writing-agent-prompts-for-deterministic-work.webp index 3c1b4f3..be90b62 100644 Binary files a/public/banners/stop-writing-agent-prompts-for-deterministic-work.webp and b/public/banners/stop-writing-agent-prompts-for-deterministic-work.webp differ diff --git a/public/banners/syncing-a-self-improving-ai-agent-across-machines.jpg b/public/banners/syncing-a-self-improving-ai-agent-across-machines.jpg new file mode 100644 index 0000000..d6b7905 Binary files /dev/null and b/public/banners/syncing-a-self-improving-ai-agent-across-machines.jpg differ diff --git a/public/banners/syncing-a-self-improving-ai-agent-across-machines.png b/public/banners/syncing-a-self-improving-ai-agent-across-machines.png deleted file mode 100644 index 26b3e4a..0000000 Binary files a/public/banners/syncing-a-self-improving-ai-agent-across-machines.png and /dev/null differ diff --git a/public/banners/syncing-a-self-improving-ai-agent-across-machines.webp b/public/banners/syncing-a-self-improving-ai-agent-across-machines.webp index c5c9c07..7554142 100644 Binary files a/public/banners/syncing-a-self-improving-ai-agent-across-machines.webp and b/public/banners/syncing-a-self-improving-ai-agent-across-machines.webp differ diff --git a/public/banners/synology-api-401-with-the-correct-password.jpg b/public/banners/synology-api-401-with-the-correct-password.jpg new file mode 100644 index 0000000..f0a27ed Binary files /dev/null and b/public/banners/synology-api-401-with-the-correct-password.jpg differ diff --git a/public/banners/synology-api-401-with-the-correct-password.png b/public/banners/synology-api-401-with-the-correct-password.png deleted file mode 100644 index 028b471..0000000 Binary files a/public/banners/synology-api-401-with-the-correct-password.png and /dev/null differ diff --git a/public/banners/synology-api-401-with-the-correct-password.webp b/public/banners/synology-api-401-with-the-correct-password.webp index 9ee3689..d74d8a5 100644 Binary files a/public/banners/synology-api-401-with-the-correct-password.webp and b/public/banners/synology-api-401-with-the-correct-password.webp differ diff --git a/public/banners/synology-spreadsheet-api-is-a-container.jpg b/public/banners/synology-spreadsheet-api-is-a-container.jpg new file mode 100644 index 0000000..53921dd Binary files /dev/null and b/public/banners/synology-spreadsheet-api-is-a-container.jpg differ diff --git a/public/banners/synology-spreadsheet-api-is-a-container.png b/public/banners/synology-spreadsheet-api-is-a-container.png deleted file mode 100644 index 098eed3..0000000 Binary files a/public/banners/synology-spreadsheet-api-is-a-container.png and /dev/null differ diff --git a/public/banners/synology-spreadsheet-api-is-a-container.webp b/public/banners/synology-spreadsheet-api-is-a-container.webp index cfe2b25..9b06455 100644 Binary files a/public/banners/synology-spreadsheet-api-is-a-container.webp and b/public/banners/synology-spreadsheet-api-is-a-container.webp differ diff --git a/public/banners/that-dying-ssd-was-just-a-bad-sata-cable.jpg b/public/banners/that-dying-ssd-was-just-a-bad-sata-cable.jpg new file mode 100644 index 0000000..db3291f Binary files /dev/null and b/public/banners/that-dying-ssd-was-just-a-bad-sata-cable.jpg differ diff --git a/public/banners/that-dying-ssd-was-just-a-bad-sata-cable.png b/public/banners/that-dying-ssd-was-just-a-bad-sata-cable.png deleted file mode 100644 index 83bf501..0000000 Binary files a/public/banners/that-dying-ssd-was-just-a-bad-sata-cable.png and /dev/null differ diff --git a/public/banners/that-dying-ssd-was-just-a-bad-sata-cable.webp b/public/banners/that-dying-ssd-was-just-a-bad-sata-cable.webp index 15fc5ce..8a46efa 100644 Binary files a/public/banners/that-dying-ssd-was-just-a-bad-sata-cable.webp and b/public/banners/that-dying-ssd-was-just-a-bad-sata-cable.webp differ diff --git a/public/banners/the-cause-was-trim-not-the-ssds.jpg b/public/banners/the-cause-was-trim-not-the-ssds.jpg new file mode 100644 index 0000000..c478527 Binary files /dev/null and b/public/banners/the-cause-was-trim-not-the-ssds.jpg differ diff --git a/public/banners/the-cause-was-trim-not-the-ssds.png b/public/banners/the-cause-was-trim-not-the-ssds.png deleted file mode 100644 index 6cc169d..0000000 Binary files a/public/banners/the-cause-was-trim-not-the-ssds.png and /dev/null differ diff --git a/public/banners/the-cause-was-trim-not-the-ssds.webp b/public/banners/the-cause-was-trim-not-the-ssds.webp index b765177..b600836 100644 Binary files a/public/banners/the-cause-was-trim-not-the-ssds.webp and b/public/banners/the-cause-was-trim-not-the-ssds.webp differ diff --git a/public/banners/the-nocodb-attachment-that-wouldnt-update.jpg b/public/banners/the-nocodb-attachment-that-wouldnt-update.jpg new file mode 100644 index 0000000..49cdbb6 Binary files /dev/null and b/public/banners/the-nocodb-attachment-that-wouldnt-update.jpg differ diff --git a/public/banners/the-nocodb-attachment-that-wouldnt-update.png b/public/banners/the-nocodb-attachment-that-wouldnt-update.png deleted file mode 100644 index 2b088e1..0000000 Binary files a/public/banners/the-nocodb-attachment-that-wouldnt-update.png and /dev/null differ diff --git a/public/banners/the-nocodb-attachment-that-wouldnt-update.webp b/public/banners/the-nocodb-attachment-that-wouldnt-update.webp index d7767ec..9b02eb6 100644 Binary files a/public/banners/the-nocodb-attachment-that-wouldnt-update.webp and b/public/banners/the-nocodb-attachment-that-wouldnt-update.webp differ diff --git a/public/banners/the-upstream-was-deleted-then-came-back-rewritten.jpg b/public/banners/the-upstream-was-deleted-then-came-back-rewritten.jpg new file mode 100644 index 0000000..646714e Binary files /dev/null and b/public/banners/the-upstream-was-deleted-then-came-back-rewritten.jpg differ diff --git a/public/banners/the-upstream-was-deleted-then-came-back-rewritten.png b/public/banners/the-upstream-was-deleted-then-came-back-rewritten.png deleted file mode 100644 index aae0f0a..0000000 Binary files a/public/banners/the-upstream-was-deleted-then-came-back-rewritten.png and /dev/null differ diff --git a/public/banners/the-upstream-was-deleted-then-came-back-rewritten.webp b/public/banners/the-upstream-was-deleted-then-came-back-rewritten.webp index 02cee30..9b2afac 100644 Binary files a/public/banners/the-upstream-was-deleted-then-came-back-rewritten.webp and b/public/banners/the-upstream-was-deleted-then-came-back-rewritten.webp differ diff --git a/public/banners/two-ways-a-javascript-file-stops-working-and-looks-fine.jpg b/public/banners/two-ways-a-javascript-file-stops-working-and-looks-fine.jpg new file mode 100644 index 0000000..1223f4c Binary files /dev/null and b/public/banners/two-ways-a-javascript-file-stops-working-and-looks-fine.jpg differ diff --git a/public/banners/two-ways-a-javascript-file-stops-working-and-looks-fine.png b/public/banners/two-ways-a-javascript-file-stops-working-and-looks-fine.png deleted file mode 100644 index 86d18f4..0000000 Binary files a/public/banners/two-ways-a-javascript-file-stops-working-and-looks-fine.png and /dev/null differ diff --git a/public/banners/two-ways-a-javascript-file-stops-working-and-looks-fine.webp b/public/banners/two-ways-a-javascript-file-stops-working-and-looks-fine.webp index f601ec1..5ca6cf0 100644 Binary files a/public/banners/two-ways-a-javascript-file-stops-working-and-looks-fine.webp and b/public/banners/two-ways-a-javascript-file-stops-working-and-looks-fine.webp differ diff --git a/public/banners/unraid-stop-array-hangs-on-swapfile.jpg b/public/banners/unraid-stop-array-hangs-on-swapfile.jpg new file mode 100644 index 0000000..ea459bb Binary files /dev/null and b/public/banners/unraid-stop-array-hangs-on-swapfile.jpg differ diff --git a/public/banners/unraid-stop-array-hangs-on-swapfile.png b/public/banners/unraid-stop-array-hangs-on-swapfile.png deleted file mode 100644 index 45757e8..0000000 Binary files a/public/banners/unraid-stop-array-hangs-on-swapfile.png and /dev/null differ diff --git a/public/banners/unraid-stop-array-hangs-on-swapfile.webp b/public/banners/unraid-stop-array-hangs-on-swapfile.webp index 1fdbf59..8cad791 100644 Binary files a/public/banners/unraid-stop-array-hangs-on-swapfile.webp and b/public/banners/unraid-stop-array-hangs-on-swapfile.webp differ diff --git a/public/banners/upgrading-codeigniter-46-to-47.jpg b/public/banners/upgrading-codeigniter-46-to-47.jpg new file mode 100644 index 0000000..e618e2d Binary files /dev/null and b/public/banners/upgrading-codeigniter-46-to-47.jpg differ diff --git a/public/banners/upgrading-codeigniter-46-to-47.png b/public/banners/upgrading-codeigniter-46-to-47.png deleted file mode 100644 index 7bba3c2..0000000 Binary files a/public/banners/upgrading-codeigniter-46-to-47.png and /dev/null differ diff --git a/public/banners/upgrading-codeigniter-46-to-47.webp b/public/banners/upgrading-codeigniter-46-to-47.webp index b268928..e52e341 100644 Binary files a/public/banners/upgrading-codeigniter-46-to-47.webp and b/public/banners/upgrading-codeigniter-46-to-47.webp differ diff --git a/public/banners/using-chinese-llm-apis-from-malaysia.jpg b/public/banners/using-chinese-llm-apis-from-malaysia.jpg new file mode 100644 index 0000000..0fb4cc9 Binary files /dev/null and b/public/banners/using-chinese-llm-apis-from-malaysia.jpg differ diff --git a/public/banners/using-chinese-llm-apis-from-malaysia.png b/public/banners/using-chinese-llm-apis-from-malaysia.png deleted file mode 100644 index bdd3a67..0000000 Binary files a/public/banners/using-chinese-llm-apis-from-malaysia.png and /dev/null differ diff --git a/public/banners/using-chinese-llm-apis-from-malaysia.webp b/public/banners/using-chinese-llm-apis-from-malaysia.webp index d18b76d..3399270 100644 Binary files a/public/banners/using-chinese-llm-apis-from-malaysia.webp and b/public/banners/using-chinese-llm-apis-from-malaysia.webp differ diff --git a/public/banners/verifying-a-pdf-report-page-by-page.jpg b/public/banners/verifying-a-pdf-report-page-by-page.jpg new file mode 100644 index 0000000..e082ce0 Binary files /dev/null and b/public/banners/verifying-a-pdf-report-page-by-page.jpg differ diff --git a/public/banners/verifying-a-pdf-report-page-by-page.png b/public/banners/verifying-a-pdf-report-page-by-page.png deleted file mode 100644 index 4299c50..0000000 Binary files a/public/banners/verifying-a-pdf-report-page-by-page.png and /dev/null differ diff --git a/public/banners/verifying-a-pdf-report-page-by-page.webp b/public/banners/verifying-a-pdf-report-page-by-page.webp index a85c267..f4f900b 100644 Binary files a/public/banners/verifying-a-pdf-report-page-by-page.webp and b/public/banners/verifying-a-pdf-report-page-by-page.webp differ diff --git a/public/banners/vetting-an-open-source-dependency-before-you-bet-on-it.jpg b/public/banners/vetting-an-open-source-dependency-before-you-bet-on-it.jpg new file mode 100644 index 0000000..1dee25b Binary files /dev/null and b/public/banners/vetting-an-open-source-dependency-before-you-bet-on-it.jpg differ diff --git a/public/banners/vetting-an-open-source-dependency-before-you-bet-on-it.png b/public/banners/vetting-an-open-source-dependency-before-you-bet-on-it.png deleted file mode 100644 index 7881543..0000000 Binary files a/public/banners/vetting-an-open-source-dependency-before-you-bet-on-it.png and /dev/null differ diff --git a/public/banners/vetting-an-open-source-dependency-before-you-bet-on-it.webp b/public/banners/vetting-an-open-source-dependency-before-you-bet-on-it.webp index e342470..107a376 100644 Binary files a/public/banners/vetting-an-open-source-dependency-before-you-bet-on-it.webp and b/public/banners/vetting-an-open-source-dependency-before-you-bet-on-it.webp differ diff --git a/public/banners/when-smart-says-healthy-but-your-raid-is-corrupting-data.jpg b/public/banners/when-smart-says-healthy-but-your-raid-is-corrupting-data.jpg new file mode 100644 index 0000000..0881eb2 Binary files /dev/null and b/public/banners/when-smart-says-healthy-but-your-raid-is-corrupting-data.jpg differ diff --git a/public/banners/when-smart-says-healthy-but-your-raid-is-corrupting-data.png b/public/banners/when-smart-says-healthy-but-your-raid-is-corrupting-data.png deleted file mode 100644 index 4322db1..0000000 Binary files a/public/banners/when-smart-says-healthy-but-your-raid-is-corrupting-data.png and /dev/null differ diff --git a/public/banners/when-smart-says-healthy-but-your-raid-is-corrupting-data.webp b/public/banners/when-smart-says-healthy-but-your-raid-is-corrupting-data.webp index ece1235..e2c52fc 100644 Binary files a/public/banners/when-smart-says-healthy-but-your-raid-is-corrupting-data.webp and b/public/banners/when-smart-says-healthy-but-your-raid-is-corrupting-data.webp differ diff --git a/public/banners/why-500000-lines-of-commit-churn-only-left-230000-in-production.jpg b/public/banners/why-500000-lines-of-commit-churn-only-left-230000-in-production.jpg new file mode 100644 index 0000000..6f91c90 Binary files /dev/null and b/public/banners/why-500000-lines-of-commit-churn-only-left-230000-in-production.jpg differ diff --git a/public/banners/why-500000-lines-of-commit-churn-only-left-230000-in-production.png b/public/banners/why-500000-lines-of-commit-churn-only-left-230000-in-production.png deleted file mode 100644 index f3438db..0000000 Binary files a/public/banners/why-500000-lines-of-commit-churn-only-left-230000-in-production.png and /dev/null differ diff --git a/public/banners/why-500000-lines-of-commit-churn-only-left-230000-in-production.webp b/public/banners/why-500000-lines-of-commit-churn-only-left-230000-in-production.webp index a463d05..f683bea 100644 Binary files a/public/banners/why-500000-lines-of-commit-churn-only-left-230000-in-production.webp and b/public/banners/why-500000-lines-of-commit-churn-only-left-230000-in-production.webp differ diff --git a/public/banners/why-chrome-forgets-its-tabs-in-a-container.jpg b/public/banners/why-chrome-forgets-its-tabs-in-a-container.jpg new file mode 100644 index 0000000..b705193 Binary files /dev/null and b/public/banners/why-chrome-forgets-its-tabs-in-a-container.jpg differ diff --git a/public/banners/why-chrome-forgets-its-tabs-in-a-container.png b/public/banners/why-chrome-forgets-its-tabs-in-a-container.png deleted file mode 100644 index 65953cb..0000000 Binary files a/public/banners/why-chrome-forgets-its-tabs-in-a-container.png and /dev/null differ diff --git a/public/banners/why-chrome-forgets-its-tabs-in-a-container.webp b/public/banners/why-chrome-forgets-its-tabs-in-a-container.webp index afda48d..4992e58 100644 Binary files a/public/banners/why-chrome-forgets-its-tabs-in-a-container.webp and b/public/banners/why-chrome-forgets-its-tabs-in-a-container.webp differ diff --git a/public/banners/why-i-still-bought-a-local-gpu.jpg b/public/banners/why-i-still-bought-a-local-gpu.jpg new file mode 100644 index 0000000..dbc73b1 Binary files /dev/null and b/public/banners/why-i-still-bought-a-local-gpu.jpg differ diff --git a/public/banners/why-i-still-bought-a-local-gpu.png b/public/banners/why-i-still-bought-a-local-gpu.png deleted file mode 100644 index 6ee2bec..0000000 Binary files a/public/banners/why-i-still-bought-a-local-gpu.png and /dev/null differ diff --git a/public/banners/why-i-still-bought-a-local-gpu.webp b/public/banners/why-i-still-bought-a-local-gpu.webp index 2da4a47..065aead 100644 Binary files a/public/banners/why-i-still-bought-a-local-gpu.webp and b/public/banners/why-i-still-bought-a-local-gpu.webp differ diff --git a/public/banners/why-my-on-chain-nft-art-changed-on-windows.jpg b/public/banners/why-my-on-chain-nft-art-changed-on-windows.jpg new file mode 100644 index 0000000..6103b1e Binary files /dev/null and b/public/banners/why-my-on-chain-nft-art-changed-on-windows.jpg differ diff --git a/public/banners/why-my-on-chain-nft-art-changed-on-windows.png b/public/banners/why-my-on-chain-nft-art-changed-on-windows.png deleted file mode 100644 index 1b35730..0000000 Binary files a/public/banners/why-my-on-chain-nft-art-changed-on-windows.png and /dev/null differ diff --git a/public/banners/why-my-on-chain-nft-art-changed-on-windows.webp b/public/banners/why-my-on-chain-nft-art-changed-on-windows.webp index d832953..79c6204 100644 Binary files a/public/banners/why-my-on-chain-nft-art-changed-on-windows.webp and b/public/banners/why-my-on-chain-nft-art-changed-on-windows.webp differ diff --git a/public/banners/why-telegram-bot-notifications-die.jpg b/public/banners/why-telegram-bot-notifications-die.jpg new file mode 100644 index 0000000..0a55f78 Binary files /dev/null and b/public/banners/why-telegram-bot-notifications-die.jpg differ diff --git a/public/banners/why-telegram-bot-notifications-die.png b/public/banners/why-telegram-bot-notifications-die.png deleted file mode 100644 index eeeb5d9..0000000 Binary files a/public/banners/why-telegram-bot-notifications-die.png and /dev/null differ diff --git a/public/banners/why-telegram-bot-notifications-die.webp b/public/banners/why-telegram-bot-notifications-die.webp index d563eea..00da07c 100644 Binary files a/public/banners/why-telegram-bot-notifications-die.webp and b/public/banners/why-telegram-bot-notifications-die.webp differ diff --git a/public/banners/why-your-cdp-clicks-silently-fail.jpg b/public/banners/why-your-cdp-clicks-silently-fail.jpg new file mode 100644 index 0000000..7efe655 Binary files /dev/null and b/public/banners/why-your-cdp-clicks-silently-fail.jpg differ diff --git a/public/banners/why-your-cdp-clicks-silently-fail.png b/public/banners/why-your-cdp-clicks-silently-fail.png deleted file mode 100644 index 923510c..0000000 Binary files a/public/banners/why-your-cdp-clicks-silently-fail.png and /dev/null differ diff --git a/public/banners/why-your-cdp-clicks-silently-fail.webp b/public/banners/why-your-cdp-clicks-silently-fail.webp index b8b73b5..fbc29b4 100644 Binary files a/public/banners/why-your-cdp-clicks-silently-fail.webp and b/public/banners/why-your-cdp-clicks-silently-fail.webp differ diff --git a/public/banners/why-your-grafana-dashboard-shows-no-data.jpg b/public/banners/why-your-grafana-dashboard-shows-no-data.jpg new file mode 100644 index 0000000..aab1631 Binary files /dev/null and b/public/banners/why-your-grafana-dashboard-shows-no-data.jpg differ diff --git a/public/banners/why-your-grafana-dashboard-shows-no-data.png b/public/banners/why-your-grafana-dashboard-shows-no-data.png deleted file mode 100644 index 45266e9..0000000 Binary files a/public/banners/why-your-grafana-dashboard-shows-no-data.png and /dev/null differ diff --git a/public/banners/why-your-grafana-dashboard-shows-no-data.webp b/public/banners/why-your-grafana-dashboard-shows-no-data.webp index 107662f..667ac5f 100644 Binary files a/public/banners/why-your-grafana-dashboard-shows-no-data.webp and b/public/banners/why-your-grafana-dashboard-shows-no-data.webp differ diff --git a/public/banners/why-your-headless-browser-cant-scrape-everything.jpg b/public/banners/why-your-headless-browser-cant-scrape-everything.jpg new file mode 100644 index 0000000..7c39cfa Binary files /dev/null and b/public/banners/why-your-headless-browser-cant-scrape-everything.jpg differ diff --git a/public/banners/why-your-headless-browser-cant-scrape-everything.png b/public/banners/why-your-headless-browser-cant-scrape-everything.png deleted file mode 100644 index ea77dc9..0000000 Binary files a/public/banners/why-your-headless-browser-cant-scrape-everything.png and /dev/null differ diff --git a/public/banners/why-your-headless-browser-cant-scrape-everything.webp b/public/banners/why-your-headless-browser-cant-scrape-everything.webp index 48351de..dfdf600 100644 Binary files a/public/banners/why-your-headless-browser-cant-scrape-everything.webp and b/public/banners/why-your-headless-browser-cant-scrape-everything.webp differ diff --git a/public/banners/your-disk-full-alert-is-lying.jpg b/public/banners/your-disk-full-alert-is-lying.jpg new file mode 100644 index 0000000..6ad4213 Binary files /dev/null and b/public/banners/your-disk-full-alert-is-lying.jpg differ diff --git a/public/banners/your-disk-full-alert-is-lying.png b/public/banners/your-disk-full-alert-is-lying.png deleted file mode 100644 index c8acedd..0000000 Binary files a/public/banners/your-disk-full-alert-is-lying.png and /dev/null differ diff --git a/public/banners/your-disk-full-alert-is-lying.webp b/public/banners/your-disk-full-alert-is-lying.webp index a5a2949..982e4eb 100644 Binary files a/public/banners/your-disk-full-alert-is-lying.webp and b/public/banners/your-disk-full-alert-is-lying.webp differ diff --git a/public/og-default.png b/public/og-default.png deleted file mode 100644 index c9340b9..0000000 Binary files a/public/og-default.png and /dev/null differ diff --git a/public/og/adding-a-domain-to-someone-elses-mail-server.jpg b/public/og/adding-a-domain-to-someone-elses-mail-server.jpg new file mode 100644 index 0000000..e252679 Binary files /dev/null and b/public/og/adding-a-domain-to-someone-elses-mail-server.jpg differ diff --git a/public/og/adding-a-domain-to-someone-elses-mail-server.png b/public/og/adding-a-domain-to-someone-elses-mail-server.png deleted file mode 100644 index 10a6d21..0000000 Binary files a/public/og/adding-a-domain-to-someone-elses-mail-server.png and /dev/null differ diff --git a/public/og/adding-english-mode-to-a-chinese-only-web-app.jpg b/public/og/adding-english-mode-to-a-chinese-only-web-app.jpg new file mode 100644 index 0000000..c756dd6 Binary files /dev/null and b/public/og/adding-english-mode-to-a-chinese-only-web-app.jpg differ diff --git a/public/og/adding-english-mode-to-a-chinese-only-web-app.png b/public/og/adding-english-mode-to-a-chinese-only-web-app.png deleted file mode 100644 index d100c2b..0000000 Binary files a/public/og/adding-english-mode-to-a-chinese-only-web-app.png and /dev/null differ diff --git a/public/og/ai-furniture-compositing-with-flux-kontext.jpg b/public/og/ai-furniture-compositing-with-flux-kontext.jpg new file mode 100644 index 0000000..baa8b33 Binary files /dev/null and b/public/og/ai-furniture-compositing-with-flux-kontext.jpg differ diff --git a/public/og/ai-furniture-compositing-with-flux-kontext.png b/public/og/ai-furniture-compositing-with-flux-kontext.png deleted file mode 100644 index 095d13f..0000000 Binary files a/public/og/ai-furniture-compositing-with-flux-kontext.png and /dev/null differ diff --git a/public/og/authentik-css-greater-than-bug.jpg b/public/og/authentik-css-greater-than-bug.jpg new file mode 100644 index 0000000..4d7d1de Binary files /dev/null and b/public/og/authentik-css-greater-than-bug.jpg differ diff --git a/public/og/authentik-css-greater-than-bug.png b/public/og/authentik-css-greater-than-bug.png deleted file mode 100644 index b4f355e..0000000 Binary files a/public/og/authentik-css-greater-than-bug.png and /dev/null differ diff --git a/public/og/authentik-forward-auth-gate-wasnt-live.jpg b/public/og/authentik-forward-auth-gate-wasnt-live.jpg new file mode 100644 index 0000000..41d9dbf Binary files /dev/null and b/public/og/authentik-forward-auth-gate-wasnt-live.jpg differ diff --git a/public/og/authentik-forward-auth-gate-wasnt-live.png b/public/og/authentik-forward-auth-gate-wasnt-live.png deleted file mode 100644 index 4fbc36a..0000000 Binary files a/public/og/authentik-forward-auth-gate-wasnt-live.png and /dev/null differ diff --git a/public/og/authentik-major-upgrade-gotchas.jpg b/public/og/authentik-major-upgrade-gotchas.jpg new file mode 100644 index 0000000..190409b Binary files /dev/null and b/public/og/authentik-major-upgrade-gotchas.jpg differ diff --git a/public/og/authentik-major-upgrade-gotchas.png b/public/og/authentik-major-upgrade-gotchas.png deleted file mode 100644 index 56ed32a..0000000 Binary files a/public/og/authentik-major-upgrade-gotchas.png and /dev/null differ diff --git a/public/og/automating-cyberpanel-without-the-ui.jpg b/public/og/automating-cyberpanel-without-the-ui.jpg new file mode 100644 index 0000000..4120415 Binary files /dev/null and b/public/og/automating-cyberpanel-without-the-ui.jpg differ diff --git a/public/og/automating-cyberpanel-without-the-ui.png b/public/og/automating-cyberpanel-without-the-ui.png deleted file mode 100644 index 979a051..0000000 Binary files a/public/og/automating-cyberpanel-without-the-ui.png and /dev/null differ diff --git a/public/og/best-ai-video-generators-2026.jpg b/public/og/best-ai-video-generators-2026.jpg new file mode 100644 index 0000000..f7e6e0a Binary files /dev/null and b/public/og/best-ai-video-generators-2026.jpg differ diff --git a/public/og/best-ai-video-generators-2026.png b/public/og/best-ai-video-generators-2026.png deleted file mode 100644 index 23a7ec7..0000000 Binary files a/public/og/best-ai-video-generators-2026.png and /dev/null differ diff --git a/public/og/calibrating-intel-quick-sync-hevc-quality.jpg b/public/og/calibrating-intel-quick-sync-hevc-quality.jpg new file mode 100644 index 0000000..5d5dab4 Binary files /dev/null and b/public/og/calibrating-intel-quick-sync-hevc-quality.jpg differ diff --git a/public/og/calibrating-intel-quick-sync-hevc-quality.png b/public/og/calibrating-intel-quick-sync-hevc-quality.png deleted file mode 100644 index 11eda10..0000000 Binary files a/public/og/calibrating-intel-quick-sync-hevc-quality.png and /dev/null differ diff --git a/public/og/chainlink-vrf-v2-lottery-contract.jpg b/public/og/chainlink-vrf-v2-lottery-contract.jpg new file mode 100644 index 0000000..9cd1acb Binary files /dev/null and b/public/og/chainlink-vrf-v2-lottery-contract.jpg differ diff --git a/public/og/chainlink-vrf-v2-lottery-contract.png b/public/og/chainlink-vrf-v2-lottery-contract.png deleted file mode 100644 index 10bd4bd..0000000 Binary files a/public/og/chainlink-vrf-v2-lottery-contract.png and /dev/null differ diff --git a/public/og/docker-reported-exit-0-the-oom-killer-disagreed.jpg b/public/og/docker-reported-exit-0-the-oom-killer-disagreed.jpg new file mode 100644 index 0000000..f331d8d Binary files /dev/null and b/public/og/docker-reported-exit-0-the-oom-killer-disagreed.jpg differ diff --git a/public/og/docker-reported-exit-0-the-oom-killer-disagreed.png b/public/og/docker-reported-exit-0-the-oom-killer-disagreed.png deleted file mode 100644 index 49ed9d1..0000000 Binary files a/public/og/docker-reported-exit-0-the-oom-killer-disagreed.png and /dev/null differ diff --git a/public/og/does-hevc-actually-shrink-your-files.jpg b/public/og/does-hevc-actually-shrink-your-files.jpg new file mode 100644 index 0000000..7ab940f Binary files /dev/null and b/public/og/does-hevc-actually-shrink-your-files.jpg differ diff --git a/public/og/does-hevc-actually-shrink-your-files.png b/public/og/does-hevc-actually-shrink-your-files.png deleted file mode 100644 index d288657..0000000 Binary files a/public/og/does-hevc-actually-shrink-your-files.png and /dev/null differ diff --git a/public/og/embedding-fonts-so-a-pdf-looks-the-same-everywhere.jpg b/public/og/embedding-fonts-so-a-pdf-looks-the-same-everywhere.jpg new file mode 100644 index 0000000..b8db827 Binary files /dev/null and b/public/og/embedding-fonts-so-a-pdf-looks-the-same-everywhere.jpg differ diff --git a/public/og/embedding-fonts-so-a-pdf-looks-the-same-everywhere.png b/public/og/embedding-fonts-so-a-pdf-looks-the-same-everywhere.png deleted file mode 100644 index 55642f0..0000000 Binary files a/public/og/embedding-fonts-so-a-pdf-looks-the-same-everywhere.png and /dev/null differ diff --git a/public/og/every-player-stuttered-the-file-was-fine.jpg b/public/og/every-player-stuttered-the-file-was-fine.jpg new file mode 100644 index 0000000..0aaa661 Binary files /dev/null and b/public/og/every-player-stuttered-the-file-was-fine.jpg differ diff --git a/public/og/every-player-stuttered-the-file-was-fine.png b/public/og/every-player-stuttered-the-file-was-fine.png deleted file mode 100644 index 0858afc..0000000 Binary files a/public/og/every-player-stuttered-the-file-was-fine.png and /dev/null differ diff --git a/public/og/five-step-ai-roadmap-what-i-actually-run.jpg b/public/og/five-step-ai-roadmap-what-i-actually-run.jpg new file mode 100644 index 0000000..b865f1f Binary files /dev/null and b/public/og/five-step-ai-roadmap-what-i-actually-run.jpg differ diff --git a/public/og/five-step-ai-roadmap-what-i-actually-run.png b/public/og/five-step-ai-roadmap-what-i-actually-run.png deleted file mode 100644 index e78cb9c..0000000 Binary files a/public/og/five-step-ai-roadmap-what-i-actually-run.png and /dev/null differ diff --git a/public/og/fully-on-chain-svg-nfts.jpg b/public/og/fully-on-chain-svg-nfts.jpg new file mode 100644 index 0000000..a782480 Binary files /dev/null and b/public/og/fully-on-chain-svg-nfts.jpg differ diff --git a/public/og/fully-on-chain-svg-nfts.png b/public/og/fully-on-chain-svg-nfts.png deleted file mode 100644 index a104612..0000000 Binary files a/public/og/fully-on-chain-svg-nfts.png and /dev/null differ diff --git a/public/og/hardening-a-tor-onion-service.jpg b/public/og/hardening-a-tor-onion-service.jpg new file mode 100644 index 0000000..8606fa4 Binary files /dev/null and b/public/og/hardening-a-tor-onion-service.jpg differ diff --git a/public/og/hardening-a-tor-onion-service.png b/public/og/hardening-a-tor-onion-service.png deleted file mode 100644 index d98824f..0000000 Binary files a/public/og/hardening-a-tor-onion-service.png and /dev/null differ diff --git a/public/og/hello-world.jpg b/public/og/hello-world.jpg new file mode 100644 index 0000000..c78d47f Binary files /dev/null and b/public/og/hello-world.jpg differ diff --git a/public/og/hello-world.png b/public/og/hello-world.png deleted file mode 100644 index b4d441c..0000000 Binary files a/public/og/hello-world.png and /dev/null differ diff --git a/public/og/how-i-built-the-digikedai-telegram-bot.jpg b/public/og/how-i-built-the-digikedai-telegram-bot.jpg new file mode 100644 index 0000000..a720a1c Binary files /dev/null and b/public/og/how-i-built-the-digikedai-telegram-bot.jpg differ diff --git a/public/og/how-i-built-the-digikedai-telegram-bot.png b/public/og/how-i-built-the-digikedai-telegram-bot.png deleted file mode 100644 index 5d65f88..0000000 Binary files a/public/og/how-i-built-the-digikedai-telegram-bot.png and /dev/null differ diff --git a/public/og/how-i-host-this-blog.jpg b/public/og/how-i-host-this-blog.jpg new file mode 100644 index 0000000..cbad7a7 Binary files /dev/null and b/public/og/how-i-host-this-blog.jpg differ diff --git a/public/og/how-i-host-this-blog.png b/public/og/how-i-host-this-blog.png deleted file mode 100644 index d2a1e04..0000000 Binary files a/public/og/how-i-host-this-blog.png and /dev/null differ diff --git a/public/og/how-i-made-my-own-songs-with-suno-ai.jpg b/public/og/how-i-made-my-own-songs-with-suno-ai.jpg new file mode 100644 index 0000000..de65a0a Binary files /dev/null and b/public/og/how-i-made-my-own-songs-with-suno-ai.jpg differ diff --git a/public/og/how-i-made-my-own-songs-with-suno-ai.png b/public/og/how-i-made-my-own-songs-with-suno-ai.png deleted file mode 100644 index 02d3dda..0000000 Binary files a/public/og/how-i-made-my-own-songs-with-suno-ai.png and /dev/null differ diff --git a/public/og/how-i-vetted-20-vps-providers-with-parallel-subagents.jpg b/public/og/how-i-vetted-20-vps-providers-with-parallel-subagents.jpg new file mode 100644 index 0000000..6b4985f Binary files /dev/null and b/public/og/how-i-vetted-20-vps-providers-with-parallel-subagents.jpg differ diff --git a/public/og/how-i-vetted-20-vps-providers-with-parallel-subagents.png b/public/og/how-i-vetted-20-vps-providers-with-parallel-subagents.png deleted file mode 100644 index abba438..0000000 Binary files a/public/og/how-i-vetted-20-vps-providers-with-parallel-subagents.png and /dev/null differ diff --git a/public/og/how-to-verify-a-hosting-provider-before-you-buy.jpg b/public/og/how-to-verify-a-hosting-provider-before-you-buy.jpg new file mode 100644 index 0000000..8a777bf Binary files /dev/null and b/public/og/how-to-verify-a-hosting-provider-before-you-buy.jpg differ diff --git a/public/og/how-to-verify-a-hosting-provider-before-you-buy.png b/public/og/how-to-verify-a-hosting-provider-before-you-buy.png deleted file mode 100644 index 4818de4..0000000 Binary files a/public/og/how-to-verify-a-hosting-provider-before-you-buy.png and /dev/null differ diff --git a/public/og/i-let-an-agent-manage-my-shopee-vouchers.jpg b/public/og/i-let-an-agent-manage-my-shopee-vouchers.jpg new file mode 100644 index 0000000..9d0caf7 Binary files /dev/null and b/public/og/i-let-an-agent-manage-my-shopee-vouchers.jpg differ diff --git a/public/og/i-let-an-agent-manage-my-shopee-vouchers.png b/public/og/i-let-an-agent-manage-my-shopee-vouchers.png deleted file mode 100644 index edda72f..0000000 Binary files a/public/og/i-let-an-agent-manage-my-shopee-vouchers.png and /dev/null differ diff --git a/public/og/it-reported-success-nothing-had-changed.jpg b/public/og/it-reported-success-nothing-had-changed.jpg new file mode 100644 index 0000000..5892afc Binary files /dev/null and b/public/og/it-reported-success-nothing-had-changed.jpg differ diff --git a/public/og/it-reported-success-nothing-had-changed.png b/public/og/it-reported-success-nothing-had-changed.png deleted file mode 100644 index f660c84..0000000 Binary files a/public/og/it-reported-success-nothing-had-changed.png and /dev/null differ diff --git a/public/og/jpa-version-field-lost-update.jpg b/public/og/jpa-version-field-lost-update.jpg new file mode 100644 index 0000000..23226dd Binary files /dev/null and b/public/og/jpa-version-field-lost-update.jpg differ diff --git a/public/og/jpa-version-field-lost-update.png b/public/og/jpa-version-field-lost-update.png deleted file mode 100644 index c3f4f91..0000000 Binary files a/public/og/jpa-version-field-lost-update.png and /dev/null differ diff --git a/public/og/loop-engineering-without-a-coding-agent.jpg b/public/og/loop-engineering-without-a-coding-agent.jpg new file mode 100644 index 0000000..84a96d4 Binary files /dev/null and b/public/og/loop-engineering-without-a-coding-agent.jpg differ diff --git a/public/og/loop-engineering-without-a-coding-agent.png b/public/og/loop-engineering-without-a-coding-agent.png deleted file mode 100644 index 21ead94..0000000 Binary files a/public/og/loop-engineering-without-a-coding-agent.png and /dev/null differ diff --git a/public/og/migrating-codeigniter-iis-to-openlitespeed.jpg b/public/og/migrating-codeigniter-iis-to-openlitespeed.jpg new file mode 100644 index 0000000..54fa935 Binary files /dev/null and b/public/og/migrating-codeigniter-iis-to-openlitespeed.jpg differ diff --git a/public/og/migrating-codeigniter-iis-to-openlitespeed.png b/public/og/migrating-codeigniter-iis-to-openlitespeed.png deleted file mode 100644 index 74b70bd..0000000 Binary files a/public/og/migrating-codeigniter-iis-to-openlitespeed.png and /dev/null differ diff --git a/public/og/my-backup-was-using-someone-elses-api-quota.jpg b/public/og/my-backup-was-using-someone-elses-api-quota.jpg new file mode 100644 index 0000000..c15b438 Binary files /dev/null and b/public/og/my-backup-was-using-someone-elses-api-quota.jpg differ diff --git a/public/og/my-backup-was-using-someone-elses-api-quota.png b/public/og/my-backup-was-using-someone-elses-api-quota.png deleted file mode 100644 index 610d911..0000000 Binary files a/public/og/my-backup-was-using-someone-elses-api-quota.png and /dev/null differ diff --git a/public/og/n8n-v1-to-v2-upgrade-gotchas.jpg b/public/og/n8n-v1-to-v2-upgrade-gotchas.jpg new file mode 100644 index 0000000..70df640 Binary files /dev/null and b/public/og/n8n-v1-to-v2-upgrade-gotchas.jpg differ diff --git a/public/og/n8n-v1-to-v2-upgrade-gotchas.png b/public/og/n8n-v1-to-v2-upgrade-gotchas.png deleted file mode 100644 index d269d35..0000000 Binary files a/public/og/n8n-v1-to-v2-upgrade-gotchas.png and /dev/null differ diff --git a/public/og/nocodb-sso-is-a-licensed-feature.jpg b/public/og/nocodb-sso-is-a-licensed-feature.jpg new file mode 100644 index 0000000..f7bcadb Binary files /dev/null and b/public/og/nocodb-sso-is-a-licensed-feature.jpg differ diff --git a/public/og/nocodb-sso-is-a-licensed-feature.png b/public/og/nocodb-sso-is-a-licensed-feature.png deleted file mode 100644 index f89351a..0000000 Binary files a/public/og/nocodb-sso-is-a-licensed-feature.png and /dev/null differ diff --git a/public/og/one-hostname-public-tracker-sso-dashboard.jpg b/public/og/one-hostname-public-tracker-sso-dashboard.jpg new file mode 100644 index 0000000..69c305e Binary files /dev/null and b/public/og/one-hostname-public-tracker-sso-dashboard.jpg differ diff --git a/public/og/one-hostname-public-tracker-sso-dashboard.png b/public/og/one-hostname-public-tracker-sso-dashboard.png deleted file mode 100644 index 9c0c9ba..0000000 Binary files a/public/og/one-hostname-public-tracker-sso-dashboard.png and /dev/null differ diff --git a/public/og/one-prometheus-for-unraid-synology-and-a-vps.jpg b/public/og/one-prometheus-for-unraid-synology-and-a-vps.jpg new file mode 100644 index 0000000..cbf5d01 Binary files /dev/null and b/public/og/one-prometheus-for-unraid-synology-and-a-vps.jpg differ diff --git a/public/og/one-prometheus-for-unraid-synology-and-a-vps.png b/public/og/one-prometheus-for-unraid-synology-and-a-vps.png deleted file mode 100644 index bb4ca14..0000000 Binary files a/public/og/one-prometheus-for-unraid-synology-and-a-vps.png and /dev/null differ diff --git a/public/og/passbolt-hang-three-failure-modes.jpg b/public/og/passbolt-hang-three-failure-modes.jpg new file mode 100644 index 0000000..d116fc4 Binary files /dev/null and b/public/og/passbolt-hang-three-failure-modes.jpg differ diff --git a/public/og/passbolt-hang-three-failure-modes.png b/public/og/passbolt-hang-three-failure-modes.png deleted file mode 100644 index db88c6b..0000000 Binary files a/public/og/passbolt-hang-three-failure-modes.png and /dev/null differ diff --git a/public/og/patching-workbench-26-for-mariadb.jpg b/public/og/patching-workbench-26-for-mariadb.jpg new file mode 100644 index 0000000..90aa208 Binary files /dev/null and b/public/og/patching-workbench-26-for-mariadb.jpg differ diff --git a/public/og/patching-workbench-26-for-mariadb.png b/public/og/patching-workbench-26-for-mariadb.png deleted file mode 100644 index 7468421..0000000 Binary files a/public/og/patching-workbench-26-for-mariadb.png and /dev/null differ diff --git a/public/og/putting-a-front-door-on-an-app-you-cant-modify.jpg b/public/og/putting-a-front-door-on-an-app-you-cant-modify.jpg new file mode 100644 index 0000000..f738a38 Binary files /dev/null and b/public/og/putting-a-front-door-on-an-app-you-cant-modify.jpg differ diff --git a/public/og/putting-a-front-door-on-an-app-you-cant-modify.png b/public/og/putting-a-front-door-on-an-app-you-cant-modify.png deleted file mode 100644 index b3b287b..0000000 Binary files a/public/og/putting-a-front-door-on-an-app-you-cant-modify.png and /dev/null differ diff --git a/public/og/read-only-nocodb-dashboard-for-a-remote-database.jpg b/public/og/read-only-nocodb-dashboard-for-a-remote-database.jpg new file mode 100644 index 0000000..9f6af7d Binary files /dev/null and b/public/og/read-only-nocodb-dashboard-for-a-remote-database.jpg differ diff --git a/public/og/read-only-nocodb-dashboard-for-a-remote-database.png b/public/og/read-only-nocodb-dashboard-for-a-remote-database.png deleted file mode 100644 index 91a23d5..0000000 Binary files a/public/og/read-only-nocodb-dashboard-for-a-remote-database.png and /dev/null differ diff --git a/public/og/reading-a-containers-own-api-docs.jpg b/public/og/reading-a-containers-own-api-docs.jpg new file mode 100644 index 0000000..04dccba Binary files /dev/null and b/public/og/reading-a-containers-own-api-docs.jpg differ diff --git a/public/og/reading-a-containers-own-api-docs.png b/public/og/reading-a-containers-own-api-docs.png deleted file mode 100644 index d60a3f1..0000000 Binary files a/public/og/reading-a-containers-own-api-docs.png and /dev/null differ diff --git a/public/og/replacing-rdpguard-with-ipban.jpg b/public/og/replacing-rdpguard-with-ipban.jpg new file mode 100644 index 0000000..e715d64 Binary files /dev/null and b/public/og/replacing-rdpguard-with-ipban.jpg differ diff --git a/public/og/replacing-rdpguard-with-ipban.png b/public/og/replacing-rdpguard-with-ipban.png deleted file mode 100644 index 2d2b9ca..0000000 Binary files a/public/og/replacing-rdpguard-with-ipban.png and /dev/null differ diff --git a/public/og/running-production-infrastructure-solo.jpg b/public/og/running-production-infrastructure-solo.jpg new file mode 100644 index 0000000..2018774 Binary files /dev/null and b/public/og/running-production-infrastructure-solo.jpg differ diff --git a/public/og/running-production-infrastructure-solo.png b/public/og/running-production-infrastructure-solo.png deleted file mode 100644 index d95b219..0000000 Binary files a/public/og/running-production-infrastructure-solo.png and /dev/null differ diff --git a/public/og/running-tts-as-a-service-with-token-sidecars.jpg b/public/og/running-tts-as-a-service-with-token-sidecars.jpg new file mode 100644 index 0000000..ba6e812 Binary files /dev/null and b/public/og/running-tts-as-a-service-with-token-sidecars.jpg differ diff --git a/public/og/running-tts-as-a-service-with-token-sidecars.png b/public/og/running-tts-as-a-service-with-token-sidecars.png deleted file mode 100644 index 74fd328..0000000 Binary files a/public/og/running-tts-as-a-service-with-token-sidecars.png and /dev/null differ diff --git a/public/og/scraping-bot-walled-marketplace-warm-browser-session.jpg b/public/og/scraping-bot-walled-marketplace-warm-browser-session.jpg new file mode 100644 index 0000000..fe2ec8a Binary files /dev/null and b/public/og/scraping-bot-walled-marketplace-warm-browser-session.jpg differ diff --git a/public/og/scraping-bot-walled-marketplace-warm-browser-session.png b/public/og/scraping-bot-walled-marketplace-warm-browser-session.png deleted file mode 100644 index 33b3727..0000000 Binary files a/public/og/scraping-bot-walled-marketplace-warm-browser-session.png and /dev/null differ diff --git a/public/og/self-healing-digital-goods-entitlements.jpg b/public/og/self-healing-digital-goods-entitlements.jpg new file mode 100644 index 0000000..a9b5f5f Binary files /dev/null and b/public/og/self-healing-digital-goods-entitlements.jpg differ diff --git a/public/og/self-healing-digital-goods-entitlements.png b/public/og/self-healing-digital-goods-entitlements.png deleted file mode 100644 index 5a79faa..0000000 Binary files a/public/og/self-healing-digital-goods-entitlements.png and /dev/null differ diff --git a/public/og/self-hosted-speech-to-text-api.jpg b/public/og/self-hosted-speech-to-text-api.jpg new file mode 100644 index 0000000..96279bb Binary files /dev/null and b/public/og/self-hosted-speech-to-text-api.jpg differ diff --git a/public/og/self-hosted-speech-to-text-api.png b/public/og/self-hosted-speech-to-text-api.png deleted file mode 100644 index 0fd0234..0000000 Binary files a/public/og/self-hosted-speech-to-text-api.png and /dev/null differ diff --git a/public/og/self-hosting-mem0-memory-stack.jpg b/public/og/self-hosting-mem0-memory-stack.jpg new file mode 100644 index 0000000..6fa2c7e Binary files /dev/null and b/public/og/self-hosting-mem0-memory-stack.jpg differ diff --git a/public/og/self-hosting-mem0-memory-stack.png b/public/og/self-hosting-mem0-memory-stack.png deleted file mode 100644 index d00e75c..0000000 Binary files a/public/og/self-hosting-mem0-memory-stack.png and /dev/null differ diff --git a/public/og/shipping-an-ai-photo-editor-as-a-wordpress-plugin.jpg b/public/og/shipping-an-ai-photo-editor-as-a-wordpress-plugin.jpg new file mode 100644 index 0000000..fb0c8af Binary files /dev/null and b/public/og/shipping-an-ai-photo-editor-as-a-wordpress-plugin.jpg differ diff --git a/public/og/shipping-an-ai-photo-editor-as-a-wordpress-plugin.png b/public/og/shipping-an-ai-photo-editor-as-a-wordpress-plugin.png deleted file mode 100644 index d2028b4..0000000 Binary files a/public/og/shipping-an-ai-photo-editor-as-a-wordpress-plugin.png and /dev/null differ diff --git a/public/og/smartctl-exit-code-32-skips-the-disks-that-matter.jpg b/public/og/smartctl-exit-code-32-skips-the-disks-that-matter.jpg new file mode 100644 index 0000000..ad0d868 Binary files /dev/null and b/public/og/smartctl-exit-code-32-skips-the-disks-that-matter.jpg differ diff --git a/public/og/smartctl-exit-code-32-skips-the-disks-that-matter.png b/public/og/smartctl-exit-code-32-skips-the-disks-that-matter.png deleted file mode 100644 index 7a725be..0000000 Binary files a/public/og/smartctl-exit-code-32-skips-the-disks-that-matter.png and /dev/null differ diff --git a/public/og/space-reclamation-wasnt-stuck-it-was-waiting.jpg b/public/og/space-reclamation-wasnt-stuck-it-was-waiting.jpg new file mode 100644 index 0000000..a67f367 Binary files /dev/null and b/public/og/space-reclamation-wasnt-stuck-it-was-waiting.jpg differ diff --git a/public/og/space-reclamation-wasnt-stuck-it-was-waiting.png b/public/og/space-reclamation-wasnt-stuck-it-was-waiting.png deleted file mode 100644 index 1323006..0000000 Binary files a/public/og/space-reclamation-wasnt-stuck-it-was-waiting.png and /dev/null differ diff --git a/public/og/stop-writing-agent-prompts-for-deterministic-work.jpg b/public/og/stop-writing-agent-prompts-for-deterministic-work.jpg new file mode 100644 index 0000000..99580e5 Binary files /dev/null and b/public/og/stop-writing-agent-prompts-for-deterministic-work.jpg differ diff --git a/public/og/stop-writing-agent-prompts-for-deterministic-work.png b/public/og/stop-writing-agent-prompts-for-deterministic-work.png deleted file mode 100644 index fdcc179..0000000 Binary files a/public/og/stop-writing-agent-prompts-for-deterministic-work.png and /dev/null differ diff --git a/public/og/syncing-a-self-improving-ai-agent-across-machines.jpg b/public/og/syncing-a-self-improving-ai-agent-across-machines.jpg new file mode 100644 index 0000000..ecd9032 Binary files /dev/null and b/public/og/syncing-a-self-improving-ai-agent-across-machines.jpg differ diff --git a/public/og/syncing-a-self-improving-ai-agent-across-machines.png b/public/og/syncing-a-self-improving-ai-agent-across-machines.png deleted file mode 100644 index b1e88a8..0000000 Binary files a/public/og/syncing-a-self-improving-ai-agent-across-machines.png and /dev/null differ diff --git a/public/og/synology-api-401-with-the-correct-password.jpg b/public/og/synology-api-401-with-the-correct-password.jpg new file mode 100644 index 0000000..6b5b133 Binary files /dev/null and b/public/og/synology-api-401-with-the-correct-password.jpg differ diff --git a/public/og/synology-api-401-with-the-correct-password.png b/public/og/synology-api-401-with-the-correct-password.png deleted file mode 100644 index 380b8f5..0000000 Binary files a/public/og/synology-api-401-with-the-correct-password.png and /dev/null differ diff --git a/public/og/synology-spreadsheet-api-is-a-container.jpg b/public/og/synology-spreadsheet-api-is-a-container.jpg new file mode 100644 index 0000000..59cb081 Binary files /dev/null and b/public/og/synology-spreadsheet-api-is-a-container.jpg differ diff --git a/public/og/synology-spreadsheet-api-is-a-container.png b/public/og/synology-spreadsheet-api-is-a-container.png deleted file mode 100644 index bf8be3a..0000000 Binary files a/public/og/synology-spreadsheet-api-is-a-container.png and /dev/null differ diff --git a/public/og/that-dying-ssd-was-just-a-bad-sata-cable.jpg b/public/og/that-dying-ssd-was-just-a-bad-sata-cable.jpg new file mode 100644 index 0000000..3e37778 Binary files /dev/null and b/public/og/that-dying-ssd-was-just-a-bad-sata-cable.jpg differ diff --git a/public/og/that-dying-ssd-was-just-a-bad-sata-cable.png b/public/og/that-dying-ssd-was-just-a-bad-sata-cable.png deleted file mode 100644 index c7c778c..0000000 Binary files a/public/og/that-dying-ssd-was-just-a-bad-sata-cable.png and /dev/null differ diff --git a/public/og/the-cause-was-trim-not-the-ssds.jpg b/public/og/the-cause-was-trim-not-the-ssds.jpg new file mode 100644 index 0000000..bbf6fb5 Binary files /dev/null and b/public/og/the-cause-was-trim-not-the-ssds.jpg differ diff --git a/public/og/the-cause-was-trim-not-the-ssds.png b/public/og/the-cause-was-trim-not-the-ssds.png deleted file mode 100644 index bc071eb..0000000 Binary files a/public/og/the-cause-was-trim-not-the-ssds.png and /dev/null differ diff --git a/public/og/the-nocodb-attachment-that-wouldnt-update.jpg b/public/og/the-nocodb-attachment-that-wouldnt-update.jpg new file mode 100644 index 0000000..d61eeeb Binary files /dev/null and b/public/og/the-nocodb-attachment-that-wouldnt-update.jpg differ diff --git a/public/og/the-nocodb-attachment-that-wouldnt-update.png b/public/og/the-nocodb-attachment-that-wouldnt-update.png deleted file mode 100644 index d916caf..0000000 Binary files a/public/og/the-nocodb-attachment-that-wouldnt-update.png and /dev/null differ diff --git a/public/og/the-upstream-was-deleted-then-came-back-rewritten.jpg b/public/og/the-upstream-was-deleted-then-came-back-rewritten.jpg new file mode 100644 index 0000000..32c841f Binary files /dev/null and b/public/og/the-upstream-was-deleted-then-came-back-rewritten.jpg differ diff --git a/public/og/the-upstream-was-deleted-then-came-back-rewritten.png b/public/og/the-upstream-was-deleted-then-came-back-rewritten.png deleted file mode 100644 index 5eb3f1a..0000000 Binary files a/public/og/the-upstream-was-deleted-then-came-back-rewritten.png and /dev/null differ diff --git a/public/og/thumb/adding-a-domain-to-someone-elses-mail-server-400.webp b/public/og/thumb/adding-a-domain-to-someone-elses-mail-server-400.webp index 9686c18..42f02cb 100644 Binary files a/public/og/thumb/adding-a-domain-to-someone-elses-mail-server-400.webp and b/public/og/thumb/adding-a-domain-to-someone-elses-mail-server-400.webp differ diff --git a/public/og/thumb/adding-a-domain-to-someone-elses-mail-server-800.webp b/public/og/thumb/adding-a-domain-to-someone-elses-mail-server-800.webp index 52fd698..d3664fc 100644 Binary files a/public/og/thumb/adding-a-domain-to-someone-elses-mail-server-800.webp and b/public/og/thumb/adding-a-domain-to-someone-elses-mail-server-800.webp differ diff --git a/public/og/thumb/adding-english-mode-to-a-chinese-only-web-app-400.webp b/public/og/thumb/adding-english-mode-to-a-chinese-only-web-app-400.webp index d7cdf62..eaf374c 100644 Binary files a/public/og/thumb/adding-english-mode-to-a-chinese-only-web-app-400.webp and b/public/og/thumb/adding-english-mode-to-a-chinese-only-web-app-400.webp differ diff --git a/public/og/thumb/adding-english-mode-to-a-chinese-only-web-app-800.webp b/public/og/thumb/adding-english-mode-to-a-chinese-only-web-app-800.webp index 5d9a49c..5a22876 100644 Binary files a/public/og/thumb/adding-english-mode-to-a-chinese-only-web-app-800.webp and b/public/og/thumb/adding-english-mode-to-a-chinese-only-web-app-800.webp differ diff --git a/public/og/thumb/ai-furniture-compositing-with-flux-kontext-400.webp b/public/og/thumb/ai-furniture-compositing-with-flux-kontext-400.webp index 5c4321b..425c4f9 100644 Binary files a/public/og/thumb/ai-furniture-compositing-with-flux-kontext-400.webp and b/public/og/thumb/ai-furniture-compositing-with-flux-kontext-400.webp differ diff --git a/public/og/thumb/ai-furniture-compositing-with-flux-kontext-800.webp b/public/og/thumb/ai-furniture-compositing-with-flux-kontext-800.webp index 1466de7..947c90e 100644 Binary files a/public/og/thumb/ai-furniture-compositing-with-flux-kontext-800.webp and b/public/og/thumb/ai-furniture-compositing-with-flux-kontext-800.webp differ diff --git a/public/og/thumb/authentik-css-greater-than-bug-400.webp b/public/og/thumb/authentik-css-greater-than-bug-400.webp index 460a9c6..91920f0 100644 Binary files a/public/og/thumb/authentik-css-greater-than-bug-400.webp and b/public/og/thumb/authentik-css-greater-than-bug-400.webp differ diff --git a/public/og/thumb/authentik-css-greater-than-bug-800.webp b/public/og/thumb/authentik-css-greater-than-bug-800.webp index 6af3547..532a8bd 100644 Binary files a/public/og/thumb/authentik-css-greater-than-bug-800.webp and b/public/og/thumb/authentik-css-greater-than-bug-800.webp differ diff --git a/public/og/thumb/authentik-forward-auth-gate-wasnt-live-400.webp b/public/og/thumb/authentik-forward-auth-gate-wasnt-live-400.webp index 65cb6d9..73a493d 100644 Binary files a/public/og/thumb/authentik-forward-auth-gate-wasnt-live-400.webp and b/public/og/thumb/authentik-forward-auth-gate-wasnt-live-400.webp differ diff --git a/public/og/thumb/authentik-forward-auth-gate-wasnt-live-800.webp b/public/og/thumb/authentik-forward-auth-gate-wasnt-live-800.webp index 57d3d01..59699ce 100644 Binary files a/public/og/thumb/authentik-forward-auth-gate-wasnt-live-800.webp and b/public/og/thumb/authentik-forward-auth-gate-wasnt-live-800.webp differ diff --git a/public/og/thumb/authentik-major-upgrade-gotchas-400.webp b/public/og/thumb/authentik-major-upgrade-gotchas-400.webp index e3710b2..fdb5279 100644 Binary files a/public/og/thumb/authentik-major-upgrade-gotchas-400.webp and b/public/og/thumb/authentik-major-upgrade-gotchas-400.webp differ diff --git a/public/og/thumb/authentik-major-upgrade-gotchas-800.webp b/public/og/thumb/authentik-major-upgrade-gotchas-800.webp index 5176d67..295c9c0 100644 Binary files a/public/og/thumb/authentik-major-upgrade-gotchas-800.webp and b/public/og/thumb/authentik-major-upgrade-gotchas-800.webp differ diff --git a/public/og/thumb/automating-cyberpanel-without-the-ui-400.webp b/public/og/thumb/automating-cyberpanel-without-the-ui-400.webp index 5ee0b4e..8a83c1c 100644 Binary files a/public/og/thumb/automating-cyberpanel-without-the-ui-400.webp and b/public/og/thumb/automating-cyberpanel-without-the-ui-400.webp differ diff --git a/public/og/thumb/automating-cyberpanel-without-the-ui-800.webp b/public/og/thumb/automating-cyberpanel-without-the-ui-800.webp index 26ee93d..de1948e 100644 Binary files a/public/og/thumb/automating-cyberpanel-without-the-ui-800.webp and b/public/og/thumb/automating-cyberpanel-without-the-ui-800.webp differ diff --git a/public/og/thumb/best-ai-video-generators-2026-400.webp b/public/og/thumb/best-ai-video-generators-2026-400.webp index 9c42b75..9c85db6 100644 Binary files a/public/og/thumb/best-ai-video-generators-2026-400.webp and b/public/og/thumb/best-ai-video-generators-2026-400.webp differ diff --git a/public/og/thumb/best-ai-video-generators-2026-800.webp b/public/og/thumb/best-ai-video-generators-2026-800.webp index 50aea71..45efe5f 100644 Binary files a/public/og/thumb/best-ai-video-generators-2026-800.webp and b/public/og/thumb/best-ai-video-generators-2026-800.webp differ diff --git a/public/og/thumb/calibrating-intel-quick-sync-hevc-quality-400.webp b/public/og/thumb/calibrating-intel-quick-sync-hevc-quality-400.webp index 8e614ee..e514707 100644 Binary files a/public/og/thumb/calibrating-intel-quick-sync-hevc-quality-400.webp and b/public/og/thumb/calibrating-intel-quick-sync-hevc-quality-400.webp differ diff --git a/public/og/thumb/calibrating-intel-quick-sync-hevc-quality-800.webp b/public/og/thumb/calibrating-intel-quick-sync-hevc-quality-800.webp index e5319c5..9b53cb6 100644 Binary files a/public/og/thumb/calibrating-intel-quick-sync-hevc-quality-800.webp and b/public/og/thumb/calibrating-intel-quick-sync-hevc-quality-800.webp differ diff --git a/public/og/thumb/chainlink-vrf-v2-lottery-contract-400.webp b/public/og/thumb/chainlink-vrf-v2-lottery-contract-400.webp index 8a72a99..bd37756 100644 Binary files a/public/og/thumb/chainlink-vrf-v2-lottery-contract-400.webp and b/public/og/thumb/chainlink-vrf-v2-lottery-contract-400.webp differ diff --git a/public/og/thumb/chainlink-vrf-v2-lottery-contract-800.webp b/public/og/thumb/chainlink-vrf-v2-lottery-contract-800.webp index 802235c..3c8edd9 100644 Binary files a/public/og/thumb/chainlink-vrf-v2-lottery-contract-800.webp and b/public/og/thumb/chainlink-vrf-v2-lottery-contract-800.webp differ diff --git a/public/og/thumb/docker-reported-exit-0-the-oom-killer-disagreed-400.webp b/public/og/thumb/docker-reported-exit-0-the-oom-killer-disagreed-400.webp index 8a5b636..a4be48f 100644 Binary files a/public/og/thumb/docker-reported-exit-0-the-oom-killer-disagreed-400.webp and b/public/og/thumb/docker-reported-exit-0-the-oom-killer-disagreed-400.webp differ diff --git a/public/og/thumb/docker-reported-exit-0-the-oom-killer-disagreed-800.webp b/public/og/thumb/docker-reported-exit-0-the-oom-killer-disagreed-800.webp index fd89650..2819bc8 100644 Binary files a/public/og/thumb/docker-reported-exit-0-the-oom-killer-disagreed-800.webp and b/public/og/thumb/docker-reported-exit-0-the-oom-killer-disagreed-800.webp differ diff --git a/public/og/thumb/does-hevc-actually-shrink-your-files-400.webp b/public/og/thumb/does-hevc-actually-shrink-your-files-400.webp index 1bf037c..c696562 100644 Binary files a/public/og/thumb/does-hevc-actually-shrink-your-files-400.webp and b/public/og/thumb/does-hevc-actually-shrink-your-files-400.webp differ diff --git a/public/og/thumb/does-hevc-actually-shrink-your-files-800.webp b/public/og/thumb/does-hevc-actually-shrink-your-files-800.webp index 0fab0e0..eca60cf 100644 Binary files a/public/og/thumb/does-hevc-actually-shrink-your-files-800.webp and b/public/og/thumb/does-hevc-actually-shrink-your-files-800.webp differ diff --git a/public/og/thumb/embedding-fonts-so-a-pdf-looks-the-same-everywhere-400.webp b/public/og/thumb/embedding-fonts-so-a-pdf-looks-the-same-everywhere-400.webp index 57af882..12939bf 100644 Binary files a/public/og/thumb/embedding-fonts-so-a-pdf-looks-the-same-everywhere-400.webp and b/public/og/thumb/embedding-fonts-so-a-pdf-looks-the-same-everywhere-400.webp differ diff --git a/public/og/thumb/embedding-fonts-so-a-pdf-looks-the-same-everywhere-800.webp b/public/og/thumb/embedding-fonts-so-a-pdf-looks-the-same-everywhere-800.webp index ea4a714..f6c7915 100644 Binary files a/public/og/thumb/embedding-fonts-so-a-pdf-looks-the-same-everywhere-800.webp and b/public/og/thumb/embedding-fonts-so-a-pdf-looks-the-same-everywhere-800.webp differ diff --git a/public/og/thumb/every-player-stuttered-the-file-was-fine-400.webp b/public/og/thumb/every-player-stuttered-the-file-was-fine-400.webp index b9e94bc..e9505a1 100644 Binary files a/public/og/thumb/every-player-stuttered-the-file-was-fine-400.webp and b/public/og/thumb/every-player-stuttered-the-file-was-fine-400.webp differ diff --git a/public/og/thumb/every-player-stuttered-the-file-was-fine-800.webp b/public/og/thumb/every-player-stuttered-the-file-was-fine-800.webp index a70484e..4b16c2e 100644 Binary files a/public/og/thumb/every-player-stuttered-the-file-was-fine-800.webp and b/public/og/thumb/every-player-stuttered-the-file-was-fine-800.webp differ diff --git a/public/og/thumb/five-step-ai-roadmap-what-i-actually-run-400.webp b/public/og/thumb/five-step-ai-roadmap-what-i-actually-run-400.webp index c40d458..23bb692 100644 Binary files a/public/og/thumb/five-step-ai-roadmap-what-i-actually-run-400.webp and b/public/og/thumb/five-step-ai-roadmap-what-i-actually-run-400.webp differ diff --git a/public/og/thumb/five-step-ai-roadmap-what-i-actually-run-800.webp b/public/og/thumb/five-step-ai-roadmap-what-i-actually-run-800.webp index 7004ea1..3d0d446 100644 Binary files a/public/og/thumb/five-step-ai-roadmap-what-i-actually-run-800.webp and b/public/og/thumb/five-step-ai-roadmap-what-i-actually-run-800.webp differ diff --git a/public/og/thumb/fully-on-chain-svg-nfts-400.webp b/public/og/thumb/fully-on-chain-svg-nfts-400.webp index 029612c..00a7ca4 100644 Binary files a/public/og/thumb/fully-on-chain-svg-nfts-400.webp and b/public/og/thumb/fully-on-chain-svg-nfts-400.webp differ diff --git a/public/og/thumb/fully-on-chain-svg-nfts-800.webp b/public/og/thumb/fully-on-chain-svg-nfts-800.webp index 1abdd88..1d79118 100644 Binary files a/public/og/thumb/fully-on-chain-svg-nfts-800.webp and b/public/og/thumb/fully-on-chain-svg-nfts-800.webp differ diff --git a/public/og/thumb/hardening-a-tor-onion-service-400.webp b/public/og/thumb/hardening-a-tor-onion-service-400.webp index f721ce2..8c85436 100644 Binary files a/public/og/thumb/hardening-a-tor-onion-service-400.webp and b/public/og/thumb/hardening-a-tor-onion-service-400.webp differ diff --git a/public/og/thumb/hardening-a-tor-onion-service-800.webp b/public/og/thumb/hardening-a-tor-onion-service-800.webp index 009823c..5efa613 100644 Binary files a/public/og/thumb/hardening-a-tor-onion-service-800.webp and b/public/og/thumb/hardening-a-tor-onion-service-800.webp differ diff --git a/public/og/thumb/hello-world-400.webp b/public/og/thumb/hello-world-400.webp index cc59844..fb66de2 100644 Binary files a/public/og/thumb/hello-world-400.webp and b/public/og/thumb/hello-world-400.webp differ diff --git a/public/og/thumb/hello-world-800.webp b/public/og/thumb/hello-world-800.webp index 7852454..d9b9710 100644 Binary files a/public/og/thumb/hello-world-800.webp and b/public/og/thumb/hello-world-800.webp differ diff --git a/public/og/thumb/how-i-built-the-digikedai-telegram-bot-400.webp b/public/og/thumb/how-i-built-the-digikedai-telegram-bot-400.webp index f50f002..cbbb5f9 100644 Binary files a/public/og/thumb/how-i-built-the-digikedai-telegram-bot-400.webp and b/public/og/thumb/how-i-built-the-digikedai-telegram-bot-400.webp differ diff --git a/public/og/thumb/how-i-built-the-digikedai-telegram-bot-800.webp b/public/og/thumb/how-i-built-the-digikedai-telegram-bot-800.webp index 08a686e..128da18 100644 Binary files a/public/og/thumb/how-i-built-the-digikedai-telegram-bot-800.webp and b/public/og/thumb/how-i-built-the-digikedai-telegram-bot-800.webp differ diff --git a/public/og/thumb/how-i-host-this-blog-400.webp b/public/og/thumb/how-i-host-this-blog-400.webp index b2d2180..0dd57ad 100644 Binary files a/public/og/thumb/how-i-host-this-blog-400.webp and b/public/og/thumb/how-i-host-this-blog-400.webp differ diff --git a/public/og/thumb/how-i-host-this-blog-800.webp b/public/og/thumb/how-i-host-this-blog-800.webp index 7c2e64d..7907e50 100644 Binary files a/public/og/thumb/how-i-host-this-blog-800.webp and b/public/og/thumb/how-i-host-this-blog-800.webp differ diff --git a/public/og/thumb/how-i-made-my-own-songs-with-suno-ai-400.webp b/public/og/thumb/how-i-made-my-own-songs-with-suno-ai-400.webp index 1b306e4..43d014d 100644 Binary files a/public/og/thumb/how-i-made-my-own-songs-with-suno-ai-400.webp and b/public/og/thumb/how-i-made-my-own-songs-with-suno-ai-400.webp differ diff --git a/public/og/thumb/how-i-made-my-own-songs-with-suno-ai-800.webp b/public/og/thumb/how-i-made-my-own-songs-with-suno-ai-800.webp index 0a2e76c..fcf1f60 100644 Binary files a/public/og/thumb/how-i-made-my-own-songs-with-suno-ai-800.webp and b/public/og/thumb/how-i-made-my-own-songs-with-suno-ai-800.webp differ diff --git a/public/og/thumb/how-i-vetted-20-vps-providers-with-parallel-subagents-400.webp b/public/og/thumb/how-i-vetted-20-vps-providers-with-parallel-subagents-400.webp index 25b0121..5f792c2 100644 Binary files a/public/og/thumb/how-i-vetted-20-vps-providers-with-parallel-subagents-400.webp and b/public/og/thumb/how-i-vetted-20-vps-providers-with-parallel-subagents-400.webp differ diff --git a/public/og/thumb/how-i-vetted-20-vps-providers-with-parallel-subagents-800.webp b/public/og/thumb/how-i-vetted-20-vps-providers-with-parallel-subagents-800.webp index f86eb9f..d785570 100644 Binary files a/public/og/thumb/how-i-vetted-20-vps-providers-with-parallel-subagents-800.webp and b/public/og/thumb/how-i-vetted-20-vps-providers-with-parallel-subagents-800.webp differ diff --git a/public/og/thumb/how-to-verify-a-hosting-provider-before-you-buy-400.webp b/public/og/thumb/how-to-verify-a-hosting-provider-before-you-buy-400.webp index 98d73b3..b5fe49f 100644 Binary files a/public/og/thumb/how-to-verify-a-hosting-provider-before-you-buy-400.webp and b/public/og/thumb/how-to-verify-a-hosting-provider-before-you-buy-400.webp differ diff --git a/public/og/thumb/how-to-verify-a-hosting-provider-before-you-buy-800.webp b/public/og/thumb/how-to-verify-a-hosting-provider-before-you-buy-800.webp index 7990c4d..7284d07 100644 Binary files a/public/og/thumb/how-to-verify-a-hosting-provider-before-you-buy-800.webp and b/public/og/thumb/how-to-verify-a-hosting-provider-before-you-buy-800.webp differ diff --git a/public/og/thumb/i-let-an-agent-manage-my-shopee-vouchers-400.webp b/public/og/thumb/i-let-an-agent-manage-my-shopee-vouchers-400.webp index 2e992d9..edee1d7 100644 Binary files a/public/og/thumb/i-let-an-agent-manage-my-shopee-vouchers-400.webp and b/public/og/thumb/i-let-an-agent-manage-my-shopee-vouchers-400.webp differ diff --git a/public/og/thumb/i-let-an-agent-manage-my-shopee-vouchers-800.webp b/public/og/thumb/i-let-an-agent-manage-my-shopee-vouchers-800.webp index 5894d86..a4cbbdb 100644 Binary files a/public/og/thumb/i-let-an-agent-manage-my-shopee-vouchers-800.webp and b/public/og/thumb/i-let-an-agent-manage-my-shopee-vouchers-800.webp differ diff --git a/public/og/thumb/it-reported-success-nothing-had-changed-400.webp b/public/og/thumb/it-reported-success-nothing-had-changed-400.webp index 1b27204..9fd740d 100644 Binary files a/public/og/thumb/it-reported-success-nothing-had-changed-400.webp and b/public/og/thumb/it-reported-success-nothing-had-changed-400.webp differ diff --git a/public/og/thumb/it-reported-success-nothing-had-changed-800.webp b/public/og/thumb/it-reported-success-nothing-had-changed-800.webp index cb02996..b802b7e 100644 Binary files a/public/og/thumb/it-reported-success-nothing-had-changed-800.webp and b/public/og/thumb/it-reported-success-nothing-had-changed-800.webp differ diff --git a/public/og/thumb/jpa-version-field-lost-update-400.webp b/public/og/thumb/jpa-version-field-lost-update-400.webp index adca18a..ef746cf 100644 Binary files a/public/og/thumb/jpa-version-field-lost-update-400.webp and b/public/og/thumb/jpa-version-field-lost-update-400.webp differ diff --git a/public/og/thumb/jpa-version-field-lost-update-800.webp b/public/og/thumb/jpa-version-field-lost-update-800.webp index cc01289..a1d5145 100644 Binary files a/public/og/thumb/jpa-version-field-lost-update-800.webp and b/public/og/thumb/jpa-version-field-lost-update-800.webp differ diff --git a/public/og/thumb/loop-engineering-without-a-coding-agent-400.webp b/public/og/thumb/loop-engineering-without-a-coding-agent-400.webp index 58c76df..eadce1b 100644 Binary files a/public/og/thumb/loop-engineering-without-a-coding-agent-400.webp and b/public/og/thumb/loop-engineering-without-a-coding-agent-400.webp differ diff --git a/public/og/thumb/loop-engineering-without-a-coding-agent-800.webp b/public/og/thumb/loop-engineering-without-a-coding-agent-800.webp index 8166d3c..4867770 100644 Binary files a/public/og/thumb/loop-engineering-without-a-coding-agent-800.webp and b/public/og/thumb/loop-engineering-without-a-coding-agent-800.webp differ diff --git a/public/og/thumb/migrating-codeigniter-iis-to-openlitespeed-400.webp b/public/og/thumb/migrating-codeigniter-iis-to-openlitespeed-400.webp index 09cf92b..7df07f1 100644 Binary files a/public/og/thumb/migrating-codeigniter-iis-to-openlitespeed-400.webp and b/public/og/thumb/migrating-codeigniter-iis-to-openlitespeed-400.webp differ diff --git a/public/og/thumb/migrating-codeigniter-iis-to-openlitespeed-800.webp b/public/og/thumb/migrating-codeigniter-iis-to-openlitespeed-800.webp index 11d3a2a..d1c856f 100644 Binary files a/public/og/thumb/migrating-codeigniter-iis-to-openlitespeed-800.webp and b/public/og/thumb/migrating-codeigniter-iis-to-openlitespeed-800.webp differ diff --git a/public/og/thumb/my-backup-was-using-someone-elses-api-quota-400.webp b/public/og/thumb/my-backup-was-using-someone-elses-api-quota-400.webp index 0445994..b7e6e6b 100644 Binary files a/public/og/thumb/my-backup-was-using-someone-elses-api-quota-400.webp and b/public/og/thumb/my-backup-was-using-someone-elses-api-quota-400.webp differ diff --git a/public/og/thumb/my-backup-was-using-someone-elses-api-quota-800.webp b/public/og/thumb/my-backup-was-using-someone-elses-api-quota-800.webp index 27e3dcd..a471a4f 100644 Binary files a/public/og/thumb/my-backup-was-using-someone-elses-api-quota-800.webp and b/public/og/thumb/my-backup-was-using-someone-elses-api-quota-800.webp differ diff --git a/public/og/thumb/n8n-v1-to-v2-upgrade-gotchas-400.webp b/public/og/thumb/n8n-v1-to-v2-upgrade-gotchas-400.webp index 997cefb..260776c 100644 Binary files a/public/og/thumb/n8n-v1-to-v2-upgrade-gotchas-400.webp and b/public/og/thumb/n8n-v1-to-v2-upgrade-gotchas-400.webp differ diff --git a/public/og/thumb/n8n-v1-to-v2-upgrade-gotchas-800.webp b/public/og/thumb/n8n-v1-to-v2-upgrade-gotchas-800.webp index 6047a9e..f3c938c 100644 Binary files a/public/og/thumb/n8n-v1-to-v2-upgrade-gotchas-800.webp and b/public/og/thumb/n8n-v1-to-v2-upgrade-gotchas-800.webp differ diff --git a/public/og/thumb/nocodb-sso-is-a-licensed-feature-400.webp b/public/og/thumb/nocodb-sso-is-a-licensed-feature-400.webp index 86ce082..c8328b9 100644 Binary files a/public/og/thumb/nocodb-sso-is-a-licensed-feature-400.webp and b/public/og/thumb/nocodb-sso-is-a-licensed-feature-400.webp differ diff --git a/public/og/thumb/nocodb-sso-is-a-licensed-feature-800.webp b/public/og/thumb/nocodb-sso-is-a-licensed-feature-800.webp index be3ddca..c68cdb5 100644 Binary files a/public/og/thumb/nocodb-sso-is-a-licensed-feature-800.webp and b/public/og/thumb/nocodb-sso-is-a-licensed-feature-800.webp differ diff --git a/public/og/thumb/one-hostname-public-tracker-sso-dashboard-400.webp b/public/og/thumb/one-hostname-public-tracker-sso-dashboard-400.webp index bed93a1..05663f3 100644 Binary files a/public/og/thumb/one-hostname-public-tracker-sso-dashboard-400.webp and b/public/og/thumb/one-hostname-public-tracker-sso-dashboard-400.webp differ diff --git a/public/og/thumb/one-hostname-public-tracker-sso-dashboard-800.webp b/public/og/thumb/one-hostname-public-tracker-sso-dashboard-800.webp index b1c6e77..7d8b7f3 100644 Binary files a/public/og/thumb/one-hostname-public-tracker-sso-dashboard-800.webp and b/public/og/thumb/one-hostname-public-tracker-sso-dashboard-800.webp differ diff --git a/public/og/thumb/one-prometheus-for-unraid-synology-and-a-vps-400.webp b/public/og/thumb/one-prometheus-for-unraid-synology-and-a-vps-400.webp index c6207ac..6c8c54a 100644 Binary files a/public/og/thumb/one-prometheus-for-unraid-synology-and-a-vps-400.webp and b/public/og/thumb/one-prometheus-for-unraid-synology-and-a-vps-400.webp differ diff --git a/public/og/thumb/one-prometheus-for-unraid-synology-and-a-vps-800.webp b/public/og/thumb/one-prometheus-for-unraid-synology-and-a-vps-800.webp index 19101c4..cba82ed 100644 Binary files a/public/og/thumb/one-prometheus-for-unraid-synology-and-a-vps-800.webp and b/public/og/thumb/one-prometheus-for-unraid-synology-and-a-vps-800.webp differ diff --git a/public/og/thumb/passbolt-hang-three-failure-modes-400.webp b/public/og/thumb/passbolt-hang-three-failure-modes-400.webp index 5147e94..924002b 100644 Binary files a/public/og/thumb/passbolt-hang-three-failure-modes-400.webp and b/public/og/thumb/passbolt-hang-three-failure-modes-400.webp differ diff --git a/public/og/thumb/passbolt-hang-three-failure-modes-800.webp b/public/og/thumb/passbolt-hang-three-failure-modes-800.webp index d4ab710..c5c1436 100644 Binary files a/public/og/thumb/passbolt-hang-three-failure-modes-800.webp and b/public/og/thumb/passbolt-hang-three-failure-modes-800.webp differ diff --git a/public/og/thumb/patching-workbench-26-for-mariadb-400.webp b/public/og/thumb/patching-workbench-26-for-mariadb-400.webp index 6a7d0a4..07923e8 100644 Binary files a/public/og/thumb/patching-workbench-26-for-mariadb-400.webp and b/public/og/thumb/patching-workbench-26-for-mariadb-400.webp differ diff --git a/public/og/thumb/patching-workbench-26-for-mariadb-800.webp b/public/og/thumb/patching-workbench-26-for-mariadb-800.webp index 86bfe06..c64939f 100644 Binary files a/public/og/thumb/patching-workbench-26-for-mariadb-800.webp and b/public/og/thumb/patching-workbench-26-for-mariadb-800.webp differ diff --git a/public/og/thumb/putting-a-front-door-on-an-app-you-cant-modify-400.webp b/public/og/thumb/putting-a-front-door-on-an-app-you-cant-modify-400.webp index 294c9ed..0b304e3 100644 Binary files a/public/og/thumb/putting-a-front-door-on-an-app-you-cant-modify-400.webp and b/public/og/thumb/putting-a-front-door-on-an-app-you-cant-modify-400.webp differ diff --git a/public/og/thumb/putting-a-front-door-on-an-app-you-cant-modify-800.webp b/public/og/thumb/putting-a-front-door-on-an-app-you-cant-modify-800.webp index 34cb88e..70c21eb 100644 Binary files a/public/og/thumb/putting-a-front-door-on-an-app-you-cant-modify-800.webp and b/public/og/thumb/putting-a-front-door-on-an-app-you-cant-modify-800.webp differ diff --git a/public/og/thumb/read-only-nocodb-dashboard-for-a-remote-database-400.webp b/public/og/thumb/read-only-nocodb-dashboard-for-a-remote-database-400.webp index 8f7b593..4e2d4c7 100644 Binary files a/public/og/thumb/read-only-nocodb-dashboard-for-a-remote-database-400.webp and b/public/og/thumb/read-only-nocodb-dashboard-for-a-remote-database-400.webp differ diff --git a/public/og/thumb/read-only-nocodb-dashboard-for-a-remote-database-800.webp b/public/og/thumb/read-only-nocodb-dashboard-for-a-remote-database-800.webp index 4a944e0..b70bf39 100644 Binary files a/public/og/thumb/read-only-nocodb-dashboard-for-a-remote-database-800.webp and b/public/og/thumb/read-only-nocodb-dashboard-for-a-remote-database-800.webp differ diff --git a/public/og/thumb/reading-a-containers-own-api-docs-400.webp b/public/og/thumb/reading-a-containers-own-api-docs-400.webp index b2f9077..7cc3a33 100644 Binary files a/public/og/thumb/reading-a-containers-own-api-docs-400.webp and b/public/og/thumb/reading-a-containers-own-api-docs-400.webp differ diff --git a/public/og/thumb/reading-a-containers-own-api-docs-800.webp b/public/og/thumb/reading-a-containers-own-api-docs-800.webp index ab75209..c461f89 100644 Binary files a/public/og/thumb/reading-a-containers-own-api-docs-800.webp and b/public/og/thumb/reading-a-containers-own-api-docs-800.webp differ diff --git a/public/og/thumb/replacing-rdpguard-with-ipban-400.webp b/public/og/thumb/replacing-rdpguard-with-ipban-400.webp index bfacf77..66f7f87 100644 Binary files a/public/og/thumb/replacing-rdpguard-with-ipban-400.webp and b/public/og/thumb/replacing-rdpguard-with-ipban-400.webp differ diff --git a/public/og/thumb/replacing-rdpguard-with-ipban-800.webp b/public/og/thumb/replacing-rdpguard-with-ipban-800.webp index f2b0722..6f64491 100644 Binary files a/public/og/thumb/replacing-rdpguard-with-ipban-800.webp and b/public/og/thumb/replacing-rdpguard-with-ipban-800.webp differ diff --git a/public/og/thumb/running-production-infrastructure-solo-400.webp b/public/og/thumb/running-production-infrastructure-solo-400.webp index b4ca5ed..d7296c8 100644 Binary files a/public/og/thumb/running-production-infrastructure-solo-400.webp and b/public/og/thumb/running-production-infrastructure-solo-400.webp differ diff --git a/public/og/thumb/running-production-infrastructure-solo-800.webp b/public/og/thumb/running-production-infrastructure-solo-800.webp index e9e17f7..734c379 100644 Binary files a/public/og/thumb/running-production-infrastructure-solo-800.webp and b/public/og/thumb/running-production-infrastructure-solo-800.webp differ diff --git a/public/og/thumb/running-tts-as-a-service-with-token-sidecars-400.webp b/public/og/thumb/running-tts-as-a-service-with-token-sidecars-400.webp index cdc5200..745d118 100644 Binary files a/public/og/thumb/running-tts-as-a-service-with-token-sidecars-400.webp and b/public/og/thumb/running-tts-as-a-service-with-token-sidecars-400.webp differ diff --git a/public/og/thumb/running-tts-as-a-service-with-token-sidecars-800.webp b/public/og/thumb/running-tts-as-a-service-with-token-sidecars-800.webp index 5e4ea71..5e677d5 100644 Binary files a/public/og/thumb/running-tts-as-a-service-with-token-sidecars-800.webp and b/public/og/thumb/running-tts-as-a-service-with-token-sidecars-800.webp differ diff --git a/public/og/thumb/scraping-bot-walled-marketplace-warm-browser-session-400.webp b/public/og/thumb/scraping-bot-walled-marketplace-warm-browser-session-400.webp index 241b195..abdb160 100644 Binary files a/public/og/thumb/scraping-bot-walled-marketplace-warm-browser-session-400.webp and b/public/og/thumb/scraping-bot-walled-marketplace-warm-browser-session-400.webp differ diff --git a/public/og/thumb/scraping-bot-walled-marketplace-warm-browser-session-800.webp b/public/og/thumb/scraping-bot-walled-marketplace-warm-browser-session-800.webp index 48feca8..2d7c88d 100644 Binary files a/public/og/thumb/scraping-bot-walled-marketplace-warm-browser-session-800.webp and b/public/og/thumb/scraping-bot-walled-marketplace-warm-browser-session-800.webp differ diff --git a/public/og/thumb/self-healing-digital-goods-entitlements-400.webp b/public/og/thumb/self-healing-digital-goods-entitlements-400.webp index fe05fe1..82d7816 100644 Binary files a/public/og/thumb/self-healing-digital-goods-entitlements-400.webp and b/public/og/thumb/self-healing-digital-goods-entitlements-400.webp differ diff --git a/public/og/thumb/self-healing-digital-goods-entitlements-800.webp b/public/og/thumb/self-healing-digital-goods-entitlements-800.webp index 8f1f9a3..f16ffca 100644 Binary files a/public/og/thumb/self-healing-digital-goods-entitlements-800.webp and b/public/og/thumb/self-healing-digital-goods-entitlements-800.webp differ diff --git a/public/og/thumb/self-hosted-speech-to-text-api-400.webp b/public/og/thumb/self-hosted-speech-to-text-api-400.webp index b61f0b4..5731d84 100644 Binary files a/public/og/thumb/self-hosted-speech-to-text-api-400.webp and b/public/og/thumb/self-hosted-speech-to-text-api-400.webp differ diff --git a/public/og/thumb/self-hosted-speech-to-text-api-800.webp b/public/og/thumb/self-hosted-speech-to-text-api-800.webp index 6d06fef..e958e3b 100644 Binary files a/public/og/thumb/self-hosted-speech-to-text-api-800.webp and b/public/og/thumb/self-hosted-speech-to-text-api-800.webp differ diff --git a/public/og/thumb/self-hosting-mem0-memory-stack-400.webp b/public/og/thumb/self-hosting-mem0-memory-stack-400.webp index 01b59b9..4d403e3 100644 Binary files a/public/og/thumb/self-hosting-mem0-memory-stack-400.webp and b/public/og/thumb/self-hosting-mem0-memory-stack-400.webp differ diff --git a/public/og/thumb/self-hosting-mem0-memory-stack-800.webp b/public/og/thumb/self-hosting-mem0-memory-stack-800.webp index c2cd83b..29b15b5 100644 Binary files a/public/og/thumb/self-hosting-mem0-memory-stack-800.webp and b/public/og/thumb/self-hosting-mem0-memory-stack-800.webp differ diff --git a/public/og/thumb/shipping-an-ai-photo-editor-as-a-wordpress-plugin-400.webp b/public/og/thumb/shipping-an-ai-photo-editor-as-a-wordpress-plugin-400.webp index 4bbed37..13e067c 100644 Binary files a/public/og/thumb/shipping-an-ai-photo-editor-as-a-wordpress-plugin-400.webp and b/public/og/thumb/shipping-an-ai-photo-editor-as-a-wordpress-plugin-400.webp differ diff --git a/public/og/thumb/shipping-an-ai-photo-editor-as-a-wordpress-plugin-800.webp b/public/og/thumb/shipping-an-ai-photo-editor-as-a-wordpress-plugin-800.webp index 4376585..4931959 100644 Binary files a/public/og/thumb/shipping-an-ai-photo-editor-as-a-wordpress-plugin-800.webp and b/public/og/thumb/shipping-an-ai-photo-editor-as-a-wordpress-plugin-800.webp differ diff --git a/public/og/thumb/smartctl-exit-code-32-skips-the-disks-that-matter-400.webp b/public/og/thumb/smartctl-exit-code-32-skips-the-disks-that-matter-400.webp index 6b95a29..d00db2a 100644 Binary files a/public/og/thumb/smartctl-exit-code-32-skips-the-disks-that-matter-400.webp and b/public/og/thumb/smartctl-exit-code-32-skips-the-disks-that-matter-400.webp differ diff --git a/public/og/thumb/smartctl-exit-code-32-skips-the-disks-that-matter-800.webp b/public/og/thumb/smartctl-exit-code-32-skips-the-disks-that-matter-800.webp index 44d81d2..a6bf3f3 100644 Binary files a/public/og/thumb/smartctl-exit-code-32-skips-the-disks-that-matter-800.webp and b/public/og/thumb/smartctl-exit-code-32-skips-the-disks-that-matter-800.webp differ diff --git a/public/og/thumb/space-reclamation-wasnt-stuck-it-was-waiting-400.webp b/public/og/thumb/space-reclamation-wasnt-stuck-it-was-waiting-400.webp index cf5599d..d2db867 100644 Binary files a/public/og/thumb/space-reclamation-wasnt-stuck-it-was-waiting-400.webp and b/public/og/thumb/space-reclamation-wasnt-stuck-it-was-waiting-400.webp differ diff --git a/public/og/thumb/space-reclamation-wasnt-stuck-it-was-waiting-800.webp b/public/og/thumb/space-reclamation-wasnt-stuck-it-was-waiting-800.webp index bdb13fa..31c6988 100644 Binary files a/public/og/thumb/space-reclamation-wasnt-stuck-it-was-waiting-800.webp and b/public/og/thumb/space-reclamation-wasnt-stuck-it-was-waiting-800.webp differ diff --git a/public/og/thumb/stop-writing-agent-prompts-for-deterministic-work-400.webp b/public/og/thumb/stop-writing-agent-prompts-for-deterministic-work-400.webp index 6dffe79..abbcae9 100644 Binary files a/public/og/thumb/stop-writing-agent-prompts-for-deterministic-work-400.webp and b/public/og/thumb/stop-writing-agent-prompts-for-deterministic-work-400.webp differ diff --git a/public/og/thumb/stop-writing-agent-prompts-for-deterministic-work-800.webp b/public/og/thumb/stop-writing-agent-prompts-for-deterministic-work-800.webp index a345e6b..4993f6b 100644 Binary files a/public/og/thumb/stop-writing-agent-prompts-for-deterministic-work-800.webp and b/public/og/thumb/stop-writing-agent-prompts-for-deterministic-work-800.webp differ diff --git a/public/og/thumb/syncing-a-self-improving-ai-agent-across-machines-400.webp b/public/og/thumb/syncing-a-self-improving-ai-agent-across-machines-400.webp index 792cf0d..d4854c4 100644 Binary files a/public/og/thumb/syncing-a-self-improving-ai-agent-across-machines-400.webp and b/public/og/thumb/syncing-a-self-improving-ai-agent-across-machines-400.webp differ diff --git a/public/og/thumb/syncing-a-self-improving-ai-agent-across-machines-800.webp b/public/og/thumb/syncing-a-self-improving-ai-agent-across-machines-800.webp index 340011a..8dfdb5e 100644 Binary files a/public/og/thumb/syncing-a-self-improving-ai-agent-across-machines-800.webp and b/public/og/thumb/syncing-a-self-improving-ai-agent-across-machines-800.webp differ diff --git a/public/og/thumb/synology-api-401-with-the-correct-password-400.webp b/public/og/thumb/synology-api-401-with-the-correct-password-400.webp index a448845..fabbf39 100644 Binary files a/public/og/thumb/synology-api-401-with-the-correct-password-400.webp and b/public/og/thumb/synology-api-401-with-the-correct-password-400.webp differ diff --git a/public/og/thumb/synology-api-401-with-the-correct-password-800.webp b/public/og/thumb/synology-api-401-with-the-correct-password-800.webp index c445c61..2b22d8f 100644 Binary files a/public/og/thumb/synology-api-401-with-the-correct-password-800.webp and b/public/og/thumb/synology-api-401-with-the-correct-password-800.webp differ diff --git a/public/og/thumb/synology-spreadsheet-api-is-a-container-400.webp b/public/og/thumb/synology-spreadsheet-api-is-a-container-400.webp index ab28fb8..0e559b2 100644 Binary files a/public/og/thumb/synology-spreadsheet-api-is-a-container-400.webp and b/public/og/thumb/synology-spreadsheet-api-is-a-container-400.webp differ diff --git a/public/og/thumb/synology-spreadsheet-api-is-a-container-800.webp b/public/og/thumb/synology-spreadsheet-api-is-a-container-800.webp index ca9a773..47bbc0e 100644 Binary files a/public/og/thumb/synology-spreadsheet-api-is-a-container-800.webp and b/public/og/thumb/synology-spreadsheet-api-is-a-container-800.webp differ diff --git a/public/og/thumb/that-dying-ssd-was-just-a-bad-sata-cable-400.webp b/public/og/thumb/that-dying-ssd-was-just-a-bad-sata-cable-400.webp index e2c1f7a..bc6ae91 100644 Binary files a/public/og/thumb/that-dying-ssd-was-just-a-bad-sata-cable-400.webp and b/public/og/thumb/that-dying-ssd-was-just-a-bad-sata-cable-400.webp differ diff --git a/public/og/thumb/that-dying-ssd-was-just-a-bad-sata-cable-800.webp b/public/og/thumb/that-dying-ssd-was-just-a-bad-sata-cable-800.webp index 99dc304..02c5647 100644 Binary files a/public/og/thumb/that-dying-ssd-was-just-a-bad-sata-cable-800.webp and b/public/og/thumb/that-dying-ssd-was-just-a-bad-sata-cable-800.webp differ diff --git a/public/og/thumb/the-cause-was-trim-not-the-ssds-400.webp b/public/og/thumb/the-cause-was-trim-not-the-ssds-400.webp index 934e4fb..5cedf1c 100644 Binary files a/public/og/thumb/the-cause-was-trim-not-the-ssds-400.webp and b/public/og/thumb/the-cause-was-trim-not-the-ssds-400.webp differ diff --git a/public/og/thumb/the-cause-was-trim-not-the-ssds-800.webp b/public/og/thumb/the-cause-was-trim-not-the-ssds-800.webp index 2f1d987..55a3aec 100644 Binary files a/public/og/thumb/the-cause-was-trim-not-the-ssds-800.webp and b/public/og/thumb/the-cause-was-trim-not-the-ssds-800.webp differ diff --git a/public/og/thumb/the-nocodb-attachment-that-wouldnt-update-400.webp b/public/og/thumb/the-nocodb-attachment-that-wouldnt-update-400.webp index 8ac0b0b..a3594d5 100644 Binary files a/public/og/thumb/the-nocodb-attachment-that-wouldnt-update-400.webp and b/public/og/thumb/the-nocodb-attachment-that-wouldnt-update-400.webp differ diff --git a/public/og/thumb/the-nocodb-attachment-that-wouldnt-update-800.webp b/public/og/thumb/the-nocodb-attachment-that-wouldnt-update-800.webp index 9218133..db74b1d 100644 Binary files a/public/og/thumb/the-nocodb-attachment-that-wouldnt-update-800.webp and b/public/og/thumb/the-nocodb-attachment-that-wouldnt-update-800.webp differ diff --git a/public/og/thumb/the-upstream-was-deleted-then-came-back-rewritten-400.webp b/public/og/thumb/the-upstream-was-deleted-then-came-back-rewritten-400.webp index c1e9655..3871c52 100644 Binary files a/public/og/thumb/the-upstream-was-deleted-then-came-back-rewritten-400.webp and b/public/og/thumb/the-upstream-was-deleted-then-came-back-rewritten-400.webp differ diff --git a/public/og/thumb/the-upstream-was-deleted-then-came-back-rewritten-800.webp b/public/og/thumb/the-upstream-was-deleted-then-came-back-rewritten-800.webp index d94cc0a..f0185e5 100644 Binary files a/public/og/thumb/the-upstream-was-deleted-then-came-back-rewritten-800.webp and b/public/og/thumb/the-upstream-was-deleted-then-came-back-rewritten-800.webp differ diff --git a/public/og/thumb/two-ways-a-javascript-file-stops-working-and-looks-fine-400.webp b/public/og/thumb/two-ways-a-javascript-file-stops-working-and-looks-fine-400.webp index 47935cd..e0e8f3e 100644 Binary files a/public/og/thumb/two-ways-a-javascript-file-stops-working-and-looks-fine-400.webp and b/public/og/thumb/two-ways-a-javascript-file-stops-working-and-looks-fine-400.webp differ diff --git a/public/og/thumb/two-ways-a-javascript-file-stops-working-and-looks-fine-800.webp b/public/og/thumb/two-ways-a-javascript-file-stops-working-and-looks-fine-800.webp index 60e2d40..490014b 100644 Binary files a/public/og/thumb/two-ways-a-javascript-file-stops-working-and-looks-fine-800.webp and b/public/og/thumb/two-ways-a-javascript-file-stops-working-and-looks-fine-800.webp differ diff --git a/public/og/thumb/unraid-stop-array-hangs-on-swapfile-400.webp b/public/og/thumb/unraid-stop-array-hangs-on-swapfile-400.webp index 0c19136..2220c20 100644 Binary files a/public/og/thumb/unraid-stop-array-hangs-on-swapfile-400.webp and b/public/og/thumb/unraid-stop-array-hangs-on-swapfile-400.webp differ diff --git a/public/og/thumb/unraid-stop-array-hangs-on-swapfile-800.webp b/public/og/thumb/unraid-stop-array-hangs-on-swapfile-800.webp index a524019..4f36700 100644 Binary files a/public/og/thumb/unraid-stop-array-hangs-on-swapfile-800.webp and b/public/og/thumb/unraid-stop-array-hangs-on-swapfile-800.webp differ diff --git a/public/og/thumb/upgrading-codeigniter-46-to-47-400.webp b/public/og/thumb/upgrading-codeigniter-46-to-47-400.webp index 4d44711..a849ef6 100644 Binary files a/public/og/thumb/upgrading-codeigniter-46-to-47-400.webp and b/public/og/thumb/upgrading-codeigniter-46-to-47-400.webp differ diff --git a/public/og/thumb/upgrading-codeigniter-46-to-47-800.webp b/public/og/thumb/upgrading-codeigniter-46-to-47-800.webp index 9da4a6a..840be8c 100644 Binary files a/public/og/thumb/upgrading-codeigniter-46-to-47-800.webp and b/public/og/thumb/upgrading-codeigniter-46-to-47-800.webp differ diff --git a/public/og/thumb/using-chinese-llm-apis-from-malaysia-400.webp b/public/og/thumb/using-chinese-llm-apis-from-malaysia-400.webp index 002d216..92b8539 100644 Binary files a/public/og/thumb/using-chinese-llm-apis-from-malaysia-400.webp and b/public/og/thumb/using-chinese-llm-apis-from-malaysia-400.webp differ diff --git a/public/og/thumb/using-chinese-llm-apis-from-malaysia-800.webp b/public/og/thumb/using-chinese-llm-apis-from-malaysia-800.webp index 277a0d8..a1ba4d1 100644 Binary files a/public/og/thumb/using-chinese-llm-apis-from-malaysia-800.webp and b/public/og/thumb/using-chinese-llm-apis-from-malaysia-800.webp differ diff --git a/public/og/thumb/verifying-a-pdf-report-page-by-page-400.webp b/public/og/thumb/verifying-a-pdf-report-page-by-page-400.webp index ece876d..ab86e1f 100644 Binary files a/public/og/thumb/verifying-a-pdf-report-page-by-page-400.webp and b/public/og/thumb/verifying-a-pdf-report-page-by-page-400.webp differ diff --git a/public/og/thumb/verifying-a-pdf-report-page-by-page-800.webp b/public/og/thumb/verifying-a-pdf-report-page-by-page-800.webp index fd84e58..34026c1 100644 Binary files a/public/og/thumb/verifying-a-pdf-report-page-by-page-800.webp and b/public/og/thumb/verifying-a-pdf-report-page-by-page-800.webp differ diff --git a/public/og/thumb/vetting-an-open-source-dependency-before-you-bet-on-it-400.webp b/public/og/thumb/vetting-an-open-source-dependency-before-you-bet-on-it-400.webp index a069dcf..03625d1 100644 Binary files a/public/og/thumb/vetting-an-open-source-dependency-before-you-bet-on-it-400.webp and b/public/og/thumb/vetting-an-open-source-dependency-before-you-bet-on-it-400.webp differ diff --git a/public/og/thumb/vetting-an-open-source-dependency-before-you-bet-on-it-800.webp b/public/og/thumb/vetting-an-open-source-dependency-before-you-bet-on-it-800.webp index b26647b..3b85535 100644 Binary files a/public/og/thumb/vetting-an-open-source-dependency-before-you-bet-on-it-800.webp and b/public/og/thumb/vetting-an-open-source-dependency-before-you-bet-on-it-800.webp differ diff --git a/public/og/thumb/when-smart-says-healthy-but-your-raid-is-corrupting-data-400.webp b/public/og/thumb/when-smart-says-healthy-but-your-raid-is-corrupting-data-400.webp index 6ddf450..31dacb3 100644 Binary files a/public/og/thumb/when-smart-says-healthy-but-your-raid-is-corrupting-data-400.webp and b/public/og/thumb/when-smart-says-healthy-but-your-raid-is-corrupting-data-400.webp differ diff --git a/public/og/thumb/when-smart-says-healthy-but-your-raid-is-corrupting-data-800.webp b/public/og/thumb/when-smart-says-healthy-but-your-raid-is-corrupting-data-800.webp index 2849b6e..bda419d 100644 Binary files a/public/og/thumb/when-smart-says-healthy-but-your-raid-is-corrupting-data-800.webp and b/public/og/thumb/when-smart-says-healthy-but-your-raid-is-corrupting-data-800.webp differ diff --git a/public/og/thumb/why-500000-lines-of-commit-churn-only-left-230000-in-production-400.webp b/public/og/thumb/why-500000-lines-of-commit-churn-only-left-230000-in-production-400.webp index 885687d..d6ae711 100644 Binary files a/public/og/thumb/why-500000-lines-of-commit-churn-only-left-230000-in-production-400.webp and b/public/og/thumb/why-500000-lines-of-commit-churn-only-left-230000-in-production-400.webp differ diff --git a/public/og/thumb/why-500000-lines-of-commit-churn-only-left-230000-in-production-800.webp b/public/og/thumb/why-500000-lines-of-commit-churn-only-left-230000-in-production-800.webp index 8055a87..34bd335 100644 Binary files a/public/og/thumb/why-500000-lines-of-commit-churn-only-left-230000-in-production-800.webp and b/public/og/thumb/why-500000-lines-of-commit-churn-only-left-230000-in-production-800.webp differ diff --git a/public/og/thumb/why-chrome-forgets-its-tabs-in-a-container-400.webp b/public/og/thumb/why-chrome-forgets-its-tabs-in-a-container-400.webp index b53edaf..8072339 100644 Binary files a/public/og/thumb/why-chrome-forgets-its-tabs-in-a-container-400.webp and b/public/og/thumb/why-chrome-forgets-its-tabs-in-a-container-400.webp differ diff --git a/public/og/thumb/why-chrome-forgets-its-tabs-in-a-container-800.webp b/public/og/thumb/why-chrome-forgets-its-tabs-in-a-container-800.webp index e163ee2..e0f782d 100644 Binary files a/public/og/thumb/why-chrome-forgets-its-tabs-in-a-container-800.webp and b/public/og/thumb/why-chrome-forgets-its-tabs-in-a-container-800.webp differ diff --git a/public/og/thumb/why-i-still-bought-a-local-gpu-400.webp b/public/og/thumb/why-i-still-bought-a-local-gpu-400.webp index b5c051f..5b3d4e6 100644 Binary files a/public/og/thumb/why-i-still-bought-a-local-gpu-400.webp and b/public/og/thumb/why-i-still-bought-a-local-gpu-400.webp differ diff --git a/public/og/thumb/why-i-still-bought-a-local-gpu-800.webp b/public/og/thumb/why-i-still-bought-a-local-gpu-800.webp index bff24e2..73e25e4 100644 Binary files a/public/og/thumb/why-i-still-bought-a-local-gpu-800.webp and b/public/og/thumb/why-i-still-bought-a-local-gpu-800.webp differ diff --git a/public/og/thumb/why-my-on-chain-nft-art-changed-on-windows-400.webp b/public/og/thumb/why-my-on-chain-nft-art-changed-on-windows-400.webp index d93ed80..8d51895 100644 Binary files a/public/og/thumb/why-my-on-chain-nft-art-changed-on-windows-400.webp and b/public/og/thumb/why-my-on-chain-nft-art-changed-on-windows-400.webp differ diff --git a/public/og/thumb/why-my-on-chain-nft-art-changed-on-windows-800.webp b/public/og/thumb/why-my-on-chain-nft-art-changed-on-windows-800.webp index d1f4954..56d54a2 100644 Binary files a/public/og/thumb/why-my-on-chain-nft-art-changed-on-windows-800.webp and b/public/og/thumb/why-my-on-chain-nft-art-changed-on-windows-800.webp differ diff --git a/public/og/thumb/why-telegram-bot-notifications-die-400.webp b/public/og/thumb/why-telegram-bot-notifications-die-400.webp index 5f67d27..a435ad2 100644 Binary files a/public/og/thumb/why-telegram-bot-notifications-die-400.webp and b/public/og/thumb/why-telegram-bot-notifications-die-400.webp differ diff --git a/public/og/thumb/why-telegram-bot-notifications-die-800.webp b/public/og/thumb/why-telegram-bot-notifications-die-800.webp index eca2e60..ec46380 100644 Binary files a/public/og/thumb/why-telegram-bot-notifications-die-800.webp and b/public/og/thumb/why-telegram-bot-notifications-die-800.webp differ diff --git a/public/og/thumb/why-your-cdp-clicks-silently-fail-400.webp b/public/og/thumb/why-your-cdp-clicks-silently-fail-400.webp index 3719acc..c5b7bd4 100644 Binary files a/public/og/thumb/why-your-cdp-clicks-silently-fail-400.webp and b/public/og/thumb/why-your-cdp-clicks-silently-fail-400.webp differ diff --git a/public/og/thumb/why-your-cdp-clicks-silently-fail-800.webp b/public/og/thumb/why-your-cdp-clicks-silently-fail-800.webp index ed2b4e4..18b6cf6 100644 Binary files a/public/og/thumb/why-your-cdp-clicks-silently-fail-800.webp and b/public/og/thumb/why-your-cdp-clicks-silently-fail-800.webp differ diff --git a/public/og/thumb/why-your-grafana-dashboard-shows-no-data-400.webp b/public/og/thumb/why-your-grafana-dashboard-shows-no-data-400.webp index 03766e7..b577d65 100644 Binary files a/public/og/thumb/why-your-grafana-dashboard-shows-no-data-400.webp and b/public/og/thumb/why-your-grafana-dashboard-shows-no-data-400.webp differ diff --git a/public/og/thumb/why-your-grafana-dashboard-shows-no-data-800.webp b/public/og/thumb/why-your-grafana-dashboard-shows-no-data-800.webp index eea5530..6692fbc 100644 Binary files a/public/og/thumb/why-your-grafana-dashboard-shows-no-data-800.webp and b/public/og/thumb/why-your-grafana-dashboard-shows-no-data-800.webp differ diff --git a/public/og/thumb/why-your-headless-browser-cant-scrape-everything-400.webp b/public/og/thumb/why-your-headless-browser-cant-scrape-everything-400.webp index e734557..30e5f8f 100644 Binary files a/public/og/thumb/why-your-headless-browser-cant-scrape-everything-400.webp and b/public/og/thumb/why-your-headless-browser-cant-scrape-everything-400.webp differ diff --git a/public/og/thumb/why-your-headless-browser-cant-scrape-everything-800.webp b/public/og/thumb/why-your-headless-browser-cant-scrape-everything-800.webp index ea40435..b5129f5 100644 Binary files a/public/og/thumb/why-your-headless-browser-cant-scrape-everything-800.webp and b/public/og/thumb/why-your-headless-browser-cant-scrape-everything-800.webp differ diff --git a/public/og/thumb/your-disk-full-alert-is-lying-400.webp b/public/og/thumb/your-disk-full-alert-is-lying-400.webp index 4fe4fee..4a2d887 100644 Binary files a/public/og/thumb/your-disk-full-alert-is-lying-400.webp and b/public/og/thumb/your-disk-full-alert-is-lying-400.webp differ diff --git a/public/og/thumb/your-disk-full-alert-is-lying-800.webp b/public/og/thumb/your-disk-full-alert-is-lying-800.webp index d0add4b..fe9c3e4 100644 Binary files a/public/og/thumb/your-disk-full-alert-is-lying-800.webp and b/public/og/thumb/your-disk-full-alert-is-lying-800.webp differ diff --git a/public/og/two-ways-a-javascript-file-stops-working-and-looks-fine.jpg b/public/og/two-ways-a-javascript-file-stops-working-and-looks-fine.jpg new file mode 100644 index 0000000..fb43746 Binary files /dev/null and b/public/og/two-ways-a-javascript-file-stops-working-and-looks-fine.jpg differ diff --git a/public/og/two-ways-a-javascript-file-stops-working-and-looks-fine.png b/public/og/two-ways-a-javascript-file-stops-working-and-looks-fine.png deleted file mode 100644 index e62b8e5..0000000 Binary files a/public/og/two-ways-a-javascript-file-stops-working-and-looks-fine.png and /dev/null differ diff --git a/public/og/unraid-stop-array-hangs-on-swapfile.jpg b/public/og/unraid-stop-array-hangs-on-swapfile.jpg new file mode 100644 index 0000000..2f8aecb Binary files /dev/null and b/public/og/unraid-stop-array-hangs-on-swapfile.jpg differ diff --git a/public/og/unraid-stop-array-hangs-on-swapfile.png b/public/og/unraid-stop-array-hangs-on-swapfile.png deleted file mode 100644 index 34804f0..0000000 Binary files a/public/og/unraid-stop-array-hangs-on-swapfile.png and /dev/null differ diff --git a/public/og/upgrading-codeigniter-46-to-47.jpg b/public/og/upgrading-codeigniter-46-to-47.jpg new file mode 100644 index 0000000..a15ea58 Binary files /dev/null and b/public/og/upgrading-codeigniter-46-to-47.jpg differ diff --git a/public/og/upgrading-codeigniter-46-to-47.png b/public/og/upgrading-codeigniter-46-to-47.png deleted file mode 100644 index c34f18e..0000000 Binary files a/public/og/upgrading-codeigniter-46-to-47.png and /dev/null differ diff --git a/public/og/using-chinese-llm-apis-from-malaysia.jpg b/public/og/using-chinese-llm-apis-from-malaysia.jpg new file mode 100644 index 0000000..ad041e2 Binary files /dev/null and b/public/og/using-chinese-llm-apis-from-malaysia.jpg differ diff --git a/public/og/using-chinese-llm-apis-from-malaysia.png b/public/og/using-chinese-llm-apis-from-malaysia.png deleted file mode 100644 index 2cc2286..0000000 Binary files a/public/og/using-chinese-llm-apis-from-malaysia.png and /dev/null differ diff --git a/public/og/verifying-a-pdf-report-page-by-page.jpg b/public/og/verifying-a-pdf-report-page-by-page.jpg new file mode 100644 index 0000000..c58cbbc Binary files /dev/null and b/public/og/verifying-a-pdf-report-page-by-page.jpg differ diff --git a/public/og/verifying-a-pdf-report-page-by-page.png b/public/og/verifying-a-pdf-report-page-by-page.png deleted file mode 100644 index 6777161..0000000 Binary files a/public/og/verifying-a-pdf-report-page-by-page.png and /dev/null differ diff --git a/public/og/vetting-an-open-source-dependency-before-you-bet-on-it.jpg b/public/og/vetting-an-open-source-dependency-before-you-bet-on-it.jpg new file mode 100644 index 0000000..6c8c1e9 Binary files /dev/null and b/public/og/vetting-an-open-source-dependency-before-you-bet-on-it.jpg differ diff --git a/public/og/vetting-an-open-source-dependency-before-you-bet-on-it.png b/public/og/vetting-an-open-source-dependency-before-you-bet-on-it.png deleted file mode 100644 index c8784a7..0000000 Binary files a/public/og/vetting-an-open-source-dependency-before-you-bet-on-it.png and /dev/null differ diff --git a/public/og/when-smart-says-healthy-but-your-raid-is-corrupting-data.jpg b/public/og/when-smart-says-healthy-but-your-raid-is-corrupting-data.jpg new file mode 100644 index 0000000..21e1215 Binary files /dev/null and b/public/og/when-smart-says-healthy-but-your-raid-is-corrupting-data.jpg differ diff --git a/public/og/when-smart-says-healthy-but-your-raid-is-corrupting-data.png b/public/og/when-smart-says-healthy-but-your-raid-is-corrupting-data.png deleted file mode 100644 index c72dcd0..0000000 Binary files a/public/og/when-smart-says-healthy-but-your-raid-is-corrupting-data.png and /dev/null differ diff --git a/public/og/why-500000-lines-of-commit-churn-only-left-230000-in-production.jpg b/public/og/why-500000-lines-of-commit-churn-only-left-230000-in-production.jpg new file mode 100644 index 0000000..199d037 Binary files /dev/null and b/public/og/why-500000-lines-of-commit-churn-only-left-230000-in-production.jpg differ diff --git a/public/og/why-500000-lines-of-commit-churn-only-left-230000-in-production.png b/public/og/why-500000-lines-of-commit-churn-only-left-230000-in-production.png deleted file mode 100644 index 6338e86..0000000 Binary files a/public/og/why-500000-lines-of-commit-churn-only-left-230000-in-production.png and /dev/null differ diff --git a/public/og/why-chrome-forgets-its-tabs-in-a-container.jpg b/public/og/why-chrome-forgets-its-tabs-in-a-container.jpg new file mode 100644 index 0000000..608e68b Binary files /dev/null and b/public/og/why-chrome-forgets-its-tabs-in-a-container.jpg differ diff --git a/public/og/why-chrome-forgets-its-tabs-in-a-container.png b/public/og/why-chrome-forgets-its-tabs-in-a-container.png deleted file mode 100644 index b1ccb0d..0000000 Binary files a/public/og/why-chrome-forgets-its-tabs-in-a-container.png and /dev/null differ diff --git a/public/og/why-i-still-bought-a-local-gpu.jpg b/public/og/why-i-still-bought-a-local-gpu.jpg new file mode 100644 index 0000000..bb445d1 Binary files /dev/null and b/public/og/why-i-still-bought-a-local-gpu.jpg differ diff --git a/public/og/why-i-still-bought-a-local-gpu.png b/public/og/why-i-still-bought-a-local-gpu.png deleted file mode 100644 index 58f937d..0000000 Binary files a/public/og/why-i-still-bought-a-local-gpu.png and /dev/null differ diff --git a/public/og/why-my-on-chain-nft-art-changed-on-windows.jpg b/public/og/why-my-on-chain-nft-art-changed-on-windows.jpg new file mode 100644 index 0000000..5dd8ce0 Binary files /dev/null and b/public/og/why-my-on-chain-nft-art-changed-on-windows.jpg differ diff --git a/public/og/why-my-on-chain-nft-art-changed-on-windows.png b/public/og/why-my-on-chain-nft-art-changed-on-windows.png deleted file mode 100644 index acb4d28..0000000 Binary files a/public/og/why-my-on-chain-nft-art-changed-on-windows.png and /dev/null differ diff --git a/public/og/why-telegram-bot-notifications-die.jpg b/public/og/why-telegram-bot-notifications-die.jpg new file mode 100644 index 0000000..7fe3826 Binary files /dev/null and b/public/og/why-telegram-bot-notifications-die.jpg differ diff --git a/public/og/why-telegram-bot-notifications-die.png b/public/og/why-telegram-bot-notifications-die.png deleted file mode 100644 index 11e8334..0000000 Binary files a/public/og/why-telegram-bot-notifications-die.png and /dev/null differ diff --git a/public/og/why-your-cdp-clicks-silently-fail.jpg b/public/og/why-your-cdp-clicks-silently-fail.jpg new file mode 100644 index 0000000..4cdb044 Binary files /dev/null and b/public/og/why-your-cdp-clicks-silently-fail.jpg differ diff --git a/public/og/why-your-cdp-clicks-silently-fail.png b/public/og/why-your-cdp-clicks-silently-fail.png deleted file mode 100644 index 62b9542..0000000 Binary files a/public/og/why-your-cdp-clicks-silently-fail.png and /dev/null differ diff --git a/public/og/why-your-grafana-dashboard-shows-no-data.jpg b/public/og/why-your-grafana-dashboard-shows-no-data.jpg new file mode 100644 index 0000000..8d5cb4e Binary files /dev/null and b/public/og/why-your-grafana-dashboard-shows-no-data.jpg differ diff --git a/public/og/why-your-grafana-dashboard-shows-no-data.png b/public/og/why-your-grafana-dashboard-shows-no-data.png deleted file mode 100644 index 930dba3..0000000 Binary files a/public/og/why-your-grafana-dashboard-shows-no-data.png and /dev/null differ diff --git a/public/og/why-your-headless-browser-cant-scrape-everything.jpg b/public/og/why-your-headless-browser-cant-scrape-everything.jpg new file mode 100644 index 0000000..87f1832 Binary files /dev/null and b/public/og/why-your-headless-browser-cant-scrape-everything.jpg differ diff --git a/public/og/why-your-headless-browser-cant-scrape-everything.png b/public/og/why-your-headless-browser-cant-scrape-everything.png deleted file mode 100644 index acdf297..0000000 Binary files a/public/og/why-your-headless-browser-cant-scrape-everything.png and /dev/null differ diff --git a/public/og/your-disk-full-alert-is-lying.jpg b/public/og/your-disk-full-alert-is-lying.jpg new file mode 100644 index 0000000..2ba9c10 Binary files /dev/null and b/public/og/your-disk-full-alert-is-lying.jpg differ diff --git a/public/og/your-disk-full-alert-is-lying.png b/public/og/your-disk-full-alert-is-lying.png deleted file mode 100644 index 7263d8c..0000000 Binary files a/public/og/your-disk-full-alert-is-lying.png and /dev/null differ diff --git a/public/og/zh-adding-a-domain-to-someone-elses-mail-server.jpg b/public/og/zh-adding-a-domain-to-someone-elses-mail-server.jpg new file mode 100644 index 0000000..4521fbf Binary files /dev/null and b/public/og/zh-adding-a-domain-to-someone-elses-mail-server.jpg differ diff --git a/public/og/zh-adding-english-mode-to-a-chinese-only-web-app.jpg b/public/og/zh-adding-english-mode-to-a-chinese-only-web-app.jpg new file mode 100644 index 0000000..604ff04 Binary files /dev/null and b/public/og/zh-adding-english-mode-to-a-chinese-only-web-app.jpg differ diff --git a/public/og/zh-ai-furniture-compositing-with-flux-kontext.jpg b/public/og/zh-ai-furniture-compositing-with-flux-kontext.jpg new file mode 100644 index 0000000..585c9cd Binary files /dev/null and b/public/og/zh-ai-furniture-compositing-with-flux-kontext.jpg differ diff --git a/public/og/zh-authentik-css-greater-than-bug.jpg b/public/og/zh-authentik-css-greater-than-bug.jpg new file mode 100644 index 0000000..7826da6 Binary files /dev/null and b/public/og/zh-authentik-css-greater-than-bug.jpg differ diff --git a/public/og/zh-authentik-forward-auth-gate-wasnt-live.jpg b/public/og/zh-authentik-forward-auth-gate-wasnt-live.jpg new file mode 100644 index 0000000..3db9cf4 Binary files /dev/null and b/public/og/zh-authentik-forward-auth-gate-wasnt-live.jpg differ diff --git a/public/og/zh-authentik-major-upgrade-gotchas.jpg b/public/og/zh-authentik-major-upgrade-gotchas.jpg new file mode 100644 index 0000000..df0101b Binary files /dev/null and b/public/og/zh-authentik-major-upgrade-gotchas.jpg differ diff --git a/public/og/zh-automating-cyberpanel-without-the-ui.jpg b/public/og/zh-automating-cyberpanel-without-the-ui.jpg new file mode 100644 index 0000000..64d9ea9 Binary files /dev/null and b/public/og/zh-automating-cyberpanel-without-the-ui.jpg differ diff --git a/public/og/zh-best-ai-video-generators-2026.jpg b/public/og/zh-best-ai-video-generators-2026.jpg new file mode 100644 index 0000000..7427289 Binary files /dev/null and b/public/og/zh-best-ai-video-generators-2026.jpg differ diff --git a/public/og/zh-calibrating-intel-quick-sync-hevc-quality.jpg b/public/og/zh-calibrating-intel-quick-sync-hevc-quality.jpg new file mode 100644 index 0000000..bf6a840 Binary files /dev/null and b/public/og/zh-calibrating-intel-quick-sync-hevc-quality.jpg differ diff --git a/public/og/zh-chainlink-vrf-v2-lottery-contract.jpg b/public/og/zh-chainlink-vrf-v2-lottery-contract.jpg new file mode 100644 index 0000000..53b8e6c Binary files /dev/null and b/public/og/zh-chainlink-vrf-v2-lottery-contract.jpg differ diff --git a/public/og/zh-docker-reported-exit-0-the-oom-killer-disagreed.jpg b/public/og/zh-docker-reported-exit-0-the-oom-killer-disagreed.jpg new file mode 100644 index 0000000..f143d58 Binary files /dev/null and b/public/og/zh-docker-reported-exit-0-the-oom-killer-disagreed.jpg differ diff --git a/public/og/zh-does-hevc-actually-shrink-your-files.jpg b/public/og/zh-does-hevc-actually-shrink-your-files.jpg new file mode 100644 index 0000000..b515938 Binary files /dev/null and b/public/og/zh-does-hevc-actually-shrink-your-files.jpg differ diff --git a/public/og/zh-embedding-fonts-so-a-pdf-looks-the-same-everywhere.jpg b/public/og/zh-embedding-fonts-so-a-pdf-looks-the-same-everywhere.jpg new file mode 100644 index 0000000..2ab3217 Binary files /dev/null and b/public/og/zh-embedding-fonts-so-a-pdf-looks-the-same-everywhere.jpg differ diff --git a/public/og/zh-every-player-stuttered-the-file-was-fine.jpg b/public/og/zh-every-player-stuttered-the-file-was-fine.jpg new file mode 100644 index 0000000..6b77e17 Binary files /dev/null and b/public/og/zh-every-player-stuttered-the-file-was-fine.jpg differ diff --git a/public/og/zh-five-step-ai-roadmap-what-i-actually-run.jpg b/public/og/zh-five-step-ai-roadmap-what-i-actually-run.jpg new file mode 100644 index 0000000..100d019 Binary files /dev/null and b/public/og/zh-five-step-ai-roadmap-what-i-actually-run.jpg differ diff --git a/public/og/zh-fully-on-chain-svg-nfts.jpg b/public/og/zh-fully-on-chain-svg-nfts.jpg new file mode 100644 index 0000000..57e29e9 Binary files /dev/null and b/public/og/zh-fully-on-chain-svg-nfts.jpg differ diff --git a/public/og/zh-hardening-a-tor-onion-service.jpg b/public/og/zh-hardening-a-tor-onion-service.jpg new file mode 100644 index 0000000..113a463 Binary files /dev/null and b/public/og/zh-hardening-a-tor-onion-service.jpg differ diff --git a/public/og/zh-hello-world.jpg b/public/og/zh-hello-world.jpg new file mode 100644 index 0000000..2028815 Binary files /dev/null and b/public/og/zh-hello-world.jpg differ diff --git a/public/og/zh-how-i-built-the-digikedai-telegram-bot.jpg b/public/og/zh-how-i-built-the-digikedai-telegram-bot.jpg new file mode 100644 index 0000000..4acf385 Binary files /dev/null and b/public/og/zh-how-i-built-the-digikedai-telegram-bot.jpg differ diff --git a/public/og/zh-how-i-host-this-blog.jpg b/public/og/zh-how-i-host-this-blog.jpg new file mode 100644 index 0000000..1ccd3de Binary files /dev/null and b/public/og/zh-how-i-host-this-blog.jpg differ diff --git a/public/og/zh-how-i-made-my-own-songs-with-suno-ai.jpg b/public/og/zh-how-i-made-my-own-songs-with-suno-ai.jpg new file mode 100644 index 0000000..775aa60 Binary files /dev/null and b/public/og/zh-how-i-made-my-own-songs-with-suno-ai.jpg differ diff --git a/public/og/zh-how-i-vetted-20-vps-providers-with-parallel-subagents.jpg b/public/og/zh-how-i-vetted-20-vps-providers-with-parallel-subagents.jpg new file mode 100644 index 0000000..feed103 Binary files /dev/null and b/public/og/zh-how-i-vetted-20-vps-providers-with-parallel-subagents.jpg differ diff --git a/public/og/zh-how-to-verify-a-hosting-provider-before-you-buy.jpg b/public/og/zh-how-to-verify-a-hosting-provider-before-you-buy.jpg new file mode 100644 index 0000000..3f7f918 Binary files /dev/null and b/public/og/zh-how-to-verify-a-hosting-provider-before-you-buy.jpg differ diff --git a/public/og/zh-i-let-an-agent-manage-my-shopee-vouchers.jpg b/public/og/zh-i-let-an-agent-manage-my-shopee-vouchers.jpg new file mode 100644 index 0000000..4881f62 Binary files /dev/null and b/public/og/zh-i-let-an-agent-manage-my-shopee-vouchers.jpg differ diff --git a/public/og/zh-it-reported-success-nothing-had-changed.jpg b/public/og/zh-it-reported-success-nothing-had-changed.jpg new file mode 100644 index 0000000..1a2275e Binary files /dev/null and b/public/og/zh-it-reported-success-nothing-had-changed.jpg differ diff --git a/public/og/zh-jpa-version-field-lost-update.jpg b/public/og/zh-jpa-version-field-lost-update.jpg new file mode 100644 index 0000000..ff8ec06 Binary files /dev/null and b/public/og/zh-jpa-version-field-lost-update.jpg differ diff --git a/public/og/zh-loop-engineering-without-a-coding-agent.jpg b/public/og/zh-loop-engineering-without-a-coding-agent.jpg new file mode 100644 index 0000000..d742023 Binary files /dev/null and b/public/og/zh-loop-engineering-without-a-coding-agent.jpg differ diff --git a/public/og/zh-migrating-codeigniter-iis-to-openlitespeed.jpg b/public/og/zh-migrating-codeigniter-iis-to-openlitespeed.jpg new file mode 100644 index 0000000..b7a9875 Binary files /dev/null and b/public/og/zh-migrating-codeigniter-iis-to-openlitespeed.jpg differ diff --git a/public/og/zh-my-backup-was-using-someone-elses-api-quota.jpg b/public/og/zh-my-backup-was-using-someone-elses-api-quota.jpg new file mode 100644 index 0000000..2738476 Binary files /dev/null and b/public/og/zh-my-backup-was-using-someone-elses-api-quota.jpg differ diff --git a/public/og/zh-n8n-v1-to-v2-upgrade-gotchas.jpg b/public/og/zh-n8n-v1-to-v2-upgrade-gotchas.jpg new file mode 100644 index 0000000..d374d5e Binary files /dev/null and b/public/og/zh-n8n-v1-to-v2-upgrade-gotchas.jpg differ diff --git a/public/og/zh-nocodb-sso-is-a-licensed-feature.jpg b/public/og/zh-nocodb-sso-is-a-licensed-feature.jpg new file mode 100644 index 0000000..7e37bb0 Binary files /dev/null and b/public/og/zh-nocodb-sso-is-a-licensed-feature.jpg differ diff --git a/public/og/zh-one-hostname-public-tracker-sso-dashboard.jpg b/public/og/zh-one-hostname-public-tracker-sso-dashboard.jpg new file mode 100644 index 0000000..5f5d2d5 Binary files /dev/null and b/public/og/zh-one-hostname-public-tracker-sso-dashboard.jpg differ diff --git a/public/og/zh-one-prometheus-for-unraid-synology-and-a-vps.jpg b/public/og/zh-one-prometheus-for-unraid-synology-and-a-vps.jpg new file mode 100644 index 0000000..9ef0acc Binary files /dev/null and b/public/og/zh-one-prometheus-for-unraid-synology-and-a-vps.jpg differ diff --git a/public/og/zh-passbolt-hang-three-failure-modes.jpg b/public/og/zh-passbolt-hang-three-failure-modes.jpg new file mode 100644 index 0000000..05a4ea8 Binary files /dev/null and b/public/og/zh-passbolt-hang-three-failure-modes.jpg differ diff --git a/public/og/zh-patching-workbench-26-for-mariadb.jpg b/public/og/zh-patching-workbench-26-for-mariadb.jpg new file mode 100644 index 0000000..46ba00b Binary files /dev/null and b/public/og/zh-patching-workbench-26-for-mariadb.jpg differ diff --git a/public/og/zh-putting-a-front-door-on-an-app-you-cant-modify.jpg b/public/og/zh-putting-a-front-door-on-an-app-you-cant-modify.jpg new file mode 100644 index 0000000..8b6a94e Binary files /dev/null and b/public/og/zh-putting-a-front-door-on-an-app-you-cant-modify.jpg differ diff --git a/public/og/zh-read-only-nocodb-dashboard-for-a-remote-database.jpg b/public/og/zh-read-only-nocodb-dashboard-for-a-remote-database.jpg new file mode 100644 index 0000000..0c81065 Binary files /dev/null and b/public/og/zh-read-only-nocodb-dashboard-for-a-remote-database.jpg differ diff --git a/public/og/zh-reading-a-containers-own-api-docs.jpg b/public/og/zh-reading-a-containers-own-api-docs.jpg new file mode 100644 index 0000000..6b6d673 Binary files /dev/null and b/public/og/zh-reading-a-containers-own-api-docs.jpg differ diff --git a/public/og/zh-replacing-rdpguard-with-ipban.jpg b/public/og/zh-replacing-rdpguard-with-ipban.jpg new file mode 100644 index 0000000..2352910 Binary files /dev/null and b/public/og/zh-replacing-rdpguard-with-ipban.jpg differ diff --git a/public/og/zh-running-production-infrastructure-solo.jpg b/public/og/zh-running-production-infrastructure-solo.jpg new file mode 100644 index 0000000..2be0e2b Binary files /dev/null and b/public/og/zh-running-production-infrastructure-solo.jpg differ diff --git a/public/og/zh-running-tts-as-a-service-with-token-sidecars.jpg b/public/og/zh-running-tts-as-a-service-with-token-sidecars.jpg new file mode 100644 index 0000000..eb5ab8d Binary files /dev/null and b/public/og/zh-running-tts-as-a-service-with-token-sidecars.jpg differ diff --git a/public/og/zh-scraping-bot-walled-marketplace-warm-browser-session.jpg b/public/og/zh-scraping-bot-walled-marketplace-warm-browser-session.jpg new file mode 100644 index 0000000..4d9c8b8 Binary files /dev/null and b/public/og/zh-scraping-bot-walled-marketplace-warm-browser-session.jpg differ diff --git a/public/og/zh-self-healing-digital-goods-entitlements.jpg b/public/og/zh-self-healing-digital-goods-entitlements.jpg new file mode 100644 index 0000000..14f9f60 Binary files /dev/null and b/public/og/zh-self-healing-digital-goods-entitlements.jpg differ diff --git a/public/og/zh-self-hosted-speech-to-text-api.jpg b/public/og/zh-self-hosted-speech-to-text-api.jpg new file mode 100644 index 0000000..956baa1 Binary files /dev/null and b/public/og/zh-self-hosted-speech-to-text-api.jpg differ diff --git a/public/og/zh-self-hosting-mem0-memory-stack.jpg b/public/og/zh-self-hosting-mem0-memory-stack.jpg new file mode 100644 index 0000000..e821634 Binary files /dev/null and b/public/og/zh-self-hosting-mem0-memory-stack.jpg differ diff --git a/public/og/zh-shipping-an-ai-photo-editor-as-a-wordpress-plugin.jpg b/public/og/zh-shipping-an-ai-photo-editor-as-a-wordpress-plugin.jpg new file mode 100644 index 0000000..2f8378a Binary files /dev/null and b/public/og/zh-shipping-an-ai-photo-editor-as-a-wordpress-plugin.jpg differ diff --git a/public/og/zh-smartctl-exit-code-32-skips-the-disks-that-matter.jpg b/public/og/zh-smartctl-exit-code-32-skips-the-disks-that-matter.jpg new file mode 100644 index 0000000..90e25ca Binary files /dev/null and b/public/og/zh-smartctl-exit-code-32-skips-the-disks-that-matter.jpg differ diff --git a/public/og/zh-space-reclamation-wasnt-stuck-it-was-waiting.jpg b/public/og/zh-space-reclamation-wasnt-stuck-it-was-waiting.jpg new file mode 100644 index 0000000..93be9c9 Binary files /dev/null and b/public/og/zh-space-reclamation-wasnt-stuck-it-was-waiting.jpg differ diff --git a/public/og/zh-stop-writing-agent-prompts-for-deterministic-work.jpg b/public/og/zh-stop-writing-agent-prompts-for-deterministic-work.jpg new file mode 100644 index 0000000..77ed1cd Binary files /dev/null and b/public/og/zh-stop-writing-agent-prompts-for-deterministic-work.jpg differ diff --git a/public/og/zh-syncing-a-self-improving-ai-agent-across-machines.jpg b/public/og/zh-syncing-a-self-improving-ai-agent-across-machines.jpg new file mode 100644 index 0000000..b12948c Binary files /dev/null and b/public/og/zh-syncing-a-self-improving-ai-agent-across-machines.jpg differ diff --git a/public/og/zh-synology-api-401-with-the-correct-password.jpg b/public/og/zh-synology-api-401-with-the-correct-password.jpg new file mode 100644 index 0000000..d8e37be Binary files /dev/null and b/public/og/zh-synology-api-401-with-the-correct-password.jpg differ diff --git a/public/og/zh-synology-spreadsheet-api-is-a-container.jpg b/public/og/zh-synology-spreadsheet-api-is-a-container.jpg new file mode 100644 index 0000000..0845fd5 Binary files /dev/null and b/public/og/zh-synology-spreadsheet-api-is-a-container.jpg differ diff --git a/public/og/zh-that-dying-ssd-was-just-a-bad-sata-cable.jpg b/public/og/zh-that-dying-ssd-was-just-a-bad-sata-cable.jpg new file mode 100644 index 0000000..5a76161 Binary files /dev/null and b/public/og/zh-that-dying-ssd-was-just-a-bad-sata-cable.jpg differ diff --git a/public/og/zh-the-cause-was-trim-not-the-ssds.jpg b/public/og/zh-the-cause-was-trim-not-the-ssds.jpg new file mode 100644 index 0000000..cf23e83 Binary files /dev/null and b/public/og/zh-the-cause-was-trim-not-the-ssds.jpg differ diff --git a/public/og/zh-the-nocodb-attachment-that-wouldnt-update.jpg b/public/og/zh-the-nocodb-attachment-that-wouldnt-update.jpg new file mode 100644 index 0000000..fda3ec3 Binary files /dev/null and b/public/og/zh-the-nocodb-attachment-that-wouldnt-update.jpg differ diff --git a/public/og/zh-the-upstream-was-deleted-then-came-back-rewritten.jpg b/public/og/zh-the-upstream-was-deleted-then-came-back-rewritten.jpg new file mode 100644 index 0000000..b7e4921 Binary files /dev/null and b/public/og/zh-the-upstream-was-deleted-then-came-back-rewritten.jpg differ diff --git a/public/og/zh-two-ways-a-javascript-file-stops-working-and-looks-fine.jpg b/public/og/zh-two-ways-a-javascript-file-stops-working-and-looks-fine.jpg new file mode 100644 index 0000000..75a9de7 Binary files /dev/null and b/public/og/zh-two-ways-a-javascript-file-stops-working-and-looks-fine.jpg differ diff --git a/public/og/zh-unraid-stop-array-hangs-on-swapfile.jpg b/public/og/zh-unraid-stop-array-hangs-on-swapfile.jpg new file mode 100644 index 0000000..de8f6ce Binary files /dev/null and b/public/og/zh-unraid-stop-array-hangs-on-swapfile.jpg differ diff --git a/public/og/zh-upgrading-codeigniter-46-to-47.jpg b/public/og/zh-upgrading-codeigniter-46-to-47.jpg new file mode 100644 index 0000000..0a600f8 Binary files /dev/null and b/public/og/zh-upgrading-codeigniter-46-to-47.jpg differ diff --git a/public/og/zh-using-chinese-llm-apis-from-malaysia.jpg b/public/og/zh-using-chinese-llm-apis-from-malaysia.jpg new file mode 100644 index 0000000..4e950af Binary files /dev/null and b/public/og/zh-using-chinese-llm-apis-from-malaysia.jpg differ diff --git a/public/og/zh-verifying-a-pdf-report-page-by-page.jpg b/public/og/zh-verifying-a-pdf-report-page-by-page.jpg new file mode 100644 index 0000000..6cfa650 Binary files /dev/null and b/public/og/zh-verifying-a-pdf-report-page-by-page.jpg differ diff --git a/public/og/zh-vetting-an-open-source-dependency-before-you-bet-on-it.jpg b/public/og/zh-vetting-an-open-source-dependency-before-you-bet-on-it.jpg new file mode 100644 index 0000000..ddcf589 Binary files /dev/null and b/public/og/zh-vetting-an-open-source-dependency-before-you-bet-on-it.jpg differ diff --git a/public/og/zh-when-smart-says-healthy-but-your-raid-is-corrupting-data.jpg b/public/og/zh-when-smart-says-healthy-but-your-raid-is-corrupting-data.jpg new file mode 100644 index 0000000..5d91925 Binary files /dev/null and b/public/og/zh-when-smart-says-healthy-but-your-raid-is-corrupting-data.jpg differ diff --git a/public/og/zh-why-500000-lines-of-commit-churn-only-left-230000-in-production.jpg b/public/og/zh-why-500000-lines-of-commit-churn-only-left-230000-in-production.jpg new file mode 100644 index 0000000..16e020b Binary files /dev/null and b/public/og/zh-why-500000-lines-of-commit-churn-only-left-230000-in-production.jpg differ diff --git a/public/og/zh-why-chrome-forgets-its-tabs-in-a-container.jpg b/public/og/zh-why-chrome-forgets-its-tabs-in-a-container.jpg new file mode 100644 index 0000000..60a2971 Binary files /dev/null and b/public/og/zh-why-chrome-forgets-its-tabs-in-a-container.jpg differ diff --git a/public/og/zh-why-i-still-bought-a-local-gpu.jpg b/public/og/zh-why-i-still-bought-a-local-gpu.jpg new file mode 100644 index 0000000..95bf6a1 Binary files /dev/null and b/public/og/zh-why-i-still-bought-a-local-gpu.jpg differ diff --git a/public/og/zh-why-my-on-chain-nft-art-changed-on-windows.jpg b/public/og/zh-why-my-on-chain-nft-art-changed-on-windows.jpg new file mode 100644 index 0000000..661ae6b Binary files /dev/null and b/public/og/zh-why-my-on-chain-nft-art-changed-on-windows.jpg differ diff --git a/public/og/zh-why-telegram-bot-notifications-die.jpg b/public/og/zh-why-telegram-bot-notifications-die.jpg new file mode 100644 index 0000000..4d795e2 Binary files /dev/null and b/public/og/zh-why-telegram-bot-notifications-die.jpg differ diff --git a/public/og/zh-why-your-cdp-clicks-silently-fail.jpg b/public/og/zh-why-your-cdp-clicks-silently-fail.jpg new file mode 100644 index 0000000..ba814d1 Binary files /dev/null and b/public/og/zh-why-your-cdp-clicks-silently-fail.jpg differ diff --git a/public/og/zh-why-your-grafana-dashboard-shows-no-data.jpg b/public/og/zh-why-your-grafana-dashboard-shows-no-data.jpg new file mode 100644 index 0000000..fa6d986 Binary files /dev/null and b/public/og/zh-why-your-grafana-dashboard-shows-no-data.jpg differ diff --git a/public/og/zh-why-your-headless-browser-cant-scrape-everything.jpg b/public/og/zh-why-your-headless-browser-cant-scrape-everything.jpg new file mode 100644 index 0000000..a8cfe06 Binary files /dev/null and b/public/og/zh-why-your-headless-browser-cant-scrape-everything.jpg differ diff --git a/public/og/zh-your-disk-full-alert-is-lying.jpg b/public/og/zh-your-disk-full-alert-is-lying.jpg new file mode 100644 index 0000000..f37d40a Binary files /dev/null and b/public/og/zh-your-disk-full-alert-is-lying.jpg differ diff --git a/scripts/og-gen/art-meta.json b/scripts/og-gen/art-meta.json index c9707cb..d0a8466 100644 --- a/scripts/og-gen/art-meta.json +++ b/scripts/og-gen/art-meta.json @@ -1,12 +1,222 @@ { - "_about": "Inputs for scripts/og-gen/render_from_art.mjs ('one art, four targets'). One entry per post: `art` = the zero-text base frame (default <art-dir>/<slug>.png), `evidence` = the short factual line shown in the card's evidence bar (REQUIRED, written by hand — never derived), optional `ogTitle_en` / `ogTitle_zh` = shortened display titles for the card only (consultant question 1, option C: the article keeps its real title), optional `tags` = override the three badge tags. Cards render from the post's own frontmatter (title/description/category) unless an ogTitle override is present.", - "_status": "2 of 72 posts have base art (the two consultant sample frames, reused). The remaining 70 need a GPU run from prompts_catalog.json before the batch can render.", - "running-production-infrastructure-solo": { - "art": "C:/AI/ideogram4/out/sample_prod_169_00001_.png", - "evidence": "162 containers · 3 hosts · 78 compose stacks" - }, - "docker-reported-exit-0-the-oom-killer-disagreed": { - "art": "C:/AI/ideogram4/out/sample_oom_169_00001_.png", - "evidence": "exit 0 · dmesg: 6x cgroup OOM kills" - } -} + "_about": "Inputs for scripts/og-gen/render_from_art.mjs ('one art, four targets'). One entry per post: `art` = the zero-text base frame (default <art-dir>/<slug>.png), `evidence` = the short factual line shown in the card's evidence bar (REQUIRED, written by hand — never derived), optional `ogTitle_en` / `ogTitle_zh` = shortened display titles for the card only (consultant question 1, option C: the article keeps its real title), optional `tags` = override the three badge tags. Cards render from the post's own frontmatter (title/description/category) unless an ogTitle override is present.", + "_status": "72 of 72 posts have a hand-written evidence line; base art is generated from C:/AI/ideogram4/captions/<slug>.json", + "adding-a-domain-to-someone-elses-mail-server": { + "evidence": "4 DNS records · 554 antispam reject" + }, + "adding-english-mode-to-a-chinese-only-web-app": { + "evidence": "no browser API · sub_filter EN mode" + }, + "ai-furniture-compositing-with-flux-kontext": { + "evidence": "kontext multi-image · tainted canvas fix" + }, + "authentik-css-greater-than-bug": { + "evidence": "1 escaped '>' · CSS silently dropped" + }, + "authentik-forward-auth-gate-wasnt-live": { + "evidence": "host 302 · public 200 · 2 ingress layers" + }, + "authentik-major-upgrade-gotchas": { + "evidence": "2025.8 → 2026.8 · auth_flow mixup" + }, + "automating-cyberpanel-without-the-ui": { + "evidence": "v2 JSON API gone · session + CSRF" + }, + "best-ai-video-generators-2026": { + "evidence": "free vs paid · local LTX-2.3 test" + }, + "calibrating-intel-quick-sync-hevc-quality": { + "evidence": "ICQ 28-30 cliff · fast == medium" + }, + "chainlink-vrf-v2-lottery-contract": { + "evidence": "VRF v2.5 · mock-funding bug" + }, + "docker-reported-exit-0-the-oom-killer-disagreed": { + "art": "C:/AI/ideogram4/out/sample_oom_169_00001_.png", + "evidence": "exit 0 · dmesg: 6x cgroup OOM kills" + }, + "does-hevc-actually-shrink-your-files": { + "evidence": "NVENC cq27 bigger · x265 -10-22%" + }, + "embedding-fonts-so-a-pdf-looks-the-same-everywhere": { + "evidence": "4 families · 8 faces · 2 renderers" + }, + "every-player-stuttered-the-file-was-fine": { + "evidence": "5818/5818 intervals · 0 duplicate PTS" + }, + "five-step-ai-roadmap-what-i-actually-run": { + "evidence": "whisper + mem0 in production · step 4 skipped" + }, + "fully-on-chain-svg-nfts": { + "evidence": "base64 SVG in tokenURI() · mood flip on-chain" + }, + "hardening-a-tor-onion-service": { + "evidence": "bind 0.0.0.0:80 denied · onion v3" + }, + "hello-world": { + "evidence": "~140-container homelab · self-hosted" + }, + "how-i-built-the-digikedai-telegram-bot": { + "evidence": "Telegram + WhatsApp · LiteLLM gateway" + }, + "how-i-host-this-blog": { + "evidence": "git push · act_runner · nginx" + }, + "how-i-made-my-own-songs-with-suno-ai": { + "evidence": "7 songs · lyrics + prompts" + }, + "how-i-vetted-20-vps-providers-with-parallel-subagents": { + "evidence": "20 providers · 3 hours · subagents" + }, + "how-to-verify-a-hosting-provider-before-you-buy": { + "evidence": "rdap.org domain age · AUP read" + }, + "i-let-an-agent-manage-my-shopee-vouchers": { + "evidence": "mode=propose gate · RM140 voucher unapproved" + }, + "it-reported-success-nothing-had-changed": { + "evidence": "12.5 MB of 403 MB · rename never landed" + }, + "jpa-version-field-lost-update": { + "evidence": "@Version · stale PUT → 409" + }, + "loop-engineering-without-a-coding-agent": { + "evidence": "11 cron jobs · 8 zero-AI loops" + }, + "migrating-codeigniter-iis-to-openlitespeed": { + "evidence": "17,000-line CI4 · env() fatal" + }, + "my-backup-was-using-someone-elses-api-quota": { + "evidence": "1 TB restic seed · shared rclone quota" + }, + "n8n-v1-to-v2-upgrade-gotchas": { + "evidence": "1.x → 2.40.1 · 7 silent breaks" + }, + "nocodb-sso-is-a-licensed-feature": { + "evidence": "OIDC env accepted · first login crashes" + }, + "one-hostname-public-tracker-sso-dashboard": { + "evidence": "1 host · tracker public, dashboard SSO" + }, + "one-prometheus-for-unraid-synology-and-a-vps": { + "evidence": "3 hosts · 1 prometheus · 0 false panels" + }, + "passbolt-hang-three-failure-modes": { + "evidence": "null fingerprint · 3 failure modes" + }, + "patching-workbench-26-for-mariadb": { + "evidence": "26.7.0 TypeError · 3 patches" + }, + "putting-a-front-door-on-an-app-you-cant-modify": { + "evidence": "5879-byte SPA · 3 injected lines" + }, + "read-only-nocodb-dashboard-for-a-remote-database": { + "evidence": "SNAT source IP · 0 rows copied" + }, + "reading-a-containers-own-api-docs": { + "evidence": "4 docker commands · image is the spec" + }, + "replacing-rdpguard-with-ipban": { + "evidence": "RDPGuard 7.8.7 → IPBan 4.1.0 · 12 IPs" + }, + "running-production-infrastructure-solo": { + "art": "C:/AI/ideogram4/out/sample_prod_169_00001_.png", + "evidence": "162 containers · 3 hosts · 78 compose stacks" + }, + "running-tts-as-a-service-with-token-sidecars": { + "evidence": "tokens expire 10 min / 1 h · sidecars" + }, + "scraping-bot-walled-marketplace-warm-browser-session": { + "evidence": "warm CDP session · split waits" + }, + "self-healing-digital-goods-entitlements": { + "evidence": "5 workflows · NocoDB + n8n + AList" + }, + "self-hosted-speech-to-text-api": { + "evidence": "whisper.cpp large-v3 · ~5x typing" + }, + "self-hosting-mem0-memory-stack": { + "evidence": "mem0 + LiteLLM + pgvector · :20015" + }, + "shipping-an-ai-photo-editor-as-a-wordpress-plugin": { + "evidence": "22 versions · fal.ai async queue" + }, + "smartctl-exit-code-32-skips-the-disks-that-matter": { + "evidence": "rc=32 is not failure · skips bad disks" + }, + "space-reclamation-wasnt-stuck-it-was-waiting": { + "evidence": "121 GiB returned · scheduled 09:29" + }, + "stop-writing-agent-prompts-for-deterministic-work": { + "evidence": "29 straight failures · 1 string compare" + }, + "syncing-a-self-improving-ai-agent-across-machines": { + "evidence": "git-backed profile · manual sync" + }, + "synology-api-401-with-the-correct-password": { + "evidence": "401 twice · 2 causes · 3 commands" + }, + "synology-spreadsheet-api-is-a-container": { + "evidence": "1515 APIs · 4 traps" + }, + "that-dying-ssd-was-just-a-bad-sata-cable": { + "evidence": "WRITE FPDMA timeout · 1 SATA cable" + }, + "the-cause-was-trim-not-the-ssds": { + "evidence": "corruption_errs 27 / 31 · queued TRIM" + }, + "the-nocodb-attachment-that-wouldnt-update": { + "evidence": "300 rows · 1 lookahead regex miss" + }, + "the-upstream-was-deleted-then-came-back-rewritten": { + "evidence": "repo 404 · 233 commits rewrite" + }, + "two-ways-a-javascript-file-stops-working-and-looks-fine": { + "evidence": "shadowed name · let below call" + }, + "unraid-stop-array-hangs-on-swapfile": { + "evidence": "8 GB swapfile pins /mnt/cache" + }, + "upgrading-codeigniter-46-to-47": { + "evidence": "4.6 → 4.7 · 2 unlisted fatals" + }, + "using-chinese-llm-apis-from-malaysia": { + "evidence": "GLM-5.3 · DeepSeek V4 · RMB top-up" + }, + "verifying-a-pdf-report-page-by-page": { + "evidence": "19 pages · every deviation < 2 pt" + }, + "vetting-an-open-source-dependency-before-you-bet-on-it": { + "evidence": "6 checks · grep beats the README" + }, + "when-smart-says-healthy-but-your-raid-is-corrupting-data": { + "evidence": "SMART healthy · checksum 0x8941f998" + }, + "why-500000-lines-of-commit-churn-only-left-230000-in-production": { + "evidence": "518,000 added · 235,000 kept · 5 repos" + }, + "why-chrome-forgets-its-tabs-in-a-container": { + "evidence": "RestoreOnStartup=1 · 70-line keeper" + }, + "why-i-still-bought-a-local-gpu": { + "evidence": "stronger frontier · local for retries + batch" + }, + "why-my-on-chain-nft-art-changed-on-windows": { + "evidence": "autocrlf CRLF · base64 differs" + }, + "why-telegram-bot-notifications-die": { + "evidence": "400 on sendPhoto · getMe fine · IPv6-only DNS" + }, + "why-your-cdp-clicks-silently-fail": { + "evidence": "scroll-behavior:smooth · rect expired" + }, + "why-your-grafana-dashboard-shows-no-data": { + "evidence": "41 panels No data · variable filtered itself" + }, + "why-your-headless-browser-cant-scrape-everything": { + "evidence": "Goofish blocks · Carousell serves" + }, + "your-disk-full-alert-is-lying": { + "evidence": "3% free = 500 GB · alert fires wrong way" + } +} \ No newline at end of file diff --git a/scripts/og-gen/build_art_meta.py b/scripts/og-gen/build_art_meta.py new file mode 100644 index 0000000..a6cb797 --- /dev/null +++ b/scripts/og-gen/build_art_meta.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python3 +"""build_art_meta.py — regenerate scripts/og-gen/art-meta.json's per-slug entries. + +`evidence` is the short factual line printed inside the card's evidence bar. It is +editorial text: every line below quotes a number, log line, file path or command +that exists in that post's body — nothing is derived from the title, and nothing is +invented. The renderer refuses to run for a slug that has no entry, so this file is +also the checklist for the 72-post rollout. + +The two hand-accepted sample entries keep their explicit `art` paths; every other +slug uses the renderer's default `<art-dir>/<slug>.png`, so they need no `art` key. + +Usage: python scripts/og-gen/build_art_meta.py # rewrite art-meta.json + python scripts/og-gen/build_art_meta.py --check # report coverage only +""" +from __future__ import annotations + +import argparse +import json +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] +META = ROOT / "scripts" / "og-gen" / "art-meta.json" + +ABOUT = ( + "Inputs for scripts/og-gen/render_from_art.mjs ('one art, four targets'). One entry per post: " + "`art` = the zero-text base frame (default <art-dir>/<slug>.png), `evidence` = the short factual line " + "shown in the card's evidence bar (REQUIRED, written by hand — never derived), optional `ogTitle_en` / " + "`ogTitle_zh` = shortened display titles for the card only (consultant question 1, option C: the article " + "keeps its real title), optional `tags` = override the three badge tags. Cards render from the post's own " + "frontmatter (title/description/category) unless an ogTitle override is present." +) + +# slug -> evidence line. Each fact is taken from that post's own body. +EVIDENCE: dict[str, str] = { + "adding-a-domain-to-someone-elses-mail-server": "4 DNS records · 554 antispam reject", + "adding-english-mode-to-a-chinese-only-web-app": "no browser API · sub_filter EN mode", + "ai-furniture-compositing-with-flux-kontext": "kontext multi-image · tainted canvas fix", + "authentik-css-greater-than-bug": "1 escaped '>' · CSS silently dropped", + "authentik-forward-auth-gate-wasnt-live": "host 302 · public 200 · 2 ingress layers", + "authentik-major-upgrade-gotchas": "2025.8 → 2026.8 · auth_flow mixup", + "automating-cyberpanel-without-the-ui": "v2 JSON API gone · session + CSRF", + "best-ai-video-generators-2026": "free vs paid · local LTX-2.3 test", + "calibrating-intel-quick-sync-hevc-quality": "ICQ 28-30 cliff · fast == medium", + "chainlink-vrf-v2-lottery-contract": "VRF v2.5 · mock-funding bug", + "docker-reported-exit-0-the-oom-killer-disagreed": "exit 0 · dmesg: 6x cgroup OOM kills", + "does-hevc-actually-shrink-your-files": "NVENC cq27 bigger · x265 -10-22%", + "embedding-fonts-so-a-pdf-looks-the-same-everywhere": "4 families · 8 faces · 2 renderers", + "every-player-stuttered-the-file-was-fine": "5818/5818 intervals · 0 duplicate PTS", + "five-step-ai-roadmap-what-i-actually-run": "whisper + mem0 in production · step 4 skipped", + "fully-on-chain-svg-nfts": "base64 SVG in tokenURI() · mood flip on-chain", + "hardening-a-tor-onion-service": "bind 0.0.0.0:80 denied · onion v3", + "hello-world": "~140-container homelab · self-hosted", + "how-i-built-the-digikedai-telegram-bot": "Telegram + WhatsApp · LiteLLM gateway", + "how-i-host-this-blog": "git push · act_runner · nginx", + "how-i-made-my-own-songs-with-suno-ai": "7 songs · lyrics + prompts", + "how-i-vetted-20-vps-providers-with-parallel-subagents": "20 providers · 3 hours · subagents", + "how-to-verify-a-hosting-provider-before-you-buy": "rdap.org domain age · AUP read", + "i-let-an-agent-manage-my-shopee-vouchers": "mode=propose gate · RM140 voucher unapproved", + "it-reported-success-nothing-had-changed": "12.5 MB of 403 MB · rename never landed", + "jpa-version-field-lost-update": "@Version · stale PUT → 409", + "loop-engineering-without-a-coding-agent": "11 cron jobs · 8 zero-AI loops", + "migrating-codeigniter-iis-to-openlitespeed": "17,000-line CI4 · env() fatal", + "my-backup-was-using-someone-elses-api-quota": "1 TB restic seed · shared rclone quota", + "n8n-v1-to-v2-upgrade-gotchas": "1.x → 2.40.1 · 7 silent breaks", + "nocodb-sso-is-a-licensed-feature": "OIDC env accepted · first login crashes", + "one-hostname-public-tracker-sso-dashboard": "1 host · tracker public, dashboard SSO", + "one-prometheus-for-unraid-synology-and-a-vps": "3 hosts · 1 prometheus · 0 false panels", + "passbolt-hang-three-failure-modes": "null fingerprint · 3 failure modes", + "patching-workbench-26-for-mariadb": "26.7.0 TypeError · 3 patches", + "putting-a-front-door-on-an-app-you-cant-modify": "5879-byte SPA · 3 injected lines", + "read-only-nocodb-dashboard-for-a-remote-database": "SNAT source IP · 0 rows copied", + "reading-a-containers-own-api-docs": "4 docker commands · image is the spec", + "replacing-rdpguard-with-ipban": "RDPGuard 7.8.7 → IPBan 4.1.0 · 12 IPs", + "running-production-infrastructure-solo": "162 containers · 3 hosts · 78 compose stacks", + "running-tts-as-a-service-with-token-sidecars": "tokens expire 10 min / 1 h · sidecars", + "scraping-bot-walled-marketplace-warm-browser-session": "warm CDP session · split waits", + "self-healing-digital-goods-entitlements": "5 workflows · NocoDB + n8n + AList", + "self-hosted-speech-to-text-api": "whisper.cpp large-v3 · ~5x typing", + "self-hosting-mem0-memory-stack": "mem0 + LiteLLM + pgvector · :20015", + "shipping-an-ai-photo-editor-as-a-wordpress-plugin": "22 versions · fal.ai async queue", + "smartctl-exit-code-32-skips-the-disks-that-matter": "rc=32 is not failure · skips bad disks", + "space-reclamation-wasnt-stuck-it-was-waiting": "121 GiB returned · scheduled 09:29", + "stop-writing-agent-prompts-for-deterministic-work": "29 straight failures · 1 string compare", + "syncing-a-self-improving-ai-agent-across-machines": "git-backed profile · manual sync", + "synology-api-401-with-the-correct-password": "401 twice · 2 causes · 3 commands", + "synology-spreadsheet-api-is-a-container": "1515 APIs · 4 traps", + "that-dying-ssd-was-just-a-bad-sata-cable": "WRITE FPDMA timeout · 1 SATA cable", + "the-cause-was-trim-not-the-ssds": "corruption_errs 27 / 31 · queued TRIM", + "the-nocodb-attachment-that-wouldnt-update": "300 rows · 1 lookahead regex miss", + "the-upstream-was-deleted-then-came-back-rewritten": "repo 404 · 233 commits rewrite", + "two-ways-a-javascript-file-stops-working-and-looks-fine": "shadowed name · let below call", + "unraid-stop-array-hangs-on-swapfile": "8 GB swapfile pins /mnt/cache", + "upgrading-codeigniter-46-to-47": "4.6 → 4.7 · 2 unlisted fatals", + "using-chinese-llm-apis-from-malaysia": "GLM-5.3 · DeepSeek V4 · RMB top-up", + "verifying-a-pdf-report-page-by-page": "19 pages · every deviation < 2 pt", + "vetting-an-open-source-dependency-before-you-bet-on-it": "6 checks · grep beats the README", + "when-smart-says-healthy-but-your-raid-is-corrupting-data": "SMART healthy · checksum 0x8941f998", + "why-500000-lines-of-commit-churn-only-left-230000-in-production": "518,000 added · 235,000 kept · 5 repos", + "why-chrome-forgets-its-tabs-in-a-container": "RestoreOnStartup=1 · 70-line keeper", + "why-i-still-bought-a-local-gpu": "stronger frontier · local for retries + batch", + "why-my-on-chain-nft-art-changed-on-windows": "autocrlf CRLF · base64 differs", + "why-telegram-bot-notifications-die": "400 on sendPhoto · getMe fine · IPv6-only DNS", + "why-your-cdp-clicks-silently-fail": "scroll-behavior:smooth · rect expired", + "why-your-grafana-dashboard-shows-no-data": "41 panels No data · variable filtered itself", + "why-your-headless-browser-cant-scrape-everything": "Goofish blocks · Carousell serves", + "your-disk-full-alert-is-lying": "3% free = 500 GB · alert fires wrong way", +} + +# The two consultant samples keep their explicit frame paths. +ART_OVERRIDES = { + "running-production-infrastructure-solo": "C:/AI/ideogram4/out/sample_prod_169_00001_.png", + "docker-reported-exit-0-the-oom-killer-disagreed": "C:/AI/ideogram4/out/sample_oom_169_00001_.png", +} + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--check", action="store_true") + args = ap.parse_args() + + posts = {p.stem for p in (ROOT / "src" / "content" / "posts").glob("*.md")} + missing = posts - set(EVIDENCE) + extra = set(EVIDENCE) - posts + print(f"posts {len(posts)} · evidence {len(EVIDENCE)} · missing {sorted(missing)} · extra {sorted(extra)}") + if missing or extra: + raise SystemExit("coverage mismatch — fix the map before rendering") + if args.check: + dupes = [e for e in EVIDENCE.values() if list(EVIDENCE.values()).count(e) > 1] + print(f"duplicate evidence lines: {sorted(set(dupes)) or 'none'}") + print(f"longest line: {max(len(e) for e in EVIDENCE.values())} chars") + return + + out: dict = {"_about": ABOUT, "_status": f"{len(EVIDENCE)} of {len(posts)} posts have a hand-written evidence line; " + "base art is generated from C:/AI/ideogram4/captions/<slug>.json"} + for slug in sorted(EVIDENCE): + entry: dict = {} + if slug in ART_OVERRIDES: + entry["art"] = ART_OVERRIDES[slug] + entry["evidence"] = EVIDENCE[slug] + out[slug] = entry + META.write_text(json.dumps(out, ensure_ascii=False, indent=1), encoding="utf-8") + print(f"wrote {META} ({len(EVIDENCE)} entries)") + + +if __name__ == "__main__": + main() diff --git a/scripts/og-gen/captions/adding-a-domain-to-someone-elses-mail-server.json b/scripts/og-gen/captions/adding-a-domain-to-someone-elses-mail-server.json new file mode 100644 index 0000000..c225eec --- /dev/null +++ b/scripts/og-gen/captions/adding-a-domain-to-someone-elses-mail-server.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with warm amber-orange (#fbbf24) diagnostic warning glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#FBBF24","#F59E0B","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A set of four brass routing vanes mounted along a dark obsidian mail chute, three of them steering translucent envelopes cleanly away, while the fourth channel is physically sealed by a solid black baffle plate. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/adding-english-mode-to-a-chinese-only-web-app.json b/scripts/og-gen/captions/adding-english-mode-to-a-chinese-only-web-app.json new file mode 100644 index 0000000..2552509 --- /dev/null +++ b/scripts/og-gen/captions/adding-english-mode-to-a-chinese-only-web-app.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with crisp cobalt blue (#295cff) and ice-white edge highlights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#295CFF","#E8EEFF","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A monolithic dark application cube whose sealed front face carries two sliding glass plaques bearing different scripts, the second plaque being lifted into position by a precision gantry clamp at the doorway. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/ai-furniture-compositing-with-flux-kontext.json b/scripts/og-gen/captions/ai-furniture-compositing-with-flux-kontext.json new file mode 100644 index 0000000..7c7215c --- /dev/null +++ b/scripts/og-gen/captions/ai-furniture-compositing-with-flux-kontext.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A matte dark lounge chair module seated into a cut-away room diorama cube, its original studio backdrop peeling away as a curled translucent film sheet. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/authentik-css-greater-than-bug.json b/scripts/og-gen/captions/authentik-css-greater-than-bug.json new file mode 100644 index 0000000..e9a5506 --- /dev/null +++ b/scripts/og-gen/captions/authentik-css-greater-than-bug.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A single oversized angular chevron wedge jammed into a hairline seam of a frosted glass control panel, splitting the panel's edge glow into misaligned fragments. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/authentik-forward-auth-gate-wasnt-live.json b/scripts/og-gen/captions/authentik-forward-auth-gate-wasnt-live.json new file mode 100644 index 0000000..06184ac --- /dev/null +++ b/scripts/og-gen/captions/authentik-forward-auth-gate-wasnt-live.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"Two gate arches standing in series, the inner arch sealed by a tight blue light curtain while the outer arch hangs fully open with a stream of light passing straight through it. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/authentik-major-upgrade-gotchas.json b/scripts/og-gen/captions/authentik-major-upgrade-gotchas.json new file mode 100644 index 0000000..3383f95 --- /dev/null +++ b/scripts/og-gen/captions/authentik-major-upgrade-gotchas.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A stack of obsidian anniversary plinths where the topmost slab has just been swapped in, its mounting pegs misaligned so three small crystal key tags tumble out of their sockets. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/automating-cyberpanel-without-the-ui.json b/scripts/og-gen/captions/automating-cyberpanel-without-the-ui.json new file mode 100644 index 0000000..529779a --- /dev/null +++ b/scripts/og-gen/captions/automating-cyberpanel-without-the-ui.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A slim robotic probe arm reaching behind the polished facade of a dark server control panel, plugging into exposed circuit contacts concealed behind the front glass. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/best-ai-video-generators-2026.json b/scripts/og-gen/captions/best-ai-video-generators-2026.json new file mode 100644 index 0000000..3764c0b --- /dev/null +++ b/scripts/og-gen/captions/best-ai-video-generators-2026.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with neon cyan (#22d3ee) and electric violet-magenta (#a855f7) synaptic glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#22D3EE","#A855F7","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A rack of five glowing film reels of differing sizes, one heavy obsidian reel grounded on a heatsink pedestal while the others float as translucent holograms trailed by thin price-tag slivers. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/calibrating-intel-quick-sync-hevc-quality.json b/scripts/og-gen/captions/calibrating-intel-quick-sync-hevc-quality.json new file mode 100644 index 0000000..ef0cb70 --- /dev/null +++ b/scripts/og-gen/captions/calibrating-intel-quick-sync-hevc-quality.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with electric cyan (#22d3ee) calibration light and soft ultraviolet spill and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#22D3EE","#7C5CFF","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A 3D topographic luminous video waveform mountain dropping off a 90-degree vertical cliff edge marked at 28, flanked by two perfectly identical overlapping optical calibration prisms. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/chainlink-vrf-v2-lottery-contract.json b/scripts/og-gen/captions/chainlink-vrf-v2-lottery-contract.json new file mode 100644 index 0000000..2a6dfdc --- /dev/null +++ b/scripts/og-gen/captions/chainlink-vrf-v2-lottery-contract.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with translucent emerald (#10b981) prism light split into cyan fringes and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#10B981","#22D3EE","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A transparent mechanical drum sealed inside a hexagonal glass case, its tumbling sphere fed by a chain of interlocked machined links, a notarized proof disc hovering just outside the case. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/docker-reported-exit-0-the-oom-killer-disagreed.json b/scripts/og-gen/captions/docker-reported-exit-0-the-oom-killer-disagreed.json new file mode 100644 index 0000000..fe92df4 --- /dev/null +++ b/scripts/og-gen/captions/docker-reported-exit-0-the-oom-killer-disagreed.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A translucent glass server cube displaying a deceptive green heartbeat light while a razor-sharp crimson beam slices horizontally through its bottom core, scattering fractured memory crystals. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/does-hevc-actually-shrink-your-files.json b/scripts/og-gen/captions/does-hevc-actually-shrink-your-files.json new file mode 100644 index 0000000..2e58cfb --- /dev/null +++ b/scripts/og-gen/captions/does-hevc-actually-shrink-your-files.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with electric cyan (#22d3ee) calibration light and soft ultraviolet spill and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#22D3EE","#7C5CFF","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"Three matched glass vials of compressed film ribbon standing on a dark calibration scale, two visibly shorter than their source capsule while the third swells larger than the capsule it was poured from. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/embedding-fonts-so-a-pdf-looks-the-same-everywhere.json b/scripts/og-gen/captions/embedding-fonts-so-a-pdf-looks-the-same-everywhere.json new file mode 100644 index 0000000..b8b8bc2 --- /dev/null +++ b/scripts/og-gen/captions/embedding-fonts-so-a-pdf-looks-the-same-everywhere.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with crisp cobalt blue (#295cff) and ice-white edge highlights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#295CFF","#E8EEFF","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A sealed obsidian press frame holding one smooth unmarked crystal sheet, lit identically through three differently angled viewing ports. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/every-player-stuttered-the-file-was-fine.json b/scripts/og-gen/captions/every-player-stuttered-the-file-was-fine.json new file mode 100644 index 0000000..4cdc3c5 --- /dev/null +++ b/scripts/og-gen/captions/every-player-stuttered-the-file-was-fine.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A perfectly aligned dark film canister whose internal sprocket teeth sit one notch out of phase, casting a doubled ghost frame onto a translucent projection screen. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/five-step-ai-roadmap-what-i-actually-run.json b/scripts/og-gen/captions/five-step-ai-roadmap-what-i-actually-run.json new file mode 100644 index 0000000..34be1ba --- /dev/null +++ b/scripts/og-gen/captions/five-step-ai-roadmap-what-i-actually-run.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with neon cyan (#22d3ee) and electric violet-magenta (#a855f7) synaptic glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#22D3EE","#A855F7","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A five-tier architectural staircase in dark graphite, the middle tiers brightly illuminated with active hardware racks while the speculative top tiers remain skeletal wireframes. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/fully-on-chain-svg-nfts.json b/scripts/og-gen/captions/fully-on-chain-svg-nfts.json new file mode 100644 index 0000000..5de673f --- /dev/null +++ b/scripts/og-gen/captions/fully-on-chain-svg-nfts.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with translucent emerald (#10b981) prism light split into cyan fringes and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#10B981","#22D3EE","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A crystalline art plaque sealed completely inside a transparent contract block, its imagery carved directly into the block's inner facets rather than mounted on any external frame. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/hardening-a-tor-onion-service.json b/scripts/og-gen/captions/hardening-a-tor-onion-service.json new file mode 100644 index 0000000..3ecf3da --- /dev/null +++ b/scripts/og-gen/captions/hardening-a-tor-onion-service.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A matte black multi-shell relay tower of stacked concentric domes, each layer locked by a brass ring, with a single narrow sealed ingress slit glowing soft violet. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/hello-world.json b/scripts/og-gen/captions/hello-world.json new file mode 100644 index 0000000..98c413a --- /dev/null +++ b/scripts/og-gen/captions/hello-world.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with warm amber-orange (#fbbf24) diagnostic warning glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#FBBF24","#F59E0B","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A minimal dark workbench holding one glowing filament cursor hovering above a blank obsidian slate, first light spilling from a small pulsing indicator at its corner. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/how-i-built-the-digikedai-telegram-bot.json b/scripts/og-gen/captions/how-i-built-the-digikedai-telegram-bot.json new file mode 100644 index 0000000..39c4ccf --- /dev/null +++ b/scripts/og-gen/captions/how-i-built-the-digikedai-telegram-bot.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A folded paper-plane shaped obsidian drone docked at a glowing storefront kiosk module, tethered by a luminous thread to a private gateway pylon behind it. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/how-i-host-this-blog.json b/scripts/og-gen/captions/how-i-host-this-blog.json new file mode 100644 index 0000000..b1c3a24 --- /dev/null +++ b/scripts/og-gen/captions/how-i-host-this-blog.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"An assembly line of three interlocking obsidian machine modules — a document press, a stamping arm and a delivery chute — feeding a sealed glass site cube at the end of the rail. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/how-i-made-my-own-songs-with-suno-ai.json b/scripts/og-gen/captions/how-i-made-my-own-songs-with-suno-ai.json new file mode 100644 index 0000000..18a111e --- /dev/null +++ b/scripts/og-gen/captions/how-i-made-my-own-songs-with-suno-ai.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A shard of amber-lit vinyl suspended inside a dark circular resonator hall, seven smaller song discs orbiting it in a single ring. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/how-i-vetted-20-vps-providers-with-parallel-subagents.json b/scripts/og-gen/captions/how-i-vetted-20-vps-providers-with-parallel-subagents.json new file mode 100644 index 0000000..9a8859b --- /dev/null +++ b/scripts/og-gen/captions/how-i-vetted-20-vps-providers-with-parallel-subagents.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"Twenty identical dark server tiles fanned out along a scoring rail, a mechanical grading carriage sweeping across them and stamping pass or fail notches into each tile face. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/how-to-verify-a-hosting-provider-before-you-buy.json b/scripts/og-gen/captions/how-to-verify-a-hosting-provider-before-you-buy.json new file mode 100644 index 0000000..8f3b89c --- /dev/null +++ b/scripts/og-gen/captions/how-to-verify-a-hosting-provider-before-you-buy.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with electric cyan (#22d3ee) calibration light and soft ultraviolet spill and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#22D3EE","#7C5CFF","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A polished glass loupe hovering over a rack of miniature server towers, revealing a hairline crack hidden inside one tower's casing. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/i-let-an-agent-manage-my-shopee-vouchers.json b/scripts/og-gen/captions/i-let-an-agent-manage-my-shopee-vouchers.json new file mode 100644 index 0000000..954d898 --- /dev/null +++ b/scripts/og-gen/captions/i-let-an-agent-manage-my-shopee-vouchers.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with neon cyan (#22d3ee) and electric violet-magenta (#a855f7) synaptic glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#22D3EE","#A855F7","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"An intricate rotating glass agent decision loop where a stray orange pulse vector veers off the blueprint track and materializes a glowing geometric voucher card in mid-air. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/it-reported-success-nothing-had-changed.json b/scripts/og-gen/captions/it-reported-success-nothing-had-changed.json new file mode 100644 index 0000000..51b8544 --- /dev/null +++ b/scripts/og-gen/captions/it-reported-success-nothing-had-changed.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A rotating brass checkmark stamp pressed onto an empty obsidian pipe segment that carries no flow, with the pipe's mouth visibly dry behind the impression. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/jpa-version-field-lost-update.json b/scripts/og-gen/captions/jpa-version-field-lost-update.json new file mode 100644 index 0000000..c95290f --- /dev/null +++ b/scripts/og-gen/captions/jpa-version-field-lost-update.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with crisp cobalt blue (#295cff) and ice-white edge highlights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#295CFF","#E8EEFF","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"Two opposing piston arms pressing on the same crystal data block, one arm halted by a mechanical version latch snapping shut with a red-lit click. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/loop-engineering-without-a-coding-agent.json b/scripts/og-gen/captions/loop-engineering-without-a-coding-agent.json new file mode 100644 index 0000000..7aa11cd --- /dev/null +++ b/scripts/og-gen/captions/loop-engineering-without-a-coding-agent.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"Eleven concentric circular obsidian gear loops rotating in mechanical harmony, eight solid pure crystal clockwork rings alongside three subtle neural pulse rings, operating autonomously. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/migrating-codeigniter-iis-to-openlitespeed.json b/scripts/og-gen/captions/migrating-codeigniter-iis-to-openlitespeed.json new file mode 100644 index 0000000..58bd3f3 --- /dev/null +++ b/scripts/og-gen/captions/migrating-codeigniter-iis-to-openlitespeed.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with crisp cobalt blue (#295cff) and ice-white edge highlights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#295CFF","#E8EEFF","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A functional app engine block being lifted off a heavy bolted window-frame chassis and reseated onto a taller lightweight finned frame, two loose dark bolts falling behind it. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/my-backup-was-using-someone-elses-api-quota.json b/scripts/og-gen/captions/my-backup-was-using-someone-elses-api-quota.json new file mode 100644 index 0000000..5126fb8 --- /dev/null +++ b/scripts/og-gen/captions/my-backup-was-using-someone-elses-api-quota.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with warm amber-orange (#fbbf24) diagnostic warning glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#FBBF24","#F59E0B","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A massive high-throughput data conduit bottlenecked at a narrow glowing amber hourglass valve, releasing only single sparse droplets into a dark repository vault below. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/n8n-v1-to-v2-upgrade-gotchas.json b/scripts/og-gen/captions/n8n-v1-to-v2-upgrade-gotchas.json new file mode 100644 index 0000000..c3cfee3 --- /dev/null +++ b/scripts/og-gen/captions/n8n-v1-to-v2-upgrade-gotchas.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A rail of plain obsidian cube nodes rolling forward while seven of their connector pins hang loose and sparking beneath the track. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/nocodb-sso-is-a-licensed-feature.json b/scripts/og-gen/captions/nocodb-sso-is-a-licensed-feature.json new file mode 100644 index 0000000..e114b43 --- /dev/null +++ b/scripts/og-gen/captions/nocodb-sso-is-a-licensed-feature.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with warm amber-orange (#fbbf24) diagnostic warning glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#FBBF24","#F59E0B","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A recessed keyhole plate on an otherwise sealed obsidian cabinet, faint cyan glow leaking from the plate's seam while the keyhole itself is blocked by a solid brass plug. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/one-hostname-public-tracker-sso-dashboard.json b/scripts/og-gen/captions/one-hostname-public-tracker-sso-dashboard.json new file mode 100644 index 0000000..82c2359 --- /dev/null +++ b/scripts/og-gen/captions/one-hostname-public-tracker-sso-dashboard.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A single dark gateway arch splitting into two passages, a wide open slit of light on one side and a latched vault door with a rotating seal on the other. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/one-prometheus-for-unraid-synology-and-a-vps.json b/scripts/og-gen/captions/one-prometheus-for-unraid-synology-and-a-vps.json new file mode 100644 index 0000000..a198d16 --- /dev/null +++ b/scripts/og-gen/captions/one-prometheus-for-unraid-synology-and-a-vps.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A single radiant central telemetry beacon sending precision laser monitoring vectors to three distinct hexagonal platform nodes, illuminating transparent storage volumes with holographic metrics. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/passbolt-hang-three-failure-modes.json b/scripts/og-gen/captions/passbolt-hang-three-failure-modes.json new file mode 100644 index 0000000..8b5f0dc --- /dev/null +++ b/scripts/og-gen/captions/passbolt-hang-three-failure-modes.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A brass padlock seal hovering over an obsidian vault door whose three latching bolts are stuck mid-turn, a stalled orange glow pulsing in the keyway. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/patching-workbench-26-for-mariadb.json b/scripts/og-gen/captions/patching-workbench-26-for-mariadb.json new file mode 100644 index 0000000..031f303 --- /dev/null +++ b/scripts/og-gen/captions/patching-workbench-26-for-mariadb.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A precision instrument module whose connector plate has been re-pinned by three hand-cut copper jumpers bridging over its original sealed socket. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/putting-a-front-door-on-an-app-you-cant-modify.json b/scripts/og-gen/captions/putting-a-front-door-on-an-app-you-cant-modify.json new file mode 100644 index 0000000..a5581cf --- /dev/null +++ b/scripts/og-gen/captions/putting-a-front-door-on-an-app-you-cant-modify.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A new bilingual stone lintel and portal erected in front of a sealed monolithic app block, three thin luminous cables threading through a drilled seam into its interior. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/read-only-nocodb-dashboard-for-a-remote-database.json b/scripts/og-gen/captions/read-only-nocodb-dashboard-for-a-remote-database.json new file mode 100644 index 0000000..873076a --- /dev/null +++ b/scripts/og-gen/captions/read-only-nocodb-dashboard-for-a-remote-database.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A glass observation window mounted over a distant obsidian data silo, the viewing frame open while every latch on the data hatch itself stays closed. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/reading-a-containers-own-api-docs.json b/scripts/og-gen/captions/reading-a-containers-own-api-docs.json new file mode 100644 index 0000000..d242222 --- /dev/null +++ b/scripts/og-gen/captions/reading-a-containers-own-api-docs.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with warm amber-orange (#fbbf24) diagnostic warning glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#FBBF24","#F59E0B","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A scanning beam unfolding a lathe-cut obsidian shell to expose its printed inner circuit schematics, four small inspection tools laid out on the dark bench beside it. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/replacing-rdpguard-with-ipban.json b/scripts/og-gen/captions/replacing-rdpguard-with-ipban.json new file mode 100644 index 0000000..09d6cfe --- /dev/null +++ b/scripts/og-gen/captions/replacing-rdpguard-with-ipban.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"An old shield plate lifted out of a dark doorway as a tighter woven black mesh gate is lowered into the same frame, grey marker pins fenced off outside it. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/running-production-infrastructure-solo.json b/scripts/og-gen/captions/running-production-infrastructure-solo.json new file mode 100644 index 0000000..0b0392a --- /dev/null +++ b/scripts/og-gen/captions/running-production-infrastructure-solo.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"Three interconnected matte-black server monoliths in isometric perspective surrounded by a dense floating matrix of micro-scale glowing glass container cubes with emerald heartbeat lights, routed by blue optical fiber conduits into one master control node. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/running-tts-as-a-service-with-token-sidecars.json b/scripts/og-gen/captions/running-tts-as-a-service-with-token-sidecars.json new file mode 100644 index 0000000..32985aa --- /dev/null +++ b/scripts/og-gen/captions/running-tts-as-a-service-with-token-sidecars.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with neon cyan (#22d3ee) and electric violet-magenta (#a855f7) synaptic glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#22D3EE","#A855F7","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A central obsidian voice resonance horn flanked by two small paired fuel canisters that replenish its expiring energy keys through thin silver tubes. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/scraping-bot-walled-marketplace-warm-browser-session.json b/scripts/og-gen/captions/scraping-bot-walled-marketplace-warm-browser-session.json new file mode 100644 index 0000000..983f57d --- /dev/null +++ b/scripts/og-gen/captions/scraping-bot-walled-marketplace-warm-browser-session.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with crisp cobalt blue (#295cff) and ice-white edge highlights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#295CFF","#E8EEFF","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A dexterous glass gripper carrying a warm amber-lit browser window pane through a walled dark tunnel gate, holding the pane at a preserved angle. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/self-healing-digital-goods-entitlements.json b/scripts/og-gen/captions/self-healing-digital-goods-entitlements.json new file mode 100644 index 0000000..c3883eb --- /dev/null +++ b/scripts/og-gen/captions/self-healing-digital-goods-entitlements.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A multi-stage floating acrylic workflow pathway with five interlocking diamond gates, automatically bridging broken link fragments with glowing golden solder. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/self-hosted-speech-to-text-api.json b/scripts/og-gen/captions/self-hosted-speech-to-text-api.json new file mode 100644 index 0000000..226805a --- /dev/null +++ b/scripts/og-gen/captions/self-hosted-speech-to-text-api.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A floating obsidian microphone capsule inside a soundproof dark chamber, its waveform converted into clean engraved grooves on a crystal tablet beside it. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/self-hosting-mem0-memory-stack.json b/scripts/og-gen/captions/self-hosting-mem0-memory-stack.json new file mode 100644 index 0000000..fa56d30 --- /dev/null +++ b/scripts/og-gen/captions/self-hosting-mem0-memory-stack.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A stack of three interlocking transparent memory capsules above a glowing vector-index lattice core, each capsule holding suspended point-cloud nodes. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/shipping-an-ai-photo-editor-as-a-wordpress-plugin.json b/scripts/og-gen/captions/shipping-an-ai-photo-editor-as-a-wordpress-plugin.json new file mode 100644 index 0000000..0de85e9 --- /dev/null +++ b/scripts/og-gen/captions/shipping-an-ai-photo-editor-as-a-wordpress-plugin.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A brushed dark modular cartridge docked into a slot on a wall of stacked obsidian building blocks, a neat pile of thin shims beside it with one cracked shim glowing red. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/smartctl-exit-code-32-skips-the-disks-that-matter.json b/scripts/og-gen/captions/smartctl-exit-code-32-skips-the-disks-that-matter.json new file mode 100644 index 0000000..e6cf6af --- /dev/null +++ b/scripts/og-gen/captions/smartctl-exit-code-32-skips-the-disks-that-matter.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with warm amber-orange (#fbbf24) diagnostic warning glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#FBBF24","#F59E0B","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A row of dark platter cartridges on an inspection rail where a sorting gate waves the most worn cartridge straight past into an unchecked waste channel. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/space-reclamation-wasnt-stuck-it-was-waiting.json b/scripts/og-gen/captions/space-reclamation-wasnt-stuck-it-was-waiting.json new file mode 100644 index 0000000..3876d45 --- /dev/null +++ b/scripts/og-gen/captions/space-reclamation-wasnt-stuck-it-was-waiting.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A massive filesystem disk cylinder slowly draining fragmented blue blocks into an obsidian reclamation pit, guided by a precision holographic timer dial counting down. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/stop-writing-agent-prompts-for-deterministic-work.json b/scripts/og-gen/captions/stop-writing-agent-prompts-for-deterministic-work.json new file mode 100644 index 0000000..d702f74 --- /dev/null +++ b/scripts/og-gen/captions/stop-writing-agent-prompts-for-deterministic-work.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with warm amber-orange (#fbbf24) diagnostic warning glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#FBBF24","#F59E0B","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"An oversized ornate mechanical gear train fused to a tiny simple toggle switch, a strand of glowing ribbon tangled uselessly around the gear teeth. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/syncing-a-self-improving-ai-agent-across-machines.json b/scripts/og-gen/captions/syncing-a-self-improving-ai-agent-across-machines.json new file mode 100644 index 0000000..c1db8db --- /dev/null +++ b/scripts/og-gen/captions/syncing-a-self-improving-ai-agent-across-machines.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"Two obsidian agent cores on separate pedestals sharing one translucent memory ribbon strung between them, mirrored facets echoing each other. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/synology-api-401-with-the-correct-password.json b/scripts/og-gen/captions/synology-api-401-with-the-correct-password.json new file mode 100644 index 0000000..5394ce9 --- /dev/null +++ b/scripts/og-gen/captions/synology-api-401-with-the-correct-password.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with warm amber-orange (#fbbf24) diagnostic warning glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#FBBF24","#F59E0B","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A brass key entered perfectly into a dark lock plate that still glows red, two different fault traces visible behind a diagnostic glass side panel. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/synology-spreadsheet-api-is-a-container.json b/scripts/og-gen/captions/synology-spreadsheet-api-is-a-container.json new file mode 100644 index 0000000..f754988 --- /dev/null +++ b/scripts/og-gen/captions/synology-spreadsheet-api-is-a-container.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A grid of obsidian spreadsheet cells housed inside a sealed service container box, four small barricade plates standing around its access hatches. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/that-dying-ssd-was-just-a-bad-sata-cable.json b/scripts/og-gen/captions/that-dying-ssd-was-just-a-bad-sata-cable.json new file mode 100644 index 0000000..5821ced --- /dev/null +++ b/scripts/og-gen/captions/that-dying-ssd-was-just-a-bad-sata-cable.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"An unbranded solid-state drive slab lying clean and healthy on an inspection cradle beside a single frayed ribbon cable whose exposed conductor is the only damaged element in the frame. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/the-cause-was-trim-not-the-ssds.json b/scripts/og-gen/captions/the-cause-was-trim-not-the-ssds.json new file mode 100644 index 0000000..ed99113 --- /dev/null +++ b/scripts/og-gen/captions/the-cause-was-trim-not-the-ssds.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"Two identical crystal data platters both striped by the same glowing zero-band across their surface, a hidden firmware splinter visible in the shared substrate between them. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/the-nocodb-attachment-that-wouldnt-update.json b/scripts/og-gen/captions/the-nocodb-attachment-that-wouldnt-update.json new file mode 100644 index 0000000..8f4a342 --- /dev/null +++ b/scripts/og-gen/captions/the-nocodb-attachment-that-wouldnt-update.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with warm amber-orange (#fbbf24) diagnostic warning glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#FBBF24","#F59E0B","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"Two nearly identical obsidian tiles slotted into the same dark rail, the older tile stubbornly holding its groove while a translucent duplicate hovers beside it. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/the-upstream-was-deleted-then-came-back-rewritten.json b/scripts/og-gen/captions/the-upstream-was-deleted-then-came-back-rewritten.json new file mode 100644 index 0000000..ff84f5d --- /dev/null +++ b/scripts/og-gen/captions/the-upstream-was-deleted-then-came-back-rewritten.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"An empty hollow container shell sitting on a dark shelf beside a freshly rebuilt shell of a brighter alloy, the new one still gleaming and unweathered. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/two-ways-a-javascript-file-stops-working-and-looks-fine.json b/scripts/og-gen/captions/two-ways-a-javascript-file-stops-working-and-looks-fine.json new file mode 100644 index 0000000..b9a4d0c --- /dev/null +++ b/scripts/og-gen/captions/two-ways-a-javascript-file-stops-working-and-looks-fine.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with crisp cobalt blue (#295cff) and ice-white edge highlights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#295CFF","#E8EEFF","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A luminous display panel that looks perfectly alive while two of its internal conduits are severed beneath the unbroken glass face. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/unraid-stop-array-hangs-on-swapfile.json b/scripts/og-gen/captions/unraid-stop-array-hangs-on-swapfile.json new file mode 100644 index 0000000..89cd4ba --- /dev/null +++ b/scripts/og-gen/captions/unraid-stop-array-hangs-on-swapfile.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A heavy obsidian disk array carriage halted on its rails, an eight-segment anchor block clamping one wheel to the floor frame. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/upgrading-codeigniter-46-to-47.json b/scripts/og-gen/captions/upgrading-codeigniter-46-to-47.json new file mode 100644 index 0000000..bef75e9 --- /dev/null +++ b/scripts/og-gen/captions/upgrading-codeigniter-46-to-47.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with warm amber-orange (#fbbf24) diagnostic warning glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#FBBF24","#F59E0B","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"An obsidian upgrade manifold whose eight sealed ports run cold and silent while two open ports vent hot red vapour. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/using-chinese-llm-apis-from-malaysia.json b/scripts/og-gen/captions/using-chinese-llm-apis-from-malaysia.json new file mode 100644 index 0000000..18d9718 --- /dev/null +++ b/scripts/og-gen/captions/using-chinese-llm-apis-from-malaysia.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with neon cyan (#22d3ee) and electric violet-magenta (#a855f7) synaptic glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#22D3EE","#A855F7","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A sealed gateway pylon with a currency-shaped token slot and a verification bell, feeding a distant dark lattice of model cores through a long cable run. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/verifying-a-pdf-report-page-by-page.json b/scripts/og-gen/captions/verifying-a-pdf-report-page-by-page.json new file mode 100644 index 0000000..55a4a82 --- /dev/null +++ b/scripts/og-gen/captions/verifying-a-pdf-report-page-by-page.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with crisp cobalt blue (#295cff) and ice-white edge highlights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#295CFF","#E8EEFF","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"Nineteen identically cut crystal page plates fanned in a stack on a dark calibration table while a precision measuring caliper checks each plate's edge alignment. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/vetting-an-open-source-dependency-before-you-bet-on-it.json b/scripts/og-gen/captions/vetting-an-open-source-dependency-before-you-bet-on-it.json new file mode 100644 index 0000000..80e0cba --- /dev/null +++ b/scripts/og-gen/captions/vetting-an-open-source-dependency-before-you-bet-on-it.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A dark dependency crate opened on a market bench, six inspection checkpoints laid out beside it and one hollow false-bottomed compartment exposed. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/when-smart-says-healthy-but-your-raid-is-corrupting-data.json b/scripts/og-gen/captions/when-smart-says-healthy-but-your-raid-is-corrupting-data.json new file mode 100644 index 0000000..485b13b --- /dev/null +++ b/scripts/og-gen/captions/when-smart-says-healthy-but-your-raid-is-corrupting-data.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"Two clean-looking mirrored disk platters certified with green tags while a fine hairline of corrupted static seeps from the seam between them. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/why-500000-lines-of-commit-churn-only-left-230000-in-production.json b/scripts/og-gen/captions/why-500000-lines-of-commit-churn-only-left-230000-in-production.json new file mode 100644 index 0000000..e85995e --- /dev/null +++ b/scripts/og-gen/captions/why-500000-lines-of-commit-churn-only-left-230000-in-production.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with crisp cobalt blue (#295cff) and ice-white edge highlights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#295CFF","#E8EEFF","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A wide extrusion nozzle laying down an enormous glowing filament coil while a narrow precision sieve beneath it lets only a smaller refined strand fall into a production crate. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/why-chrome-forgets-its-tabs-in-a-container.json b/scripts/og-gen/captions/why-chrome-forgets-its-tabs-in-a-container.json new file mode 100644 index 0000000..98b8903 --- /dev/null +++ b/scripts/og-gen/captions/why-chrome-forgets-its-tabs-in-a-container.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A dark browser window frame whose restored tab plates are scattered outside its own container wall, a small keeper bracket bridging the seam. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/why-i-still-bought-a-local-gpu.json b/scripts/og-gen/captions/why-i-still-bought-a-local-gpu.json new file mode 100644 index 0000000..4d33aab --- /dev/null +++ b/scripts/og-gen/captions/why-i-still-bought-a-local-gpu.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with neon cyan (#22d3ee) and electric violet-magenta (#a855f7) synaptic glow and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#22D3EE","#A855F7","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A dense obsidian accelerator block seated in its own heatsink cradle on a workbench, radiating private warm light while cloud-tethered terminals hang faintly in the dark background. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/why-my-on-chain-nft-art-changed-on-windows.json b/scripts/og-gen/captions/why-my-on-chain-nft-art-changed-on-windows.json new file mode 100644 index 0000000..133a3e2 --- /dev/null +++ b/scripts/og-gen/captions/why-my-on-chain-nft-art-changed-on-windows.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with translucent emerald (#10b981) prism light split into cyan fringes and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#10B981","#22D3EE","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"An identical carved art plaque duplicated on two colour-matched plinths, one copy shifted by an extra invisible notch at every edge. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/why-telegram-bot-notifications-die.json b/scripts/og-gen/captions/why-telegram-bot-notifications-die.json new file mode 100644 index 0000000..44d8749 --- /dev/null +++ b/scripts/og-gen/captions/why-telegram-bot-notifications-die.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A folded paper-plane drone stopped at a narrow dark archway, its front slot jammed with a crumpled translucent strip and a red glow bleeding out. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/why-your-cdp-clicks-silently-fail.json b/scripts/og-gen/captions/why-your-cdp-clicks-silently-fail.json new file mode 100644 index 0000000..3f6869f --- /dev/null +++ b/scripts/og-gen/captions/why-your-cdp-clicks-silently-fail.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A high-precision robotic cursor pointer clicking onto a translucent glass button that has already shifted away on an invisible kinetic wave, triggering no resonance. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/why-your-grafana-dashboard-shows-no-data.json b/scripts/og-gen/captions/why-your-grafana-dashboard-shows-no-data.json new file mode 100644 index 0000000..c0c9b29 --- /dev/null +++ b/scripts/og-gen/captions/why-your-grafana-dashboard-shows-no-data.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A wide wall of forty-one dark telemetry panels all reading blank, one small self-referential filter disc visibly stuck against its own inlet. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/why-your-headless-browser-cant-scrape-everything.json b/scripts/og-gen/captions/why-your-headless-browser-cant-scrape-everything.json new file mode 100644 index 0000000..ce8fa9d --- /dev/null +++ b/scripts/og-gen/captions/why-your-headless-browser-cant-scrape-everything.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with emerald green (#4ade80) status nodes and gold (#f5c24a) telemetry glints and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#F5C24A","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"Two market booths side by side, one sealed shut behind a wall of blank grey panels while the other stays open with warm goods faintly visible inside. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/captions/your-disk-full-alert-is-lying.json b/scripts/og-gen/captions/your-disk-full-alert-is-lying.json new file mode 100644 index 0000000..2e7f78d --- /dev/null +++ b/scripts/og-gen/captions/your-disk-full-alert-is-lying.json @@ -0,0 +1 @@ +{"high_level_description":"A dark-mode 3D cyber-bento concept art and technical blueprint schematic of a single piece of industrial hardware. The main high-detail 3D focal subject is positioned strictly on the right side of the canvas, leaving expansive clean dark negative space across the entire left side.","style_description":{"aesthetics":"modern dark cyber-bento, industrial precision, sleek machined surfaces, raytraced ambient occlusion","lighting":"volumetric studio rim lighting in royal cobalt blue (#4d82ff) with vibrant emerald green (#4ade80) status indicator lights and subtle cyan glow","medium":"3d_render","art_style":"octane render, matte obsidian hardware, frosted acrylic glass, technical blueprint vector lines","color_palette":["#0B0F19","#111827","#1E293B","#4ADE80","#3FB950","#4D82FF"]},"compositional_deconstruction":{"background":"Deep midnight obsidian slate background (#0b0f19 to #111827) fading into pure clean negative space across the entire left 60% of the horizontal canvas, with faint technical blueprint grid crosshairs and delicate vector coordinate lines.","elements":[{"type":"obj","bbox":[150,550,850,945],"desc":"A tall nearly empty barrel of enormous capacity with a tiny amber fill line at its base, while a percentage gauge above it strains against its stop. Clean unbranded matte surfaces, blank panels, no printed markings. Razor-sharp detail, no text, no letters, no watermark."}]}} \ No newline at end of file diff --git a/scripts/og-gen/metaphors.json b/scripts/og-gen/metaphors.json new file mode 100644 index 0000000..bb44500 --- /dev/null +++ b/scripts/og-gen/metaphors.json @@ -0,0 +1,74 @@ +{ + "adding-a-domain-to-someone-elses-mail-server": "A set of four brass routing vanes mounted along a dark obsidian mail chute, three of them steering translucent envelopes cleanly away, while the fourth channel is physically sealed by a solid black baffle plate", + "adding-english-mode-to-a-chinese-only-web-app": "A monolithic dark application cube whose sealed front face carries two sliding glass plaques bearing different scripts, the second plaque being lifted into position by a precision gantry clamp at the doorway", + "ai-furniture-compositing-with-flux-kontext": "A matte dark lounge chair module seated into a cut-away room diorama cube, its original studio backdrop peeling away as a curled translucent film sheet", + "authentik-css-greater-than-bug": "A single oversized angular chevron wedge jammed into a hairline seam of a frosted glass control panel, splitting the panel's edge glow into misaligned fragments", + "authentik-forward-auth-gate-wasnt-live": "Two gate arches standing in series, the inner arch sealed by a tight blue light curtain while the outer arch hangs fully open with a stream of light passing straight through it", + "authentik-major-upgrade-gotchas": "A stack of obsidian anniversary plinths where the topmost slab has just been swapped in, its mounting pegs misaligned so three small crystal key tags tumble out of their sockets", + "automating-cyberpanel-without-the-ui": "A slim robotic probe arm reaching behind the polished facade of a dark server control panel, plugging into exposed circuit contacts concealed behind the front glass", + "best-ai-video-generators-2026": "A rack of five glowing film reels of differing sizes, one heavy obsidian reel grounded on a heatsink pedestal while the others float as translucent holograms trailed by thin price-tag slivers", + "calibrating-intel-quick-sync-hevc-quality": "A 3D topographic luminous video waveform mountain dropping off a 90-degree vertical cliff edge marked at 28, flanked by two perfectly identical overlapping optical calibration prisms", + "chainlink-vrf-v2-lottery-contract": "A transparent mechanical drum sealed inside a hexagonal glass case, its tumbling sphere fed by a chain of interlocked machined links, a notarized proof disc hovering just outside the case", + "docker-reported-exit-0-the-oom-killer-disagreed": "A translucent glass server cube displaying a deceptive green heartbeat light while a razor-sharp crimson beam slices horizontally through its bottom core, scattering fractured memory crystals", + "does-hevc-actually-shrink-your-files": "Three matched glass vials of compressed film ribbon standing on a dark calibration scale, two visibly shorter than their source capsule while the third swells larger than the capsule it was poured from", + "embedding-fonts-so-a-pdf-looks-the-same-everywhere": "A sealed obsidian press frame holding one smooth unmarked crystal sheet, lit identically through three differently angled viewing ports", + "every-player-stuttered-the-file-was-fine": "A perfectly aligned dark film canister whose internal sprocket teeth sit one notch out of phase, casting a doubled ghost frame onto a translucent projection screen", + "five-step-ai-roadmap-what-i-actually-run": "A five-tier architectural staircase in dark graphite, the middle tiers brightly illuminated with active hardware racks while the speculative top tiers remain skeletal wireframes", + "fully-on-chain-svg-nfts": "A crystalline art plaque sealed completely inside a transparent contract block, its imagery carved directly into the block's inner facets rather than mounted on any external frame", + "hardening-a-tor-onion-service": "A matte black multi-shell relay tower of stacked concentric domes, each layer locked by a brass ring, with a single narrow sealed ingress slit glowing soft violet", + "hello-world": "A minimal dark workbench holding one glowing filament cursor hovering above a blank obsidian slate, first light spilling from a small pulsing indicator at its corner", + "how-i-built-the-digikedai-telegram-bot": "A folded paper-plane shaped obsidian drone docked at a glowing storefront kiosk module, tethered by a luminous thread to a private gateway pylon behind it", + "how-i-host-this-blog": "An assembly line of three interlocking obsidian machine modules — a document press, a stamping arm and a delivery chute — feeding a sealed glass site cube at the end of the rail", + "how-i-made-my-own-songs-with-suno-ai": "A shard of amber-lit vinyl suspended inside a dark circular resonator hall, seven smaller song discs orbiting it in a single ring", + "how-i-vetted-20-vps-providers-with-parallel-subagents": "Twenty identical dark server tiles fanned out along a scoring rail, a mechanical grading carriage sweeping across them and stamping pass or fail notches into each tile face", + "how-to-verify-a-hosting-provider-before-you-buy": "A polished glass loupe hovering over a rack of miniature server towers, revealing a hairline crack hidden inside one tower's casing", + "i-let-an-agent-manage-my-shopee-vouchers": "An intricate rotating glass agent decision loop where a stray orange pulse vector veers off the blueprint track and materializes a glowing geometric voucher card in mid-air", + "it-reported-success-nothing-had-changed": "A rotating brass checkmark stamp pressed onto an empty obsidian pipe segment that carries no flow, with the pipe's mouth visibly dry behind the impression", + "jpa-version-field-lost-update": "Two opposing piston arms pressing on the same crystal data block, one arm halted by a mechanical version latch snapping shut with a red-lit click", + "loop-engineering-without-a-coding-agent": "Eleven concentric circular obsidian gear loops rotating in mechanical harmony, eight solid pure crystal clockwork rings alongside three subtle neural pulse rings, operating autonomously", + "migrating-codeigniter-iis-to-openlitespeed": "A functional app engine block being lifted off a heavy bolted window-frame chassis and reseated onto a taller lightweight finned frame, two loose dark bolts falling behind it", + "my-backup-was-using-someone-elses-api-quota": "A massive high-throughput data conduit bottlenecked at a narrow glowing amber hourglass valve, releasing only single sparse droplets into a dark repository vault below", + "n8n-v1-to-v2-upgrade-gotchas": "A rail of plain obsidian cube nodes rolling forward while seven of their connector pins hang loose and sparking beneath the track", + "nocodb-sso-is-a-licensed-feature": "A recessed keyhole plate on an otherwise sealed obsidian cabinet, faint cyan glow leaking from the plate's seam while the keyhole itself is blocked by a solid brass plug", + "one-hostname-public-tracker-sso-dashboard": "A single dark gateway arch splitting into two passages, a wide open slit of light on one side and a latched vault door with a rotating seal on the other", + "one-prometheus-for-unraid-synology-and-a-vps": "A single radiant central telemetry beacon sending precision laser monitoring vectors to three distinct hexagonal platform nodes, illuminating transparent storage volumes with holographic metrics", + "passbolt-hang-three-failure-modes": "A brass padlock seal hovering over an obsidian vault door whose three latching bolts are stuck mid-turn, a stalled orange glow pulsing in the keyway", + "patching-workbench-26-for-mariadb": "A precision instrument module whose connector plate has been re-pinned by three hand-cut copper jumpers bridging over its original sealed socket", + "putting-a-front-door-on-an-app-you-cant-modify": "A new bilingual stone lintel and portal erected in front of a sealed monolithic app block, three thin luminous cables threading through a drilled seam into its interior", + "read-only-nocodb-dashboard-for-a-remote-database": "A glass observation window mounted over a distant obsidian data silo, the viewing frame open while every latch on the data hatch itself stays closed", + "reading-a-containers-own-api-docs": "A scanning beam unfolding a lathe-cut obsidian shell to expose its printed inner circuit schematics, four small inspection tools laid out on the dark bench beside it", + "replacing-rdpguard-with-ipban": "An old shield plate lifted out of a dark doorway as a tighter woven black mesh gate is lowered into the same frame, grey marker pins fenced off outside it", + "running-production-infrastructure-solo": "Three interconnected matte-black server monoliths in isometric perspective surrounded by a dense floating matrix of micro-scale glowing glass container cubes with emerald heartbeat lights, routed by blue optical fiber conduits into one master control node", + "running-tts-as-a-service-with-token-sidecars": "A central obsidian voice resonance horn flanked by two small paired fuel canisters that replenish its expiring energy keys through thin silver tubes", + "scraping-bot-walled-marketplace-warm-browser-session": "A dexterous glass gripper carrying a warm amber-lit browser window pane through a walled dark tunnel gate, holding the pane at a preserved angle", + "self-healing-digital-goods-entitlements": "A multi-stage floating acrylic workflow pathway with five interlocking diamond gates, automatically bridging broken link fragments with glowing golden solder", + "self-hosted-speech-to-text-api": "A floating obsidian microphone capsule inside a soundproof dark chamber, its waveform converted into clean engraved grooves on a crystal tablet beside it", + "self-hosting-mem0-memory-stack": "A stack of three interlocking transparent memory capsules above a glowing vector-index lattice core, each capsule holding suspended point-cloud nodes", + "shipping-an-ai-photo-editor-as-a-wordpress-plugin": "A brushed dark modular cartridge docked into a slot on a wall of stacked obsidian building blocks, a neat pile of thin shims beside it with one cracked shim glowing red", + "smartctl-exit-code-32-skips-the-disks-that-matter": "A row of dark platter cartridges on an inspection rail where a sorting gate waves the most worn cartridge straight past into an unchecked waste channel", + "space-reclamation-wasnt-stuck-it-was-waiting": "A massive filesystem disk cylinder slowly draining fragmented blue blocks into an obsidian reclamation pit, guided by a precision holographic timer dial counting down", + "stop-writing-agent-prompts-for-deterministic-work": "An oversized ornate mechanical gear train fused to a tiny simple toggle switch, a strand of glowing ribbon tangled uselessly around the gear teeth", + "syncing-a-self-improving-ai-agent-across-machines": "Two obsidian agent cores on separate pedestals sharing one translucent memory ribbon strung between them, mirrored facets echoing each other", + "synology-api-401-with-the-correct-password": "A brass key entered perfectly into a dark lock plate that still glows red, two different fault traces visible behind a diagnostic glass side panel", + "synology-spreadsheet-api-is-a-container": "A grid of obsidian spreadsheet cells housed inside a sealed service container box, four small barricade plates standing around its access hatches", + "that-dying-ssd-was-just-a-bad-sata-cable": "An unbranded solid-state drive slab lying clean and healthy on an inspection cradle beside a single frayed ribbon cable whose exposed conductor is the only damaged element in the frame", + "the-cause-was-trim-not-the-ssds": "Two identical crystal data platters both striped by the same glowing zero-band across their surface, a hidden firmware splinter visible in the shared substrate between them", + "the-nocodb-attachment-that-wouldnt-update": "Two nearly identical obsidian tiles slotted into the same dark rail, the older tile stubbornly holding its groove while a translucent duplicate hovers beside it", + "the-upstream-was-deleted-then-came-back-rewritten": "An empty hollow container shell sitting on a dark shelf beside a freshly rebuilt shell of a brighter alloy, the new one still gleaming and unweathered", + "two-ways-a-javascript-file-stops-working-and-looks-fine": "A luminous display panel that looks perfectly alive while two of its internal conduits are severed beneath the unbroken glass face", + "unraid-stop-array-hangs-on-swapfile": "A heavy obsidian disk array carriage halted on its rails, an eight-segment anchor block clamping one wheel to the floor frame", + "upgrading-codeigniter-46-to-47": "An obsidian upgrade manifold whose eight sealed ports run cold and silent while two open ports vent hot red vapour", + "using-chinese-llm-apis-from-malaysia": "A sealed gateway pylon with a currency-shaped token slot and a verification bell, feeding a distant dark lattice of model cores through a long cable run", + "verifying-a-pdf-report-page-by-page": "Nineteen identically cut crystal page plates fanned in a stack on a dark calibration table while a precision measuring caliper checks each plate's edge alignment", + "vetting-an-open-source-dependency-before-you-bet-on-it": "A dark dependency crate opened on a market bench, six inspection checkpoints laid out beside it and one hollow false-bottomed compartment exposed", + "when-smart-says-healthy-but-your-raid-is-corrupting-data": "Two clean-looking mirrored disk platters certified with green tags while a fine hairline of corrupted static seeps from the seam between them", + "why-500000-lines-of-commit-churn-only-left-230000-in-production": "A wide extrusion nozzle laying down an enormous glowing filament coil while a narrow precision sieve beneath it lets only a smaller refined strand fall into a production crate", + "why-chrome-forgets-its-tabs-in-a-container": "A dark browser window frame whose restored tab plates are scattered outside its own container wall, a small keeper bracket bridging the seam", + "why-i-still-bought-a-local-gpu": "A dense obsidian accelerator block seated in its own heatsink cradle on a workbench, radiating private warm light while cloud-tethered terminals hang faintly in the dark background", + "why-my-on-chain-nft-art-changed-on-windows": "An identical carved art plaque duplicated on two colour-matched plinths, one copy shifted by an extra invisible notch at every edge", + "why-telegram-bot-notifications-die": "A folded paper-plane drone stopped at a narrow dark archway, its front slot jammed with a crumpled translucent strip and a red glow bleeding out", + "why-your-cdp-clicks-silently-fail": "A high-precision robotic cursor pointer clicking onto a translucent glass button that has already shifted away on an invisible kinetic wave, triggering no resonance", + "why-your-grafana-dashboard-shows-no-data": "A wide wall of forty-one dark telemetry panels all reading blank, one small self-referential filter disc visibly stuck against its own inlet", + "why-your-headless-browser-cant-scrape-everything": "Two market booths side by side, one sealed shut behind a wall of blank grey panels while the other stays open with warm goods faintly visible inside", + "your-disk-full-alert-is-lying": "A tall nearly empty barrel of enormous capacity with a tiny amber fill line at its base, while a percentage gauge above it strains against its stop" +} diff --git a/scripts/og-gen/migrate_to_v2_assets.py b/scripts/og-gen/migrate_to_v2_assets.py new file mode 100644 index 0000000..2655976 --- /dev/null +++ b/scripts/og-gen/migrate_to_v2_assets.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +"""migrate_to_v2_assets.py — point the content at the v2 artwork filenames. + +The v2 renderer (render_from_art.mjs) writes JPEG/WebP, not PNG: + public/banners/<slug>.jpg (hero fallback; <picture> derives .webp) + public/og/<slug>.jpg (EN share card) + public/og/zh-<slug>.jpg (ZH share card) + +Until this migration runs, every page still points at the v1 PNG paths, so it has +to happen in the SAME commit as the images or the site serves 404 heroes. + +Idempotent: it only rewrites values that still look like the v1 paths, keeps each +file's quoting style, and prints what it changed. Run with --write to apply. + + python scripts/og-gen/migrate_to_v2_assets.py # report only + python scripts/og-gen/migrate_to_v2_assets.py --write +""" +from __future__ import annotations + +import argparse +import re +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[2] +POSTS = ROOT / "src" / "content" / "posts" +ZH = POSTS / "zh" + +# ogImage: "/og/<slug>.png" or ogImage: /og/<slug>.png (quotes optional) +OG_RE = re.compile(r'^(ogImage:[ \t]*)(?P<q>"?)/og/(?P<name>[a-z0-9-]+)\.png(?P=q)[ \t]*$', re.M) +BANNER_RE = re.compile(r'^(banner:[ \t]*)(?P<q>"?)/banners/(?P<name>[a-z0-9-]+)\.png(?P=q)[ \t]*$', re.M) + + +def migrate(path: Path, zh: bool, write: bool) -> list[str]: + text = path.read_text(encoding="utf-8") + slug = path.stem + changes: list[str] = [] + + def og_sub(m: re.Match) -> str: + target = f"/og/zh-{slug}.jpg" if zh else f"/og/{slug}.jpg" + changes.append(f"ogImage {m.group(3)}.png -> {target}") + return f"{m.group(1)}{m.group('q')}{target}{m.group('q')}" + + def banner_sub(m: re.Match) -> str: + target = f"/banners/{slug}.jpg" + changes.append(f"banner {m.group(3)}.png -> {target}") + return f"{m.group(1)}{m.group('q')}{target}{m.group('q')}" + + new = OG_RE.sub(og_sub, text) + new = BANNER_RE.sub(banner_sub, new) + if new != text and write: + path.write_text(new, encoding="utf-8") + return changes + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--write", action="store_true") + args = ap.parse_args() + + total = 0 + files_changed = 0 + for folder, zh in ((POSTS, False), (ZH, True)): + for p in sorted(folder.glob("*.md")): + ch = migrate(p, zh, args.write) + if ch: + files_changed += 1 + total += len(ch) + print(f"{'WROTE' if args.write else 'would'} {p.relative_to(ROOT)}: " + "; ".join(ch)) + print(f"\n{files_changed} files, {total} field(s) {'' if args.write else '(report only — pass --write)'}") + + +if __name__ == "__main__": + main() diff --git a/scripts/og-gen/prompts_catalog.json b/scripts/og-gen/prompts_catalog.json index fdd0948..6bf6460 100644 --- a/scripts/og-gen/prompts_catalog.json +++ b/scripts/og-gen/prompts_catalog.json @@ -9,9 +9,10 @@ "mailcow" ], "accent": "warm amber-orange warning glow (#fbbf24)", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with warm amber-orange warning glow (#fbbf24) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A set of four brass routing vanes mounted along a dark obsidian mail chute, three of them steering translucent envelopes cleanly away, while the fourth channel is physically sealed by a solid black baffle plate", + "evidence_summary": "4 DNS records · 554 antispam reject", + "prompt": "A set of four brass routing vanes mounted along a dark obsidian mail chute, three of them steering translucent envelopes cleanly away, while the fourth channel is physically sealed by a solid black baffle plate", + "caption": "captions/adding-a-domain-to-someone-elses-mail-server.json" }, { "slug": "adding-english-mode-to-a-chinese-only-web-app", @@ -23,9 +24,10 @@ "vue" ], "accent": "royal cobalt blue (#295cff) with crisp ice-white", - "unique_elements": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light", - "evidence_summary": "root-cause analysis · production evidence", - "prompt": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with royal cobalt blue (#295cff) with crisp ice-white highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A monolithic dark application cube whose sealed front face carries two sliding glass plaques bearing different scripts, the second plaque being lifted into position by a precision gantry clamp at the doorway", + "evidence_summary": "no browser API · sub_filter EN mode", + "prompt": "A monolithic dark application cube whose sealed front face carries two sliding glass plaques bearing different scripts, the second plaque being lifted into position by a precision gantry clamp at the doorway", + "caption": "captions/adding-english-mode-to-a-chinese-only-web-app.json" }, { "slug": "ai-furniture-compositing-with-flux-kontext", @@ -37,9 +39,10 @@ "ai-image" ], "accent": "emerald green (#4ade80) status nodes and gold telemetry", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A matte dark lounge chair module seated into a cut-away room diorama cube, its original studio backdrop peeling away as a curled translucent film sheet", + "evidence_summary": "kontext multi-image · tainted canvas fix", + "prompt": "A matte dark lounge chair module seated into a cut-away room diorama cube, its original studio backdrop peeling away as a curled translucent film sheet", + "caption": "captions/ai-furniture-compositing-with-flux-kontext.json" }, { "slug": "authentik-css-greater-than-bug", @@ -51,9 +54,10 @@ "self-hosting" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A single oversized angular chevron wedge jammed into a hairline seam of a frosted glass control panel, splitting the panel's edge glow into misaligned fragments", + "evidence_summary": "1 escaped '>' · CSS silently dropped", + "prompt": "A single oversized angular chevron wedge jammed into a hairline seam of a frosted glass control panel, splitting the panel's edge glow into misaligned fragments", + "caption": "captions/authentik-css-greater-than-bug.json" }, { "slug": "authentik-forward-auth-gate-wasnt-live", @@ -65,9 +69,10 @@ "cloudflare" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "Two gate arches standing in series, the inner arch sealed by a tight blue light curtain while the outer arch hangs fully open with a stream of light passing straight through it", + "evidence_summary": "host 302 · public 200 · 2 ingress layers", + "prompt": "Two gate arches standing in series, the inner arch sealed by a tight blue light curtain while the outer arch hangs fully open with a stream of light passing straight through it", + "caption": "captions/authentik-forward-auth-gate-wasnt-live.json" }, { "slug": "authentik-major-upgrade-gotchas", @@ -79,9 +84,10 @@ "docker" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A stack of obsidian anniversary plinths where the topmost slab has just been swapped in, its mounting pegs misaligned so three small crystal key tags tumble out of their sockets", + "evidence_summary": "2025.8 → 2026.8 · auth_flow mixup", + "prompt": "A stack of obsidian anniversary plinths where the topmost slab has just been swapped in, its mounting pegs misaligned so three small crystal key tags tumble out of their sockets", + "caption": "captions/authentik-major-upgrade-gotchas.json" }, { "slug": "automating-cyberpanel-without-the-ui", @@ -93,9 +99,10 @@ "reverse-engineering" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A slim robotic probe arm reaching behind the polished facade of a dark server control panel, plugging into exposed circuit contacts concealed behind the front glass", + "evidence_summary": "v2 JSON API gone · session + CSRF", + "prompt": "A slim robotic probe arm reaching behind the polished facade of a dark server control panel, plugging into exposed circuit contacts concealed behind the front glass", + "caption": "captions/automating-cyberpanel-without-the-ui.json" }, { "slug": "best-ai-video-generators-2026", @@ -107,9 +114,10 @@ "ltx" ], "accent": "neon-cyan and electric violet-magenta", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with neon-cyan and electric violet-magenta highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A rack of five glowing film reels of differing sizes, one heavy obsidian reel grounded on a heatsink pedestal while the others float as translucent holograms trailed by thin price-tag slivers", + "evidence_summary": "free vs paid · local LTX-2.3 test", + "prompt": "A rack of five glowing film reels of differing sizes, one heavy obsidian reel grounded on a heatsink pedestal while the others float as translucent holograms trailed by thin price-tag slivers", + "caption": "captions/best-ai-video-generators-2026.json" }, { "slug": "calibrating-intel-quick-sync-hevc-quality", @@ -121,9 +129,10 @@ "qsv" ], "accent": "electric cyan and soft ultraviolet spectrum", - "unique_elements": "A 3D topographic luminous video waveform mountain dropping abruptly off a 90-degree vertical cliff edge marked at 28, flanked by two perfectly identical overlapping optical calibration prisms", - "evidence_summary": "ICQ 18-22 vs 28 cliff · QSV measured", - "prompt": "A 3D topographic luminous video waveform mountain dropping abruptly off a 90-degree vertical cliff edge marked at 28, flanked by two perfectly identical overlapping optical calibration prisms, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with electric cyan and soft ultraviolet spectrum highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A 3D topographic luminous video waveform mountain dropping off a 90-degree vertical cliff edge marked at 28, flanked by two perfectly identical overlapping optical calibration prisms", + "evidence_summary": "ICQ 28-30 cliff · fast == medium", + "prompt": "A 3D topographic luminous video waveform mountain dropping off a 90-degree vertical cliff edge marked at 28, flanked by two perfectly identical overlapping optical calibration prisms", + "caption": "captions/calibrating-intel-quick-sync-hevc-quality.json" }, { "slug": "chainlink-vrf-v2-lottery-contract", @@ -135,9 +144,10 @@ "vrf" ], "accent": "translucent emerald (#10b981) and prism-split cyan", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with translucent emerald (#10b981) and prism-split cyan highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A transparent mechanical drum sealed inside a hexagonal glass case, its tumbling sphere fed by a chain of interlocked machined links, a notarized proof disc hovering just outside the case", + "evidence_summary": "VRF v2.5 · mock-funding bug", + "prompt": "A transparent mechanical drum sealed inside a hexagonal glass case, its tumbling sphere fed by a chain of interlocked machined links, a notarized proof disc hovering just outside the case", + "caption": "captions/chainlink-vrf-v2-lottery-contract.json" }, { "slug": "docker-reported-exit-0-the-oom-killer-disagreed", @@ -149,9 +159,10 @@ "traefik" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "A translucent glass server cube displaying a deceptive green heartbeat light, while a razor-sharp crimson kernel laser beam slices through its bottom core, scattering fractured memory crystals", + "unique_elements": "A translucent glass server cube displaying a deceptive green heartbeat light while a razor-sharp crimson beam slices horizontally through its bottom core, scattering fractured memory crystals", "evidence_summary": "exit 0 · dmesg: 6x cgroup OOM kills", - "prompt": "A translucent glass server cube displaying a deceptive green heartbeat light, while a razor-sharp crimson kernel laser beam slices through its bottom core, scattering fractured memory crystals, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "prompt": "A translucent glass server cube displaying a deceptive green heartbeat light while a razor-sharp crimson beam slices horizontally through its bottom core, scattering fractured memory crystals", + "caption": "captions/docker-reported-exit-0-the-oom-killer-disagreed.json" }, { "slug": "does-hevc-actually-shrink-your-files", @@ -163,9 +174,10 @@ "x265" ], "accent": "electric cyan and soft ultraviolet spectrum", - "unique_elements": "A cascading optical prism slicing raw video wavebands into ultra-compact high-efficiency spectral ribbons on a dark reflective surface", - "evidence_summary": "HEVC hardware pipeline · lossless fidelity", - "prompt": "A cascading optical prism slicing raw video wavebands into ultra-compact high-efficiency spectral ribbons on a dark reflective surface, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with electric cyan and soft ultraviolet spectrum highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "Three matched glass vials of compressed film ribbon standing on a dark calibration scale, two visibly shorter than their source capsule while the third swells larger than the capsule it was poured from", + "evidence_summary": "NVENC cq27 bigger · x265 -10-22%", + "prompt": "Three matched glass vials of compressed film ribbon standing on a dark calibration scale, two visibly shorter than their source capsule while the third swells larger than the capsule it was poured from", + "caption": "captions/does-hevc-actually-shrink-your-files.json" }, { "slug": "embedding-fonts-so-a-pdf-looks-the-same-everywhere", @@ -177,9 +189,10 @@ "mpdf" ], "accent": "royal cobalt blue (#295cff) with crisp ice-white", - "unique_elements": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light", - "evidence_summary": "root-cause analysis · production evidence", - "prompt": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with royal cobalt blue (#295cff) with crisp ice-white highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A sealed obsidian press frame holding one smooth unmarked crystal sheet, lit identically through three differently angled viewing ports", + "evidence_summary": "4 families · 8 faces · 2 renderers", + "prompt": "A sealed obsidian press frame holding one smooth unmarked crystal sheet, lit identically through three differently angled viewing ports", + "caption": "captions/embedding-fonts-so-a-pdf-looks-the-same-everywhere.json" }, { "slug": "every-player-stuttered-the-file-was-fine", @@ -191,9 +204,10 @@ "hevc" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "A cascading optical prism slicing raw video wavebands into ultra-compact high-efficiency spectral ribbons on a dark reflective surface", - "evidence_summary": "HEVC hardware pipeline · lossless fidelity", - "prompt": "A cascading optical prism slicing raw video wavebands into ultra-compact high-efficiency spectral ribbons on a dark reflective surface, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A perfectly aligned dark film canister whose internal sprocket teeth sit one notch out of phase, casting a doubled ghost frame onto a translucent projection screen", + "evidence_summary": "5818/5818 intervals · 0 duplicate PTS", + "prompt": "A perfectly aligned dark film canister whose internal sprocket teeth sit one notch out of phase, casting a doubled ghost frame onto a translucent projection screen", + "caption": "captions/every-player-stuttered-the-file-was-fine.json" }, { "slug": "five-step-ai-roadmap-what-i-actually-run", @@ -205,9 +219,10 @@ "agents" ], "accent": "neon-cyan and electric violet-magenta", - "unique_elements": "A five-tier architectural staircase in dark graphite, with the middle tiers brightly illuminated with active hardware racks while speculative top tiers remain skeletal wireframes", + "unique_elements": "A five-tier architectural staircase in dark graphite, the middle tiers brightly illuminated with active hardware racks while the speculative top tiers remain skeletal wireframes", "evidence_summary": "whisper + mem0 in production · step 4 skipped", - "prompt": "A five-tier architectural staircase in dark graphite, with the middle tiers brightly illuminated with active hardware racks while speculative top tiers remain skeletal wireframes, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with neon-cyan and electric violet-magenta highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "prompt": "A five-tier architectural staircase in dark graphite, the middle tiers brightly illuminated with active hardware racks while the speculative top tiers remain skeletal wireframes", + "caption": "captions/five-step-ai-roadmap-what-i-actually-run.json" }, { "slug": "fully-on-chain-svg-nfts", @@ -219,9 +234,10 @@ "erc721" ], "accent": "translucent emerald (#10b981) and prism-split cyan", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with translucent emerald (#10b981) and prism-split cyan highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A crystalline art plaque sealed completely inside a transparent contract block, its imagery carved directly into the block's inner facets rather than mounted on any external frame", + "evidence_summary": "base64 SVG in tokenURI() · mood flip on-chain", + "prompt": "A crystalline art plaque sealed completely inside a transparent contract block, its imagery carved directly into the block's inner facets rather than mounted on any external frame", + "caption": "captions/fully-on-chain-svg-nfts.json" }, { "slug": "hardening-a-tor-onion-service", @@ -233,9 +249,10 @@ "security" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A matte black multi-shell relay tower of stacked concentric domes, each layer locked by a brass ring, with a single narrow sealed ingress slit glowing soft violet", + "evidence_summary": "bind 0.0.0.0:80 denied · onion v3", + "prompt": "A matte black multi-shell relay tower of stacked concentric domes, each layer locked by a brass ring, with a single narrow sealed ingress slit glowing soft violet", + "caption": "captions/hardening-a-tor-onion-service.json" }, { "slug": "hello-world", @@ -245,9 +262,10 @@ "intro" ], "accent": "warm amber-orange warning glow (#fbbf24)", - "unique_elements": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light", - "evidence_summary": "root-cause analysis · production evidence", - "prompt": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with warm amber-orange warning glow (#fbbf24) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A minimal dark workbench holding one glowing filament cursor hovering above a blank obsidian slate, first light spilling from a small pulsing indicator at its corner", + "evidence_summary": "~140-container homelab · self-hosted", + "prompt": "A minimal dark workbench holding one glowing filament cursor hovering above a blank obsidian slate, first light spilling from a small pulsing indicator at its corner", + "caption": "captions/hello-world.json" }, { "slug": "how-i-built-the-digikedai-telegram-bot", @@ -259,9 +277,10 @@ "cloudflare" ], "accent": "emerald green (#4ade80) status nodes and gold telemetry", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A folded paper-plane shaped obsidian drone docked at a glowing storefront kiosk module, tethered by a luminous thread to a private gateway pylon behind it", + "evidence_summary": "Telegram + WhatsApp · LiteLLM gateway", + "prompt": "A folded paper-plane shaped obsidian drone docked at a glowing storefront kiosk module, tethered by a luminous thread to a private gateway pylon behind it", + "caption": "captions/how-i-built-the-digikedai-telegram-bot.json" }, { "slug": "how-i-host-this-blog", @@ -273,9 +292,10 @@ "ci-cd" ], "accent": "emerald green (#4ade80) status nodes and gold telemetry", - "unique_elements": "An expansive architectural blueprint of enterprise private cloud nodes interconnected by luminous data pathways and telemetry readouts", - "evidence_summary": "enterprise delivery · real-world production", - "prompt": "An expansive architectural blueprint of enterprise private cloud nodes interconnected by luminous data pathways and telemetry readouts, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "An assembly line of three interlocking obsidian machine modules — a document press, a stamping arm and a delivery chute — feeding a sealed glass site cube at the end of the rail", + "evidence_summary": "git push · act_runner · nginx", + "prompt": "An assembly line of three interlocking obsidian machine modules — a document press, a stamping arm and a delivery chute — feeding a sealed glass site cube at the end of the rail", + "caption": "captions/how-i-host-this-blog.json" }, { "slug": "how-i-made-my-own-songs-with-suno-ai", @@ -287,9 +307,10 @@ "music" ], "accent": "emerald green (#4ade80) status nodes and gold telemetry", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A shard of amber-lit vinyl suspended inside a dark circular resonator hall, seven smaller song discs orbiting it in a single ring", + "evidence_summary": "7 songs · lyrics + prompts", + "prompt": "A shard of amber-lit vinyl suspended inside a dark circular resonator hall, seven smaller song discs orbiting it in a single ring", + "caption": "captions/how-i-made-my-own-songs-with-suno-ai.json" }, { "slug": "how-i-vetted-20-vps-providers-with-parallel-subagents", @@ -301,9 +322,10 @@ "due-diligence" ], "accent": "emerald green (#4ade80) status nodes and gold telemetry", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "Twenty identical dark server tiles fanned out along a scoring rail, a mechanical grading carriage sweeping across them and stamping pass or fail notches into each tile face", + "evidence_summary": "20 providers · 3 hours · subagents", + "prompt": "Twenty identical dark server tiles fanned out along a scoring rail, a mechanical grading carriage sweeping across them and stamping pass or fail notches into each tile face", + "caption": "captions/how-i-vetted-20-vps-providers-with-parallel-subagents.json" }, { "slug": "how-to-verify-a-hosting-provider-before-you-buy", @@ -315,9 +337,10 @@ "due-diligence" ], "accent": "electric cyan and soft ultraviolet spectrum", - "unique_elements": "A clean modular educational workbench of floating holographic schematic layers and precision calibration instruments", - "evidence_summary": "step-by-step telemetry · reproducible setup", - "prompt": "A clean modular educational workbench of floating holographic schematic layers and precision calibration instruments, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with electric cyan and soft ultraviolet spectrum highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A polished glass loupe hovering over a rack of miniature server towers, revealing a hairline crack hidden inside one tower's casing", + "evidence_summary": "rdap.org domain age · AUP read", + "prompt": "A polished glass loupe hovering over a rack of miniature server towers, revealing a hairline crack hidden inside one tower's casing", + "caption": "captions/how-to-verify-a-hosting-provider-before-you-buy.json" }, { "slug": "i-let-an-agent-manage-my-shopee-vouchers", @@ -329,9 +352,10 @@ "automation" ], "accent": "neon-cyan and electric violet-magenta", - "unique_elements": "An intricate rotating glass agent decision loop, where an unexpected stray orange pulse vector veers off the blueprint track, materializing an unauthorized glowing geometric voucher card in mid-air", + "unique_elements": "An intricate rotating glass agent decision loop where a stray orange pulse vector veers off the blueprint track and materializes a glowing geometric voucher card in mid-air", "evidence_summary": "mode=propose gate · RM140 voucher unapproved", - "prompt": "An intricate rotating glass agent decision loop, where an unexpected stray orange pulse vector veers off the blueprint track, materializing an unauthorized glowing geometric voucher card in mid-air, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with neon-cyan and electric violet-magenta highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "prompt": "An intricate rotating glass agent decision loop where a stray orange pulse vector veers off the blueprint track and materializes a glowing geometric voucher card in mid-air", + "caption": "captions/i-let-an-agent-manage-my-shopee-vouchers.json" }, { "slug": "it-reported-success-nothing-had-changed", @@ -343,9 +367,10 @@ "verification" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A rotating brass checkmark stamp pressed onto an empty obsidian pipe segment that carries no flow, with the pipe's mouth visibly dry behind the impression", + "evidence_summary": "12.5 MB of 403 MB · rename never landed", + "prompt": "A rotating brass checkmark stamp pressed onto an empty obsidian pipe segment that carries no flow, with the pipe's mouth visibly dry behind the impression", + "caption": "captions/it-reported-success-nothing-had-changed.json" }, { "slug": "jpa-version-field-lost-update", @@ -357,9 +382,10 @@ "jpa" ], "accent": "royal cobalt blue (#295cff) with crisp ice-white", - "unique_elements": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light", - "evidence_summary": "root-cause analysis · production evidence", - "prompt": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with royal cobalt blue (#295cff) with crisp ice-white highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "Two opposing piston arms pressing on the same crystal data block, one arm halted by a mechanical version latch snapping shut with a red-lit click", + "evidence_summary": "@Version · stale PUT → 409", + "prompt": "Two opposing piston arms pressing on the same crystal data block, one arm halted by a mechanical version latch snapping shut with a red-lit click", + "caption": "captions/jpa-version-field-lost-update.json" }, { "slug": "loop-engineering-without-a-coding-agent", @@ -371,9 +397,10 @@ "cron" ], "accent": "emerald green (#4ade80) status nodes and gold telemetry", - "unique_elements": "Eleven concentric circular obsidian gear loops rotating in mechanical harmony, eight solid pure crystal clockwork rings alongside three subtle neural pulse rings, operating autonomously without human intervention", + "unique_elements": "Eleven concentric circular obsidian gear loops rotating in mechanical harmony, eight solid pure crystal clockwork rings alongside three subtle neural pulse rings, operating autonomously", "evidence_summary": "11 cron jobs · 8 zero-AI loops", - "prompt": "Eleven concentric circular obsidian gear loops rotating in mechanical harmony, eight solid pure crystal clockwork rings alongside three subtle neural pulse rings, operating autonomously without human intervention, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "prompt": "Eleven concentric circular obsidian gear loops rotating in mechanical harmony, eight solid pure crystal clockwork rings alongside three subtle neural pulse rings, operating autonomously", + "caption": "captions/loop-engineering-without-a-coding-agent.json" }, { "slug": "migrating-codeigniter-iis-to-openlitespeed", @@ -385,9 +412,10 @@ "openspeedway" ], "accent": "royal cobalt blue (#295cff) with crisp ice-white", - "unique_elements": "Interlocking precision architectural pillars and modular computational foundations, supporting a clean crystalline software framework", - "evidence_summary": "verification gates · deterministic code", - "prompt": "Interlocking precision architectural pillars and modular computational foundations, supporting a clean crystalline software framework, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with royal cobalt blue (#295cff) with crisp ice-white highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A functional app engine block being lifted off a heavy bolted window-frame chassis and reseated onto a taller lightweight finned frame, two loose dark bolts falling behind it", + "evidence_summary": "17,000-line CI4 · env() fatal", + "prompt": "A functional app engine block being lifted off a heavy bolted window-frame chassis and reseated onto a taller lightweight finned frame, two loose dark bolts falling behind it", + "caption": "captions/migrating-codeigniter-iis-to-openlitespeed.json" }, { "slug": "my-backup-was-using-someone-elses-api-quota", @@ -399,9 +427,10 @@ "google-drive" ], "accent": "warm amber-orange warning glow (#fbbf24)", - "unique_elements": "A massive high-throughput data conduit bottlenecked at a narrow glowing amber hourglass valve, only releasing single sparse droplets into a dark repository vault below", + "unique_elements": "A massive high-throughput data conduit bottlenecked at a narrow glowing amber hourglass valve, releasing only single sparse droplets into a dark repository vault below", "evidence_summary": "1 TB restic seed · shared rclone quota", - "prompt": "A massive high-throughput data conduit bottlenecked at a narrow glowing amber hourglass valve, only releasing single sparse droplets into a dark repository vault below, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with warm amber-orange warning glow (#fbbf24) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "prompt": "A massive high-throughput data conduit bottlenecked at a narrow glowing amber hourglass valve, releasing only single sparse droplets into a dark repository vault below", + "caption": "captions/my-backup-was-using-someone-elses-api-quota.json" }, { "slug": "n8n-v1-to-v2-upgrade-gotchas", @@ -413,9 +442,10 @@ "upgrade" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A rail of plain obsidian cube nodes rolling forward while seven of their connector pins hang loose and sparking beneath the track", + "evidence_summary": "1.x → 2.40.1 · 7 silent breaks", + "prompt": "A rail of plain obsidian cube nodes rolling forward while seven of their connector pins hang loose and sparking beneath the track", + "caption": "captions/n8n-v1-to-v2-upgrade-gotchas.json" }, { "slug": "nocodb-sso-is-a-licensed-feature", @@ -427,9 +457,10 @@ "oidc" ], "accent": "warm amber-orange warning glow (#fbbf24)", - "unique_elements": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light", - "evidence_summary": "root-cause analysis · production evidence", - "prompt": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with warm amber-orange warning glow (#fbbf24) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A recessed keyhole plate on an otherwise sealed obsidian cabinet, faint cyan glow leaking from the plate's seam while the keyhole itself is blocked by a solid brass plug", + "evidence_summary": "OIDC env accepted · first login crashes", + "prompt": "A recessed keyhole plate on an otherwise sealed obsidian cabinet, faint cyan glow leaking from the plate's seam while the keyhole itself is blocked by a solid brass plug", + "caption": "captions/nocodb-sso-is-a-licensed-feature.json" }, { "slug": "one-hostname-public-tracker-sso-dashboard", @@ -441,9 +472,10 @@ "sso" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A single dark gateway arch splitting into two passages, a wide open slit of light on one side and a latched vault door with a rotating seal on the other", + "evidence_summary": "1 host · tracker public, dashboard SSO", + "prompt": "A single dark gateway arch splitting into two passages, a wide open slit of light on one side and a latched vault door with a rotating seal on the other", + "caption": "captions/one-hostname-public-tracker-sso-dashboard.json" }, { "slug": "one-prometheus-for-unraid-synology-and-a-vps", @@ -457,7 +489,8 @@ "accent": "emerald green (#4ade80) status nodes and gold telemetry", "unique_elements": "A single radiant central telemetry beacon sending precision laser monitoring vectors to three distinct hexagonal platform nodes, illuminating transparent storage volumes with holographic metrics", "evidence_summary": "3 hosts · 1 prometheus · 0 false panels", - "prompt": "A single radiant central telemetry beacon sending precision laser monitoring vectors to three distinct hexagonal platform nodes, illuminating transparent storage volumes with holographic metrics, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "prompt": "A single radiant central telemetry beacon sending precision laser monitoring vectors to three distinct hexagonal platform nodes, illuminating transparent storage volumes with holographic metrics", + "caption": "captions/one-prometheus-for-unraid-synology-and-a-vps.json" }, { "slug": "passbolt-hang-three-failure-modes", @@ -469,9 +502,10 @@ "gpg" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A brass padlock seal hovering over an obsidian vault door whose three latching bolts are stuck mid-turn, a stalled orange glow pulsing in the keyway", + "evidence_summary": "null fingerprint · 3 failure modes", + "prompt": "A brass padlock seal hovering over an obsidian vault door whose three latching bolts are stuck mid-turn, a stalled orange glow pulsing in the keyway", + "caption": "captions/passbolt-hang-three-failure-modes.json" }, { "slug": "patching-workbench-26-for-mariadb", @@ -483,9 +517,10 @@ "workbench" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Interlocking precision architectural pillars and modular computational foundations, supporting a clean crystalline software framework", - "evidence_summary": "verification gates · deterministic code", - "prompt": "Interlocking precision architectural pillars and modular computational foundations, supporting a clean crystalline software framework, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A precision instrument module whose connector plate has been re-pinned by three hand-cut copper jumpers bridging over its original sealed socket", + "evidence_summary": "26.7.0 TypeError · 3 patches", + "prompt": "A precision instrument module whose connector plate has been re-pinned by three hand-cut copper jumpers bridging over its original sealed socket", + "caption": "captions/patching-workbench-26-for-mariadb.json" }, { "slug": "putting-a-front-door-on-an-app-you-cant-modify", @@ -497,9 +532,10 @@ "self-hosting" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A new bilingual stone lintel and portal erected in front of a sealed monolithic app block, three thin luminous cables threading through a drilled seam into its interior", + "evidence_summary": "5879-byte SPA · 3 injected lines", + "prompt": "A new bilingual stone lintel and portal erected in front of a sealed monolithic app block, three thin luminous cables threading through a drilled seam into its interior", + "caption": "captions/putting-a-front-door-on-an-app-you-cant-modify.json" }, { "slug": "read-only-nocodb-dashboard-for-a-remote-database", @@ -511,9 +547,10 @@ "mariadb" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Interlocking precision architectural pillars and modular computational foundations, supporting a clean crystalline software framework", - "evidence_summary": "verification gates · deterministic code", - "prompt": "Interlocking precision architectural pillars and modular computational foundations, supporting a clean crystalline software framework, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A glass observation window mounted over a distant obsidian data silo, the viewing frame open while every latch on the data hatch itself stays closed", + "evidence_summary": "SNAT source IP · 0 rows copied", + "prompt": "A glass observation window mounted over a distant obsidian data silo, the viewing frame open while every latch on the data hatch itself stays closed", + "caption": "captions/read-only-nocodb-dashboard-for-a-remote-database.json" }, { "slug": "reading-a-containers-own-api-docs", @@ -525,9 +562,10 @@ "api" ], "accent": "warm amber-orange warning glow (#fbbf24)", - "unique_elements": "Modular glowing cubic container blocks neatly docked into an industrial server chassis, synchronized by high-speed optic interconnects", - "evidence_summary": "containerized topology · isolated runtime", - "prompt": "Modular glowing cubic container blocks neatly docked into an industrial server chassis, synchronized by high-speed optic interconnects, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with warm amber-orange warning glow (#fbbf24) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A scanning beam unfolding a lathe-cut obsidian shell to expose its printed inner circuit schematics, four small inspection tools laid out on the dark bench beside it", + "evidence_summary": "4 docker commands · image is the spec", + "prompt": "A scanning beam unfolding a lathe-cut obsidian shell to expose its printed inner circuit schematics, four small inspection tools laid out on the dark bench beside it", + "caption": "captions/reading-a-containers-own-api-docs.json" }, { "slug": "replacing-rdpguard-with-ipban", @@ -539,9 +577,10 @@ "rdp" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "An old shield plate lifted out of a dark doorway as a tighter woven black mesh gate is lowered into the same frame, grey marker pins fenced off outside it", + "evidence_summary": "RDPGuard 7.8.7 → IPBan 4.1.0 · 12 IPs", + "prompt": "An old shield plate lifted out of a dark doorway as a tighter woven black mesh gate is lowered into the same frame, grey marker pins fenced off outside it", + "caption": "captions/replacing-rdpguard-with-ipban.json" }, { "slug": "running-production-infrastructure-solo", @@ -553,9 +592,10 @@ "monitoring" ], "accent": "emerald green (#4ade80) status nodes and gold telemetry", - "unique_elements": "Three massive interconnected obsidian server monoliths, surrounded by dense floating micro-glass container matrices representing 162 modular services, routed by glowing fiber optic pipelines into a single master control console", - "evidence_summary": "162 containers · 3 hosts · 78 stacks", - "prompt": "Three massive interconnected obsidian server monoliths, surrounded by dense floating micro-glass container matrices representing 162 modular services, routed by glowing fiber optic pipelines into a single master control console, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "Three interconnected matte-black server monoliths in isometric perspective surrounded by a dense floating matrix of micro-scale glowing glass container cubes with emerald heartbeat lights, routed by blue optical fiber conduits into one master control node", + "evidence_summary": "162 containers · 3 hosts · 78 compose stacks", + "prompt": "Three interconnected matte-black server monoliths in isometric perspective surrounded by a dense floating matrix of micro-scale glowing glass container cubes with emerald heartbeat lights, routed by blue optical fiber conduits into one master control node", + "caption": "captions/running-production-infrastructure-solo.json" }, { "slug": "running-tts-as-a-service-with-token-sidecars", @@ -567,9 +607,10 @@ "azure" ], "accent": "neon-cyan and electric violet-magenta", - "unique_elements": "Modular glowing cubic container blocks neatly docked into an industrial server chassis, synchronized by high-speed optic interconnects", - "evidence_summary": "containerized topology · isolated runtime", - "prompt": "Modular glowing cubic container blocks neatly docked into an industrial server chassis, synchronized by high-speed optic interconnects, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with neon-cyan and electric violet-magenta highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A central obsidian voice resonance horn flanked by two small paired fuel canisters that replenish its expiring energy keys through thin silver tubes", + "evidence_summary": "tokens expire 10 min / 1 h · sidecars", + "prompt": "A central obsidian voice resonance horn flanked by two small paired fuel canisters that replenish its expiring energy keys through thin silver tubes", + "caption": "captions/running-tts-as-a-service-with-token-sidecars.json" }, { "slug": "scraping-bot-walled-marketplace-warm-browser-session", @@ -581,9 +622,10 @@ "headless-chrome" ], "accent": "royal cobalt blue (#295cff) with crisp ice-white", - "unique_elements": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light", - "evidence_summary": "root-cause analysis · production evidence", - "prompt": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with royal cobalt blue (#295cff) with crisp ice-white highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A dexterous glass gripper carrying a warm amber-lit browser window pane through a walled dark tunnel gate, holding the pane at a preserved angle", + "evidence_summary": "warm CDP session · split waits", + "prompt": "A dexterous glass gripper carrying a warm amber-lit browser window pane through a walled dark tunnel gate, holding the pane at a preserved angle", + "caption": "captions/scraping-bot-walled-marketplace-warm-browser-session.json" }, { "slug": "self-healing-digital-goods-entitlements", @@ -595,9 +637,10 @@ "alist" ], "accent": "emerald green (#4ade80) status nodes and gold telemetry", - "unique_elements": "A multi-stage floating acrylic workflow pathway with five interlocking diamond gates, automatically self-repairing broken link fragments with glowing golden solder", + "unique_elements": "A multi-stage floating acrylic workflow pathway with five interlocking diamond gates, automatically bridging broken link fragments with glowing golden solder", "evidence_summary": "5 workflows · NocoDB + n8n + AList", - "prompt": "A multi-stage floating acrylic workflow pathway with five interlocking diamond gates, automatically self-repairing broken link fragments with glowing golden solder, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "prompt": "A multi-stage floating acrylic workflow pathway with five interlocking diamond gates, automatically bridging broken link fragments with glowing golden solder", + "caption": "captions/self-healing-digital-goods-entitlements.json" }, { "slug": "self-hosted-speech-to-text-api", @@ -609,9 +652,10 @@ "stt" ], "accent": "emerald green (#4ade80) status nodes and gold telemetry", - "unique_elements": "An expansive architectural blueprint of enterprise private cloud nodes interconnected by luminous data pathways and telemetry readouts", - "evidence_summary": "enterprise delivery · real-world production", - "prompt": "An expansive architectural blueprint of enterprise private cloud nodes interconnected by luminous data pathways and telemetry readouts, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A floating obsidian microphone capsule inside a soundproof dark chamber, its waveform converted into clean engraved grooves on a crystal tablet beside it", + "evidence_summary": "whisper.cpp large-v3 · ~5x typing", + "prompt": "A floating obsidian microphone capsule inside a soundproof dark chamber, its waveform converted into clean engraved grooves on a crystal tablet beside it", + "caption": "captions/self-hosted-speech-to-text-api.json" }, { "slug": "self-hosting-mem0-memory-stack", @@ -623,9 +667,10 @@ "postgres" ], "accent": "emerald green (#4ade80) status nodes and gold telemetry", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A stack of three interlocking transparent memory capsules above a glowing vector-index lattice core, each capsule holding suspended point-cloud nodes", + "evidence_summary": "mem0 + LiteLLM + pgvector · :20015", + "prompt": "A stack of three interlocking transparent memory capsules above a glowing vector-index lattice core, each capsule holding suspended point-cloud nodes", + "caption": "captions/self-hosting-mem0-memory-stack.json" }, { "slug": "shipping-an-ai-photo-editor-as-a-wordpress-plugin", @@ -637,9 +682,10 @@ "fal-ai" ], "accent": "emerald green (#4ade80) status nodes and gold telemetry", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A brushed dark modular cartridge docked into a slot on a wall of stacked obsidian building blocks, a neat pile of thin shims beside it with one cracked shim glowing red", + "evidence_summary": "22 versions · fal.ai async queue", + "prompt": "A brushed dark modular cartridge docked into a slot on a wall of stacked obsidian building blocks, a neat pile of thin shims beside it with one cracked shim glowing red", + "caption": "captions/shipping-an-ai-photo-editor-as-a-wordpress-plugin.json" }, { "slug": "smartctl-exit-code-32-skips-the-disks-that-matter", @@ -651,9 +697,10 @@ "unraid" ], "accent": "warm amber-orange warning glow (#fbbf24)", - "unique_elements": "A precision laser diagnostic sensor scanning a floating high-density magnetic storage platter, revealing microscopic sector heatmaps", - "evidence_summary": "storage diagnostics · SMART telemetry", - "prompt": "A precision laser diagnostic sensor scanning a floating high-density magnetic storage platter, revealing microscopic sector heatmaps, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with warm amber-orange warning glow (#fbbf24) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A row of dark platter cartridges on an inspection rail where a sorting gate waves the most worn cartridge straight past into an unchecked waste channel", + "evidence_summary": "rc=32 is not failure · skips bad disks", + "prompt": "A row of dark platter cartridges on an inspection rail where a sorting gate waves the most worn cartridge straight past into an unchecked waste channel", + "caption": "captions/smartctl-exit-code-32-skips-the-disks-that-matter.json" }, { "slug": "space-reclamation-wasnt-stuck-it-was-waiting", @@ -665,9 +712,10 @@ "snapshots" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "A massive btrfs filesystem disk cylinder slowly draining fragmented blue blocks into an obsidian reclamation pit, guided by a precision holographic timer dial count down", + "unique_elements": "A massive filesystem disk cylinder slowly draining fragmented blue blocks into an obsidian reclamation pit, guided by a precision holographic timer dial counting down", "evidence_summary": "121 GiB returned · scheduled 09:29", - "prompt": "A massive btrfs filesystem disk cylinder slowly draining fragmented blue blocks into an obsidian reclamation pit, guided by a precision holographic timer dial count down, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "prompt": "A massive filesystem disk cylinder slowly draining fragmented blue blocks into an obsidian reclamation pit, guided by a precision holographic timer dial counting down", + "caption": "captions/space-reclamation-wasnt-stuck-it-was-waiting.json" }, { "slug": "stop-writing-agent-prompts-for-deterministic-work", @@ -679,9 +727,10 @@ "ai-agents" ], "accent": "warm amber-orange warning glow (#fbbf24)", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with warm amber-orange warning glow (#fbbf24) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "An oversized ornate mechanical gear train fused to a tiny simple toggle switch, a strand of glowing ribbon tangled uselessly around the gear teeth", + "evidence_summary": "29 straight failures · 1 string compare", + "prompt": "An oversized ornate mechanical gear train fused to a tiny simple toggle switch, a strand of glowing ribbon tangled uselessly around the gear teeth", + "caption": "captions/stop-writing-agent-prompts-for-deterministic-work.json" }, { "slug": "syncing-a-self-improving-ai-agent-across-machines", @@ -693,9 +742,10 @@ "gitea" ], "accent": "emerald green (#4ade80) status nodes and gold telemetry", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "Two obsidian agent cores on separate pedestals sharing one translucent memory ribbon strung between them, mirrored facets echoing each other", + "evidence_summary": "git-backed profile · manual sync", + "prompt": "Two obsidian agent cores on separate pedestals sharing one translucent memory ribbon strung between them, mirrored facets echoing each other", + "caption": "captions/syncing-a-self-improving-ai-agent-across-machines.json" }, { "slug": "synology-api-401-with-the-correct-password", @@ -707,9 +757,10 @@ "rest-api" ], "accent": "warm amber-orange warning glow (#fbbf24)", - "unique_elements": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light", - "evidence_summary": "root-cause analysis · production evidence", - "prompt": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with warm amber-orange warning glow (#fbbf24) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A brass key entered perfectly into a dark lock plate that still glows red, two different fault traces visible behind a diagnostic glass side panel", + "evidence_summary": "401 twice · 2 causes · 3 commands", + "prompt": "A brass key entered perfectly into a dark lock plate that still glows red, two different fault traces visible behind a diagnostic glass side panel", + "caption": "captions/synology-api-401-with-the-correct-password.json" }, { "slug": "synology-spreadsheet-api-is-a-container", @@ -721,9 +772,10 @@ "docker" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Modular glowing cubic container blocks neatly docked into an industrial server chassis, synchronized by high-speed optic interconnects", - "evidence_summary": "containerized topology · isolated runtime", - "prompt": "Modular glowing cubic container blocks neatly docked into an industrial server chassis, synchronized by high-speed optic interconnects, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A grid of obsidian spreadsheet cells housed inside a sealed service container box, four small barricade plates standing around its access hatches", + "evidence_summary": "1515 APIs · 4 traps", + "prompt": "A grid of obsidian spreadsheet cells housed inside a sealed service container box, four small barricade plates standing around its access hatches", + "caption": "captions/synology-spreadsheet-api-is-a-container.json" }, { "slug": "that-dying-ssd-was-just-a-bad-sata-cable", @@ -735,9 +787,10 @@ "ssd" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "An unbranded solid-state drive slab lying clean and healthy on an inspection cradle beside a single frayed ribbon cable whose exposed conductor is the only damaged element in the frame", + "evidence_summary": "WRITE FPDMA timeout · 1 SATA cable", + "prompt": "An unbranded solid-state drive slab lying clean and healthy on an inspection cradle beside a single frayed ribbon cable whose exposed conductor is the only damaged element in the frame", + "caption": "captions/that-dying-ssd-was-just-a-bad-sata-cable.json" }, { "slug": "the-cause-was-trim-not-the-ssds", @@ -749,9 +802,10 @@ "trim" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "Two identical crystal data platters both striped by the same glowing zero-band across their surface, a hidden firmware splinter visible in the shared substrate between them", + "evidence_summary": "corruption_errs 27 / 31 · queued TRIM", + "prompt": "Two identical crystal data platters both striped by the same glowing zero-band across their surface, a hidden firmware splinter visible in the shared substrate between them", + "caption": "captions/the-cause-was-trim-not-the-ssds.json" }, { "slug": "the-nocodb-attachment-that-wouldnt-update", @@ -763,9 +817,10 @@ "python" ], "accent": "warm amber-orange warning glow (#fbbf24)", - "unique_elements": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light", - "evidence_summary": "root-cause analysis · production evidence", - "prompt": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with warm amber-orange warning glow (#fbbf24) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "Two nearly identical obsidian tiles slotted into the same dark rail, the older tile stubbornly holding its groove while a translucent duplicate hovers beside it", + "evidence_summary": "300 rows · 1 lookahead regex miss", + "prompt": "Two nearly identical obsidian tiles slotted into the same dark rail, the older tile stubbornly holding its groove while a translucent duplicate hovers beside it", + "caption": "captions/the-nocodb-attachment-that-wouldnt-update.json" }, { "slug": "the-upstream-was-deleted-then-came-back-rewritten", @@ -777,9 +832,10 @@ "upstream" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "An empty hollow container shell sitting on a dark shelf beside a freshly rebuilt shell of a brighter alloy, the new one still gleaming and unweathered", + "evidence_summary": "repo 404 · 233 commits rewrite", + "prompt": "An empty hollow container shell sitting on a dark shelf beside a freshly rebuilt shell of a brighter alloy, the new one still gleaming and unweathered", + "caption": "captions/the-upstream-was-deleted-then-came-back-rewritten.json" }, { "slug": "two-ways-a-javascript-file-stops-working-and-looks-fine", @@ -791,9 +847,10 @@ "debugging" ], "accent": "royal cobalt blue (#295cff) with crisp ice-white", - "unique_elements": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light", - "evidence_summary": "root-cause analysis · production evidence", - "prompt": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with royal cobalt blue (#295cff) with crisp ice-white highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A luminous display panel that looks perfectly alive while two of its internal conduits are severed beneath the unbroken glass face", + "evidence_summary": "shadowed name · let below call", + "prompt": "A luminous display panel that looks perfectly alive while two of its internal conduits are severed beneath the unbroken glass face", + "caption": "captions/two-ways-a-javascript-file-stops-working-and-looks-fine.json" }, { "slug": "unraid-stop-array-hangs-on-swapfile", @@ -805,9 +862,10 @@ "btrfs" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "A precision laser diagnostic sensor scanning a floating high-density magnetic storage platter, revealing microscopic sector heatmaps", - "evidence_summary": "storage diagnostics · SMART telemetry", - "prompt": "A precision laser diagnostic sensor scanning a floating high-density magnetic storage platter, revealing microscopic sector heatmaps, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A heavy obsidian disk array carriage halted on its rails, an eight-segment anchor block clamping one wheel to the floor frame", + "evidence_summary": "8 GB swapfile pins /mnt/cache", + "prompt": "A heavy obsidian disk array carriage halted on its rails, an eight-segment anchor block clamping one wheel to the floor frame", + "caption": "captions/unraid-stop-array-hangs-on-swapfile.json" }, { "slug": "upgrading-codeigniter-46-to-47", @@ -819,9 +877,10 @@ "upgrade" ], "accent": "warm amber-orange warning glow (#fbbf24)", - "unique_elements": "Interlocking precision architectural pillars and modular computational foundations, supporting a clean crystalline software framework", - "evidence_summary": "verification gates · deterministic code", - "prompt": "Interlocking precision architectural pillars and modular computational foundations, supporting a clean crystalline software framework, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with warm amber-orange warning glow (#fbbf24) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "An obsidian upgrade manifold whose eight sealed ports run cold and silent while two open ports vent hot red vapour", + "evidence_summary": "4.6 → 4.7 · 2 unlisted fatals", + "prompt": "An obsidian upgrade manifold whose eight sealed ports run cold and silent while two open ports vent hot red vapour", + "caption": "captions/upgrading-codeigniter-46-to-47.json" }, { "slug": "using-chinese-llm-apis-from-malaysia", @@ -833,9 +892,10 @@ "deepseek" ], "accent": "neon-cyan and electric violet-magenta", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with neon-cyan and electric violet-magenta highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A sealed gateway pylon with a currency-shaped token slot and a verification bell, feeding a distant dark lattice of model cores through a long cable run", + "evidence_summary": "GLM-5.3 · DeepSeek V4 · RMB top-up", + "prompt": "A sealed gateway pylon with a currency-shaped token slot and a verification bell, feeding a distant dark lattice of model cores through a long cable run", + "caption": "captions/using-chinese-llm-apis-from-malaysia.json" }, { "slug": "verifying-a-pdf-report-page-by-page", @@ -847,9 +907,10 @@ "pdf" ], "accent": "royal cobalt blue (#295cff) with crisp ice-white", - "unique_elements": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light", - "evidence_summary": "root-cause analysis · production evidence", - "prompt": "A minimalist diagnostic probe examining a micro-structural hardware flaw illuminated by a subtle amber pinpoint warning light, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with royal cobalt blue (#295cff) with crisp ice-white highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "Nineteen identically cut crystal page plates fanned in a stack on a dark calibration table while a precision measuring caliper checks each plate's edge alignment", + "evidence_summary": "19 pages · every deviation < 2 pt", + "prompt": "Nineteen identically cut crystal page plates fanned in a stack on a dark calibration table while a precision measuring caliper checks each plate's edge alignment", + "caption": "captions/verifying-a-pdf-report-page-by-page.json" }, { "slug": "vetting-an-open-source-dependency-before-you-bet-on-it", @@ -861,9 +922,10 @@ "oidc" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A dark dependency crate opened on a market bench, six inspection checkpoints laid out beside it and one hollow false-bottomed compartment exposed", + "evidence_summary": "6 checks · grep beats the README", + "prompt": "A dark dependency crate opened on a market bench, six inspection checkpoints laid out beside it and one hollow false-bottomed compartment exposed", + "caption": "captions/vetting-an-open-source-dependency-before-you-bet-on-it.json" }, { "slug": "when-smart-says-healthy-but-your-raid-is-corrupting-data", @@ -875,9 +937,10 @@ "nvme" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "A precision laser diagnostic sensor scanning a floating high-density magnetic storage platter, revealing microscopic sector heatmaps", - "evidence_summary": "storage diagnostics · SMART telemetry", - "prompt": "A precision laser diagnostic sensor scanning a floating high-density magnetic storage platter, revealing microscopic sector heatmaps, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "Two clean-looking mirrored disk platters certified with green tags while a fine hairline of corrupted static seeps from the seam between them", + "evidence_summary": "SMART healthy · checksum 0x8941f998", + "prompt": "Two clean-looking mirrored disk platters certified with green tags while a fine hairline of corrupted static seeps from the seam between them", + "caption": "captions/when-smart-says-healthy-but-your-raid-is-corrupting-data.json" }, { "slug": "why-500000-lines-of-commit-churn-only-left-230000-in-production", @@ -889,9 +952,10 @@ "devops" ], "accent": "royal cobalt blue (#295cff) with crisp ice-white", - "unique_elements": "Interlocking precision architectural pillars and modular computational foundations, supporting a clean crystalline software framework", - "evidence_summary": "verification gates · deterministic code", - "prompt": "Interlocking precision architectural pillars and modular computational foundations, supporting a clean crystalline software framework, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with royal cobalt blue (#295cff) with crisp ice-white highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A wide extrusion nozzle laying down an enormous glowing filament coil while a narrow precision sieve beneath it lets only a smaller refined strand fall into a production crate", + "evidence_summary": "518,000 added · 235,000 kept · 5 repos", + "prompt": "A wide extrusion nozzle laying down an enormous glowing filament coil while a narrow precision sieve beneath it lets only a smaller refined strand fall into a production crate", + "caption": "captions/why-500000-lines-of-commit-churn-only-left-230000-in-production.json" }, { "slug": "why-chrome-forgets-its-tabs-in-a-container", @@ -903,9 +967,10 @@ "cdp" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Modular glowing cubic container blocks neatly docked into an industrial server chassis, synchronized by high-speed optic interconnects", - "evidence_summary": "containerized topology · isolated runtime", - "prompt": "Modular glowing cubic container blocks neatly docked into an industrial server chassis, synchronized by high-speed optic interconnects, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A dark browser window frame whose restored tab plates are scattered outside its own container wall, a small keeper bracket bridging the seam", + "evidence_summary": "RestoreOnStartup=1 · 70-line keeper", + "prompt": "A dark browser window frame whose restored tab plates are scattered outside its own container wall, a small keeper bracket bridging the seam", + "caption": "captions/why-chrome-forgets-its-tabs-in-a-container.json" }, { "slug": "why-i-still-bought-a-local-gpu", @@ -917,9 +982,10 @@ "llama-cpp" ], "accent": "neon-cyan and electric violet-magenta", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with neon-cyan and electric violet-magenta highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A dense obsidian accelerator block seated in its own heatsink cradle on a workbench, radiating private warm light while cloud-tethered terminals hang faintly in the dark background", + "evidence_summary": "stronger frontier · local for retries + batch", + "prompt": "A dense obsidian accelerator block seated in its own heatsink cradle on a workbench, radiating private warm light while cloud-tethered terminals hang faintly in the dark background", + "caption": "captions/why-i-still-bought-a-local-gpu.json" }, { "slug": "why-my-on-chain-nft-art-changed-on-windows", @@ -931,9 +997,10 @@ "svg" ], "accent": "translucent emerald (#10b981) and prism-split cyan", - "unique_elements": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths", - "evidence_summary": "autonomous loop · constrained execution", - "prompt": "Concentric acrylic rings of an autonomous neural decision core, pulsing with directed cyan synaptic data packets along vector paths, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with translucent emerald (#10b981) and prism-split cyan highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "An identical carved art plaque duplicated on two colour-matched plinths, one copy shifted by an extra invisible notch at every edge", + "evidence_summary": "autocrlf CRLF · base64 differs", + "prompt": "An identical carved art plaque duplicated on two colour-matched plinths, one copy shifted by an extra invisible notch at every edge", + "caption": "captions/why-my-on-chain-nft-art-changed-on-windows.json" }, { "slug": "why-telegram-bot-notifications-die", @@ -945,9 +1012,10 @@ "python" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "An intricate routing matrix of optical network fiber switches, filtering and directing packet envelopes through cryptographic security barriers", - "evidence_summary": "mail protocol routing · DKIM / SPF handshake", - "prompt": "An intricate routing matrix of optical network fiber switches, filtering and directing packet envelopes through cryptographic security barriers, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A folded paper-plane drone stopped at a narrow dark archway, its front slot jammed with a crumpled translucent strip and a red glow bleeding out", + "evidence_summary": "400 on sendPhoto · getMe fine · IPv6-only DNS", + "prompt": "A folded paper-plane drone stopped at a narrow dark archway, its front slot jammed with a crumpled translucent strip and a red glow bleeding out", + "caption": "captions/why-telegram-bot-notifications-die.json" }, { "slug": "why-your-cdp-clicks-silently-fail", @@ -959,9 +1027,10 @@ "react" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "A high-precision robotic cursor pointer clicking onto a translucent glass UI button that has already shifted away due to an invisible kinetic wave, triggering zero DOM resonance", + "unique_elements": "A high-precision robotic cursor pointer clicking onto a translucent glass button that has already shifted away on an invisible kinetic wave, triggering no resonance", "evidence_summary": "scroll-behavior:smooth · rect expired", - "prompt": "A high-precision robotic cursor pointer clicking onto a translucent glass UI button that has already shifted away due to an invisible kinetic wave, triggering zero DOM resonance, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "prompt": "A high-precision robotic cursor pointer clicking onto a translucent glass button that has already shifted away on an invisible kinetic wave, triggering no resonance", + "caption": "captions/why-your-cdp-clicks-silently-fail.json" }, { "slug": "why-your-grafana-dashboard-shows-no-data", @@ -973,9 +1042,10 @@ "dashboards" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters", - "evidence_summary": "production DevOps · verified metrics", - "prompt": "Sleek industrial rackmount hardware with glowing diagnostic bus cables, routing high-throughput telemetry streams across redundant server clusters, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A wide wall of forty-one dark telemetry panels all reading blank, one small self-referential filter disc visibly stuck against its own inlet", + "evidence_summary": "41 panels No data · variable filtered itself", + "prompt": "A wide wall of forty-one dark telemetry panels all reading blank, one small self-referential filter disc visibly stuck against its own inlet", + "caption": "captions/why-your-grafana-dashboard-shows-no-data.json" }, { "slug": "why-your-headless-browser-cant-scrape-everything", @@ -987,9 +1057,10 @@ "browserless" ], "accent": "emerald green (#4ade80) status nodes and gold telemetry", - "unique_elements": "An expansive architectural blueprint of enterprise private cloud nodes interconnected by luminous data pathways and telemetry readouts", - "evidence_summary": "enterprise delivery · real-world production", - "prompt": "An expansive architectural blueprint of enterprise private cloud nodes interconnected by luminous data pathways and telemetry readouts, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with emerald green (#4ade80) status nodes and gold telemetry highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "Two market booths side by side, one sealed shut behind a wall of blank grey panels while the other stays open with warm goods faintly visible inside", + "evidence_summary": "Goofish blocks · Carousell serves", + "prompt": "Two market booths side by side, one sealed shut behind a wall of blank grey panels while the other stays open with warm goods faintly visible inside", + "caption": "captions/why-your-headless-browser-cant-scrape-everything.json" }, { "slug": "your-disk-full-alert-is-lying", @@ -1001,8 +1072,9 @@ "prometheus" ], "accent": "cyan and vibrant emerald green (#4ade80)", - "unique_elements": "A precision laser diagnostic sensor scanning a floating high-density magnetic storage platter, revealing microscopic sector heatmaps", - "evidence_summary": "storage diagnostics · SMART telemetry", - "prompt": "A precision laser diagnostic sensor scanning a floating high-density magnetic storage platter, revealing microscopic sector heatmaps, styled as a modern dark cyber-bento 3D concept and technical blueprint schematic. Sleek matte obsidian hardware, frosted acrylic glass surfaces, subtle ultra-thin blueprint coordinate crosshairs and vector topology lines in the background. Strictly off-center composition: the 3D focal subject is positioned exclusively in the right 38% of the canvas, leaving vast, clean, uncluttered dark negative space across the entire left 62% for UI overlay. Deep midnight slate background (#0b0f19 to #111827), volumetric rim lighting in royal blue (#4d82ff) with cyan and vibrant emerald green (#4ade80) highlights, raytraced ambient occlusion, macro depth of field, 8k resolution, no text, no typography, no letters, no numbers, no HUD labels, no watermark." + "unique_elements": "A tall nearly empty barrel of enormous capacity with a tiny amber fill line at its base, while a percentage gauge above it strains against its stop", + "evidence_summary": "3% free = 500 GB · alert fires wrong way", + "prompt": "A tall nearly empty barrel of enormous capacity with a tiny amber fill line at its base, while a percentage gauge above it strains against its stop", + "caption": "captions/your-disk-full-alert-is-lying.json" } -] \ No newline at end of file +] diff --git a/scripts/og-gen/sync_prompts_catalog.py b/scripts/og-gen/sync_prompts_catalog.py new file mode 100644 index 0000000..f44012a --- /dev/null +++ b/scripts/og-gen/sync_prompts_catalog.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 +"""sync_prompts_catalog.py — freeze the art inputs into the repo. + +The metaphors and captions are authored in the Ideogram 4 tool dir +(`C:/AI/ideogram4/`), which is NOT in this repository. Without this script the +repository could not reproduce a single frame: `prompts_catalog.json` would still +describe the 21 shared metaphors that produced the near-duplicate v1-adjacent art. + +This copies the authoring state into the repo so git alone is enough: + + scripts/og-gen/metaphors.json slug -> the unique metaphor (72/72 distinct) + scripts/og-gen/captions/<slug>.json the exact structured caption sent to the model + scripts/og-gen/prompts_catalog.json same shape as before, refreshed from the above + +Usage: + python scripts/og-gen/sync_prompts_catalog.py # uses C:/AI/ideogram4 + python scripts/og-gen/sync_prompts_catalog.py --tool-dir D:/other + python scripts/og-gen/sync_prompts_catalog.py --check # report only, no writes +""" +from __future__ import annotations + +import argparse +import importlib.util +import json +import shutil +import sys +from pathlib import Path + +REPO = Path(__file__).resolve().parents[2] +OG = REPO / "scripts" / "og-gen" + + +def load_metaphors(tool_dir: Path) -> dict[str, str]: + src = tool_dir / "build_captions.py" + if not src.exists(): + raise SystemExit(f"no build_captions.py under {tool_dir} (pass --tool-dir)") + spec = importlib.util.spec_from_file_location("build_captions", src) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return dict(mod.METAPHORS) + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--tool-dir", default="C:/AI/ideogram4") + ap.add_argument("--check", action="store_true", help="report only, write nothing") + args = ap.parse_args() + + tool = Path(args.tool_dir) + metaphors = load_metaphors(tool) + + posts = {p.stem for p in (REPO / "src" / "content" / "posts").glob("*.md")} + catalog = json.loads((OG / "prompts_catalog.json").read_text(encoding="utf-8")) + meta = json.loads((OG / "art-meta.json").read_text(encoding="utf-8")) + + problems = [] + if set(metaphors) != posts: + problems.append(f"slug mismatch: missing={sorted(posts - set(metaphors))[:4]} extra={sorted(set(metaphors) - posts)[:4]}") + if len(set(metaphors.values())) != len(metaphors): + problems.append(f"only {len(set(metaphors.values()))} distinct metaphors for {len(metaphors)} posts") + + missing_captions = [s for s in metaphors if not (tool / "captions" / f"{s}.json").exists()] + if missing_captions: + problems.append(f"{len(missing_captions)} captions absent from {tool / 'captions'}") + missing_evidence = [s for s in metaphors if not meta.get(s, {}).get("evidence")] + if missing_evidence: + problems.append(f"{len(missing_evidence)} posts have no evidence line in art-meta.json") + + print(f"posts {len(posts)} · metaphors {len(metaphors)} · distinct {len(set(metaphors.values()))} · catalog {len(catalog)}") + print("problems:", problems or "none") + if problems: + sys.exit(1) + if args.check: + print("--check: nothing written") + return + + (OG / "metaphors.json").write_text( + json.dumps({k: metaphors[k] for k in sorted(metaphors)}, indent=2, ensure_ascii=False) + "\n", + encoding="utf-8", + ) + dest = OG / "captions" + dest.mkdir(exist_ok=True) + for slug in metaphors: + shutil.copyfile(tool / "captions" / f"{slug}.json", dest / f"{slug}.json") + + by_slug = {e["slug"]: e for e in catalog} + out = [] + for slug in sorted(metaphors): + entry = by_slug.get(slug, {"slug": slug}) + caption = json.loads((tool / "captions" / f"{slug}.json").read_text(encoding="utf-8")) + elems = caption.get("compositional_details", {}).get("elements", []) + entry["unique_elements"] = metaphors[slug] + entry["prompt"] = " ".join(e.get("desc", "") for e in elems).strip() or metaphors[slug] + entry["evidence_summary"] = meta.get(slug, {}).get("evidence", entry.get("evidence_summary", "")) + entry["caption"] = f"captions/{slug}.json" + out.append(entry) + (OG / "prompts_catalog.json").write_text(json.dumps(out, indent=2, ensure_ascii=False) + "\n", encoding="utf-8") + print(f"wrote metaphors.json, captions/ ({len(metaphors)} files), prompts_catalog.json") + + +if __name__ == "__main__": + main() diff --git a/src/components/PostList.astro b/src/components/PostList.astro index 8982323..099fe7e 100644 --- a/src/components/PostList.astro +++ b/src/components/PostList.astro @@ -38,8 +38,12 @@ const hasThumb = (post: CollectionEntry<'posts'>) => { const p = og(post); return p.startsWith('/og/') && p !== '/og-default.png' && p !== '/og-default.jpg'; }; -const thumb = (post: CollectionEntry<'posts'>, w: 400 | 800) => - og(post).replace('/og/', '/og/thumb/').replace(/\.png$/, `-${w}.webp`); +const thumb = (post: CollectionEntry<'posts'>, w: 400 | 800) => { + // Thumbs are keyed by the base slug, not by the og file: a ZH post's ogImage is + // /og/zh-<slug>.jpg while the renderer only emits /og/thumb/<slug>-<w>.webp. + const base = post.slug.replace(/^zh\//, ''); + return `/og/thumb/${base}-${w}.webp`; +}; --- <ul class="post-list"> diff --git a/src/content/posts/adding-a-domain-to-someone-elses-mail-server.md b/src/content/posts/adding-a-domain-to-someone-elses-mail-server.md index e294601..cbca980 100644 --- a/src/content/posts/adding-a-domain-to-someone-elses-mail-server.md +++ b/src/content/posts/adding-a-domain-to-someone-elses-mail-server.md @@ -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 --- diff --git a/src/content/posts/adding-english-mode-to-a-chinese-only-web-app.md b/src/content/posts/adding-english-mode-to-a-chinese-only-web-app.md index 53ba0fc..04d15c0 100644 --- a/src/content/posts/adding-english-mode-to-a-chinese-only-web-app.md +++ b/src/content/posts/adding-english-mode-to-a-chinese-only-web-app.md @@ -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 --- diff --git a/src/content/posts/ai-furniture-compositing-with-flux-kontext.md b/src/content/posts/ai-furniture-compositing-with-flux-kontext.md index 1a75e1c..eff7e6f 100644 --- a/src/content/posts/ai-furniture-compositing-with-flux-kontext.md +++ b/src/content/posts/ai-furniture-compositing-with-flux-kontext.md @@ -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 diff --git a/src/content/posts/authentik-css-greater-than-bug.md b/src/content/posts/authentik-css-greater-than-bug.md index f95515e..14da737 100644 --- a/src/content/posts/authentik-css-greater-than-bug.md +++ b/src/content/posts/authentik-css-greater-than-bug.md @@ -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 --- diff --git a/src/content/posts/authentik-forward-auth-gate-wasnt-live.md b/src/content/posts/authentik-forward-auth-gate-wasnt-live.md index ce52087..a55a76a 100644 --- a/src/content/posts/authentik-forward-auth-gate-wasnt-live.md +++ b/src/content/posts/authentik-forward-auth-gate-wasnt-live.md @@ -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 --- diff --git a/src/content/posts/authentik-major-upgrade-gotchas.md b/src/content/posts/authentik-major-upgrade-gotchas.md index 2f23be8..104057c 100644 --- a/src/content/posts/authentik-major-upgrade-gotchas.md +++ b/src/content/posts/authentik-major-upgrade-gotchas.md @@ -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 — diff --git a/src/content/posts/automating-cyberpanel-without-the-ui.md b/src/content/posts/automating-cyberpanel-without-the-ui.md index eced062..41c0980 100644 --- a/src/content/posts/automating-cyberpanel-without-the-ui.md +++ b/src/content/posts/automating-cyberpanel-without-the-ui.md @@ -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 diff --git a/src/content/posts/best-ai-video-generators-2026.md b/src/content/posts/best-ai-video-generators-2026.md index 4b96e26..5185a60 100644 --- a/src/content/posts/best-ai-video-generators-2026.md +++ b/src/content/posts/best-ai-video-generators-2026.md @@ -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? diff --git a/src/content/posts/calibrating-intel-quick-sync-hevc-quality.md b/src/content/posts/calibrating-intel-quick-sync-hevc-quality.md index 322a746..c36a857 100644 --- a/src/content/posts/calibrating-intel-quick-sync-hevc-quality.md +++ b/src/content/posts/calibrating-intel-quick-sync-hevc-quality.md @@ -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 --- diff --git a/src/content/posts/chainlink-vrf-v2-lottery-contract.md b/src/content/posts/chainlink-vrf-v2-lottery-contract.md index 156496b..9a34511 100644 --- a/src/content/posts/chainlink-vrf-v2-lottery-contract.md +++ b/src/content/posts/chainlink-vrf-v2-lottery-contract.md @@ -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 --- diff --git a/src/content/posts/docker-reported-exit-0-the-oom-killer-disagreed.md b/src/content/posts/docker-reported-exit-0-the-oom-killer-disagreed.md index d629a58..16e0ecd 100644 --- a/src/content/posts/docker-reported-exit-0-the-oom-killer-disagreed.md +++ b/src/content/posts/docker-reported-exit-0-the-oom-killer-disagreed.md @@ -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 --- diff --git a/src/content/posts/does-hevc-actually-shrink-your-files.md b/src/content/posts/does-hevc-actually-shrink-your-files.md index 82a8335..a9aaafd 100644 --- a/src/content/posts/does-hevc-actually-shrink-your-files.md +++ b/src/content/posts/does-hevc-actually-shrink-your-files.md @@ -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 --- diff --git a/src/content/posts/embedding-fonts-so-a-pdf-looks-the-same-everywhere.md b/src/content/posts/embedding-fonts-so-a-pdf-looks-the-same-everywhere.md index 28a48bb..f8f89f6 100644 --- a/src/content/posts/embedding-fonts-so-a-pdf-looks-the-same-everywhere.md +++ b/src/content/posts/embedding-fonts-so-a-pdf-looks-the-same-everywhere.md @@ -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 --- diff --git a/src/content/posts/every-player-stuttered-the-file-was-fine.md b/src/content/posts/every-player-stuttered-the-file-was-fine.md index 759b021..ab8b80e 100644 --- a/src/content/posts/every-player-stuttered-the-file-was-fine.md +++ b/src/content/posts/every-player-stuttered-the-file-was-fine.md @@ -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 --- diff --git a/src/content/posts/five-step-ai-roadmap-what-i-actually-run.md b/src/content/posts/five-step-ai-roadmap-what-i-actually-run.md index a32a14b..a4ae18a 100644 --- a/src/content/posts/five-step-ai-roadmap-what-i-actually-run.md +++ b/src/content/posts/five-step-ai-roadmap-what-i-actually-run.md @@ -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 --- diff --git a/src/content/posts/fully-on-chain-svg-nfts.md b/src/content/posts/fully-on-chain-svg-nfts.md index 907ed46..bfdc44b 100644 --- a/src/content/posts/fully-on-chain-svg-nfts.md +++ b/src/content/posts/fully-on-chain-svg-nfts.md @@ -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 --- diff --git a/src/content/posts/hardening-a-tor-onion-service.md b/src/content/posts/hardening-a-tor-onion-service.md index 318bde6..9599456 100644 --- a/src/content/posts/hardening-a-tor-onion-service.md +++ b/src/content/posts/hardening-a-tor-onion-service.md @@ -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. diff --git a/src/content/posts/hello-world.md b/src/content/posts/hello-world.md index 59f8a66..7e545a6 100644 --- a/src/content/posts/hello-world.md +++ b/src/content/posts/hello-world.md @@ -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 diff --git a/src/content/posts/how-i-built-the-digikedai-telegram-bot.md b/src/content/posts/how-i-built-the-digikedai-telegram-bot.md index f3c6cfe..4fe0887 100644 --- a/src/content/posts/how-i-built-the-digikedai-telegram-bot.md +++ b/src/content/posts/how-i-built-the-digikedai-telegram-bot.md @@ -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 diff --git a/src/content/posts/how-i-host-this-blog.md b/src/content/posts/how-i-host-this-blog.md index 8f02f8c..9d62ec8 100644 --- a/src/content/posts/how-i-host-this-blog.md +++ b/src/content/posts/how-i-host-this-blog.md @@ -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. diff --git a/src/content/posts/how-i-made-my-own-songs-with-suno-ai.md b/src/content/posts/how-i-made-my-own-songs-with-suno-ai.md index b760400..01ab374 100644 --- a/src/content/posts/how-i-made-my-own-songs-with-suno-ai.md +++ b/src/content/posts/how-i-made-my-own-songs-with-suno-ai.md @@ -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, 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 516f4de..79e2783 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 @@ -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 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 211f199..cb4cbb8 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 @@ -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"*, diff --git a/src/content/posts/i-let-an-agent-manage-my-shopee-vouchers.md b/src/content/posts/i-let-an-agent-manage-my-shopee-vouchers.md index b9b4d68..8d81f6e 100644 --- a/src/content/posts/i-let-an-agent-manage-my-shopee-vouchers.md +++ b/src/content/posts/i-let-an-agent-manage-my-shopee-vouchers.md @@ -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 --- diff --git a/src/content/posts/it-reported-success-nothing-had-changed.md b/src/content/posts/it-reported-success-nothing-had-changed.md index 23043b8..ca4f014 100644 --- a/src/content/posts/it-reported-success-nothing-had-changed.md +++ b/src/content/posts/it-reported-success-nothing-had-changed.md @@ -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 --- diff --git a/src/content/posts/jpa-version-field-lost-update.md b/src/content/posts/jpa-version-field-lost-update.md index 5be50fe..2518dce 100644 --- a/src/content/posts/jpa-version-field-lost-update.md +++ b/src/content/posts/jpa-version-field-lost-update.md @@ -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 --- diff --git a/src/content/posts/loop-engineering-without-a-coding-agent.md b/src/content/posts/loop-engineering-without-a-coding-agent.md index 8535bb0..37b3459 100644 --- a/src/content/posts/loop-engineering-without-a-coding-agent.md +++ b/src/content/posts/loop-engineering-without-a-coding-agent.md @@ -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 --- diff --git a/src/content/posts/migrating-codeigniter-iis-to-openlitespeed.md b/src/content/posts/migrating-codeigniter-iis-to-openlitespeed.md index 8978a1b..b4da1fa 100644 --- a/src/content/posts/migrating-codeigniter-iis-to-openlitespeed.md +++ b/src/content/posts/migrating-codeigniter-iis-to-openlitespeed.md @@ -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 --- diff --git a/src/content/posts/my-backup-was-using-someone-elses-api-quota.md b/src/content/posts/my-backup-was-using-someone-elses-api-quota.md index 883f62b..6898666 100644 --- a/src/content/posts/my-backup-was-using-someone-elses-api-quota.md +++ b/src/content/posts/my-backup-was-using-someone-elses-api-quota.md @@ -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 --- diff --git a/src/content/posts/n8n-v1-to-v2-upgrade-gotchas.md b/src/content/posts/n8n-v1-to-v2-upgrade-gotchas.md index 4c95027..e31c17d 100644 --- a/src/content/posts/n8n-v1-to-v2-upgrade-gotchas.md +++ b/src/content/posts/n8n-v1-to-v2-upgrade-gotchas.md @@ -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 diff --git a/src/content/posts/nocodb-sso-is-a-licensed-feature.md b/src/content/posts/nocodb-sso-is-a-licensed-feature.md index 77477a3..d3bffba 100644 --- a/src/content/posts/nocodb-sso-is-a-licensed-feature.md +++ b/src/content/posts/nocodb-sso-is-a-licensed-feature.md @@ -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 --- diff --git a/src/content/posts/one-hostname-public-tracker-sso-dashboard.md b/src/content/posts/one-hostname-public-tracker-sso-dashboard.md index 36c488d..1650b8f 100644 --- a/src/content/posts/one-hostname-public-tracker-sso-dashboard.md +++ b/src/content/posts/one-hostname-public-tracker-sso-dashboard.md @@ -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 --- diff --git a/src/content/posts/one-prometheus-for-unraid-synology-and-a-vps.md b/src/content/posts/one-prometheus-for-unraid-synology-and-a-vps.md index 2430c15..14bc79e 100644 --- a/src/content/posts/one-prometheus-for-unraid-synology-and-a-vps.md +++ b/src/content/posts/one-prometheus-for-unraid-synology-and-a-vps.md @@ -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 --- diff --git a/src/content/posts/passbolt-hang-three-failure-modes.md b/src/content/posts/passbolt-hang-three-failure-modes.md index 5f8ab3e..028da4d 100644 --- a/src/content/posts/passbolt-hang-three-failure-modes.md +++ b/src/content/posts/passbolt-hang-three-failure-modes.md @@ -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 diff --git a/src/content/posts/patching-workbench-26-for-mariadb.md b/src/content/posts/patching-workbench-26-for-mariadb.md index 58cf3de..4f136cb 100644 --- a/src/content/posts/patching-workbench-26-for-mariadb.md +++ b/src/content/posts/patching-workbench-26-for-mariadb.md @@ -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 --- diff --git a/src/content/posts/putting-a-front-door-on-an-app-you-cant-modify.md b/src/content/posts/putting-a-front-door-on-an-app-you-cant-modify.md index 20601cb..6dbd0c9 100644 --- a/src/content/posts/putting-a-front-door-on-an-app-you-cant-modify.md +++ b/src/content/posts/putting-a-front-door-on-an-app-you-cant-modify.md @@ -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 --- diff --git a/src/content/posts/read-only-nocodb-dashboard-for-a-remote-database.md b/src/content/posts/read-only-nocodb-dashboard-for-a-remote-database.md index 5f3d2d5..9eeec0e 100644 --- a/src/content/posts/read-only-nocodb-dashboard-for-a-remote-database.md +++ b/src/content/posts/read-only-nocodb-dashboard-for-a-remote-database.md @@ -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 --- diff --git a/src/content/posts/reading-a-containers-own-api-docs.md b/src/content/posts/reading-a-containers-own-api-docs.md index 12bd8e0..7fc626e 100644 --- a/src/content/posts/reading-a-containers-own-api-docs.md +++ b/src/content/posts/reading-a-containers-own-api-docs.md @@ -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 --- diff --git a/src/content/posts/replacing-rdpguard-with-ipban.md b/src/content/posts/replacing-rdpguard-with-ipban.md index 667685d..3a3fc56 100644 --- a/src/content/posts/replacing-rdpguard-with-ipban.md +++ b/src/content/posts/replacing-rdpguard-with-ipban.md @@ -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 --- diff --git a/src/content/posts/running-production-infrastructure-solo.md b/src/content/posts/running-production-infrastructure-solo.md index dc5425c..0db688c 100644 --- a/src/content/posts/running-production-infrastructure-solo.md +++ b/src/content/posts/running-production-infrastructure-solo.md @@ -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 --- diff --git a/src/content/posts/running-tts-as-a-service-with-token-sidecars.md b/src/content/posts/running-tts-as-a-service-with-token-sidecars.md index 2de7a98..0daa53a 100644 --- a/src/content/posts/running-tts-as-a-service-with-token-sidecars.md +++ b/src/content/posts/running-tts-as-a-service-with-token-sidecars.md @@ -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, diff --git a/src/content/posts/scraping-bot-walled-marketplace-warm-browser-session.md b/src/content/posts/scraping-bot-walled-marketplace-warm-browser-session.md index 246e955..a9d9edc 100644 --- a/src/content/posts/scraping-bot-walled-marketplace-warm-browser-session.md +++ b/src/content/posts/scraping-bot-walled-marketplace-warm-browser-session.md @@ -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 --- diff --git a/src/content/posts/self-healing-digital-goods-entitlements.md b/src/content/posts/self-healing-digital-goods-entitlements.md index be1740f..0474ab5 100644 --- a/src/content/posts/self-healing-digital-goods-entitlements.md +++ b/src/content/posts/self-healing-digital-goods-entitlements.md @@ -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 diff --git a/src/content/posts/self-hosted-speech-to-text-api.md b/src/content/posts/self-hosted-speech-to-text-api.md index 8c132dd..ea1aa37 100644 --- a/src/content/posts/self-hosted-speech-to-text-api.md +++ b/src/content/posts/self-hosted-speech-to-text-api.md @@ -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 diff --git a/src/content/posts/self-hosting-mem0-memory-stack.md b/src/content/posts/self-hosting-mem0-memory-stack.md index 176680d..7e25c7e 100644 --- a/src/content/posts/self-hosting-mem0-memory-stack.md +++ b/src/content/posts/self-hosting-mem0-memory-stack.md @@ -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 diff --git a/src/content/posts/shipping-an-ai-photo-editor-as-a-wordpress-plugin.md b/src/content/posts/shipping-an-ai-photo-editor-as-a-wordpress-plugin.md index 2e8a537..db8cf4b 100644 --- a/src/content/posts/shipping-an-ai-photo-editor-as-a-wordpress-plugin.md +++ b/src/content/posts/shipping-an-ai-photo-editor-as-a-wordpress-plugin.md @@ -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 --- diff --git a/src/content/posts/smartctl-exit-code-32-skips-the-disks-that-matter.md b/src/content/posts/smartctl-exit-code-32-skips-the-disks-that-matter.md index 034b1dd..a14ffcc 100644 --- a/src/content/posts/smartctl-exit-code-32-skips-the-disks-that-matter.md +++ b/src/content/posts/smartctl-exit-code-32-skips-the-disks-that-matter.md @@ -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 --- diff --git a/src/content/posts/space-reclamation-wasnt-stuck-it-was-waiting.md b/src/content/posts/space-reclamation-wasnt-stuck-it-was-waiting.md index 11a9071..6c9b024 100644 --- a/src/content/posts/space-reclamation-wasnt-stuck-it-was-waiting.md +++ b/src/content/posts/space-reclamation-wasnt-stuck-it-was-waiting.md @@ -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 --- diff --git a/src/content/posts/stop-writing-agent-prompts-for-deterministic-work.md b/src/content/posts/stop-writing-agent-prompts-for-deterministic-work.md index 7b6e46f..56777f0 100644 --- a/src/content/posts/stop-writing-agent-prompts-for-deterministic-work.md +++ b/src/content/posts/stop-writing-agent-prompts-for-deterministic-work.md @@ -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 --- 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 ce918cb..a2c504a 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 @@ -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 diff --git a/src/content/posts/synology-api-401-with-the-correct-password.md b/src/content/posts/synology-api-401-with-the-correct-password.md index 27ff1d1..5ad49ce 100644 --- a/src/content/posts/synology-api-401-with-the-correct-password.md +++ b/src/content/posts/synology-api-401-with-the-correct-password.md @@ -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 --- diff --git a/src/content/posts/synology-spreadsheet-api-is-a-container.md b/src/content/posts/synology-spreadsheet-api-is-a-container.md index 5abe4a0..7ed006f 100644 --- a/src/content/posts/synology-spreadsheet-api-is-a-container.md +++ b/src/content/posts/synology-spreadsheet-api-is-a-container.md @@ -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 --- diff --git a/src/content/posts/that-dying-ssd-was-just-a-bad-sata-cable.md b/src/content/posts/that-dying-ssd-was-just-a-bad-sata-cable.md index f5dbbea..099f155 100644 --- a/src/content/posts/that-dying-ssd-was-just-a-bad-sata-cable.md +++ b/src/content/posts/that-dying-ssd-was-just-a-bad-sata-cable.md @@ -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. diff --git a/src/content/posts/the-cause-was-trim-not-the-ssds.md b/src/content/posts/the-cause-was-trim-not-the-ssds.md index 386fb7d..c0bc128 100644 --- a/src/content/posts/the-cause-was-trim-not-the-ssds.md +++ b/src/content/posts/the-cause-was-trim-not-the-ssds.md @@ -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 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 0b05cb1..7e9fa3e 100644 --- a/src/content/posts/the-nocodb-attachment-that-wouldnt-update.md +++ b/src/content/posts/the-nocodb-attachment-that-wouldnt-update.md @@ -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 diff --git a/src/content/posts/the-upstream-was-deleted-then-came-back-rewritten.md b/src/content/posts/the-upstream-was-deleted-then-came-back-rewritten.md index a5746c5..f749bcb 100644 --- a/src/content/posts/the-upstream-was-deleted-then-came-back-rewritten.md +++ b/src/content/posts/the-upstream-was-deleted-then-came-back-rewritten.md @@ -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 --- diff --git a/src/content/posts/two-ways-a-javascript-file-stops-working-and-looks-fine.md b/src/content/posts/two-ways-a-javascript-file-stops-working-and-looks-fine.md index ca89c72..2f0876a 100644 --- a/src/content/posts/two-ways-a-javascript-file-stops-working-and-looks-fine.md +++ b/src/content/posts/two-ways-a-javascript-file-stops-working-and-looks-fine.md @@ -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 --- diff --git a/src/content/posts/unraid-stop-array-hangs-on-swapfile.md b/src/content/posts/unraid-stop-array-hangs-on-swapfile.md index e3417c9..8cf08fd 100644 --- a/src/content/posts/unraid-stop-array-hangs-on-swapfile.md +++ b/src/content/posts/unraid-stop-array-hangs-on-swapfile.md @@ -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 --- diff --git a/src/content/posts/upgrading-codeigniter-46-to-47.md b/src/content/posts/upgrading-codeigniter-46-to-47.md index a86dab6..dfab2c5 100644 --- a/src/content/posts/upgrading-codeigniter-46-to-47.md +++ b/src/content/posts/upgrading-codeigniter-46-to-47.md @@ -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 --- diff --git a/src/content/posts/using-chinese-llm-apis-from-malaysia.md b/src/content/posts/using-chinese-llm-apis-from-malaysia.md index 4ccb845..573c2f8 100644 --- a/src/content/posts/using-chinese-llm-apis-from-malaysia.md +++ b/src/content/posts/using-chinese-llm-apis-from-malaysia.md @@ -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 --- diff --git a/src/content/posts/verifying-a-pdf-report-page-by-page.md b/src/content/posts/verifying-a-pdf-report-page-by-page.md index 0d3c536..d678aca 100644 --- a/src/content/posts/verifying-a-pdf-report-page-by-page.md +++ b/src/content/posts/verifying-a-pdf-report-page-by-page.md @@ -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 --- diff --git a/src/content/posts/vetting-an-open-source-dependency-before-you-bet-on-it.md b/src/content/posts/vetting-an-open-source-dependency-before-you-bet-on-it.md index c61cdfc..f2a1b86 100644 --- a/src/content/posts/vetting-an-open-source-dependency-before-you-bet-on-it.md +++ b/src/content/posts/vetting-an-open-source-dependency-before-you-bet-on-it.md @@ -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 --- diff --git a/src/content/posts/when-smart-says-healthy-but-your-raid-is-corrupting-data.md b/src/content/posts/when-smart-says-healthy-but-your-raid-is-corrupting-data.md index 227a900..85fe544 100644 --- a/src/content/posts/when-smart-says-healthy-but-your-raid-is-corrupting-data.md +++ b/src/content/posts/when-smart-says-healthy-but-your-raid-is-corrupting-data.md @@ -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 diff --git a/src/content/posts/why-500000-lines-of-commit-churn-only-left-230000-in-production.md b/src/content/posts/why-500000-lines-of-commit-churn-only-left-230000-in-production.md index 08859eb..e5b9797 100644 --- a/src/content/posts/why-500000-lines-of-commit-churn-only-left-230000-in-production.md +++ b/src/content/posts/why-500000-lines-of-commit-churn-only-left-230000-in-production.md @@ -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 diff --git a/src/content/posts/why-chrome-forgets-its-tabs-in-a-container.md b/src/content/posts/why-chrome-forgets-its-tabs-in-a-container.md index 15bfba2..f8930bd 100644 --- a/src/content/posts/why-chrome-forgets-its-tabs-in-a-container.md +++ b/src/content/posts/why-chrome-forgets-its-tabs-in-a-container.md @@ -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 --- diff --git a/src/content/posts/why-i-still-bought-a-local-gpu.md b/src/content/posts/why-i-still-bought-a-local-gpu.md index 43aba81..d8fe461 100644 --- a/src/content/posts/why-i-still-bought-a-local-gpu.md +++ b/src/content/posts/why-i-still-bought-a-local-gpu.md @@ -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 --- diff --git a/src/content/posts/why-my-on-chain-nft-art-changed-on-windows.md b/src/content/posts/why-my-on-chain-nft-art-changed-on-windows.md index b9b8f41..7d92188 100644 --- a/src/content/posts/why-my-on-chain-nft-art-changed-on-windows.md +++ b/src/content/posts/why-my-on-chain-nft-art-changed-on-windows.md @@ -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 --- diff --git a/src/content/posts/why-telegram-bot-notifications-die.md b/src/content/posts/why-telegram-bot-notifications-die.md index 2b7b398..ae981ae 100644 --- a/src/content/posts/why-telegram-bot-notifications-die.md +++ b/src/content/posts/why-telegram-bot-notifications-die.md @@ -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 diff --git a/src/content/posts/why-your-cdp-clicks-silently-fail.md b/src/content/posts/why-your-cdp-clicks-silently-fail.md index 2d79f97..27d6c5b 100644 --- a/src/content/posts/why-your-cdp-clicks-silently-fail.md +++ b/src/content/posts/why-your-cdp-clicks-silently-fail.md @@ -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 --- diff --git a/src/content/posts/why-your-grafana-dashboard-shows-no-data.md b/src/content/posts/why-your-grafana-dashboard-shows-no-data.md index 3235883..52707be 100644 --- a/src/content/posts/why-your-grafana-dashboard-shows-no-data.md +++ b/src/content/posts/why-your-grafana-dashboard-shows-no-data.md @@ -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 --- 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 90efa8e..fe6515e 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 @@ -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, diff --git a/src/content/posts/your-disk-full-alert-is-lying.md b/src/content/posts/your-disk-full-alert-is-lying.md index ee08a4a..7493e26 100644 --- a/src/content/posts/your-disk-full-alert-is-lying.md +++ b/src/content/posts/your-disk-full-alert-is-lying.md @@ -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 --- diff --git a/src/content/posts/zh/adding-a-domain-to-someone-elses-mail-server.md b/src/content/posts/zh/adding-a-domain-to-someone-elses-mail-server.md index d3584a6..8d6a55f 100644 --- a/src/content/posts/zh/adding-a-domain-to-someone-elses-mail-server.md +++ b/src/content/posts/zh/adding-a-domain-to-someone-elses-mail-server.md @@ -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 --- diff --git a/src/content/posts/zh/adding-english-mode-to-a-chinese-only-web-app.md b/src/content/posts/zh/adding-english-mode-to-a-chinese-only-web-app.md index 3f3cc4e..a245cd5 100644 --- a/src/content/posts/zh/adding-english-mode-to-a-chinese-only-web-app.md +++ b/src/content/posts/zh/adding-english-mode-to-a-chinese-only-web-app.md @@ -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 --- diff --git a/src/content/posts/zh/ai-furniture-compositing-with-flux-kontext.md b/src/content/posts/zh/ai-furniture-compositing-with-flux-kontext.md index 52b7dcc..4ed7ba9 100644 --- a/src/content/posts/zh/ai-furniture-compositing-with-flux-kontext.md +++ b/src/content/posts/zh/ai-furniture-compositing-with-flux-kontext.md @@ -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 --- 一位家具客户带着一个每个小电商卖家最终都会撞上的问题来找我:他们的产品图都是**孤立的产品照**——一张白底桌子、一张白底椅子——但顾客不会从一片白茫茫的虚无里买家具,他们买的是*房间*。给每个产品、每种室内风格都拍一次实体棚拍,对一个人的生意来说根本不可能。 diff --git a/src/content/posts/zh/authentik-css-greater-than-bug.md b/src/content/posts/zh/authentik-css-greater-than-bug.md index ed7cf93..178d1de 100644 --- a/src/content/posts/zh/authentik-css-greater-than-bug.md +++ b/src/content/posts/zh/authentik-css-greater-than-bug.md @@ -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 --- diff --git a/src/content/posts/zh/authentik-forward-auth-gate-wasnt-live.md b/src/content/posts/zh/authentik-forward-auth-gate-wasnt-live.md index 843ac9a..b7b2f49 100644 --- a/src/content/posts/zh/authentik-forward-auth-gate-wasnt-live.md +++ b/src/content/posts/zh/authentik-forward-auth-gate-wasnt-live.md @@ -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 --- diff --git a/src/content/posts/zh/authentik-major-upgrade-gotchas.md b/src/content/posts/zh/authentik-major-upgrade-gotchas.md index 79806e3..2122c88 100644 --- a/src/content/posts/zh/authentik-major-upgrade-gotchas.md +++ b/src/content/posts/zh/authentik-major-upgrade-gotchas.md @@ -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 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..58e0183 100644 --- a/src/content/posts/zh/automating-cyberpanel-without-the-ui.md +++ b/src/content/posts/zh/automating-cyberpanel-without-the-ui.md @@ -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,用来托管几个小站, diff --git a/src/content/posts/zh/best-ai-video-generators-2026.md b/src/content/posts/zh/best-ai-video-generators-2026.md index e29877e..d4e4f01 100644 --- a/src/content/posts/zh/best-ai-video-generators-2026.md +++ b/src/content/posts/zh/best-ai-video-generators-2026.md @@ -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 视频生成器?其中又有多少是真免费的? diff --git a/src/content/posts/zh/calibrating-intel-quick-sync-hevc-quality.md b/src/content/posts/zh/calibrating-intel-quick-sync-hevc-quality.md index 115e390..4208776 100644 --- a/src/content/posts/zh/calibrating-intel-quick-sync-hevc-quality.md +++ b/src/content/posts/zh/calibrating-intel-quick-sync-hevc-quality.md @@ -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 --- diff --git a/src/content/posts/zh/chainlink-vrf-v2-lottery-contract.md b/src/content/posts/zh/chainlink-vrf-v2-lottery-contract.md index 579e7cf..aab0a4d 100644 --- a/src/content/posts/zh/chainlink-vrf-v2-lottery-contract.md +++ b/src/content/posts/zh/chainlink-vrf-v2-lottery-contract.md @@ -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 --- diff --git a/src/content/posts/zh/docker-reported-exit-0-the-oom-killer-disagreed.md b/src/content/posts/zh/docker-reported-exit-0-the-oom-killer-disagreed.md index 8724b12..57f90af 100644 --- a/src/content/posts/zh/docker-reported-exit-0-the-oom-killer-disagreed.md +++ b/src/content/posts/zh/docker-reported-exit-0-the-oom-killer-disagreed.md @@ -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 --- diff --git a/src/content/posts/zh/does-hevc-actually-shrink-your-files.md b/src/content/posts/zh/does-hevc-actually-shrink-your-files.md index dfd4413..5a880a4 100644 --- a/src/content/posts/zh/does-hevc-actually-shrink-your-files.md +++ b/src/content/posts/zh/does-hevc-actually-shrink-your-files.md @@ -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 --- diff --git a/src/content/posts/zh/embedding-fonts-so-a-pdf-looks-the-same-everywhere.md b/src/content/posts/zh/embedding-fonts-so-a-pdf-looks-the-same-everywhere.md index b8f71ee..d31ce86 100644 --- a/src/content/posts/zh/embedding-fonts-so-a-pdf-looks-the-same-everywhere.md +++ b/src/content/posts/zh/embedding-fonts-so-a-pdf-looks-the-same-everywhere.md @@ -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 --- diff --git a/src/content/posts/zh/every-player-stuttered-the-file-was-fine.md b/src/content/posts/zh/every-player-stuttered-the-file-was-fine.md index e8ce0b1..6cfd879 100644 --- a/src/content/posts/zh/every-player-stuttered-the-file-was-fine.md +++ b/src/content/posts/zh/every-player-stuttered-the-file-was-fine.md @@ -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 --- diff --git a/src/content/posts/zh/five-step-ai-roadmap-what-i-actually-run.md b/src/content/posts/zh/five-step-ai-roadmap-what-i-actually-run.md index ad86420..d471420 100644 --- a/src/content/posts/zh/five-step-ai-roadmap-what-i-actually-run.md +++ b/src/content/posts/zh/five-step-ai-roadmap-what-i-actually-run.md @@ -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 --- diff --git a/src/content/posts/zh/fully-on-chain-svg-nfts.md b/src/content/posts/zh/fully-on-chain-svg-nfts.md index dae8695..62465f8 100644 --- a/src/content/posts/zh/fully-on-chain-svg-nfts.md +++ b/src/content/posts/zh/fully-on-chain-svg-nfts.md @@ -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 --- 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 de6dd62..249d186 100644 --- a/src/content/posts/zh/hardening-a-tor-onion-service.md +++ b/src/content/posts/zh/hardening-a-tor-onion-service.md @@ -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 --- 我对暗网产生了好奇。不是集市那一面,而是无聊的那一半:人们像注册商和云控制台出现之前那样自托管——跑自己维护的软件,用一个自己掌控的地址就能访问。 diff --git a/src/content/posts/zh/hello-world.md b/src/content/posts/zh/hello-world.md index 46e648c..7a9b155 100644 --- a/src/content/posts/zh/hello-world.md +++ b/src/content/posts/zh/hello-world.md @@ -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 和自托管,中间也会 diff --git a/src/content/posts/zh/how-i-built-the-digikedai-telegram-bot.md b/src/content/posts/zh/how-i-built-the-digikedai-telegram-bot.md index e7d3e65..756c584 100644 --- a/src/content/posts/zh/how-i-built-the-digikedai-telegram-bot.md +++ b/src/content/posts/zh/how-i-built-the-digikedai-telegram-bot.md @@ -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 客服机器人,全天候解答这些问题,甚至能在无人介入的情况下自动发放免费试用账号。 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 664f5a8..2ea9490 100644 --- a/src/content/posts/zh/how-i-host-this-blog.md +++ b/src/content/posts/zh/how-i-host-this-blog.md @@ -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 --- 这个博客本身,就是我用来说明「我到底会做什么」的一个项目。下面是完整的 diff --git a/src/content/posts/zh/how-i-made-my-own-songs-with-suno-ai.md b/src/content/posts/zh/how-i-made-my-own-songs-with-suno-ai.md index 30c4dde..d1bcbbb 100644 --- a/src/content/posts/zh/how-i-made-my-own-songs-with-suno-ai.md +++ b/src/content/posts/zh/how-i-made-my-own-songs-with-suno-ai.md @@ -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 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 a9695f9..f2ebd6a 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 @@ -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 --- ## 为什么这很重要 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 b72d5be..4f92b63 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 @@ -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 年起运营」_、_「保证在线率」_、 diff --git a/src/content/posts/zh/i-let-an-agent-manage-my-shopee-vouchers.md b/src/content/posts/zh/i-let-an-agent-manage-my-shopee-vouchers.md index ada2faf..02673b3 100644 --- a/src/content/posts/zh/i-let-an-agent-manage-my-shopee-vouchers.md +++ b/src/content/posts/zh/i-let-an-agent-manage-my-shopee-vouchers.md @@ -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 --- diff --git a/src/content/posts/zh/it-reported-success-nothing-had-changed.md b/src/content/posts/zh/it-reported-success-nothing-had-changed.md index 2b8f48f..f25ddfd 100644 --- a/src/content/posts/zh/it-reported-success-nothing-had-changed.md +++ b/src/content/posts/zh/it-reported-success-nothing-had-changed.md @@ -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 --- diff --git a/src/content/posts/zh/jpa-version-field-lost-update.md b/src/content/posts/zh/jpa-version-field-lost-update.md index 0610c85..953c30c 100644 --- a/src/content/posts/zh/jpa-version-field-lost-update.md +++ b/src/content/posts/zh/jpa-version-field-lost-update.md @@ -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 --- diff --git a/src/content/posts/zh/loop-engineering-without-a-coding-agent.md b/src/content/posts/zh/loop-engineering-without-a-coding-agent.md index 11a391c..8dcdcb7 100644 --- a/src/content/posts/zh/loop-engineering-without-a-coding-agent.md +++ b/src/content/posts/zh/loop-engineering-without-a-coding-agent.md @@ -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 --- diff --git a/src/content/posts/zh/migrating-codeigniter-iis-to-openlitespeed.md b/src/content/posts/zh/migrating-codeigniter-iis-to-openlitespeed.md index 08b4bee..bd6a391 100644 --- a/src/content/posts/zh/migrating-codeigniter-iis-to-openlitespeed.md +++ b/src/content/posts/zh/migrating-codeigniter-iis-to-openlitespeed.md @@ -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 --- diff --git a/src/content/posts/zh/my-backup-was-using-someone-elses-api-quota.md b/src/content/posts/zh/my-backup-was-using-someone-elses-api-quota.md index 609be9a..1a659a9 100644 --- a/src/content/posts/zh/my-backup-was-using-someone-elses-api-quota.md +++ b/src/content/posts/zh/my-backup-was-using-someone-elses-api-quota.md @@ -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/zh-my-backup-was-using-someone-elses-api-quota.jpg +banner: /banners/my-backup-was-using-someone-elses-api-quota.jpg draft: false --- diff --git a/src/content/posts/zh/n8n-v1-to-v2-upgrade-gotchas.md b/src/content/posts/zh/n8n-v1-to-v2-upgrade-gotchas.md index fb7e610..2f8d662 100644 --- a/src/content/posts/zh/n8n-v1-to-v2-upgrade-gotchas.md +++ b/src/content/posts/zh/n8n-v1-to-v2-upgrade-gotchas.md @@ -4,8 +4,8 @@ description: "我的自建 n8n 从 1.x 升级到 2.40.1,一次性暴露出七 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/zh-n8n-v1-to-v2-upgrade-gotchas.jpg +banner: /banners/n8n-v1-to-v2-upgrade-gotchas.jpg --- n8n 是我整个自建技术栈的自动化中枢——它负责文件交付权限、数据库备份,还有一套阅读应用依赖的语音合成 API。它一直停留在 `1.123.x` 版本线上快一年了,默默干活,没出过什么问题。 diff --git a/src/content/posts/zh/nocodb-sso-is-a-licensed-feature.md b/src/content/posts/zh/nocodb-sso-is-a-licensed-feature.md index f10fae7..3922616 100644 --- a/src/content/posts/zh/nocodb-sso-is-a-licensed-feature.md +++ b/src/content/posts/zh/nocodb-sso-is-a-licensed-feature.md @@ -4,8 +4,8 @@ description: "NocoDB 的 OIDC 环境变量是真的,启动时也会校验, 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/zh-nocodb-sso-is-a-licensed-feature.jpg +banner: /banners/nocodb-sso-is-a-licensed-feature.jpg draft: false --- diff --git a/src/content/posts/zh/one-hostname-public-tracker-sso-dashboard.md b/src/content/posts/zh/one-hostname-public-tracker-sso-dashboard.md index d089d20..1335fd4 100644 --- a/src/content/posts/zh/one-hostname-public-tracker-sso-dashboard.md +++ b/src/content/posts/zh/one-hostname-public-tracker-sso-dashboard.md @@ -4,8 +4,8 @@ description: "埋点必须公开,仪表盘绝不能公开。我用 authentik 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/zh-one-hostname-public-tracker-sso-dashboard.jpg" +banner: "/banners/one-hostname-public-tracker-sso-dashboard.jpg" draft: false --- diff --git a/src/content/posts/zh/one-prometheus-for-unraid-synology-and-a-vps.md b/src/content/posts/zh/one-prometheus-for-unraid-synology-and-a-vps.md index f943fc0..0d0064b 100644 --- a/src/content/posts/zh/one-prometheus-for-unraid-synology-and-a-vps.md +++ b/src/content/posts/zh/one-prometheus-for-unraid-synology-and-a-vps.md @@ -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/zh-one-prometheus-for-unraid-synology-and-a-vps.jpg +banner: /banners/one-prometheus-for-unraid-synology-and-a-vps.jpg draft: false --- 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 c35b85c..4b9b4c6 100644 --- a/src/content/posts/zh/passbolt-hang-three-failure-modes.md +++ b/src/content/posts/zh/passbolt-hang-three-failure-modes.md @@ -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/zh-passbolt-hang-three-failure-modes.jpg +banner: /banners/passbolt-hang-three-failure-modes.jpg --- 我在 Synology NAS 上用 Docker 跑 Passbolt——一个开源的团队密码管理器,前面 diff --git a/src/content/posts/zh/patching-workbench-26-for-mariadb.md b/src/content/posts/zh/patching-workbench-26-for-mariadb.md index a3d8ddb..5c00bb5 100644 --- a/src/content/posts/zh/patching-workbench-26-for-mariadb.md +++ b/src/content/posts/zh/patching-workbench-26-for-mariadb.md @@ -4,8 +4,8 @@ description: "MySQL Workbench 26.7.0 能连上 MySQL 8.4,却在 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/zh-patching-workbench-26-for-mariadb.jpg +banner: /banners/patching-workbench-26-for-mariadb.jpg draft: false --- diff --git a/src/content/posts/zh/putting-a-front-door-on-an-app-you-cant-modify.md b/src/content/posts/zh/putting-a-front-door-on-an-app-you-cant-modify.md index fdfa4f7..2c8d4a8 100644 --- a/src/content/posts/zh/putting-a-front-door-on-an-app-you-cant-modify.md +++ b/src/content/posts/zh/putting-a-front-door-on-an-app-you-cant-modify.md @@ -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/zh-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 --- diff --git a/src/content/posts/zh/read-only-nocodb-dashboard-for-a-remote-database.md b/src/content/posts/zh/read-only-nocodb-dashboard-for-a-remote-database.md index 766e24c..039183f 100644 --- a/src/content/posts/zh/read-only-nocodb-dashboard-for-a-remote-database.md +++ b/src/content/posts/zh/read-only-nocodb-dashboard-for-a-remote-database.md @@ -4,8 +4,8 @@ description: "把 NocoDB 直接指向另一台机器上的 MySQL/MariaDB,一 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/zh-read-only-nocodb-dashboard-for-a-remote-database.jpg +banner: /banners/read-only-nocodb-dashboard-for-a-remote-database.jpg draft: false --- diff --git a/src/content/posts/zh/reading-a-containers-own-api-docs.md b/src/content/posts/zh/reading-a-containers-own-api-docs.md index 26456ba..28db8c9 100644 --- a/src/content/posts/zh/reading-a-containers-own-api-docs.md +++ b/src/content/posts/zh/reading-a-containers-own-api-docs.md @@ -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/zh-reading-a-containers-own-api-docs.jpg +banner: /banners/reading-a-containers-own-api-docs.jpg draft: false --- diff --git a/src/content/posts/zh/replacing-rdpguard-with-ipban.md b/src/content/posts/zh/replacing-rdpguard-with-ipban.md index 55b0526..916eeb9 100644 --- a/src/content/posts/zh/replacing-rdpguard-with-ipban.md +++ b/src/content/posts/zh/replacing-rdpguard-with-ipban.md @@ -4,8 +4,8 @@ description: "我把付费的 RDPGuard 7.8.7 换成了开源的 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/zh-replacing-rdpguard-with-ipban.jpg +banner: /banners/replacing-rdpguard-with-ipban.jpg draft: false --- diff --git a/src/content/posts/zh/running-production-infrastructure-solo.md b/src/content/posts/zh/running-production-infrastructure-solo.md index 4a7e7d1..5d0eee5 100644 --- a/src/content/posts/zh/running-production-infrastructure-solo.md +++ b/src/content/posts/zh/running-production-infrastructure-solo.md @@ -4,8 +4,8 @@ description: "一个人、三台主机、78 个 compose stack 里的 162 个容 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/zh-running-production-infrastructure-solo.jpg +banner: /banners/running-production-infrastructure-solo.jpg draft: false --- diff --git a/src/content/posts/zh/running-tts-as-a-service-with-token-sidecars.md b/src/content/posts/zh/running-tts-as-a-service-with-token-sidecars.md index cd9b219..d235215 100644 --- a/src/content/posts/zh/running-tts-as-a-service-with-token-sidecars.md +++ b/src/content/posts/zh/running-tts-as-a-service-with-token-sidecars.md @@ -4,8 +4,8 @@ description: "一个阅读应用需要 TTS,而云服务免费版的 token 十 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/zh-running-tts-as-a-service-with-token-sidecars.jpg +banner: /banners/running-tts-as-a-service-with-token-sidecars.jpg --- 我自建了一个电子书阅读服务器。它有个「朗读」功能,内置的引擎能用但很机械。所以我把它接到了真正的神经网络语音上——Azure Speech 和 Google Cloud TTS——通过我的 n8n 实例。 diff --git a/src/content/posts/zh/scraping-bot-walled-marketplace-warm-browser-session.md b/src/content/posts/zh/scraping-bot-walled-marketplace-warm-browser-session.md index cfa3f50..bea07c4 100644 --- a/src/content/posts/zh/scraping-bot-walled-marketplace-warm-browser-session.md +++ b/src/content/posts/zh/scraping-bot-walled-marketplace-warm-browser-session.md @@ -4,8 +4,8 @@ description: "为一位做二手手机生意的客户:爬取有反爬墙的电 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/zh-scraping-bot-walled-marketplace-warm-browser-session.jpg" +banner: "/banners/scraping-bot-walled-marketplace-warm-browser-session.jpg" draft: false --- diff --git a/src/content/posts/zh/self-healing-digital-goods-entitlements.md b/src/content/posts/zh/self-healing-digital-goods-entitlements.md index 37dfe18..b304b91 100644 --- a/src/content/posts/zh/self-healing-digital-goods-entitlements.md +++ b/src/content/posts/zh/self-healing-digital-goods-entitlements.md @@ -4,8 +4,8 @@ description: "我如何用五个工作流搭出一套权限系统,自动授予 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/zh-self-healing-digital-goods-entitlements.jpg +banner: /banners/self-healing-digital-goods-entitlements.jpg --- 我卖数字产品——文件、美术素材、授权资源——并通过一个自建的文件门户交付。真正的难题从来不是存储,而是**授权**:确保客户在购买时拿到恰好他们买下的目录,拿到恰好他们付费的时长,并且在停止付费时访问权限真的被收回。 diff --git a/src/content/posts/zh/self-hosted-speech-to-text-api.md b/src/content/posts/zh/self-hosted-speech-to-text-api.md index 4ecdce9..435cb36 100644 --- a/src/content/posts/zh/self-hosted-speech-to-text-api.md +++ b/src/content/posts/zh/self-hosted-speech-to-text-api.md @@ -4,8 +4,8 @@ description: "我用一台带 GPU 的电脑自建了语音转文字 API。Window 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/zh-self-hosted-speech-to-text-api.jpg +banner: /banners/self-hosted-speech-to-text-api.jpg --- 打字的办公效率里面,它是最慢的一环。一般人打字速度约每分钟 40 个字,但 diff --git a/src/content/posts/zh/self-hosting-mem0-memory-stack.md b/src/content/posts/zh/self-hosting-mem0-memory-stack.md index 05d4afc..55f1d55 100644 --- a/src/content/posts/zh/self-hosting-mem0-memory-stack.md +++ b/src/content/posts/zh/self-hosting-mem0-memory-stack.md @@ -4,8 +4,8 @@ description: "一套私有、自托管的 AI 助手记忆层——mem0 API + Lit 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/zh-self-hosting-mem0-memory-stack.jpg +banner: /banners/self-hosting-mem0-memory-stack.jpg --- 一个每次对话后都忘光一切的 AI 助手,就是一个每轮都要你重新自我介绍的工具。我的 AI 助手(就是驱动这个博客工作流的那个)曾经每场会话都从零开始——直到我给它加了一层**记忆**:一套自托管的 [mem0](https://mem0.ai) 栈,负责存储它学到的事实、按语义检索、并跨会话存活。 diff --git a/src/content/posts/zh/shipping-an-ai-photo-editor-as-a-wordpress-plugin.md b/src/content/posts/zh/shipping-an-ai-photo-editor-as-a-wordpress-plugin.md index 80d1e11..72ed414 100644 --- a/src/content/posts/zh/shipping-an-ai-photo-editor-as-a-wordpress-plugin.md +++ b/src/content/posts/zh/shipping-an-ai-photo-editor-as-a-wordpress-plugin.md @@ -4,8 +4,8 @@ description: "从单个 HTML 文件到一个真正上线的 WordPress 插件:f 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/zh-shipping-an-ai-photo-editor-as-a-wordpress-plugin.jpg +banner: /banners/shipping-an-ai-photo-editor-as-a-wordpress-plugin.jpg draft: false --- diff --git a/src/content/posts/zh/smartctl-exit-code-32-skips-the-disks-that-matter.md b/src/content/posts/zh/smartctl-exit-code-32-skips-the-disks-that-matter.md index 40cfab6..0e067e1 100644 --- a/src/content/posts/zh/smartctl-exit-code-32-skips-the-disks-that-matter.md +++ b/src/content/posts/zh/smartctl-exit-code-32-skips-the-disks-that-matter.md @@ -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/zh-smartctl-exit-code-32-skips-the-disks-that-matter.jpg +banner: /banners/smartctl-exit-code-32-skips-the-disks-that-matter.jpg draft: false --- diff --git a/src/content/posts/zh/space-reclamation-wasnt-stuck-it-was-waiting.md b/src/content/posts/zh/space-reclamation-wasnt-stuck-it-was-waiting.md index 626c081..452de7a 100644 --- a/src/content/posts/zh/space-reclamation-wasnt-stuck-it-was-waiting.md +++ b/src/content/posts/zh/space-reclamation-wasnt-stuck-it-was-waiting.md @@ -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/zh-space-reclamation-wasnt-stuck-it-was-waiting.jpg +banner: /banners/space-reclamation-wasnt-stuck-it-was-waiting.jpg draft: false --- diff --git a/src/content/posts/zh/stop-writing-agent-prompts-for-deterministic-work.md b/src/content/posts/zh/stop-writing-agent-prompts-for-deterministic-work.md index f20e5b1..326768c 100644 --- a/src/content/posts/zh/stop-writing-agent-prompts-for-deterministic-work.md +++ b/src/content/posts/zh/stop-writing-agent-prompts-for-deterministic-work.md @@ -4,8 +4,8 @@ description: "我有一个定时任务连续失败 29 次,原因是我在一 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/zh-stop-writing-agent-prompts-for-deterministic-work.jpg" +banner: "/banners/stop-writing-agent-prompts-for-deterministic-work.jpg" draft: false --- 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 7135246..0996e9d 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 @@ -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/zh-syncing-a-self-improving-ai-agent-across-machines.jpg +banner: /banners/syncing-a-self-improving-ai-agent-across-machines.jpg --- 我的 agent 会学习。每当我带它走一遍不平凡的工作流程——如何发布到 Gitea、如何排查一个时好时坏的 Docker 容器、如何写一条 Shopee 商品列表——它就会把过程存成一项 *skill*:一个下次遇到同类任务时自动加载的可复用流程。几个月下来,它累积了 172 项技能,横跨二十个分类。它们就是我的第二大脑。 diff --git a/src/content/posts/zh/synology-api-401-with-the-correct-password.md b/src/content/posts/zh/synology-api-401-with-the-correct-password.md index 9bc11ba..2025189 100644 --- a/src/content/posts/zh/synology-api-401-with-the-correct-password.md +++ b/src/content/posts/zh/synology-api-401-with-the-correct-password.md @@ -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/zh-synology-api-401-with-the-correct-password.jpg +banner: /banners/synology-api-401-with-the-correct-password.jpg draft: false --- diff --git a/src/content/posts/zh/synology-spreadsheet-api-is-a-container.md b/src/content/posts/zh/synology-spreadsheet-api-is-a-container.md index e0b10b8..fa36616 100644 --- a/src/content/posts/zh/synology-spreadsheet-api-is-a-container.md +++ b/src/content/posts/zh/synology-spreadsheet-api-is-a-container.md @@ -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/zh-synology-spreadsheet-api-is-a-container.jpg +banner: /banners/synology-spreadsheet-api-is-a-container.jpg draft: false --- diff --git a/src/content/posts/zh/that-dying-ssd-was-just-a-bad-sata-cable.md b/src/content/posts/zh/that-dying-ssd-was-just-a-bad-sata-cable.md index fe2bb82..37c25e0 100644 --- a/src/content/posts/zh/that-dying-ssd-was-just-a-bad-sata-cable.md +++ b/src/content/posts/zh/that-dying-ssd-was-just-a-bad-sata-cable.md @@ -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/zh-that-dying-ssd-was-just-a-bad-sata-cable.jpg +banner: /banners/that-dying-ssd-was-just-a-bad-sata-cable.jpg --- 所有存储指南都告诉你:先看 SMART,再信事件日志。我也照做了,两者都指向同一个结论:这颗 SSD 要死了。而我距离把一颗健康硬盘送去 RMA 只差一步。 diff --git a/src/content/posts/zh/the-cause-was-trim-not-the-ssds.md b/src/content/posts/zh/the-cause-was-trim-not-the-ssds.md index 935e97b..b62bd72 100644 --- a/src/content/posts/zh/the-cause-was-trim-not-the-ssds.md +++ b/src/content/posts/zh/the-cause-was-trim-not-the-ssds.md @@ -4,8 +4,8 @@ description: "两周前 btrfs RAID1 阵列在看似健康的 NVMe 盘上静默 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/zh-the-cause-was-trim-not-the-ssds.jpg +banner: /banners/the-cause-was-trim-not-the-ssds.jpg --- 两周前我写了一篇文章,讲一个 btrfs RAID1 阵列如何在两块看起来完全健康的三星 PM9A3 NVMe 盘上静默损坏 Windows 虚拟机——读出来的全是**全零**数据块,单靠一块坏盘根本无法解释。那次调查以一句诚实的「不确定」收尾:两块盘测试都干净,最大嫌疑是它们共用的 M.2 转接卡。 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 d80eca6..aad0eb1 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 @@ -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/zh-the-nocodb-attachment-that-wouldnt-update.jpg +banner: /banners/the-nocodb-attachment-that-wouldnt-update.jpg --- 在 NocoDB 里回填 300 行数据的经历,暴露了两个小坑,每一个都耗掉了我一段时间。 diff --git a/src/content/posts/zh/the-upstream-was-deleted-then-came-back-rewritten.md b/src/content/posts/zh/the-upstream-was-deleted-then-came-back-rewritten.md index e023cb1..895ebc4 100644 --- a/src/content/posts/zh/the-upstream-was-deleted-then-came-back-rewritten.md +++ b/src/content/posts/zh/the-upstream-was-deleted-then-came-back-rewritten.md @@ -4,8 +4,8 @@ description: "我线上跑的阅读服务,依赖的镜像官方仓库已经 40 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/zh-the-upstream-was-deleted-then-came-back-rewritten.jpg" +banner: "/banners/the-upstream-was-deleted-then-came-back-rewritten.jpg" draft: false --- diff --git a/src/content/posts/zh/two-ways-a-javascript-file-stops-working-and-looks-fine.md b/src/content/posts/zh/two-ways-a-javascript-file-stops-working-and-looks-fine.md index cc8596a..a0aa3be 100644 --- a/src/content/posts/zh/two-ways-a-javascript-file-stops-working-and-looks-fine.md +++ b/src/content/posts/zh/two-ways-a-javascript-file-stops-working-and-looks-fine.md @@ -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/zh-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 --- diff --git a/src/content/posts/zh/unraid-stop-array-hangs-on-swapfile.md b/src/content/posts/zh/unraid-stop-array-hangs-on-swapfile.md index 0ae8799..0f6f822 100644 --- a/src/content/posts/zh/unraid-stop-array-hangs-on-swapfile.md +++ b/src/content/posts/zh/unraid-stop-array-hangs-on-swapfile.md @@ -4,8 +4,8 @@ description: "Unraid 停止阵列时一直卡在卸载磁盘:btrfs RAID1 上 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/zh-unraid-stop-array-hangs-on-swapfile.jpg +banner: /banners/unraid-stop-array-hangs-on-swapfile.jpg draft: false --- diff --git a/src/content/posts/zh/upgrading-codeigniter-46-to-47.md b/src/content/posts/zh/upgrading-codeigniter-46-to-47.md index b133701..7c4f22c 100644 --- a/src/content/posts/zh/upgrading-codeigniter-46-to-47.md +++ b/src/content/posts/zh/upgrading-codeigniter-46-to-47.md @@ -4,8 +4,8 @@ description: "CodeIgniter 4.7 官方升级指南列了八项破坏性变更。 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/zh-upgrading-codeigniter-46-to-47.jpg +banner: /banners/upgrading-codeigniter-46-to-47.jpg draft: false --- diff --git a/src/content/posts/zh/using-chinese-llm-apis-from-malaysia.md b/src/content/posts/zh/using-chinese-llm-apis-from-malaysia.md index d33b4ac..37eddf3 100644 --- a/src/content/posts/zh/using-chinese-llm-apis-from-malaysia.md +++ b/src/content/posts/zh/using-chinese-llm-apis-from-malaysia.md @@ -4,8 +4,8 @@ description: "从马来西亚使用中国大模型 API(GLM-5.3、DeepSeek V4 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/zh-using-chinese-llm-apis-from-malaysia.jpg +banner: /banners/using-chinese-llm-apis-from-malaysia.jpg draft: false --- diff --git a/src/content/posts/zh/verifying-a-pdf-report-page-by-page.md b/src/content/posts/zh/verifying-a-pdf-report-page-by-page.md index 2793b45..2e6a25f 100644 --- a/src/content/posts/zh/verifying-a-pdf-report-page-by-page.md +++ b/src/content/posts/zh/verifying-a-pdf-report-page-by-page.md @@ -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/zh-verifying-a-pdf-report-page-by-page.jpg +banner: /banners/verifying-a-pdf-report-page-by-page.jpg draft: false --- diff --git a/src/content/posts/zh/vetting-an-open-source-dependency-before-you-bet-on-it.md b/src/content/posts/zh/vetting-an-open-source-dependency-before-you-bet-on-it.md index fdc3cfa..198ebb8 100644 --- a/src/content/posts/zh/vetting-an-open-source-dependency-before-you-bet-on-it.md +++ b/src/content/posts/zh/vetting-an-open-source-dependency-before-you-bet-on-it.md @@ -4,8 +4,8 @@ description: "六项检查,专门抓出「文档说得漂亮、代码里其实 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/zh-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 --- diff --git a/src/content/posts/zh/when-smart-says-healthy-but-your-raid-is-corrupting-data.md b/src/content/posts/zh/when-smart-says-healthy-but-your-raid-is-corrupting-data.md index 8a8ba73..483ed27 100644 --- a/src/content/posts/zh/when-smart-says-healthy-but-your-raid-is-corrupting-data.md +++ b/src/content/posts/zh/when-smart-says-healthy-but-your-raid-is-corrupting-data.md @@ -4,8 +4,8 @@ description: "两块看起来完全健康的 NVMe 组成的 btrfs RAID1 阵列 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/zh-when-smart-says-healthy-but-your-raid-is-corrupting-data.jpg +banner: /banners/when-smart-says-healthy-but-your-raid-is-corrupting-data.jpg --- 所有存储指南都告诉你同一件事:相信 SMART、检查事件日志、相信你的文件系统。我的硬件不这么想。2026 年 9 月,一个 btrfs RAID1 阵列——两块企业级 NVMe 盘镜像,我用每个能想到的工具查它都说**「健康」**——却在悄悄地把我的 Windows 11 虚拟机喂成全零字节。不是看得见的故障,是静默损坏。 diff --git a/src/content/posts/zh/why-500000-lines-of-commit-churn-only-left-230000-in-production.md b/src/content/posts/zh/why-500000-lines-of-commit-churn-only-left-230000-in-production.md index bfed256..a06e02b 100644 --- a/src/content/posts/zh/why-500000-lines-of-commit-churn-only-left-230000-in-production.md +++ b/src/content/posts/zh/why-500000-lines-of-commit-churn-only-left-230000-in-production.md @@ -4,8 +4,8 @@ description: "过去 30 天,自主编程 Agent 在 5 个仓库中累计新增 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/zh-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" --- 上周我做了一件平时几乎不会做的事:数了数自己的提交。不是数我记得写过的那些,而是数仓库里真实记录下来的那些。自建 Gitea 上 5 个生产仓库、三十天、一个人:865 次 Commit、新增 518,233 行、删除 130,892 行。 diff --git a/src/content/posts/zh/why-chrome-forgets-its-tabs-in-a-container.md b/src/content/posts/zh/why-chrome-forgets-its-tabs-in-a-container.md index d40501f..e7895d8 100644 --- a/src/content/posts/zh/why-chrome-forgets-its-tabs-in-a-container.md +++ b/src/content/posts/zh/why-chrome-forgets-its-tabs-in-a-container.md @@ -4,8 +4,8 @@ description: "Chrome 的「继续上次浏览」在 Docker 容器里根本不会 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/zh-why-chrome-forgets-its-tabs-in-a-container.jpg +banner: /banners/why-chrome-forgets-its-tabs-in-a-container.jpg draft: false --- diff --git a/src/content/posts/zh/why-i-still-bought-a-local-gpu.md b/src/content/posts/zh/why-i-still-bought-a-local-gpu.md index a0fbd26..80c7a20 100644 --- a/src/content/posts/zh/why-i-still-bought-a-local-gpu.md +++ b/src/content/posts/zh/why-i-still-bought-a-local-gpu.md @@ -4,8 +4,8 @@ description: "Claude Opus 和 GPT 確實比我能在本地跑的任何模型都 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/zh-why-i-still-bought-a-local-gpu.jpg +banner: /banners/why-i-still-bought-a-local-gpu.jpg draft: false --- diff --git a/src/content/posts/zh/why-my-on-chain-nft-art-changed-on-windows.md b/src/content/posts/zh/why-my-on-chain-nft-art-changed-on-windows.md index f90adc2..33c0106 100644 --- a/src/content/posts/zh/why-my-on-chain-nft-art-changed-on-windows.md +++ b/src/content/posts/zh/why-my-on-chain-nft-art-changed-on-windows.md @@ -4,8 +4,8 @@ description: "为什么我在 Windows 上克隆后链上 NFT 的图像变了:c 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/zh-why-my-on-chain-nft-art-changed-on-windows.jpg +banner: /banners/why-my-on-chain-nft-art-changed-on-windows.jpg draft: false --- 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 1eea7e6..f90aa09 100644 --- a/src/content/posts/zh/why-telegram-bot-notifications-die.md +++ b/src/content/posts/zh/why-telegram-bot-notifications-die.md @@ -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/zh-why-telegram-bot-notifications-die.jpg +banner: /banners/why-telegram-bot-notifications-die.jpg --- 我跑着一个小监控机器人,专门盯着 Carousell 上新上架的商品,一旦有新品就通过 diff --git a/src/content/posts/zh/why-your-cdp-clicks-silently-fail.md b/src/content/posts/zh/why-your-cdp-clicks-silently-fail.md index 9361693..ad5b827 100644 --- a/src/content/posts/zh/why-your-cdp-clicks-silently-fail.md +++ b/src/content/posts/zh/why-your-cdp-clicks-silently-fail.md @@ -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/zh-why-your-cdp-clicks-silently-fail.jpg +banner: /banners/why-your-cdp-clicks-silently-fail.jpg draft: false --- diff --git a/src/content/posts/zh/why-your-grafana-dashboard-shows-no-data.md b/src/content/posts/zh/why-your-grafana-dashboard-shows-no-data.md index 1d4f16b..0aa467c 100644 --- a/src/content/posts/zh/why-your-grafana-dashboard-shows-no-data.md +++ b/src/content/posts/zh/why-your-grafana-dashboard-shows-no-data.md @@ -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/zh-why-your-grafana-dashboard-shows-no-data.jpg +banner: /banners/why-your-grafana-dashboard-shows-no-data.jpg draft: false --- 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 75790e9..c727f2d 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 @@ -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/zh-why-your-headless-browser-cant-scrape-everything.jpg +banner: /banners/why-your-headless-browser-cant-scrape-everything.jpg --- 我在短短几周里,分别在两个不同的二手交易平台上撞上了同一堵墙,而这组对照 diff --git a/src/content/posts/zh/your-disk-full-alert-is-lying.md b/src/content/posts/zh/your-disk-full-alert-is-lying.md index b3334d0..e471147 100644 --- a/src/content/posts/zh/your-disk-full-alert-is-lying.md +++ b/src/content/posts/zh/your-disk-full-alert-is-lying.md @@ -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/zh-your-disk-full-alert-is-lying.jpg +banner: /banners/your-disk-full-alert-is-lying.jpg draft: false --- diff --git a/src/pages/posts/[...slug].astro b/src/pages/posts/[...slug].astro index 29eb680..b55d602 100644 --- a/src/pages/posts/[...slug].astro +++ b/src/pages/posts/[...slug].astro @@ -109,10 +109,10 @@ const jsonLd = { {post.data.banner && ( <figure class="article-banner"> - {/* WebP for the page (42% of the PNG bytes); the PNG stays for og:image + {/* WebP for the page (42% of the PNG bytes); the JPEG/PNG stays for og:image because social scrapers do not reliably render WebP share cards. */} <picture> - <source srcset={post.data.banner.replace(/\.png$/, '.webp')} type="image/webp" /> + <source srcset={post.data.banner.replace(/\.(png|jpe?g)$/, '.webp')} type="image/webp" /> <img src={post.data.banner} alt="" loading="lazy" decoding="async" width="1600" height="900" /> </picture> </figure>