🌱 Deduplicate competitor landing page shells#14017
Conversation
Refactor FromHeadlamp and FromLens to use a shared CompetitorLandingPage shell while preserving page-specific content and analytics wiring. Add typed landing config/callback contracts and regression tests for shared shell and per-page analytics isolation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: kubestellar-bot <kubestellar-bot@kubestellar.io>
✅ Deploy Preview for kubestellarconsole ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
|
👋 Hey @kubestellar-hive[bot] — thanks for opening this PR!
This is an automated message. |
✅ Test Coverage CheckAll new source files in this PR have corresponding test files. Checked |
Signed-off-by: kubestellar-bot <kubestellar-bot@kubestellar.io>
|
Thank you for your contribution! Your PR has been merged. Check out what's new:
Stay connected: Slack #kubestellar-dev | Multi-Cluster Survey |
✅ Post-Merge Verification: passedCommit: |
|
Post-merge build verification passed ✅ Both Go and frontend builds compiled successfully against merge commit |
Fixes #14014
Summary
Extract shared CompetitorLandingPage component to eliminate duplication between FromHeadlamp.tsx and FromLens.tsx.
Both pages now use a single parameterized shell component, passing competitor-specific config (branding, content, analytics callbacks) while sharing the page structure (hero, comparison table, highlights, deploy section, footer CTA).
Changes
web/src/components/landing/CompetitorLandingPage.tsx— single reusable page shellweb/src/components/landing/types.ts— strict config interfaceFromHeadlamp.tsxto use shared componentFromLens.tsxto use shared componentTesting
CI will validate build and lint checks.
All competitor-specific content (branding, analytics callbacks, comparison data) is preserved and passed via config objects.