This is an automated email from the ASF dual-hosted git repository.
tuhaihe pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-site.git
The following commit(s) were added to refs/heads/main by this push:
new 84ce60dd80 New page: Powered by
84ce60dd80 is described below
commit 84ce60dd80d1dad4673356deb72f9ab56217cc50
Author: Dianjin Wang <[email protected]>
AuthorDate: Thu May 28 16:16:00 2026 +0800
New page: Powered by
---
docusaurus.config.ts | 8 ++
src/consts/poweredBy.tsx | 94 +++++++++++++++++
src/css/pages/powered-by.module.scss | 187 +++++++++++++++++++++++++++++++++
src/pages/powered-by.tsx | 97 +++++++++++++++++
static/img/powered-by/README.md | 16 +++
static/img/powered-by/hashdata.png | Bin 0 -> 278832 bytes
static/img/powered-by/synx.png | Bin 0 -> 7373 bytes
static/img/powered-by/yandex-cloud.svg | 16 +++
8 files changed, 418 insertions(+)
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index f644abe4c8..5282f6df0f 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -221,6 +221,10 @@ const config: Config = {
label: "Support",
to: "/support",
},
+ {
+ label: "Powered By",
+ to: "/powered-by",
+ },
],
},
{
@@ -333,6 +337,10 @@ const config: Config = {
label: "Brand Guidelines",
href: "/community/brand",
},
+ {
+ label: "Powered By",
+ href: "/powered-by",
+ },
],
},
{
diff --git a/src/consts/poweredBy.tsx b/src/consts/poweredBy.tsx
new file mode 100644
index 0000000000..79a2de36f7
--- /dev/null
+++ b/src/consts/poweredBy.tsx
@@ -0,0 +1,94 @@
+import LinkWithBaseUrl from "../components/common/LinkWithBaseUrl";
+
+export interface IPoweredByUser {
+ /** Organization or project name. */
+ name: string;
+ /** Logo path under /static (e.g. "/img/powered-by/acme.svg"). Leave empty
to render a text-only card. */
+ logo?: string;
+ /** Optional external link. */
+ website?: string;
+ /** Short description of how the organization uses Apache Cloudberry. */
+ description?: string;
+ /** Optional country/region label. */
+ region?: string;
+}
+
+const SUBMIT_URL =
+ "https://github.com/apache/cloudberry/discussions/1771";
+
+const configData = {
+ titleText: "Powered by Apache Cloudberry",
+ subText:
+ "Organizations and projects around the world are running their analytics
workloads on Apache Cloudberry. This page highlights some of them and invites
you to share your own story with the community.",
+ introText: (
+ <>
+ The list below is community-maintained and is not an endorsement by The
+ Apache Software Foundation. Entries are submitted by users themselves.
+ Logos and trademarks belong to their respective owners. If you would like
+ to add, update, or remove your organization, please open a comment in
our{" "}
+ <LinkWithBaseUrl
+ href={SUBMIT_URL}
+ className="active-color"
+ target="_blank"
+ >
+ GitHub Discussion
+ </LinkWithBaseUrl>
+ .
+ </>
+ ),
+ submitTitle: "Are you using Apache Cloudberry?",
+ submitText: (
+ <>
+ We would love to hear from you. Tell us about your use case, scale, and
+ what you are building. Adding your organization to this page is a simple
+ way to support the project and help others discover Cloudberry in
+ production.
+ </>
+ ),
+ submitButtonText: "Share your story on GitHub",
+ submitButtonUrl: SUBMIT_URL,
+ guidelines: [
+ "Provide your organization or project name.",
+ "Attach a logo (SVG preferred, transparent background, at least 240px
wide).",
+ "Add a one or two sentence description of how you use Apache Cloudberry.",
+ "Optionally include a website URL.",
+ ],
+ /**
+ * Append your entries below. Drop the logo file under
+ * `static/img/powered-by/` and reference it via an absolute path,
+ * e.g. `/img/powered-by/your-org.svg`.
+ */
+ users: [
+ // Example entries — replace with real users.
+ // {
+ // name: "Acme Analytics",
+ // logo: "/img/powered-by/acme.svg",
+ // website: "https://acme.example.com",
+ // description:
+ // "Powers a multi-petabyte analytics platform serving thousands of
internal users.",
+ // },
+ {
+ name: "HashData",
+ logo: "/img/powered-by/hashdata.png",
+ website: "https://www.hashdata.cn/",
+ description:
+ "HashData Lightning and HashData Enterprise use Apache Cloudberry as
their core engine.",
+ },
+ {
+ name: "Synx Data Labs",
+ logo: "/img/powered-by/synx.png",
+ website: "https://www.synxdata.com/",
+ description:
+ "Synx Data Labs builds its data warehouse product SynxDB on Apache
Cloudberry.",
+ },
+ {
+ name: "Yandex Cloud",
+ logo: "/img/powered-by/yandex-cloud.svg",
+ website: "https://yandex.cloud/en/docs/managed-greenplum/",
+ description:
+ "Yandex MPP Analytics for PostgreSQL supports Apache Cloudberry.",
+ },
+ ] as IPoweredByUser[],
+};
+
+export default configData;
diff --git a/src/css/pages/powered-by.module.scss
b/src/css/pages/powered-by.module.scss
new file mode 100644
index 0000000000..0798bfd577
--- /dev/null
+++ b/src/css/pages/powered-by.module.scss
@@ -0,0 +1,187 @@
+.mainContent {
+ max-width: var(--global-main-width);
+ margin: 0 auto;
+ padding: 60px var(--mobile-padding-width) 120px;
+ box-sizing: border-box;
+}
+
+.intro {
+ max-width: 900px;
+ margin: 0 auto 56px;
+ font-size: 15px;
+ line-height: 26px;
+ color: var(--sub-text-color-2);
+ text-align: center;
+}
+
+.sectionTitle {
+ font-size: 22px;
+ font-weight: 700;
+ line-height: 32px;
+ margin-bottom: 28px;
+ color: var(--title-text-color);
+}
+
+.logoGrid {
+ display: grid;
+ grid-template-columns: repeat(4, minmax(0, 1fr));
+ gap: 24px;
+ margin-bottom: 80px;
+}
+
+.logoCard {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: flex-start;
+ text-align: center;
+ padding: 28px 20px;
+ border: 1px solid var(--blog-border-color);
+ border-radius: 8px;
+ background-color: var(--normal-bg-1);
+ transition: border-color 0.2s ease, transform 0.2s ease,
+ box-shadow 0.2s ease;
+ min-height: 200px;
+ text-decoration: none;
+ color: inherit;
+
+ &:hover {
+ border-color: var(--active-color);
+ transform: translateY(-2px);
+ box-shadow: 0 6px 18px rgba(0, 0, 0, 0.08);
+ text-decoration: none;
+ color: inherit;
+ }
+}
+
+.logoBox {
+ width: 100%;
+ height: 72px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 16px;
+
+ img {
+ max-width: 100%;
+ max-height: 100%;
+ object-fit: contain;
+ }
+}
+
+.logoFallback {
+ font-size: 18px;
+ font-weight: 700;
+ color: var(--title-text-color);
+ letter-spacing: 0.02em;
+}
+
+.userName {
+ font-size: 15px;
+ font-weight: 600;
+ color: var(--title-text-color);
+ margin-bottom: 6px;
+}
+
+.userMeta {
+ font-size: 12px;
+ color: var(--sub-text-color-1);
+ margin-bottom: 8px;
+}
+
+.userDesc {
+ font-size: 13px;
+ line-height: 20px;
+ color: var(--sub-text-color-2);
+}
+
+.emptyState {
+ border: 1px dashed var(--blog-border-color);
+ border-radius: 8px;
+ padding: 48px 24px;
+ text-align: center;
+ color: var(--sub-text-color-2);
+ font-size: 14px;
+ line-height: 22px;
+ margin-bottom: 80px;
+}
+
+.submitSection {
+ border-radius: 12px;
+ padding: 48px 40px;
+ background: linear-gradient(
+ 135deg,
+ rgba(255, 168, 0, 0.12),
+ rgba(139, 123, 207, 0.08)
+ );
+ border: 1px solid var(--blog-border-color);
+ text-align: center;
+}
+
+.submitTitle {
+ font-size: 24px;
+ font-weight: 700;
+ margin-bottom: 16px;
+ color: var(--title-text-color);
+}
+
+.submitText {
+ max-width: 720px;
+ margin: 0 auto 24px;
+ color: var(--sub-text-color-2);
+ font-size: 15px;
+ line-height: 24px;
+}
+
+.guidelines {
+ max-width: 640px;
+ margin: 0 auto 28px;
+ text-align: left;
+ padding-left: 22px;
+
+ li {
+ font-size: 14px;
+ line-height: 24px;
+ color: var(--sub-text-color-2);
+ margin-bottom: 4px;
+ }
+}
+
+.submitButton {
+ display: inline-block;
+ padding: 12px 28px;
+ background-color: var(--active-color);
+ color: var(--home-btn-color, #000);
+ font-weight: 700;
+ font-size: 15px;
+ border-radius: 6px;
+ transition: background-color 0.2s ease;
+
+ &:hover {
+ background-color: var(--hover-fill-color);
+ color: var(--home-btn-color, #000);
+ text-decoration: none;
+ }
+}
+
+@media screen and (max-width: 1200px) {
+ .logoGrid {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
+}
+
+@media screen and (max-width: 900px) {
+ .logoGrid {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+}
+
+@media screen and (max-width: 560px) {
+ .logoGrid {
+ grid-template-columns: 1fr;
+ }
+
+ .submitSection {
+ padding: 32px 20px;
+ }
+}
diff --git a/src/pages/powered-by.tsx b/src/pages/powered-by.tsx
new file mode 100644
index 0000000000..9fb90b03d2
--- /dev/null
+++ b/src/pages/powered-by.tsx
@@ -0,0 +1,97 @@
+import clsx from "clsx";
+import ColorCard from "../components/common/ColorCard";
+import CommonLayout from "../components/common/Layout";
+import LinkWithBaseUrl from "../components/common/LinkWithBaseUrl";
+import configData, { IPoweredByUser } from "../consts/poweredBy";
+import styles from "../css/pages/powered-by.module.scss";
+
+const {
+ titleText,
+ subText,
+ introText,
+ submitTitle,
+ submitText,
+ submitButtonText,
+ submitButtonUrl,
+ guidelines,
+ users,
+} = configData;
+
+function UserCard({ user }: { user: IPoweredByUser }) {
+ const inner = (
+ <>
+ <div className={styles.logoBox}>
+ {user.logo ? (
+ <img src={user.logo} alt={`${user.name} logo`} loading="lazy" />
+ ) : (
+ <span className={styles.logoFallback}>{user.name}</span>
+ )}
+ </div>
+ <div className={styles.userName}>{user.name}</div>
+ {user.region && <div className={styles.userMeta}>{user.region}</div>}
+ {user.description && (
+ <div className={styles.userDesc}>{user.description}</div>
+ )}
+ </>
+ );
+
+ if (user.website) {
+ return (
+ <LinkWithBaseUrl
+ href={user.website}
+ className={styles.logoCard}
+ target="_blank"
+ rel="noopener noreferrer"
+ >
+ {inner}
+ </LinkWithBaseUrl>
+ );
+ }
+
+ return <div className={styles.logoCard}>{inner}</div>;
+}
+
+export default function PoweredBy() {
+ return (
+ <CommonLayout>
+ <ColorCard titleText={titleText} subText={subText} />
+ <div className={clsx(styles.mainContent)}>
+ <p className={styles.intro}>{introText}</p>
+
+ {users.length > 0 ? (
+ <>
+ <h2 className={styles.sectionTitle}>Adopters</h2>
+ <div className={styles.logoGrid}>
+ {users.map((user) => (
+ <UserCard key={user.name} user={user} />
+ ))}
+ </div>
+ </>
+ ) : (
+ <div className={styles.emptyState}>
+ We are gathering the first wave of public adopters. If your team
+ runs Apache Cloudberry, you can be the first to be featured here.
+ </div>
+ )}
+
+ <section className={styles.submitSection}>
+ <h2 className={styles.submitTitle}>{submitTitle}</h2>
+ <p className={styles.submitText}>{submitText}</p>
+ <ul className={styles.guidelines}>
+ {guidelines.map((line) => (
+ <li key={line}>{line}</li>
+ ))}
+ </ul>
+ <LinkWithBaseUrl
+ href={submitButtonUrl}
+ className={styles.submitButton}
+ target="_blank"
+ rel="noopener noreferrer"
+ >
+ {submitButtonText}
+ </LinkWithBaseUrl>
+ </section>
+ </div>
+ </CommonLayout>
+ );
+}
diff --git a/static/img/powered-by/README.md b/static/img/powered-by/README.md
new file mode 100644
index 0000000000..2ee1dd88e6
--- /dev/null
+++ b/static/img/powered-by/README.md
@@ -0,0 +1,16 @@
+# Powered By Logos
+
+Drop adopter logos in this directory. Reference them from
+`src/consts/poweredBy.tsx` using an absolute URL such as
+`/img/powered-by/your-org.svg`.
+
+## Guidelines
+
+- SVG is preferred. Otherwise use a transparent PNG at 2x density.
+- Crop tightly around the logo with a small amount of padding.
+- Aim for at least 240px on the long side so the logo stays sharp on
+ high-DPI displays.
+- File name: lowercase, hyphenated, matching the organization slug
+ (e.g. `acme-analytics.svg`).
+- Make sure you have permission to use the logo. Trademarks remain
+ with their respective owners.
diff --git a/static/img/powered-by/hashdata.png
b/static/img/powered-by/hashdata.png
new file mode 100644
index 0000000000..bb76a2134a
Binary files /dev/null and b/static/img/powered-by/hashdata.png differ
diff --git a/static/img/powered-by/synx.png b/static/img/powered-by/synx.png
new file mode 100644
index 0000000000..44fbc12c22
Binary files /dev/null and b/static/img/powered-by/synx.png differ
diff --git a/static/img/powered-by/yandex-cloud.svg
b/static/img/powered-by/yandex-cloud.svg
new file mode 100644
index 0000000000..fcf2d71030
--- /dev/null
+++ b/static/img/powered-by/yandex-cloud.svg
@@ -0,0 +1,16 @@
+<svg width="201" height="30" viewBox="0 0 201 30" fill="none"
xmlns="http://www.w3.org/2000/svg">
+<path d="M88.8533 10.6798H85.2633L82.6435 15.2836L79.7354
10.6798H75.6827L80.2865 17.97L75.5071 25.8986H79.1637L82.2244 20.7667L85.4619
25.8986H89.5364L84.5584 18.0584L88.8533 10.6798Z" fill="black"/>
+<path d="M68.591 10.372C64.2077 10.372 62.116 13.7416 62.116 18.3442C62.116
23.6299 64.7152 26.2073 69.3178 26.2073C71.63 26.2073 73.3257 25.6126 74.383
24.8859V21.9342C73.2602 22.6827 71.3877 23.3658 69.6255 23.3658C66.9826 23.3658
65.9918 22.111 65.8368 19.5772H74.5369V17.6611C74.5369 12.3754 72.2029 10.3709
68.5899 10.3709L68.591 10.372ZM70.8596 16.9126H65.838C65.9264 14.4902 66.807
13.2124 68.5474 13.2124C70.2879 13.2124 70.8596 14.6876 70.8596
16.6037V16.9126Z" fill="black"/>
+<path d="M56.2142 12.4639C55.3106 11.0988 53.9674 10.3721 52.4037
10.3721C48.9021 10.3721 46.4797 13.3674 46.4797 18.389C46.4797 23.4107 48.8585
26.2073 52.2499 26.2073C53.9456 26.2073 55.3336 25.414 56.3026 23.9388L56.4782
25.8985H59.8042V4.86597H56.2142V12.4639ZM53.1534 23.3659C51.1937 23.3659
50.2247 22.0008 50.2247 18.389C50.2247 14.7772 51.2373 13.2135 53.3084
13.2135C55.2464 13.2135 56.2153 14.7336 56.2153 18.2788C56.2153 21.824 55.1798
23.3659 53.1534 23.3659Z" fill="black"/>
+<path d="M39.9158 10.4375C37.7574 10.4375 36.5026 11.2079 35.7747
11.9346H35.5761L35.4877 10.6797H31.9861V25.8985H35.5761V14.9747C36.2592 14.1595
37.3165 13.4546 38.615 13.4546C39.9135 13.4546 40.4645 14.0057 40.4645
15.1503V25.8985H44.0545V14.7978C44.0545 11.7589 42.8433 10.4375 39.9135
10.4375H39.9158Z" fill="black"/>
+<path d="M29.0371 15.5257C29.0371 11.8255 27.1646 10.4386 23.3554
10.4386C20.9984 10.4168 19.0823 11.4294 17.9813 12.2227V15.3282C19.1489 14.4029
20.8882 13.3019 22.9363 13.3019C24.6538 13.3019 25.4471 13.9184 25.4471
15.5486V16.5176H24.8743C19.3463 16.5176 16.9021 18.3017 16.9021 21.4727C16.9021
24.4243 18.7746 26.12 21.5713 26.12C23.686 26.12 24.5884 25.4151 25.2933
24.6884H25.4471C25.469 25.0845 25.601 25.5919 25.7112 25.8996H29.2346C29.1026
24.6666 29.036 23.4106 29.036 22.1776V15.52 [...]
+<path d="M14.7204 4.86597L10.228 15.0413H13.9719L18.4424 4.86597H14.7204Z"
fill="black"/>
+<path d="M4.81043 4.86595H1L7.91594 19.8861V25.8985H11.5714V22.3303C11.5714
19.6438 11.2407 18.8505 10.2063 16.6038L4.81043 4.86595Z" fill="black"/>
+<path d="M137.232 26.1517C134.61 26.1517 132.563 25.2239 131.09
23.3682C129.618 21.4925 128.882 18.82 128.882 15.3508C128.882 13.6767 129.063
12.174 129.426 10.8428C129.81 9.49144 130.364 8.35185 131.09 7.42404C131.817
6.47606 132.714 5.76003 133.783 5.27596C134.872 4.77171 136.113 4.51959 137.504
4.51959C138.473 4.51959 139.34 4.66078 140.106 4.94316C140.873 5.20536 141.498
5.50791 141.982 5.8508V8.7855C141.438 8.44261 140.792 8.1199 140.046
7.81735C139.32 7.5148 138.533 7.36353 137.686 [...]
+<path d="M148.008 25.8491H144.407V4.82214H148.008V25.8491Z" fill="black"/>
+<path d="M157.137 10.3285C158.125 10.3285 159.033 10.4999 159.86
10.8428C160.687 11.1857 161.393 11.7 161.978 12.3858C162.563 13.0514 163.017
13.8784 163.339 14.8667C163.682 15.8348 163.854 16.9543 163.854 18.225C163.854
19.4956 163.682 20.6252 163.339 21.6135C163.017 22.6018 162.563 23.4388 161.978
24.1246C161.393 24.7902 160.687 25.2945 159.86 25.6373C159.033 25.9802 158.125
26.1517 157.137 26.1517C156.149 26.1517 155.241 25.9802 154.414 25.6373C153.587
25.2945 152.881 24.7902 152.296 [...]
+<path d="M174.591 10.631H178.191V25.8491H174.682L174.591
24.5784H174.41C174.047 24.9415 173.532 25.2844 172.867 25.6071C172.221 25.9298
171.354 26.0912 170.265 26.0912C168.792 26.0912 167.733 25.7483 167.088
25.0625C166.443 24.3566 166.12 23.2472 166.12
21.7345V10.631H169.72V21.3714C169.72 22.5009 170.335 23.0657 171.566
23.0657C172.211 23.0657 172.786 22.9144 173.29 22.6119C173.815 22.3093 174.248
21.9564 174.591 21.553V10.631Z" fill="black"/>
+<path d="M190.419 23.8826C189.43 25.3953 188.079 26.1517 186.364
26.1517C185.517 26.1517 184.741 25.9802 184.035 25.6373C183.329 25.2945 182.724
24.7902 182.22 24.1246C181.715 23.459 181.322 22.6421 181.04 21.674C180.757
20.7058 180.616 19.5965 180.616 18.346C180.616 17.0753 180.757 15.9458 181.04
14.9574C181.342 13.949 181.746 13.1119 182.25 12.4463C182.774 11.7605 183.4
11.2361 184.126 10.8731C184.852 10.51 185.648 10.3285 186.516 10.3285C188.089
10.3285 189.36 11.0243 190.328 12.4161V [...]
+<path d="M116.348 26.2439C113.701 28.0561 110.508 27.9619 104.1
28.0001L99.0129 27.9915L101.587 21.0594L105.4 21.0522C108.502 21.0591 110.353
20.8239 111.858 19.7464C113.323 18.6972 114.215 17.0842 115.287 14.1736L116.62
10.6005L124.014 10.5975L122.24 15.3502C119.99 21.3652 118.968 24.3912 116.348
26.2439Z" fill="#2A9FFF"/>
+<path d="M101.553 4.75625C104.201 2.94409 107.393 3.03821 113.801
3.00005L118.888 3.00864L116.314 9.9407L112.501 9.94792C109.399 9.941 107.548
10.1763 106.043 11.2537C104.578 12.303 103.686 13.916 102.614 16.8266L101.281
20.3996L93.8867 20.4026L95.6615 15.65C97.9111 9.63494 98.9329 6.60894 101.553
4.75625Z" fill="#2A9FFF"/>
+</svg>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]