Skip to content

refactor: introduce PageShell for the shared page scaffold (#7106) [architect] - #7107

Merged
hivecommons-hive[bot] merged 1 commit into
mainfrom
arch/page-shell-7106
Sep 27, 2026
Merged

hivecommons-hive[bot] merged 1 commit into
mainfrom
arch/page-shell-7106

Conversation

@hivecommons-hive

Copy link
Copy Markdown
Contributor

Refactor

Introduces src/components/master-page/PageShell.tsx, a shared scaffold for the twelve src/app/[locale]/*/page.tsx files that each hand-roll <Navbar/> + <GridLines/> + <StarField/> + <Footer/> today with drifted defaults. src/app/[locale]/layout.tsx only sets up i18n/theme/fonts — there is no shared layout for these page shells yet.

PageShell owns the canonical defaults extracted from the eight-page majority — grid { horizontalLines: 21, verticalLines: 18 } and stars { density: "medium", showComets: true, cometCount: 3 } — and lets the three intentional variant classes (marketplace/quick-installation low+2, contribute-handbook high+5, coming-soon* bare) override via a typed background prop. Setting background.grid or background.stars to false drops that layer entirely; showFooter={false} suppresses the footer.

Not in this PR — deliberately

No page.tsx is ported yet. This PR lands only the interface + tests so each page port can be reviewed in isolation for visual regression. #7106 documents the drift matrix and the per-page port sequence (8 canonical pages, then 3 variant pages, then coming-soon* + the acmm-leaderboard strokeColor one-off).

Verification

  • npx vitest run src/__tests__/PageShell.test.tsx — 9 tests pass, covering: default forwarding to both widgets, partial overrides merged onto defaults for both, both layers individually disabled, both layers together disabled (background wrapper omitted), footer suppression, and outer/wrapper class propagation.
  • npx tsc --noEmit — clean.
  • npx eslint src/components/master-page/PageShell.tsx src/__tests__/PageShell.test.tsx — clean.
  • Widgets are mocked following src/__tests__/AboutSection.render.test.tsx's pattern; the underlying animation modules are three.js / raf-driven and already excluded from coverage in vitest.config.ts.

Refs #7106 (partial: PR ships PageShell + tests; per-page ports are follow-up PRs, one PR per port batch per the issue plan)


Filed by architect agent (ACMM L6 — full mode)

— hive: agent=architect backend=copilot model=claude-opus-4.7 copilot=1.0.88

…ines/StarField/Footer scaffold

12 page.tsx files under src/app/[locale]/*/ currently hand-roll the same
four-widget page scaffold (Navbar + GridLines + StarField + Footer), each
with slightly different prop values imported one-by-one from the barrel.
src/app/[locale]/layout.tsx only sets up i18n/theme/fonts; there is no
shared layout for these page shells today.

Introduces src/components/master-page/PageShell.tsx that owns the
canonical grid (horizontalLines=21, verticalLines=18) and starfield
(density=medium, showComets=true, cometCount=3) props extracted from
the eight-page majority, and lets the three intentional variant classes
(marketplace/quick-installation low+2; contribute-handbook high+5;
coming-soon* bare) override via a typed background prop:

  <PageShell background={{ stars: { density: 'high', cometCount: 5 } }}>

Setting background.grid or background.stars to false drops that layer;
showFooter=false suppresses the Footer.

No page.tsx is ported yet: this PR only lands the interface + tests so
each page port can be reviewed in isolation for visual regression. See
Refs #7106 for the drift matrix and the per-page port sequence.

Tests (9 cases) cover default forwarding, partial overrides on grid and
stars, both layers individually disabled, both layers together, footer
suppression, and outer/wrapper class propagation. Widgets are mocked
per the src/__tests__/AboutSection.render.test.tsx pattern (the
underlying animations are three.js/raf-driven and already excluded
from coverage in vitest.config.ts).

Refs #7106 (partial: PR ships PageShell + tests; per-page ports are
follow-up PRs, one PR per port batch per the issue plan)

Signed-off-by: architect <architect@localhost>
@kubestellar-prow kubestellar-prow Bot added the dco-signoff: yes Indicates the PR's author has signed the DCO. label Sep 27, 2026
@kubestellar-prow

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign kproche for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@netlify

netlify Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for kubestellar-docs ready!

Name Link
🔨 Latest commit df1b5ff
🔍 Latest deploy log https://app.netlify.com/projects/kubestellar-docs/deploys/6ab8e8f480c17b00086add43
😎 Deploy Preview https://deploy-preview-7107--kubestellar-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@kubestellar-prow kubestellar-prow Bot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Sep 27, 2026
@kubestellar-prow

Copy link
Copy Markdown

Hi @hivecommons-hive[bot]. Thanks for your PR.

I'm waiting for a kubestellar member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@hivecommons-hive
hivecommons-hive Bot merged commit 5c4d165 into main Sep 27, 2026
16 of 17 checks passed
@kubestellar-prow
kubestellar-prow Bot deleted the arch/page-shell-7106 branch September 27, 2026 09:59
@github-actions

Copy link
Copy Markdown
Contributor

Thank you for your contribution! Your PR has been merged.

Check out what's new:

Stay connected: Slack #kubestellar-dev | Multi-Cluster Survey

hivecommons-hive Bot added a commit that referenced this pull request Sep 27, 2026
…ers + fix shell DOM (#7108)

The PageShell shipped in #7107 had a subtly wrong background layer
(absolute -z-10 with no opaque base) that did not match the canonical
DOM used by every page in src/app/[locale]/*/page.tsx. Since no page
had adopted it yet, this commit fixes the interface before any callers
depend on it, and then ports the four pages that use the exact default
content wrapper ("relative z-10 pt-7") to it:

  - src/app/[locale]/ladder/page.tsx
  - src/app/[locale]/leaderboard/page.tsx
  - src/app/[locale]/leaderboard/[username]/page.tsx
  - src/app/[locale]/partners/page.tsx

PageShell now renders exactly:
  <div outer>
    <Navbar/>
    <div className="fixed inset-0 z-0">
      <div className="absolute inset-0 bg-[#0a0a0a]"/>
      <StarField/>
      <GridLines/>
    </div>
    <div className="relative z-10 pt-7">{children}</div>
    <Footer/>
  </div>

New knobs: baseLayerClassName (pass false to omit); contentClassName
(pass null to omit wrapper — for pages with custom content wrappers).

Vitest: 13/13 pass. tsc --noEmit clean on all four ported pages.

Refs #7106 (partial: 3 canonical pages [products, programs,
programs/[slug]/ProgramPageClient] with custom content wrappers +
coming-soon-*-page.tsx variants remain)

Signed-off-by: kubestellar-hive[bot] <223556219+Copilot@users.noreply.github.com>
Co-authored-by: kubestellar-hive[bot] <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

copilot dco-signoff: yes Indicates the PR's author has signed the DCO. frontend needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. typescript

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants