From 9d0040593fe1a62f95e042f856ecee924f7fb1cc Mon Sep 17 00:00:00 2001 From: Abhishek Choudhary Date: Mon, 3 Aug 2026 16:39:58 +0545 Subject: [PATCH 1/2] feat(homepage): redraw the architecture diagram and keep its source The old architecture.svg was an exported drawing with no source, so it could only be replaced wholesale. Redraw it as HTML/CSS and commit the generator alongside the output. - scripts/architecture/arch.html is the drawing: a 1200x738 canvas of absolutely-positioned boxes plus one SVG layer for the connectors, so boxes and the wires that land on them share a coordinate space. - scripts/architecture/render.sh shoots it in headless Chrome at 2x and palette-reduces to public/img/architecture.png (2400x1476, ~73 KB). Chrome writes the screenshot and can then sit there instead of exiting, so render.sh waits on the output file and kills the process. --- .github/workflows/deploy.yml | 2 +- next/README.md | 1 + next/public/img/architecture.png | Bin 0 -> 73370 bytes next/public/img/architecture.svg | 1 - next/scripts/architecture/arch.html | 219 ++++++++++++++++++++++++++++ next/scripts/architecture/render.sh | 81 ++++++++++ next/src/components/HomePage.astro | 2 +- next/src/styles/global.css | 7 +- 8 files changed, 307 insertions(+), 6 deletions(-) create mode 100644 next/public/img/architecture.png delete mode 100644 next/public/img/architecture.svg create mode 100644 next/scripts/architecture/arch.html create mode 100755 next/scripts/architecture/render.sh diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 4b09e6b13af19..dee03a5bae348 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -193,7 +193,7 @@ jobs: cp -R next/dist/img/. website/build/img/ test -f website/build/img/infographs/performance.svg test -f website/build/img/integrations/icon-prometheus.svg - test -f website/build/img/architecture.svg + test -f website/build/img/architecture.png - name: Deploy to Netlify uses: ./.github/actions/actions-netlify diff --git a/next/README.md b/next/README.md index 5b25b40b8df50..6f1caeafbbdfa 100644 --- a/next/README.md +++ b/next/README.md @@ -19,6 +19,7 @@ Prototype rebuild of [apisix.apache.org](https://apisix.apache.org) as a **fully - `src/pages/` — routes; `/zh/**` mirrors are thin wrappers passing `locale="zh"`. - `scripts/generate-sitemaps.mjs` — emits `sitemap.xml` + `zh/sitemap.xml` post-build. - `scripts/check-parity.mjs` — asserts every URL in the live sitemaps exists in `dist/` (exact, case-sensitive string comparison). +- `scripts/architecture/`: source for the homepage architecture diagram. `arch.html` is the drawing (absolutely-positioned boxes plus an SVG wire layer); `bash scripts/architecture/render.sh` shoots it in headless Chrome at 2x and overwrites `public/img/architecture.png`. Edit the HTML and re-render; the PNG is generated output. ## Build diff --git a/next/public/img/architecture.png b/next/public/img/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1b5c87cde9e45faaec69c309d38778fc07399f GIT binary patch literal 73370 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

pd5!zUe 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 S4Vd}}2o&X1Wl=BSi2nr}dE}e` literal 0 HcmV?d00001 diff --git a/next/public/img/architecture.svg b/next/public/img/architecture.svg deleted file mode 100644 index 169949b76a6a8..0000000000000 --- a/next/public/img/architecture.svg +++ /dev/null @@ -1 +0,0 @@ -Apache APISIXRate limitAuthSecurityLoggingCustom plugin... ...Client/ServiceApache Skywalking Grafana...PrometheusPARTNERPRIVATEPUBLICetcdetcdetcdControl Plane (CP)Manager APIDashboardData Plane (DP) \ No newline at end of file diff --git a/next/scripts/architecture/arch.html b/next/scripts/architecture/arch.html new file mode 100644 index 0000000000000..c9e4c80534675 --- /dev/null +++ b/next/scripts/architecture/arch.html @@ -0,0 +1,219 @@ + + +Apache APISIX architecture diagram (source) + + + +

+
+
+ +
Data plane
+
Control plane
+ + +
Client / service
+ +
+
Apache APISIXHot-reloadable plugin pipeline
+
+
Rate limit
+
Auth
+
Security
+
Logging
+
Tracing
+
Traffic split
+
Transformation
+
Custom plugin
+
100+ more
+
+
+ +
Partner APIs
+
Private APIs
+
Public APIs
+ + +
Admin
+ +
+
DashboardConfigure routes and plugins
+
Manager API
+
+ +
+
etcd clusterConfiguration store
+
+
etcd
+
etcd
+
etcd
+
+
+ +
+
ObservabilityMetrics, traces, and logs
+
+
Apache SkyWalking
+
Prometheus
+
Grafana
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/next/scripts/architecture/render.sh b/next/scripts/architecture/render.sh new file mode 100755 index 0000000000000..5d125ab5270a3 --- /dev/null +++ b/next/scripts/architecture/render.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash +# Re-render public/img/architecture.png from arch.html. +# +# Usage: bash scripts/architecture/render.sh +# Requires: Google Chrome (override with CHROME=/path/to/chrome) +# +# arch.html is authored at 1200x738 CSS px and shot at 2x, so the PNG is +# 2400x1476. Keep that in sync with the width/height on the in +# src/components/HomePage.astro if you change the canvas size. +# +# The diagram uses the system sans stack, so text metrics follow whatever the +# rendering machine has installed. Re-render on macOS to match the committed +# PNG; elsewhere expect small label-width shifts. +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/../.." && pwd)" +SRC="$ROOT/scripts/architecture/arch.html" +OUT="$ROOT/public/img/architecture.png" + +CHROME="${CHROME:-/Applications/Google Chrome.app/Contents/MacOS/Google Chrome}" +if [ ! -x "$CHROME" ]; then + echo "Chrome not found at: $CHROME (set CHROME=/path/to/chrome)" >&2 + exit 1 +fi + +TMP="$(mktemp -d)" +trap 'rm -rf "$TMP"' EXIT + +SHOT="$TMP/shot.png" + +# A throwaway profile plus the no-networking flags keep Chrome off the network, +# which it otherwise hits on startup for first-run and component-update chores. +"$CHROME" \ + --headless \ + --disable-gpu \ + --hide-scrollbars \ + --no-first-run \ + --no-default-browser-check \ + --disable-background-networking \ + --disable-component-update \ + --disable-extensions \ + --user-data-dir="$TMP/profile" \ + --force-device-scale-factor=2 \ + --window-size=1200,738 \ + --virtual-time-budget=3000 \ + --default-background-color=ffffffff \ + --screenshot="$SHOT" \ + "file://$SRC" /dev/null 2>&1 & +CHROME_PID=$! + +# Chrome writes the shot and then can sit there instead of exiting (seen under +# sandboxed shells), so wait on the file rather than on the process. +for _ in $(seq 1 60); do + if [ -s "$SHOT" ]; then + sleep 1 # let the last write land before we read it + break + fi + kill -0 "$CHROME_PID" 2>/dev/null || break + sleep 1 +done +kill "$CHROME_PID" 2>/dev/null || true +wait "$CHROME_PID" 2>/dev/null || true + +if [ ! -s "$SHOT" ]; then + echo "Chrome produced no screenshot" >&2 + exit 1 +fi + +# Flat fills and text palette-reduce cleanly: the raw shot is ~200 KB, 256-color +# ~70 KB. Either optimizer is fine; without one the raw shot still works. +# magick's -quality 95 is zlib level 9 + adaptive filtering, worth ~50 KB here. +if command -v pngquant >/dev/null 2>&1; then + pngquant --quality 80-98 --speed 1 --force --output "$OUT" "$SHOT" +elif command -v magick >/dev/null 2>&1; then + magick "$SHOT" -strip -colors 256 -depth 8 -quality 95 "PNG8:$OUT" +else + echo "no pngquant/magick, writing the unoptimized shot" >&2 + cp "$SHOT" "$OUT" +fi + +echo "wrote $OUT ($(wc -c <"$OUT" | tr -d ' ') bytes)" diff --git a/next/src/components/HomePage.astro b/next/src/components/HomePage.astro index dcda70ff7467e..187273b59af00 100644 --- a/next/src/components/HomePage.astro +++ b/next/src/components/HomePage.astro @@ -174,7 +174,7 @@ const PILLAR_IMGS = [ 'Requests flow through a hot-reloadable plugin pipeline; etcd distributes configuration across the cluster in real time, with no restarts.', '请求流经可热加载的插件流水线;etcd 将配置实时分发到整个集群,无需重启。')}

- {t(locale, + {t(locale,
{t(locale, 'Apache APISIX is based on NGINX and etcd. Compared with traditional API Gateways, APISIX has features like dynamic routing and hot-loading plugins, etc.', 'Apache APISIX 基于 NGINX 与 etcd,相较于传统的 API 网关,它提供了动态路由、插件热加载等诸多能力。')}
diff --git a/next/src/styles/global.css b/next/src/styles/global.css index f71a99440a1d6..c0ee1db848f63 100644 --- a/next/src/styles/global.css +++ b/next/src/styles/global.css @@ -262,11 +262,12 @@ section.endcta.alt { background: transparent; padding: 4rem 1rem 0; } .arch-visual { max-width: 980px; margin: 2rem auto 0; background: #fff; border: 1px solid rgba(16,24,39,.06); border-radius: 16px; padding: clamp(1.25rem, 3vw, 2.5rem); box-shadow: 0 1px 2px rgb(0 0 0 / 4%), 0 12px 32px rgb(0 0 0 / 10%); } .arch-visual img { width: 100%; max-width: 100%; height: auto; display: block; margin-inline: auto; } .arch-visual figcaption { max-width: 34rem; margin: 1rem auto 0; text-align: center; font-size: .95rem; color: var(--color-text-soft); } -/* On phones the 1713px-wide diagram would shrink below legibility (~14%); - let it pan horizontally at >=37% scale instead. */ +/* The diagram is authored 1200 CSS px wide (exported at 2x). On phones let it + pan horizontally rather than shrink past the point where labels stop being + readable; 720px is the narrowest that still holds the plugin grid legible. */ @media (max-width: 700px) { .arch-visual { overflow-x: auto; -webkit-overflow-scrolling: touch; } - .arch-visual img { min-width: 640px; } + .arch-visual img { min-width: 720px; } } .pillar-section { background: #fff8f6; } .pillar-section + .pillar-section { border-top: 1px solid #f2e8e4; } From a8bd0988e23ab7ce59f153ca9f56d536e981f671 Mon Sep 17 00:00:00 2001 From: Abhishek Choudhary Date: Mon, 3 Aug 2026 16:40:04 +0545 Subject: [PATCH 2/2] chore: drop the unused Docusaurus Architecture section The Astro homepage replaces index.html, so this section no longer reaches users, but it still compiled and pulled in a 35 KB SVG. Removes the component, its scss, the two SVGs it exclusively imported, and the now-dead architecture.component.* zh translations. The scss also declared .testimonials-head, .docs-promo-head, .add-left-margin and .arch-scale-svg. customTheme.scss already declares all of them, and .add-left-margin (Benefits.tsx) is the only one that appears in any markup, so nothing loses styling. --- website/i18n/zh/code.json | 12 -- .../src/assets/images/PatternGrouped-min.svg | 1 - .../images/infographs/Architecture-min.svg | 1 - .../src/components/sections/Architecture.tsx | 56 --------- .../css/landing-sections/architecture.scss | 114 ------------------ website/src/pages/index.tsx | 2 - 6 files changed, 186 deletions(-) delete mode 100644 website/src/assets/images/PatternGrouped-min.svg delete mode 100644 website/src/assets/images/infographs/Architecture-min.svg delete mode 100644 website/src/components/sections/Architecture.tsx delete mode 100644 website/src/css/landing-sections/architecture.scss diff --git a/website/i18n/zh/code.json b/website/i18n/zh/code.json index cb0c70542bce7..8bd000d11840b 100644 --- a/website/i18n/zh/code.json +++ b/website/i18n/zh/code.json @@ -107,18 +107,6 @@ "message": "阅读博客", "description": "Read Blog" }, - "architecture.component.title.name": { - "message": "适用于超大规模、复杂的业务系统", - "description": "Building for large-scale, high value systems" - }, - "architecture.component.title.subtitle": { - "message": "Apache APISIX 作为云原生架构的开源 API 网关,可以为海量 API 和微服务提供安全可靠的动态、高性能、可扩展的管理平台。", - "description": "Apache APISIX lets you build Cloud-Native Microservices API gateways, delivering the ultimate performance, security, open source and scalable platform for all your APIs and microservices." - }, - "architecture.component.card.caption": { - "message": "Apache APISIX 基于 NGINX 与 etcd,相较于传统的 API 网关,它提供了动态路由、插件热加载等诸多能力。", - "description": "Apache APISIX is based on NGINX and etcd. Compared with traditional API gateways, APISIX has dynamic routing and hot-loading plugins" - }, "features.component.why.title": { "message": "为什么选择 APISIX API 网关?" }, diff --git a/website/src/assets/images/PatternGrouped-min.svg b/website/src/assets/images/PatternGrouped-min.svg deleted file mode 100644 index 567e4f74b293b..0000000000000 --- a/website/src/assets/images/PatternGrouped-min.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/website/src/assets/images/infographs/Architecture-min.svg b/website/src/assets/images/infographs/Architecture-min.svg deleted file mode 100644 index 169949b76a6a8..0000000000000 --- a/website/src/assets/images/infographs/Architecture-min.svg +++ /dev/null @@ -1 +0,0 @@ -Apache APISIXRate limitAuthSecurityLoggingCustom plugin... ...Client/ServiceApache Skywalking Grafana...PrometheusPARTNERPRIVATEPUBLICetcdetcdetcdControl Plane (CP)Manager APIDashboardData Plane (DP) \ No newline at end of file diff --git a/website/src/components/sections/Architecture.tsx b/website/src/components/sections/Architecture.tsx deleted file mode 100644 index 3f3a0695edea9..0000000000000 --- a/website/src/components/sections/Architecture.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import type { FC } from 'react'; -import React from 'react'; - -import Translate from '@docusaurus/Translate'; - -import HLDesign from '../../assets/images/infographs/Architecture-min.svg'; -import Pattern from '../../assets/images/PatternGrouped-min.svg'; -import '../../css/landing-sections/architecture.scss'; - -const Architecture: FC = () => ( -
- -

- - Building for large-scale, high value systems - -

-
-

- - Apache APISIX provides open source API Gateway to help you manage microservices, - delivering the ultimate performance, security, and scalable platform for all your APIs and - microservices. - -

-
-
-
- -
-
-

- - Apache APISIX is based on NGINX and etcd. Compared with traditional API Gateways, APISIX - has features like dynamic routing and hot-loading plugins, etc. - -

-
-
-
-
-); - -export default Architecture; diff --git a/website/src/css/landing-sections/architecture.scss b/website/src/css/landing-sections/architecture.scss deleted file mode 100644 index 51bc3642e4ea8..0000000000000 --- a/website/src/css/landing-sections/architecture.scss +++ /dev/null @@ -1,114 +0,0 @@ -@import '../util'; - -.hldesign { - height: 100%; - display: flex; - justify-content: center; -} - -.hldesign-graphic { - width: 60%; - height: auto; -} - -.Architecture_svg__architecture { - font-family: MaisonNeue-Medium, sans-serif; -} - -.arch { - background: linear-gradient(180deg, #e2ecff 15%, #fff 90%); - position: relative; - z-index: 1; - padding: 50px 0; - overflow: hidden; -} - -.arch-card-caption { - height: 100%; - display: flex; - justify-content: center; - color: #615d5d; -} - -.arch-card-caption > p { - width: 90%; - letter-spacing: 0.2px; - font-family: MaisonNeue-Light, sans-serif; - font-weight: 700; - text-align: center; - position: relative; - bottom: -15px; - font-size: 1rem; -} - -.arch-card-border { - z-index: -10; - position: absolute; - width: 66%; - height: 100%; - border-style: solid; - top: 15px; - left: 17%; - border-color: white; - background: white; - filter: drop-shadow(0 4px 10px rgb(0 0 0 / 25%)); -} - -.arch-head, -.testimonials-head, -.docs-promo-head { - font-size: 2.4rem; - position: relative; - left: 16.8%; - width: 83.2%; -} - -.arch-subtitle, -.testimonials-subtitle, -.docs-promo-subtitle { - font-size: 1.13rem; - position: relative; - left: 16.8%; - width: 70%; - color: #615d5d; - letter-spacing: 0.2px; - font-family: MaisonNeue-Light, sans-serif; - font-weight: 700; -} - -.add-left-margin { - position: relative; - left: 16.8%; -} - -@include respond-between(sm, md) { - .hldesign-graphic { - width: 100%; - } - - .arch-scale-svg { - display: none; - } - - .arch-card-border { - width: 100%; - left: 0; - top: 10px; - } - - .arch-head, - .testimonials-head, - .docs-promo-head, - .oss-promo-head { - left: 7%; - width: 83%; - } - - .arch-subtitle, - .testimonials-subtitle, - .docs-promo-subtitle, - .oss-promo-subtitle { - left: 7%; - width: 85%; - } -} diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx index 65a89d98656ff..4c641c567499f 100644 --- a/website/src/pages/index.tsx +++ b/website/src/pages/index.tsx @@ -7,7 +7,6 @@ import { translate } from '@docusaurus/Translate'; import useWindowType from '@theme/hooks/useWindowSize'; import HeroSection from '../components/sections/HeroSection'; -import Architecture from '../components/sections/Architecture'; import Features from '../components/sections/Features'; import Benefits from '../components/sections/Benefits'; import Comparison from '../components/sections/Comparison'; @@ -141,7 +140,6 @@ const Index: FC = () => ( -