Commit Graph
253 Commits
Author SHA1 Message Date
hoelee 01c55805fb docs(review): record consultant batch-05 re-review for the 11 devops posts
Deploy / build (push) Successful in 27s
Second pass on articles already approved in Batch-02. Real fixes landed in
19de315; this commit records the outcome, the items that were already fixed
before the reviewer's snapshot, and four reviewer misjudgements (the $TOKEN
'***' artefact comes from the batch-packaging scrubber, not the posts;
06's User Scripts explanation was already correct; 11's Round 3 was already
closed; the 'missing CTA' claims are false). One open question: 01's physical
hardware anchor is unverified and was deliberately not invented.

Tracker also carries the concurrently approved posts from the sibling session.
2026-10-27 06:10:59 +08:00
hoelee 19de315201 review: apply consultant batch-05 (devops re-review) fixes to 11 posts
- 11/telegram: rebuild the b"\r\n".join() explanation around the two real
  failure modes (line-splitting binary + doubled CRLF before Content-Disposition);
  fix the CR-eaten escapes that broke the inline code and the parts[] sample;
  close the Round 3 PID 1 vs docker exec gap; drop the leftover EN/ZH family
  framing; add the host anchor
- 04/09: the zero-block CRC32C belongs on the found side, not wanted; note the
  little-endian print order (0x98f94189 -> 0x8941f998); close the 09-22 scrub
  window and link the TRIM sequel from 09's result
- 06: losetup -p is --pass-fd, not a priority; explain the -2 in /proc/swaps
- 03: UDMA_CRC only counts ICRC frame faults; add the destructive-write warning
  to the raw fio recipe
- 02: CONFIG_CFS_BANDWIDTH, not 'no CFS scheduler'; SME wording in the ZH CTA
- 01: three reclaims (115.8 + 5.0 GiB), 344 GiB/8d = 1.8 GiB/h not 1.5
- 05/07/10: blueprint fields; 10 filters blank snapshot lines + names the
  empty-snapshot overwrite case; 07 comments that a container name survives
  recreation
2026-10-27 06:09:53 +08:00
hoelee a7d1cbaf3a docs(review): record approval and feedback resolution for batch-03
Deploy / build (push) Successful in 29s
2026-10-27 06:09:20 +08:00
hoelee 738af631fb docs(review): regenerate remaining review batches 01-04 for 17 pending posts
Deploy / build (push) Successful in 32s
2026-10-27 05:37:58 +08:00
hoelee 732790a620 docs(review): update tracker timestamp 2026-10-27 05:33:01 +08:00
hoelee 1beba8d520 docs(review): add report-batch-05 for devops 11-post review package 2026-10-27 05:32:30 +08:00
hoelee 7b868f8687 docs(review): sync character count and timestamp in audit tracker
Deploy / build (push) Successful in 28s
2026-10-27 05:29:44 +08:00
hoelee a7e683100b review: apply external consultant editorial fixes and update audit tracker to 74/91 approved
Deploy / build (push) Successful in 28s
2026-10-27 05:29:08 +08:00
hoelee 4e64bfc9ae fix(listing): make the mobile archive reachable and clear the AA misses
Deploy / build (push) Successful in 33s
Review pass on the 041471d delivery, measured rather than eyeballed.

/posts/ on a phone put its first archive row 2.36 screens down (featured block
1235 px + 435 px of controls = row at 1996 px at 390x844), so a reader who came
to browse had to scroll past three stacked 16:9 cards. Below 700 px the cards are
now horizontal — thumb 38 %, excerpt dropped, title clamped to three lines — and
the block header carries `All 91 posts ↓` into #archive-list (with scroll-margin
for the sticky header), which doubles as the bypass-block affordance. Block
1235 → 523 px, card 392 → 153 px, first row 1996 → 1309 px.

Two new small-text colours measured under WCAG AA (.feat-min 3.04:1,
.archive-status 3.67:1 at ~12 px) move to --muted → 5.78:1 and 6.99:1. The
featured heading went with them; pre-existing --faint dates (3.67:1) were left
alone rather than restyling 91 rows.

/categories/ still showed the old Gemini case-studies.webp while the category
page had the new topology banner — one category, two art languages. The tile now
uses case-studies-banner-1200.webp (14 KB) letterboxed on #0b1613: a 16:9 centre
crop sliced the outer host panels in half, the letterbox was measured seamless.

`6min read` was emitted without its space (template-literal fix → `6 min read`,
`6 分钟`, verified in dist/). Both /posts/ ledes stopped claiming the page is
purely newest-first.

probe-layout: 72/72 viewport checks, collapse still 425→0→425 (1280) and
523→0→523 (390) in EN and ZH.
2026-10-27 05:27:06 +08:00
hoelee 050d73305d docs(review): record approval and feedback resolution for batch-02 (consultant batch-03)
Deploy / build (push) Successful in 33s
2026-10-27 04:24:26 +08:00
hoelee d454ebd505 docs(review): record approval and feedback resolution for batch-04 (consultant batch-05)
Deploy / build (push) Successful in 37s
2026-10-27 04:13:47 +08:00
hoelee b6d70a8b80 docs(state): record the 2026-10-27 hybrid archive and portfolio delivery
Deploy / build (push) Successful in 40s
2026-10-27 04:07:00 +08:00
hoelee 09596fe7a5 edit(content): review batch-2 editorial pass across 24 posts (EN + ZH)
Tracker at 20 approved / 71 pending. Same pass as batch 1: first person throughout,
no LAN IPs in prose, ZH twins normalised to simplified Chinese, dynamicCta where the
post ends on a concrete next step.
2026-10-27 04:07:00 +08:00
hoelee 041471d25e feat(listing): portfolio-first archive, case-study hero, row action links
/posts/ and /zh/posts/ become hybrid: three fixed-slug flagship cards above the
complete year/month archive, with the flagship block collapsing (inert, h=0) as
soon as the reader filters. /categories/case-studies/ becomes a portfolio: compact
two-column hero with a 21:9 deterministic topology banner, flagship ordering from
lib/portfolio.ts instead of pubDate, and one measured pill per card.

Also fixes what the screenshot review turned up: ZH archive rows and category chips
were printing raw English slugs, the two chip strips were unlabelled and read as one
list with a duplicated 'devops', card meta rows broke rhythm past four tags, the nav
had no current-section indicator, and mobile title links were under the 44px tap
minimum. scripts/probe-layout.mjs is the repeatable gate: 72/72 page x viewport
checks and the collapse test.
2026-10-27 04:06:54 +08:00
hoelee 68771101ea edit(content): review batch-1 editorial pass across 24 posts (EN + ZH)
- voice: first-person throughout (we/our -> I/my), matching the post guideline
- privacy: internal LAN IPs replaced with placeholder hostnames
  (n8n.internal, gpu-node.internal); one compose volume path generalised
- ZH twins: Traditional -> Simplified characters (site serves zh-Hans),
  whole-file renormalisation where the twin was still Traditional
- dynamicCta: true on 12 posts so the contextual dual-track CTA renders
- long configs wrapped in <details class="tech-deep-dive"> with a summary
  naming the artefact and line count
- self-hosted-tts: token refresh now writes .tmp + atomic mv, with a note on
  the 401 race the old truncating redirect created
2026-10-27 03:29:03 +08:00
hoelee 86edd40c74 docs(review): consultant audit tracker, 10 post batches and the posts/case-studies upgrade plan
- docs/consultant-review/: review brief, per-batch post dumps (01-10),
  audit-tracker.json + AUDIT-TRACKER.md generated by scripts/manage_review.py
- scripts/manage_review.py: list/approve/approve-batch/generate over the tracker
- docs/consultant-review-2026-10-27-posts-and-casestudies-plan.md: locked
  decision register + 4 work orders for the /posts/ archive rework and the
  case-studies portfolio treatment
2026-10-27 03:28:58 +08:00
hoelee c5e473aaad feat(blueprints): launch 3 system blueprints, 12 topology layers & in-article mounting
Deploy / build (push) Successful in 24s
2026-10-27 01:33:56 +08:00
hoelee 419c962e2f feat(architecture): implement consultant review r4 (stream separation, nav upgrade, internal cta, schema & anchor fixes)
Deploy / build (push) Successful in 25s
2026-10-27 01:19:38 +08:00
hoelee cc28722c79 docs: archive consultant review round 3 regarding about page conversion
Deploy / build (push) Successful in 20s
2026-10-27 00:45:11 +08:00
hoelee 4a3c329fc6 feat(about): upgrade about page into dual-track work-with-me conversion hub 2026-10-27 00:44:44 +08:00
hoelee a1f3eb585a docs: upgrade post guideline to v2 standard SOP
Deploy / build (push) Successful in 24s
2026-10-27 00:44:10 +08:00
hoelee 355fecd348 feat(content): implement consultant review recommendations (executive summary, dynamic cta, homelab cleanup)
Deploy / build (push) Successful in 25s
2026-10-27 00:31:50 +08:00
hoelee 5ecf25d37c feat(hero): use the workstation-to-server-racks render as the hero banner
Deploy / build (push) Successful in 22s
Replaces the generated isometric diagram with the supplied 2752x1536
render (engineer at a multi-monitor desk, container streams flowing into
server racks). Re-exported at 1024/1280/2048 widths; alt text and the
lightbox caption now describe what the image actually shows.
2026-10-26 11:24:24 +08:00
hoelee 2747950eac feat(hero): replace banner with full-frame architecture illustration
Deploy / build (push) Successful in 22s
The previous hero-banner was composed as a wide banner with an empty left
40% reserved for overlay text. In the 50/50 hero column it rendered as a
shrunken half-width picture with dead space on both sides.

New illustration fills the whole 16:9 frame edge to edge (code/CI/CD left,
container + host cluster centre, observability right) so the right hero
column reads as a system diagram at its native 518px width, with the
2048w lightbox for detail reading.

Also add a 1280w WebP so DPR2 desktops do not pull the 2048w asset on
first paint.
2026-10-26 11:11:22 +08:00
hoelee f0b98843e9 feat(home): upgrade hero with lightbox banner, infra stats grid, tech pills, and category shortcuts
Deploy / build (push) Successful in 17s
2026-10-26 10:39:59 +08:00
hoelee d5a0fc089d feat(hero): refactor home hero to 2-column desktop grid and mobile visual flow
Deploy / build (push) Successful in 24s
2026-10-26 10:16:14 +08:00
hoelee 9fd02b8320 feat(hero): add AI-generated 'From Code to Production' architecture banner to homepage
Deploy / build (push) Successful in 23s
2026-10-26 09:46:24 +08:00
hoelee af9694593a docs(project-state): record the header brand + two-row mobile nav change
Deploy / build (push) Successful in 30s
2026-10-26 09:10:20 +08:00
hoelee 18145b5db2 feat(header): logo mark + Lee Teong Hoe in brand, two-row mobile nav
Deploy / build (push) Successful in 29s
- brand: three-colour Hoelee mark (rasterised from the brand vector,
  transparent, public/images/hoelee-mark-96.png) followed by the name
- section links grouped in .nav-links so the mobile header puts them on
  their own row instead of wrapping past the search/lang/theme controls
- measured 320/360/390/414/600/768/1280: scrollWidth == innerWidth,
  header 91.6px two rows (<600px) / 60.3px one row, mark loads at 22/26px
2026-10-26 08:26:01 +08:00
hoelee 753e87d930 fix(audio): calibrate 60-track LRC timestamps with faster-whisper & strip rogue Korean characters
Deploy / build (push) Successful in 27s
2026-10-26 07:22:25 +08:00
hoelee 6ad1288ec7 fix(styles): prevent info overflow with dedicated full-width line and enlarge desktop cover to 38%
Deploy / build (push) Successful in 24s
2026-10-26 04:22:47 +08:00
hoelee af37f7ff1b style(posts): expand cover art to 1/3 width on desktop and 100% full-width on mobile
Deploy / build (push) Successful in 27s
2026-10-26 04:09:31 +08:00
hoelee 2b495efe43 feat(posts): publish 60-song full-length YuE2 BF16 tutorial with track navigator & lazy loading
Deploy / build (push) Successful in 25s
2026-10-26 03:58:10 +08:00
hoelee 0a4fc47fce feat(categories): replace procedural SVG art with Gemini-generated WebP editorial banners
Deploy / build (push) Successful in 23s
2026-10-26 02:48:06 +08:00
hoelee fa156b0b9d feat(posts): publish 3-part agent orchestration series across historical dates with full EN+ZH assets
Deploy / build (push) Successful in 27s
2026-10-25 19:47:54 +08:00
hoelee d5ab7dec81 feat(posts): publish 4-part windows-mcp series across historical dates with full EN+ZH assets
Deploy / build (push) Successful in 22s
2026-10-25 18:45:43 +08:00
hoelee 4cfbc33a6f feat(posts): update banner, og, and article body with face-swapping pipeline
Deploy / build (push) Successful in 22s
2026-10-25 11:59:42 +08:00
hoelee 6ab9526db1 docs(posts): reflect real workflow with gemini argon 4, iterative rerolls, and filmora editing
Deploy / build (push) Successful in 19s
2026-10-25 11:47:30 +08:00
hoelee e2fba8ee40 fix(assets): update og and banner images with crescent bay cover
Deploy / build (push) Successful in 17s
2026-10-25 11:40:20 +08:00
hoelee 103ccedd63 feat(posts): publish 4-minute ai music video case study (en+zh)
Deploy / build (push) Successful in 22s
2026-10-25 11:37:07 +08:00
hoelee f530311f45 chore: ignore .codegraph/ index directory 2026-10-23 02:05:39 +08:00
hoelee 38c243b783 docs(content-guide): voice rule — 'the infrastructure I manage', never a home lab or host count
Deploy / build (push) Successful in 21s
2026-10-23 02:04:11 +08:00
hoelee 1b795cee9d feat(posts): PHP2Shell — every PHP runtime I manage was vulnerable
Deploy / build (push) Successful in 23s
Adds EN + ZH post php2shell-patching-every-php-runtime-i-manage: measured
PHP versions across the fleet, the order the fixes shipped in, the 8.5
package trap, the OLS vhost handler switch, and the silent bot-block bug
the sweep uncovered. Ships og cards (EN/ZH), banner + webp, 2 thumbs.
2026-10-23 02:02:50 +08:00
hoelee bebc3272ce docs(state): record the consultant-review round as it actually shipped
Deploy / build (push) Successful in 1m4s
§4d now carries the real commit chain (f32ae90 → 04a1082 → cf4504e), the
verification that matters (Actions 292/293/295, six pages 200, artwork md5 vs
live, check-assets 162/162) and an owner queue with three items.

The task doc is rewritten around that queue: (1) confirm whether the four stage
timings (14.2 / 2.1 / 32.4 / 48.6 s) were measured — they have no trail in the
repo and the reviewer's complaint was exactly about unmeasured numbers;
(2) supply the before/after jitter clips; (3) decide which session owns edits to
these three posts, since two sessions on the same files put one session's
paragraphs into the other's commit.

Also drops a claim inherited from the parallel session's completion block: the
reviewer's meta descriptions were never adopted, the frontmatter keeps the
originals.
2026-10-22 23:09:02 +08:00
hoelee cf4504ed21 fix(posts): one render number per page — 38.0% everywhere (352s -> 218.3s)
Deploy / build (push) Successful in 29s
The benchmark table derives its figures from 218.3 s ((352-218.3)/352 = 37.98%),
while the TL;DR said 38.1% (that one came from rounding 218 exactly). Same page
carried both numbers; now the TL;DR matches the table. 1.61x throughput is
unchanged (352/218.3 = 1.6125).
2026-10-22 21:14:40 +08:00
hoelee 64e8410b3c feat(assets): replace TTS posts placeholder banners/OGs with Ideogram 4 3D cyber-bento renders
Deploy / build (push) Successful in 36s
2026-10-22 20:45:00 +08:00
hoelee 04a1082e94 docs(blog): complete consultant review enhancements with compositing diagrams and benchmarks
Deploy / build (push) Successful in 16s
2026-10-22 19:31:10 +08:00
hoelee f32ae90cf0 fix(posts): correct the 3 video posts after consultant review, with fresh artwork
Deploy / build (push) Successful in 39s
Reviewer's five "highest priority" items, each checked against the source before acting:

* 38% speedup -> 38.1% less render time (352s -> 218s, 1.61x throughput); says it was
  a single run each, same clip, same machine, same encoder settings.
* "microsecond-accurate" -> frame-accurate: at 30 fps one frame is 33.3 ms, and the text
  now states that word-level timestamps are not microsecond-accurate.
* "Three minutes later" -> "a few minutes later", plus the one measured number (218 s
  render for the 4-minute track) so the claim is checkable.
* Zero Jitter / Zero Light Flashing -> "no visible jitter" / "no dark flash at the cut",
  scoped to the clip that was measured.
* ti.mode 0o666 -> 0o644. Hygiene, not the syntax error he reported: source and live HTML
  both read 0o666 (the live page splits it across two highlight spans and his text
  extraction inserted a space), and 0o666 is legal Python.
* "0 MB RAM spike in Chrome" now scopes itself to the Chrome container and says the
  Python client still buffers the whole tar. New "What this pattern does not solve"
  block: client buffering, target directory must already exist, tar member names become
  container paths, Portainer key / CDP 9222 are root-equivalent.

All three posts get a TL;DR and inline cross-links (the trio had zero internal links
before); the ZH links use the real /posts/zh/<slug>/ path.

Not done, because it needs the owner's data rather than invention: end-to-end timing
table, benchmark conditions, whether 1.89 s was a single run, before/after jitter clips,
the "what still needs a human" list. Task list:
docs/consultant-review-2026-10-22-3-video-posts.md.

Artwork for the three slugs regenerated (1600x900 banner, 1200x630 share cards EN+ZH,
400/800 list thumbs); the ZH pipeline card already carries the corrected description.
2026-10-22 19:29:26 +08:00
hoelee 6409f751a9 feat(posts): add 2 local TTS posts (EN+ZH) on CosyVoice 2 stack and percent-encoding post-mortem
Deploy / build (push) Successful in 25s
2026-10-22 19:16:25 +08:00
hoelee 19023d2e4e feat(posts): add 3 video automation posts (EN+ZH) backdated into 2025 archive gaps with full artwork suite
Deploy / build (push) Successful in 31s
2026-10-22 18:47:41 +08:00