Skip to content

feat(web): add the zycode product site on zycode.dev - #50

Merged
zy1233 merged 1 commit into
mainfrom
feat/web-landing
Oct 30, 2026
Merged

zy1233 merged 1 commit into
mainfrom
feat/web-landing

Conversation

@zy1233

@zy1233 zy1233 commented Oct 30, 2026

Copy link
Copy Markdown
Owner

Summary

A static Astro site for zycode. Cloudflare Workers serves it as static assets. No server of ours runs.

web/
├── src/pages/        # / (English), /zh/ (Chinese), 404, robots.txt, sitemap.xml
│   └── dev/          # X picture pages; they exist only in `npm run dev`
├── src/i18n/         # en.ts and zh.ts have the same keys (type Messages)
├── public/_headers   # CSP, HSTS, nosniff, frame deny; long cache for /_astro/*
├── wrangler.jsonc    # Custom Domain zycode.dev; workers.dev and previews closed
├── brand/            # avatar and header of the X account
└── README.md         # commands, deploy steps, settings that live in Cloudflare

Outside web/, AGENTS.md gets two rows: web/ in the module map, and Site (web/) in the table of commands.

Evidence

npm run check        0 errors, 0 warnings
npm run build        3 pages; dist/ has no dev/ folder
color contrast       51/51 pairs pass WCAG 2.2 AA
browser checks       30/30 pass on https://zycode.dev
sideways scroll      none at 320, 390, 768, 1024, 1440 px (en and zh)
ruff check .         All checks passed
ruff format --check  273 files already formatted (none in web/)

GET /  /zh/  /robots.txt  /sitemap.xml  /og.png    200
GET /no-such-page  /dev/x/header/                  404
GET http://zycode.dev/  https://www.zycode.dev/    301 -> https://zycode.dev/

Merge Danger

Door: two-way

A revert of the squash commit removes web/ and the two AGENTS.md rows. Nothing else reads them.

Blast Radius: Contained

  • The merge does not deploy. No workflow and no Cloudflare build trigger deploys the site. A person runs npm run deploy in web/. The live site stays as it is.
  • The Python packages, the TUI and the workflows do not read web/. CI on this PR runs Ruff and pytest only.
  • 52 files, 10,117 lines. 5,060 lines are web/package-lock.json.

web/ holds a static Astro site for zycode. Cloudflare Workers serves it as static
assets, so no server of ours is necessary. The site is not a Python package: Ruff and
pytest do not read it.

- Languages: English at / and Chinese at /zh/. The type Messages in src/i18n/types.ts
  gives en.ts and zh.ts the same keys.
- Content: why, the event contract, architecture, features, install, status, and
  evidence. The status table equals the table "Status" in README.md. The evidence
  section equals the benchmark report and keeps its limits. The terminal demo says that
  it is an illustration.
- Header: links to GitHub and to PyPI (pi-agent-cli-lc), a theme toggle, and a language
  link. On a phone the two link buttons show only an icon, and each keeps its name for
  screen readers.
- Address: wrangler.jsonc binds the Custom Domain zycode.dev to the Worker, and closes
  the workers.dev and preview addresses. The default site address is
  https://zycode.dev. SITE_URL sets the address of a build.
- public/_headers: security headers (CSP, HSTS, nosniff, frame deny) and a long cache
  for /_astro/*. The CSP blocks the RUM beacon that Cloudflare adds to a Free zone.
- Preview hosts (workers.dev, pages.dev, localhost): robots.txt says Disallow: /, and
  each page has noindex.
- brand/: the avatar (an SVG source and a 1024 x 1024 PNG) and the header (a 1500 x 500
  PNG) of the X account of zycode. The header comes from the page /dev/x/header/, like
  the social card. That page exists only in `npm run dev`: getStaticPaths returns no
  path in a build.
- web/README.md: the commands, the deploy steps, the settings that live in Cloudflare
  and not in this repository (the www redirect, Always Use HTTPS, TLS 1.2 or later,
  0-RTT, DNSSEC, and a configuration rule that turns off the RUM beacon), the four
  no-mail DNS records (SPF -all, DMARC reject, an empty DKIM key, and a null MX), and
  the pictures for X. The README says that the DNS records must be replaced before the
  domain gets a mail service, because the DMARC policy reject makes a receiver reject
  a message that does not pass the checks.
- AGENTS.md: a row for web/ in the module map, and a row in the table of commands.

Checked:
- npm run check: 0 errors, 0 warnings (1 old hint in CopyButton.astro)
- npm run build: 3 pages, and dist/ has no dev/ folder
- 51 color pairs pass WCAG 2.2 AA (4.5:1 for text, 3:1 for large text and interface
  parts)
- live: 200 on /, /zh/, /robots.txt, /sitemap.xml and /og.png; 404 on an unknown path
  and on /dev/x/header/
- live: http://zycode.dev and https://www.zycode.dev answer 301 to https://zycode.dev
- live: 30 browser checks (terminal demo, tabs and keys, copy, theme, reveal, structure,
  Chinese page, endpoints, console) pass
- live: the page does not scroll sideways at 320, 390, 768, 1024 and 1440 px (English
  and Chinese)
- Ruff reads 0 files in web/ (ruff check . --show-files)
@zy1233
zy1233 merged commit 5064135 into main Oct 30, 2026
4 checks passed
@zy1233
zy1233 deleted the feat/web-landing branch October 30, 2026 03:01
zy1233 added a commit that referenced this pull request Oct 30, 2026
…#55)

Core, harness and cli go from 0.6.0 to 0.7.0. They pin each other with ==. The two TUI crates
that zypi shows (pi-pager-bin, pi-version) and tui/Cargo.lock carry the same version
(scripts/tests/test_release_versions.py).

The extension packages are released with the core, so all four need pi-agent-core-lc>=0.7.0
(pi_agent_core/tests/test_extension_packaging.py), and pi-dynamic-workflows-py also needs
pi-agent-harness-lc>=0.7.0. The publish step skips a version that is on PyPI already, so they get
new versions: web-access, goal-x and dynamic-workflows 0.3.0 -> 0.4.0, pi-mcp 0.1.0 -> 0.2.0.
The README of pi-mcp-py (its PyPI page) names the new floor.

CHANGELOG.md: [Unreleased] becomes [0.7.0] - 2026-10-30. It gets an opening paragraph (the release
page shows it first), entries for the site (#50 to #54), the PyPI Website link, the queue cleanup
fix (#47) and the new version numbers, and the known issues of 0.6.0 that still hold. The one about
F7-02 to F7-09 is gone: the fixes are in this release. The entry for the console script and the
README of pi-agent-cli-lc say 0.7.0, not "the next release".

Why now: the published 0.6.0 has no `--setup` and no `pi-agent-cli-lc` console script, but the
site and the README on main describe both.

Checks: PR checks 6 of 6, and a dry run of Release on the branch (tests, both TUI builds, Python
packages): https://github.com/zy1233/pi-python/actions/runs/41037156832
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant