Skip to content

feat(website): publish the podling site from website/ - #4660

Open
Astro-Han wants to merge 21 commits into
mainfrom
feat/website-podling-site
Open

feat(website): publish the podling site from website/#4660
Astro-Han wants to merge 21 commits into
mainfrom
feat/website-podling-site

Conversation

@Astro-Han

@Astro-Han Astro-Han commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

maka.apache.org still returns 404, and #4307 settled what the site should say without giving it anywhere to live. This PR adds the site and the path that publishes it, following the OpenDAL layout described in #3404.

  • website/ is an Astro workspace on the root lockfile. One English and one Chinese page share a single Copy type, so a section, claim or link added to one language fails to type-check until the other has it too; test/site.test.mjs checks the built HTML for the Incubator disclaimer, the ASF footer, the [DISCUSS] Rebuild the Maka website and project narrative #4307 positioning sentence, identical link sets across languages, and no third-party loads.
  • The homepage is direction D from the vote in [DISCUSS] Rebuild the Maka website and project narrative #4307 (Astryx Centered Hero): one turn of RuntimeEvents in the hero, a bento with the Terminal-Bench leaderboard, the paired run, the Runtime Host and the log, the three download paths kept separate, and cards for the two blogs and two reports. Numbers are drawn from docs/eval/ and link there. Tokens are the desktop app's defaults; fonts are Geist and Geist Mono (OFL) self-hosted from the @fontsource-variable packages the app already depends on; the logo is the README's sky.png.
  • /downloads/ is shaped like OpenDAL's and laid out like the Astryx technical-docs template: a status table up top, then Apache releases (none yet, and the page says so), verification steps with KEYS, .asc and SHA-512, Desktop Nightly and building from source, each labelled, with copyable code blocks and a sticky outline that tracks the section in view.
  • The top bar has a light/dark toggle; the site follows the OS scheme until a choice is made, and the choice is remembered in that browser.
  • The ASF links the website policy requires (Foundation, License, Events, Privacy, Security, Sponsorship, Thanks) plus Incubator and Code of Conduct render as one list in the nav's ASF menu and in the footer; the site test asserts each URL on every page. The footer also carries the Apache Incubator logo (the ASF's published file, unedited, linking to incubator.apache.org), the Incubator disclaimer and the copyright and trademark line, the last two in English on both languages.
  • .github/workflows/website.yml builds the site and force-pushes the output plus .asf.yaml, LICENSE and NOTICE as an orphan commit: asf-site on a push to main touching the site, site/<tag>-staging on a release-candidate tag, or site/<name>-staging from workflow_dispatch. .asf.yaml gains publish: whoami: asf-site and staging: autostage: site/*. No third-party action is added; the push uses the job token through an extra header.
  • The ASF header policy learns .astro files (frontmatter fence, then the block comment) and records why the footer copy may carry the ASF copyright line.
  • Astro is pinned to 7.2.10: 7.3.0 imports astro/_internal/logger, which its own exports map does not expose, so every build that uses astro:assets fails.

Nothing is copied from the old maka-agent.github.io draft. Docs, Security, Community and Architecture stay where they live; the site links to them.

Refs #3404, #4307

Home, light and dark:

Homepage in light and dark

Chinese homepage and the downloads page:

Chinese homepage and English downloads page

Downloads in Chinese, dark, and at phone width:

Chinese downloads page in dark and the English downloads page at 390px

Phone and tablet widths:

Phone and tablet layouts

Verification

  • npm --workspace @maka/website run test:dist: 5 pages built, 5/5 checks pass.
  • npm run check:asf-headers: every source file carries the header or a reviewed exclusion.
  • node --test scripts/ci-workflow-policy.test.mjs scripts/ci-test-plan.test.mjs scripts/asf-license-headers.test.mjs scripts/script-entrypoints.test.mjs: 119/119 pass. The planner selects website as a standard workspace for changes under website/, so pull requests build the site through ci.yml.
  • npm run format and npm run lint: clean.
  • Rendered at 1280, 820 and 390 px in both colour schemes with no horizontal overflow, no console errors, and both Geist faces loaded from the site itself.
  • npm run build then npm run check:release: pass. The first CI run failed here because adding the workspace re-resolved zod from 4.4.3 to 4.5.4; the third-party notices are regenerated in the second commit.
  • Not run: the publish step itself, which can only run from main. After merge I will dispatch the workflow with stage=preview and check maka-preview.staged.apache.org before relying on asf-site.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope: Claude Code drafted the site, the workflow, the tests and this description from the #4307 consensus and the D mock voted on there. I reviewed the copy, the numbers against docs/eval/, and the publication mechanics against the asfyaml reference.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

maka.apache.org still returns 404, and #4307 settled what the site should say
without giving it anywhere to live. This adds website/ as an Astro workspace
with the homepage direction the thread voted for (D, Astryx Centered Hero),
one English and one Chinese page sharing a single Copy type so neither can
drift, a downloads page shaped like OpenDAL's, and the ASF footer with the
Incubator disclaimer on every page.

Publication follows OpenDAL: website.yml builds the site and force-pushes the
output as an orphan commit, to asf-site on main and to site/<name>-staging for
release-candidate tags or a dispatched stage name; .asf.yaml carries the
matching publish and autostage blocks and is copied into the published branch
so its whoami guard matches there and nowhere else.

The ASF header policy learns .astro files (frontmatter fence, then the block
comment) and records why the footer copy may carry the ASF copyright line.
Astro is pinned to 7.2.10 because 7.3.0 imports an internal module its own
exports map does not expose, which fails every build that uses astro:assets.

Refs #3404, #4307

Generated-by: Claude Code
Adding the website workspace re-resolved zod from 4.4.3 to 4.5.4 in the
production closure, and check:release refuses stale notices.

Generated-by: Claude Code
@github-actions github-actions Bot added the effort/XL Over 1000 readable lines label Sep 3, 2026
Reviewers asked for a switch rather than following the OS alone. The choice
is stored per browser and applied before first paint; without one the OS
setting still decides.

Generated-by: Claude Code
…tibility

Revert unintended zod bump from 4.4.3 to 4.5.4 in root package-lock.json.
Zod 4.5.4 generates 'additionalItems: false' for z.tuple() schemas, which
violates the strict schema keyword allowlist in runtime-host client capability
protocol validation and causes native capability tests to fail.
Add an on-page outline with scrollspy, status card block for distribution
channels, and numbered verification and build steps with copy buttons.
@Astro-Han
Astro-Han marked this pull request as ready for review September 3, 2026 15:12
The brand, language switch, theme toggle and Get Maka button overflowed a 390px viewport by 4px, and the 中文 label wrapped onto two lines. Hero and downloads page carry the same call to action, so the button is dropped from the nav at phone widths, and the switch no longer wraps.

Generated-by: Claude Code
@Astro-Han
Astro-Han force-pushed the feat/website-podling-site branch from b70f53b to 7e66e2f Compare September 3, 2026 15:21
The brand reused the language-switch path builder, so on /downloads/ it linked back to the same page and clicking it did nothing. The site test now asserts the brand href on every built page.

Generated-by: Claude Code
The top bar already switches language on every page and both switches did the same thing.

Generated-by: Claude Code
…Code of Conduct

The nav's ASF item linked straight to apache.org while the policy links lived only in the footer. Both now render one list: Foundation, Incubator, License, Events, Privacy, Security, Sponsorship, Thanks and Code of Conduct, and the site test asserts every required URL on every page.

Generated-by: Claude Code
The cover was a two-row grid, so the title sat in the top half and the label in the bottom half with a gap between. They now centre together.

Generated-by: Claude Code
At phone width the seven event pills wrap to four rows and the absolutely positioned caption overlapped the last one. The caption now sits in normal flow under the pills.

Generated-by: Claude Code
… Chinese page

The trademark attribution is legal text, like the Incubator disclaimer above it, and the ASF publishes it only in English. The Chinese page now reuses the English line and the site test asserts it on every page.

Generated-by: Claude Code
The Incubator branding guide asks podling sites to carry the Incubator logo. The file is the ASF's published logo, unedited, linking to incubator.apache.org above the disclaimer; in dark mode it sits on a white chip because the wordmark is black.

Generated-by: Claude Code
The blue bar after the last event chip read as a stray block. The chips now appear in sequence the first time the tile scrolls into view and a thin caret keeps blinking after them, so the tile shows a log being written. Nothing animates under prefers-reduced-motion, and without JavaScript every chip is simply visible.

Generated-by: Claude Code
The Chinese copy read like a sentence-by-sentence translation; it is rewritten in natural developer-facing Chinese, with the positioning sentence fixed to the wording agreed in #4307 and technical terms left in English. English edits: the lede loses a comma splice, the leaderboard caption and downloads status heading read plainly, and one tense is fixed. The eyebrow above the headline repeated the nav brand and is removed, and the Chinese headline gets an em-based measure so it breaks in two lines like the English.

Generated-by: Claude Code
The tile's height comes from the two tiles beside it and the table was pushed to the bottom, so shorter copy, as in Chinese, left a hole between the link and the table. The rows now share the leftover height.

Generated-by: Claude Code

@yihanzhu yihanzhu left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Took a pass at the homepage as a first-time visitor and it reads as a lot of text for what the data can already show. Screenshots below, PR head on the left, my branch on the right (yihanzhu/maka claude/maka-site-visualization-a5637f, one commit rebased on f252434, diff).

Three changes: the hero steps are named in plain words instead of RuntimeEvent types (Text / FunctionCall means nothing to someone landing here); the claims are drawn instead of described (pass@1 vs cost per pass as a scatter, head-to-head as two bars, plus Maka's pass rate by task difficulty, all computed from docs/eval at build time); and the explanatory paragraphs go where a figure carries them. The reading cards lead with a one-line takeaway instead of a formula or a bare number.

I dropped the Runtime Host and log tiles since the hero scene already shows one recorded turn; that's the part I'd most like your call on, since you just animated it. Happy to send this as a follow-up after merge or you can cherry-pick whatever you want.

Hero:

Hero, before and after

Bento:

Bento, before and after

Reports and writing:

Reading cards, before and after

Full page, light and dark:

Full page in light

Full page in dark

The event type is already coloured by tone, so the dot said the same thing twice.

Generated-by: Claude Code
RuntimeEvent type names on the first screen mean nothing to a first-time visitor, a point raised in review on #4660. The hero cards now say what happened (Model says, Runs a command, You approve) and the high-water line reads as what the model still sees; the type names stay in the log tile, where the term is explained.

Generated-by: Claude Code
Chinese prose used the type name as a noun. Generic runtime is 运行时 and the event is 运行时事件, with the type name given once in the log tile where the chips show it. Runtime Host stays untranslated: the Chinese docs and README use it as the component's proper name throughout.

Generated-by: Claude Code
Host pairs with 客户端 the way the tile already says 瘦客户端, and a visitor reads it without knowing the codebase. The English name is given once in parentheses and the diagram box keeps it, since that is what the docs call the component.

Generated-by: Claude Code
@Astro-Han

Copy link
Copy Markdown
Contributor Author

Thank you for taking the first-time visitor's pass, and for doing it as a working branch with side-by-sides rather than a list of asks. That made it easy to judge each piece on its own.

Taken now, in this PR (7aa7743): the hero events are named in plain words in both languages, and the high-water line reads as what the model still sees. You were right that type names have no business on the first screen; they stay in the log tile, where the term is explained.

Pushing back on the charts. The direction is right, and computing from docs/eval at build time beats hand-copied numbers. Two problems with this version, though. The pass-rate-by-difficulty panel is a result the site would be the only source for; the site can present what the reports established, but the analysis has to live in docs/eval first. And the two-column layout with the scatter and the difficulty bars loses the alignment the bento had: rows no longer line up and the page reads busier than before. Visual cleanliness is the bar we hold the homepage to, ahead of how much it shows. If you want to take another pass after merge, a single figure that keeps the grid would be where I'd start.

Pushing back on dropping the Runtime Host and log tiles. Those two are the architecture the project is built around, and the log is the piece we are investing in most over the coming months. Direction D in #4307 was voted with them below the fold, and the hero shows one turn only as an example of what the log records. They stay.

I'd like to merge this PR as the voted direction plus the fixes from review, and take anything further as the follow-up you offered.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

effort/XL Over 1000 readable lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants