Zhang Lu.
WEEKLY · 2026-W30 ·

What I Shipped This Week

The personal site moved from a Chinese portfolio into a bilingual, machine-readable, explainable, and partly automated web system: English pages, agent APIs, architecture docs, skills sync, and v0.3.0 all landed this week.

The through-line: turning the site into a system for both people and agents

This week was not just about adding pages. It moved zhanglu.net from a personal project collection toward a more complete web system: Chinese by default, English in parallel, HTML for people, JSON / CLI for agents, architecture explained with diagrams, and a first automation path for keeping local content snapshots current.

The full English site shipped

The largest engineering change was the full English version. Chinese stays at /; English lives under /en/. First-time visitors can be routed by browser language, and the header keeps a manual language switch.

This was not a homepage translation. The projects, articles, presentations, skills, and weekly collections all gained English parallel collections, with mirrored pages, hreflang links, language-specific RSS, and sitemap support. In content terms, 48 English content files were added; in page terms, the site built 53 pages per language.

The tradeoff is clear: every future content change needs a Chinese and English counterpart. In exchange, the structure stays explicit, and the Chinese pages do not need scattered filters to avoid mixing languages.

The agent access layer became real

The machine-readable layer also filled out this week:

  • /api/weekly.json and bilingual weekly detail APIs were added, so weekly notes enter the search corpus too.
  • The agent CLI was published to npm, letting agents use npx zhanglu-net to list and fetch projects, articles, skills, weekly notes, and more.
  • /agents and /en/agents gained access and permission guidance: bots may read and cite the site, but should not use it for training.
  • README and llms.txt were aligned with the real endpoint set instead of only serving browser readers.

The point is that site content no longer has to be scraped from HTML. People get pages; agents get structured JSON or a zero-dependency CLI. The field shape lives in src/lib/api.ts, which keeps pages, RSS, CLI output, and search from drifting into separate truths.

Architecture became part of the site

When the user asked how the whole website works, the answer became both documentation and a page: docs/architecture.md, /how-it-works, and /en/how-it-works.

The page explains the flow from content files to Zod schemas, Astro build output, pages, JSON endpoints, RSS, sitemap, and CLI consumption. More importantly, many of its counts are computed during build, such as collection counts, endpoint types, and generated JSON files, so the documentation does not go stale the moment the site changes.

The page also gained homepage and navigation entries, making the operating model visible to future maintainers instead of hiding it in repository memory.

Skills sync got its first automation loop

The week also clarified a hidden truth about /skills: Cloudflare Pages cannot see the user’s local ~/.claude/skills/, so the public page is only the last manually synced and pushed snapshot.

To make that manageable, the repo gained:

  • pnpm run sync:check: a read-only drift check between local skills and the repository snapshot.
  • pnpm run sync:auto: sync, validate, build, commit, and push in one flow.
  • scripts/auto-sync-skills.sh: a launchd / cron-friendly entrypoint.
  • Detailed notes in AGENTS.md about launchd setup, the zsh inline-comment trap, and stdout / stderr debugging.

This mechanism later exposed deeper safety issues, but the W30 milestone was important: the site now had its first path from a local source of truth to repository snapshot to public deployment.

Release and documentation cleanup

The site version moved to v0.3.0. CHANGELOG.md now records the bilingual site, C-suite feature, agent access layer, CLI, real 404 behavior, Content-Signal stance, and development-discipline work. README, AGENTS, and /agents were brought into line with the current site.

This week in one line: zhanglu.net stopped being only a portfolio page and became a small, explainable, agent-readable web infrastructure.