Commit Graph
71 Commits
Author SHA1 Message Date
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 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 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 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 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 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 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
hoelee 0dae8b0daa fix(art): give both 2026-10-20 posts their artwork, and gate the build on it
Deploy / build (push) Successful in 34s
The YuE2 and subtitles posts shipped text-only: render_from_art.mjs only READS
ogImage/banner, and after the 2026-10-19 bulk migration no script had to write
them, so both pages advertised /og-default.jpg and rendered no hero banner.

- new metaphors (in build_captions.py, frozen here via sync_prompts_catalog.py),
  captions, art-meta evidence, banner plan and the five derived files per slug
- frontmatter: ogImage + banner in EN and ZH for both posts
- scripts/check-assets.mjs is now step 1 of npm run build, so CI fails when a
  published post lacks a language-correct og card, banner, banner .webp or
  400/800 list thumb. It reported 16 problems on the unfixed tree, all here.
2026-10-20 23:37:52 +08:00
hoelee 84b412470b style(related): two-up on desktop, one-up on phones
Deploy / build (push) Successful in 33s
Six photo cards in 2 columns (3 rows) at desktop widths; phones collapse to a
single full-width column and still show only the first four. Drops the 900px
two-column step (now the base) and the cramped-card type overrides that only
existed for the 2-up phone grid.
2026-10-20 23:16:17 +08:00
hoelee 7f2680ea92 feat(related): photo cards — 6 on desktop, 4 on phones, each post's own share card
Deploy / build (push) Successful in 33s
Related posts were 4 text-only cards. They now carry the post's language-specific
ogImage (/og/<slug>.jpg for EN, /og/zh-<slug>.jpg for ZH), so an English page never
shows Chinese art. Grid is 3 across above 900px, 2 across below, and phones show the
first 4 only; read-time is dropped under 600px so the date fits.

Verified in the built HTML + headless Chrome at 1264/884/500px: 3/2/2 columns,
6/6/4 visible cards, no horizontal overflow, all six images decoded.
2026-10-20 22:50:37 +08:00
hoelee abef1e178d docs: record the 2026-10-20 topic queue (post shipped, two optional follow-ups)
Deploy / build (push) Successful in 19s
2026-10-20 05:57:46 +08:00
hoelee a96cfb73db docs: slim project-state.md 128KB -> 45KB by archiving completed phases; fix stale checkboxes
Deploy / build (push) Successful in 19s
2026-10-19 14:36:01 +08:00
hoelee 5941e858cc B7 review-response batch: derived about counter, CJK-aware reading time, ZH copy fixes, hero leads with capability
Deploy / build (push) Successful in 26s
2026-10-19 14:15:59 +08:00
hoelee 0b23312948 docs(project-state): owner decided the hero stays textless; the round-7 'not done' report was a browser cache
Deploy / build (push) Successful in 18s
2026-10-19 13:10:29 +08:00
hoelee 1bdf456bb5 docs(project-state): round 7 delivered — OCR 72/72, 0 clipped banners, live hashes verified
Deploy / build (push) Successful in 13s
2026-10-19 11:10:56 +08:00
hoelee f391682fc3 Round 7: zero-text frames, escaped/curly titles, plan-driven banner crops
Deploy / build (push) Successful in 19s
The consultant's review of the shipped set found two defects, both ours, and both fixed
at the source rather than in the output:

1. The banner/thumb crop re-framing detected only the glowing core of the object. Column
   brightness measures 2-6 levels above the background on dark glass, so it boxed 8 % of
   the frame for an object group spanning 35 %+. The detector is now a background-plane
   deviation plus the largest connected components (`plan_banner_crops.py`, detector in
   `probe_band_crop.py`), 0 % false-positive on the frame's own negative space, stable
   across thresholds. The crop plan is frozen as `banner-plan.json` and consumed by the
   renderer; a thin subject is centred at 53.5 % of the banner width with the shortfall
   filled by the art's own edge pixels, one row at a time (a single averaged fill left a
   visible tonal step, tried and rejected). Measured on the delivered 72: 0 clipped,
   silhouette median 47.0 %, centre median 53.5 % (`verify_banner_crops.py`).

2. `art-meta.json` pinned two slugs to the hand-accepted sample frames — the very frames
   that carried the HUD readouts — which also kept them out of the crop plan. Pins removed.

Prompt side: 9 frames still printed glyphs at the consultant's bar (>=12 px and >=2
characters). Every offending noun is measured and now asserted against: a literal `marked
at 28` printed "28"; `storefront kiosk` printed "PRINATA"; `voucher card` printed
"Voucher"; `market booths` printed "10MARKET"; `glass button` printed "OC"; `gateway pylon`
printed "GATELY". 50 forbidden words, 0 hits across 72 captions, and all 9 frames
re-rendered clean.

Also: YAML escapes are honoured in the frontmatter reader and straight quotes become
curly ones (the ZH cards shipped a literal backslash), the evidence line is capped at 65
characters, and the light theme gives dark artwork a hairline border plus a soft shadow
(consultant option A) so it reads as a dark display case instead of a black slab.

OCR gate at the consultant's bar: 72/72 frames clean (16 carry sub-threshold single
glyphs, exempt as geometry noise).
2026-10-19 11:02:28 +08:00
hoelee 576a43a034 docs(project-state): B6b shipped — final OCR gate numbers and live assertions
Deploy / build (push) Successful in 14s
Also carries scripts/og-gen/sync_prompts_catalog.py, the check that keeps the
repo's art inputs (metaphors.json, captions/, prompts_catalog.json) in sync with
the authoring tool dir after any metaphor change.
2026-10-19 04:20:56 +08:00
hoelee 327d516ed9 feat(art): replace all 72 posts' artwork with the v2 pipeline
Deploy / build (push) Successful in 17s
Every post now carries one unique local-ComfyUI/Ideogram 4 base frame, composited
into EN + ZH share cards, a banner and list thumbs.

- the shipped prompts_catalog held only 21 distinct metaphors for 72 posts (16
  shared one visual), so all 72 were rewritten as unique object+state metaphors
  and 10 frames re-rolled after OCR found pseudo-text rendered at legible size
- render_from_art.mjs emits JPEG by default (558 KB PNG -> 84 KB mozjpeg q85);
  the ZH 1200x630 card did not exist before this batch
- 288 frontmatter fields migrated; the 144 v1 PNGs are gone
- PostList's thumb helper keys off the base slug (a ZH card is zh-<slug>.jpg while
  the thumb is <slug>-800.webp, which 404'd the whole ZH listing)
- [...slug].astro's <picture> regex accepts .jpg
- the repo now carries the art inputs (metaphors.json, captions/<slug>.json,
  refreshed prompts_catalog.json) so a frame is reproducible from git alone
2026-10-19 04:18:59 +08:00
hoelee 72a9a2af6f docs(project-state): Phase F handoff for the 72-post artwork rollout
Deploy / build (push) Successful in 1m2s
The owner is continuing the artwork batch in a new session with a GPU window,
so the resume kit now exists in the repo instead of in this session.

- New §2 "Phase F — Artwork rollout" placed ABOVE Phase E and flagged as the
  NEXT task, with Step B6b: what is already committed (render_from_art.mjs,
  template-v2.2, prompts_catalog.json), the measured state (2 of 72 base frames,
  2 of 72 evidence lines, live site still v1), the three open consultant
  questions with proposed defaults, and the format decision with its numbers
  (558 KB PNG vs 84 KB mozjpeg q85, x144).
- Calls out the two migration traps that make a half-done batch break the site:
  ogImage on 144 frontmatter files, and PostList.astro's thumb helper regex.
- Documents the order of work, the reproducibility proof (byte-identical
  banner/thumb on the two sample slugs, four sha256s), the measurement method
  for card layout, and the two known gaps (OCR pseudo-text gate missing,
  evidence lines unwritten).
- §4b gains today's measured values: bento live on both homepages, light-theme
  contrast fixed, post live at 250 sitemap URLs, cron facts (dev.to 2/70,
  LinkedIn 5 published).
2026-10-18 18:18:27 +08:00
hoelee 11a7c39da2 docs(project-state): correct the B2p publish sha (amended commit id)
Deploy / build (push) Successful in 28s
2026-10-18 17:47:06 +08:00
hoelee 0d7384224d post: 30 days of agent churn kept 23.5万 of 51.8万 lines (EN + ZH)
Deploy / build (push) Successful in 56s
The commit-churn post the owner read and approved today, published in the
first-person voice he asked for.

- Voice rewrite before publishing: the draft opened on "when managers or
  recruiters ask how productive an engineer is" and addressed the reader in the
  second person throughout (you/your 12 -> 2, both in the CTA; ZH 你 5 -> 2).
  It now reads as a log entry: "Last week I did something I almost never bother
  to do: I counted my own commits." Headings moved from essay titles to actions.
  Numbers, the 5-repo table and every claim are unchanged.
- Title changed at the owner's request:
  "Why 500,000 Lines of Commit Churn Only Left 230,000 Lines in Production"
  -> "I Committed 518,000 Lines in 30 Days. Production Kept 235,000."
  (ZH: 30 天提交 51.8 万行,生产环境只留下 23.5 万行), pubDate 2026-10-18.
- Fixed two real defects found while making the card: the draft claimed "four
  automated gates" and listed three; and og-gen split titles at the word-count
  midpoint, breaking at "…Lines in / 30 Days" — the splitter now prefers a
  sentence boundary near the middle and falls back to the midpoint.
- og PNG regenerated for the new title, thumbs and banner WebP re-derived.
  Measured: card 2 title lines, overflowY 0, measure_og_banner PASS (tags 1 row,
  banner delta 2), build clean, /posts/ monotonic with this post on top.

Also queued the post at the head of the dev.to drip (queue 69 -> 70).
2026-10-18 17:46:50 +08:00
hoelee 2060aaa166 docs(project-state): truth-up four stale statuses, record the batch blockers
Deploy / build (push) Successful in 1m4s
Measured against the live site and the cron outputs today, not carried over:

- A1 (author photo) and A3 (featured strip) were still ⬜ although both shipped
  (B4 and 6e9d58b) — marked done with the evidence, /start-here left as a
  deliberate deferral.
- E3 is fully automated: the LinkedIn half was already a daily no_agent cron
  (id 35f8985f609a). 5 posts published as of today's 12:30 tick; its silence is
  not proof of work, so the output files are the record.
- E6 closed: HSTS waived by the owner ("无视吧"), re-measured still max-age=0.
  Do not re-open.
- E1: CF Web Analytics re-measured absent (0 cloudflareinsights hits, one Umami
  tag). It is an owner dashboard action — no token here can enable it and CF
  injects the beacon itself, so there is no repo change to make.
- B6 now states the real shape of the artwork work: 0 of 72 posts rolled out,
  the live site still serves the v1 images, the 3 consultant questions are
  unanswered, the rendered OG card is measured at 558 KB PNG vs 84 KB JPEG q85,
  and the promised OCR pseudo-text gate does not exist yet.
2026-10-18 16:33:21 +08:00
hoelee c09aeccc9c docs(project-state): record B6 front-end UI deploy sha (6e9d58b)
Deploy / build (push) Successful in 47s
2026-10-18 15:58:48 +08:00
hoelee 6e9d58b8cc feat(design): bento featured grid, theme-aware cards, mono tag chips
Deploy / build (push) Successful in 44s
- Homepage (EN + ZH) featured section becomes a 2x2 Cyber-Bento grid: OG
  thumbnail at 65%/140px behind a scrim, category badge + metric pill,
  3-line-clamped description, arrow CTA; 1 column under 680px.
- Bento scrim/pill/dot now use theme tokens (--card-veil, --pill-bg,
  --bento-visual-opacity). The original hardcoded dark blend measured
  1.96:1 pill contrast on the light theme; now 6.56 dark / 6.10 light.
- Add the missing @keyframes bento-pulse (the doc claimed a pulsing dot,
  none existed), disabled under prefers-reduced-motion.
- Tag chips: mono face, hairline border, 4px radius; dashed border for
  non-link tags.
- ZH pages: brand links /zh/, in-post category tag links
  /zh/categories/<cat>/ instead of the EN route.
- project-state: B6 shipped note with measured readings; correct the
  prompts-catalog path claim (file is outside the repo).

Measured in headless Chrome at 1280px and 390px, EN + ZH: 4 cards,
2 cols / 1 col, scrollWidth-clientWidth 0, no card overflow, all four
-800.webp thumbs loaded at 800x420.
2026-10-18 15:56:40 +08:00
hoelee 3f63150d51 feat(design): deploy default OG card (JPG/PNG), complete banner hygiene (E8), modernize CJK typography (E9), align title & hero (A2)
Deploy / build (push) Successful in 21s
2026-10-18 02:27:45 +08:00
hoelee c1aa62ecca docs(project-state): E6 freshness proven end-to-end — deploy live 67s after push through a 2h edge TTL
Deploy / build (push) Successful in 45s
2026-10-17 22:57:28 +08:00
hoelee e6dee0dd57 docs(project-state): E3 queue 10 -> 69 with draft/HTTP guards, E6 edge caching measured working (Cache Rule HIT + purge proven in the run log)
Deploy / build (push) Successful in 59s
2026-10-17 22:55:37 +08:00
hoelee 112cf7de62 docs(project-state): E3 dev.to syndication automated — first cross-post live, daily cron installed
Deploy / build (push) Successful in 43s
2026-10-17 22:34:39 +08:00
hoelee 00c6c792fa docs(project-state): og-default rejection + Desktop design brief, new E9 (fonts the site never loads)
Deploy / build (push) Successful in 38s
2026-10-17 15:03:48 +08:00
hoelee 18fa79fa43 docs(project-state): 2026-10-17 re-check — E4/E5 closed, og-default rewritten, the held churn post, the nginx 301 scheme fix, GitHub mirror re-synced
Deploy / build (push) Successful in 43s
2026-10-17 14:36:58 +08:00
hoelee f4b2ce9658 docs(project-state): B4 entry (photo, About rewrite, llms.txt) and what is still open
Deploy / build (push) Successful in 52s
2026-10-16 22:17:14 +08:00
hoelee f4008d9e8b feat(structure): compact archive + tag pages + hero/featured, and fix site search
Deploy / build (push) Failing after 13m52s
Found a real bug while verifying the nav search: /pagefind/pagefind.js is an ES
module that defines no window.Pagefind, but Search.astro loaded it with a classic
<script src> and read window.Pagefind — so every query answered "Search is
unavailable." (confirmed live before the fix). Now a dynamic import; the specifier
must be a variable or Rollup resolves it at build time and the build fails.

Measured before/after in a real browser:

- archive /posts/ + /zh/posts/: 18,220px -> 3,788px (71 rows at 44px, grouped by
  year) with a client-side filter (title/tags/description text, category chips,
  14 tag chips, zero requests). Tested: "nginx" -> 6 rows, chip devops -> 28.
- tag pages for tags with >= 3 posts. Measured 235 distinct tags (an earlier brief
  claimed 74), 156 used exactly once — pages only where a topic exists: 40 tags ->
  80 pages, build 165 -> 245 pages. Pills link only when a page exists.
- homepage + ZH homepage: hero (288px) with the real scale claim, three CTAs, a
  fixed Featured 4 (scale -> automation -> observability -> a delivered result),
  Latest 10 -> 6. ZH hero had linked "关于我" to the English /about/.
- long code blocks collapse above 420px with an Expand button + gradient, copy
  button still copies the whole block (verified on the 1010px block).
- search is visible ("⌕ Search /" pill, "/" plus the existing Ctrl/Cmd+K) and the
  zero-result screen offers topic chips instead of a dead end.

Docs: project-state B3 entry, ops-runbook Pagefind gotcha.
2026-10-16 21:18:25 +08:00
hoelee 874c434576 fix(i18n,404,nginx): broken-windows batch B2 from the external review
Deploy / build (push) Successful in 3m59s
All items measured before/after with curl, on the origin and through Cloudflare:

- /posts/zh/ answered 403 (directory with no index) -> nginx 301 to the new archive
- /zh/posts/ 404'd -> new src/pages/zh/posts/index.astro (build 163 -> 165 pages)
- ZH nav pointed "关于" at /zh/ and "文章" at /zh/ -> /zh/about/ and /zh/posts/
- og:locale was "en" on every Chinese page -> zh_CN, plus og:locale:alternate on
  both languages (EN pages now advertise zh_CN as well)
- hreflang "zh" -> "zh-Hans"; <html lang> on ZH pages -> zh-Hans
- no 404 page existed -> src/pages/404.astro, served by nginx with a 404 status so
  crawlers skip it, offering search + archive + the 3 newest posts
- JSON-LD Person gained worksFor (Hoelee Enterprise); image still omitted until the
  author photo exists rather than pointing at a placeholder

nginx: config moved from the stock image file to a host bind mount
(/mnt/user/docker/nginx-hoelee-blog/conf.d/default.conf, Portainer stack 247 on
endpoint 3), validated with nginx -t in a throwaway container before the redeploy.
It also sets /_astro/* to immutable 1-year (hashed names) and HTML to
must-revalidate; unhashed /og/*.png and /banners/*.png keep the default TTL on
purpose. Note: the public HSTS and 16-day asset TTL come from Cloudflare zone
settings, not from this nginx.

Docs: ops-runbook.md (the nginx layer + why each rule), project-state.md (B2 entry
and the two open Cloudflare items my token cannot write).
2026-10-16 20:50:26 +08:00
hoelee f364084284 perf(images): WebP banners, text-only related cards, resized list thumbnails
Deploy / build (push) Successful in 56s
Measured before/after with headless Chrome + CDP (not by eye):

- article banner: <picture> WebP q78 with the PNG as fallback, because the PNG
  must stay for og:image (social scrapers do not reliably render WebP cards).
  70 banners: 6.02 MB -> 2.52 MB (42%). JPEG measured *larger* than PNG here
  (q85 = 129%) — the art is flat terminal-style with sharp text edges.
- post page related cards: dropped four 1200x630 PNGs (183 KB) to display
  526x276 where the embedded code is illegible; now text-only cards with a
  category badge, date and reading time.
- list thumbnails (home + archive): new /og/thumb/<name>-{400,800}.webp served
  via srcset/sizes. Rows display at ~398px but were pulling full 1200x630 PNGs.
  Homepage thumbnails ~450 KB -> 62 KB; archive (71 rows) ~3.2 MB -> 436 KB.
- desktop banner capped at 720px centred: 67% -> 45% of a 900px viewport,
  keeping the art intact instead of cropping it.

Post page totals: images 277 KB -> 38 KB; page height 5758 -> 5065 (desktop)
and 9423 -> 8807 (mobile). Build: 163 pages.

Script: scripts/optimize-images.py; policy: docs/design-guide.md §3; runbook
step added to docs/ops-runbook.md.
2026-10-16 17:11:27 +08:00
hoelee 9462ab2373 docs(project-state): E4 — /posts/zh/ answers 403 (no ZH archive route), measured while publishing
Deploy / build (push) Successful in 22s
2026-10-16 13:49:22 +08:00
hoelee 285905caae docs(project-state): B2o published (08fa7a9) — 16 live URLs 200, feed positions, sitemap 163 URLs
Deploy / build (push) Successful in 22s
2026-10-16 13:48:47 +08:00
hoelee 636e6f9624 docs(project-state): B2o — the four surviving posts written and dated; the other topics dropped with the user's instruction recorded
Deploy / build (push) Successful in 31s
2026-10-16 13:42:57 +08:00
hoelee db1e75c3b1 docs(project-state): B2l published (7b001dc) + B2n the backdated silent-JS post held for review
Deploy / build (push) Successful in 27s
2026-10-16 13:25:34 +08:00
hoelee 609fc75609 docs(project-state): the LinkedIn post is deleted, not parked; two new candidates from the UI/i18n work
Deploy / build (push) Successful in 14s
2026-10-16 13:20:10 +08:00
hoelee 27d3dca3c3 docs(project-state): B2l/B2m — one post parked as a draft, and why neither held post may be backdated
Deploy / build (push) Successful in 25s
2026-10-16 13:13:58 +08:00
hoelee f037aefff2 docs(project-state): B2l + B2m — the drei posts held for review, and the next-session topic queue
Deploy / build (push) Successful in 26s
2026-10-16 12:47:35 +08:00
hoelee c2f8452372 docs(project-state): B2k — the ef3f520 follow-up and the private Gitea mirror of the rewrite
Deploy / build (push) Successful in 15s
2026-10-06 17:27:25 +08:00
hoelee dca84a8ca5 docs(project-state): Step B2k — the two reader/gateway posts, the corrected upstream facts, and the backdating constraint
Deploy / build (push) Successful in 18s
2026-10-06 17:24:40 +08:00
hoelee f744cecd67 docs(project-state): Step B2j — the one-hostname post, and the tracker now wired into three sites
Deploy / build (push) Successful in 13s
2026-09-30 04:56:16 +08:00
hoelee 10500a667b docs(project-state): Umami tracker wired into the blog + digikedai, verified with a real browser; record the headless-UA pitfall
Deploy / build (push) Successful in 29s
2026-09-29 06:44:17 +08:00
hoelee e4a2da29db docs(project-state): open ^/mcp on the stats proxy provider (public MCP with Bearer key) + record the verification
Deploy / build (push) Successful in 33s
2026-09-29 06:23:42 +08:00
hoelee b7ecd27076 docs(project-state): correct the SSO rollback note (gate container is stopped, not running)
Deploy / build (push) Successful in 19s
2026-09-29 05:54:35 +08:00
hoelee 88560a8afe docs(project-state): E1 — SSO gate in front of stats.hoelee.com (authentik proxy provider pk 64, per-app flow auth-stats, skip-path tracker); record the forward_single-vs-proxy pitfall, the outpost config lag, and the post-cut-over tracker verification
Deploy / build (push) Successful in 37s
2026-09-29 05:51:41 +08:00
hoelee c5e10a0e70 docs: correct the dashboard-access note — one hostname is enough (app login + 2FA, or cookie SSO with skip-paths); a second hostname is the SaaS-scale ingest-vs-app split
Deploy / build (push) Successful in 18s
2026-09-29 05:21:56 +08:00
hoelee 8f3befaf72 docs: stats.hoelee.com hardening (A+B) — rotate password/APP_SECRET, add the umami-gateway, dashboard LAN-only, tracker verified end-to-end
Deploy / build (push) Successful in 21s
2026-09-29 05:12:31 +08:00