Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,10 @@ const config: Config = {
label: "Support",
to: "/support",
},
{
label: "Powered By",
to: "/powered-by",
},
],
},
{
Expand Down Expand Up @@ -333,6 +337,10 @@ const config: Config = {
label: "Brand Guidelines",
href: "/community/brand",
},
{
label: "Powered By",
href: "/powered-by",
},
],
},
{
Expand Down
94 changes: 94 additions & 0 deletions src/consts/poweredBy.tsx
Original file line number Diff line number Diff line change
@@ -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;
187 changes: 187 additions & 0 deletions src/css/pages/powered-by.module.scss
Original file line number Diff line number Diff line change
@@ -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;
}
}
Loading
Loading