This is an automated email from the ASF dual-hosted git repository.
dmsolr pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shenyu-website.git
The following commit(s) were added to refs/heads/main by this push:
new c9de244a1fa fix: restore Apache footer logos and refine homepage
(#1154)
c9de244a1fa is described below
commit c9de244a1faca40a1aa560e40c81bacbd9565bbb
Author: Liming Deng <[email protected]>
AuthorDate: Sat Oct 10 16:42:38 2026 +0800
fix: restore Apache footer logos and refine homepage (#1154)
* fix: restore Apache logos in the shared footer
* fix: refine homepage presentation and center footer notices
---
i18n/zh/code.json | 3 ---
src/components/Footer.module.css | 29 ++++++++++++++++++++++
src/components/Footer.tsx | 15 +++++++++++-
src/data/homepage.ts | 4 ---
src/pages/index.module.css | 53 ----------------------------------------
src/pages/index.tsx | 12 +++------
6 files changed, 47 insertions(+), 69 deletions(-)
diff --git a/i18n/zh/code.json b/i18n/zh/code.json
index 3775cc5f783..f3d4fe6f2b9 100755
--- a/i18n/zh/code.json
+++ b/i18n/zh/code.json
@@ -878,9 +878,6 @@
"releases.summary.2.7.1-release": {
"message": "增强 MCP Server,迁移 WASM 运行时,并改进安全性与基础设施。"
},
- "homepage.refresh.ecosystem": {
- "message": "与你的技术生态,无缝协作"
- },
"team.title": {
"message": "社区团队"
},
diff --git a/src/components/Footer.module.css b/src/components/Footer.module.css
index ce53c2cf060..0e5db44eba3 100644
--- a/src/components/Footer.module.css
+++ b/src/components/Footer.module.css
@@ -32,6 +32,34 @@
color: #929b8d;
}
+.apacheLogos {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 16px;
+ margin-top: 20px;
+}
+
+.apacheLogos a {
+ display: inline-flex;
+ align-items: center;
+ border-radius: 6px;
+}
+
+.apacheLogos a:focus-visible {
+ outline: 2px solid #ffad85;
+ outline-offset: 5px;
+}
+
+.apacheLogos img {
+ display: block;
+}
+
+.foundationLogo {
+ padding: 10px 12px;
+ background: #fff;
+}
+
.group h2 {
font-size: 16px;
font-weight: 600;
@@ -60,6 +88,7 @@
}
.legal {
+ text-align: center;
margin-top: 38px;
padding-top: 22px;
border-top: 1px solid #3a3e35;
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
index 39176beebba..4b8f98d821c 100644
--- a/src/components/Footer.tsx
+++ b/src/components/Footer.tsx
@@ -6,6 +6,8 @@ import styles from './Footer.module.css';
export default function Footer(): React.ReactElement {
const copy = getHomepageContent();
const logo = useBaseUrl('/img/logo-light.svg');
+ const supportApacheLogo = useBaseUrl('/img/logo/support-apache.png');
+ const foundationLogo = useBaseUrl('/img/logo/asf_logo.svg');
const groups = [{
title: copy.footerProject,
links: [[copy.docs, '/document'], [copy.download, '/download'],
[copy.blog, '/blog'], ['GitHub', 'https://github.com/apache/shenyu']]
@@ -19,7 +21,18 @@ export default function Footer(): React.ReactElement {
return <footer className={styles.footer}>
<div className={styles.container}>
<div className={styles.top}>
- <div className={styles.brand}><Link to="/"><img src={logo} alt="Apache
ShenYu" width="200" height="40" /></Link><p>{copy.footerTagline}</p><span>Open
source. Apache 2.0.</span></div>
+ <div className={styles.brand}>
+ <Link to="/"><img src={logo} alt="Apache ShenYu" width="200"
height="40" /></Link>
+ <p>{copy.footerTagline}</p><span>Open source. Apache 2.0.</span>
+ <div className={styles.apacheLogos}>
+ <a href="https://www.apache.org/">
+ <img src={supportApacheLogo} alt="Support Apache" width="64"
height="64" />
+ </a>
+ <a className={styles.foundationLogo}
href="https://www.apache.org/">
+ <img src={foundationLogo} alt="The Apache Software Foundation"
width="120" height="63" />
+ </a>
+ </div>
+ </div>
{groups.map(group => <div className={styles.group}
key={group.title}><h2>{group.title}</h2><ul>{group.links.map(([label, to]) =>
<li key={label}><Link to={to}>{label}</Link></li>)}</ul></div>)}
</div>
<div className={styles.legal}>
diff --git a/src/data/homepage.ts b/src/data/homepage.ts
index 5654dc7814b..28e883738b3 100644
--- a/src/data/homepage.ts
+++ b/src/data/homepage.ts
@@ -76,10 +76,6 @@ export function getHomepageContent() {
id: "homepage.refresh.flowNote",
message: "Many protocols. One place to manage them."
}),
- ecosystem: translate({
- id: "homepage.refresh.ecosystem",
- message: "AT HOME IN YOUR ECOSYSTEM"
- }),
featuresEyebrow: translate({
id: "homepage.refresh.featuresEyebrow",
message: "BUILT FOR REAL-WORLD APIS"
diff --git a/src/pages/index.module.css b/src/pages/index.module.css
index 47c2c99b6ab..7199f1c32b6 100755
--- a/src/pages/index.module.css
+++ b/src/pages/index.module.css
@@ -263,44 +263,6 @@
color: var(--home-accent);
}
-.ecosystem {
- margin-top: 70px;
- padding: 25px 0;
- border-top: 1px solid var(--home-line);
- border-bottom: 1px solid var(--home-line);
- display: flex;
- align-items: center;
- gap: 42px;
-}
-
-.ecosystem > span {
- font-size: 13px;
- line-height: 1.7;
- letter-spacing: 1.5px;
- color: var(--home-muted);
- max-width: 130px;
- flex-shrink: 0;
-}
-
-.ecosystem ul {
- display: flex;
- flex: 1;
- flex-wrap: wrap;
- gap: 18px 28px;
- justify-content: space-between;
- align-items: center;
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-.ecosystem li {
- font-size: 18px;
- font-weight: 650;
- letter-spacing: -.4px;
- color: var(--home-muted);
-}
-
.section {
padding-top: 94px;
padding-bottom: 94px;
@@ -601,9 +563,6 @@
.adminGrid {
gap: 36px;
}
- .ecosystem {
- gap: 24px;
- }
}
@media (max-width: 800px) {
@@ -628,18 +587,6 @@
max-width: 560px;
justify-self: center;
}
- .ecosystem {
- margin-top: 38px;
- flex-direction: column;
- align-items: flex-start;
- gap: 18px;
- }
- .ecosystem > span {
- max-width: none;
- }
- .ecosystem ul {
- justify-content: flex-start;
- }
.section {
padding-top: 58px;
padding-bottom: 58px;
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index e16945c8738..892121d97fb 100755
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -56,7 +56,7 @@ function RequestFlow({
</div>;
}
function DiagramDeck({copy}: {copy: ReturnType<typeof getHomepageContent>}) {
- const [active, setActive] = useState<'flow' | 'architecture'>('flow');
+ const [active, setActive] = useState<'flow' |
'architecture'>('architecture');
const architecture =
useBaseUrl('/img/architecture/shenyu-readme-architecture.png');
return <div className={styles.diagramDeck} role="group"
aria-label={copy.diagramSwitcher}>
<div className={styles.deckStage}>
@@ -67,7 +67,7 @@ function DiagramDeck({copy}: {copy: ReturnType<typeof
getHomepageContent>}) {
<div className={`${styles.deckCard} ${active === 'architecture' ?
styles.frontCard : styles.backCard}`}>
<div aria-hidden={active !== 'architecture'}
className={styles.cardContent}>
<div className={`${styles.flow} ${styles.architectureCard}`}>
- <div className={styles.flowTop}><span className={styles.statusDot}
/>{copy.architectureTitle}<span className={styles.flowIndex}>02 /
02</span></div>
+ <div className={styles.flowTop}><span className={styles.statusDot}
/>{copy.architectureTitle}<span className={styles.flowIndex}>01 /
02</span></div>
<a className={styles.architectureImage} href={architecture}
target="_blank" rel="noopener noreferrer" tabIndex={active === 'architecture' ?
0 : -1} aria-label={copy.architectureEnlarge}>
<img src={architecture} alt={copy.architectureAlt} width="3360"
height="2016" />
</a>
@@ -78,8 +78,8 @@ function DiagramDeck({copy}: {copy: ReturnType<typeof
getHomepageContent>}) {
</div>
</div>
<div className={styles.deckControls}>
- <button type="button" aria-pressed={active === 'flow'} onClick={() =>
setActive('flow')}>01<span>{copy.flowTab}</span></button>
- <button type="button" aria-pressed={active === 'architecture'}
onClick={() =>
setActive('architecture')}>02<span>{copy.architectureTab}</span></button>
+ <button type="button" aria-pressed={active === 'architecture'}
onClick={() =>
setActive('architecture')}>01<span>{copy.architectureTab}</span></button>
+ <button type="button" aria-pressed={active === 'flow'} onClick={() =>
setActive('flow')}>02<span>{copy.flowTab}</span></button>
</div>
</div>;
}
@@ -159,10 +159,6 @@ export default function Home() {
</div>
<DiagramDeck copy={copy} />
</div>
- <div className={styles.ecosystem}>
- <span>{copy.ecosystem}</span>
- <ul>{['Apache Dubbo', 'Spring Cloud', 'gRPC', 'Kubernetes',
'Apache SkyWalking'].map(name => <li key={name}>{name}</li>)}</ul>
- </div>
</div>
</section>