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.jsonand 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-netto list and fetch projects, articles, skills, weekly notes, and more. /agentsand/en/agentsgained access and permission guidance: bots may read and cite the site, but should not use it for training.- README and
llms.txtwere 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.mdabout 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.