Skip to content

Commit 0aeb0bc

Browse files
aaguiarzewanharris
andauthored
feat: Add Adopters logos (#1185)
Co-authored-by: Ewan Harris <ewan.harris@okta.com>
1 parent 98123f6 commit 0aeb0bc

File tree

21 files changed

+227
-1
lines changed

21 files changed

+227
-1
lines changed

docs/content/getting-started/cli.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,4 +410,4 @@ Use the `fga model get` command is used to verify that the model was correctly w
410410
id: '../modeling/testing-models.mdx',
411411
},
412412
]}
413-
/>
413+
/>
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
.banner {
2+
margin-top: 3rem;
3+
padding: 2rem 2rem 2.5rem;
4+
border-radius: 8px;
5+
background: color-mix(in srgb, var(--ofga-neutral-darker), var(--ofga-neutral-black) 40%);
6+
border: 1px solid color-mix(in srgb, var(--ofga-neutral-base), transparent 85%);
7+
box-shadow: 0 18px 40px color-mix(in srgb, var(--ofga-neutral-black), transparent 55%);
8+
}
9+
10+
@media screen and (width >= 996px) {
11+
.banner {
12+
margin-top: 4rem;
13+
padding: 3.75rem;
14+
}
15+
}
16+
17+
.title {
18+
margin: 0 0 1.5rem;
19+
font-size: 1rem;
20+
letter-spacing: 0.06em;
21+
text-transform: uppercase;
22+
color: var(--ofga-neutral-light);
23+
}
24+
25+
.carousel {
26+
overflow: hidden;
27+
position: relative;
28+
}
29+
30+
.carousel::before,
31+
.carousel::after {
32+
content: '';
33+
position: absolute;
34+
top: 0;
35+
width: 80px;
36+
height: 100%;
37+
z-index: 1;
38+
pointer-events: none;
39+
}
40+
41+
.carousel::before {
42+
left: 0;
43+
background: linear-gradient(
44+
90deg,
45+
color-mix(in srgb, var(--ofga-neutral-darker), var(--ofga-neutral-black) 40%),
46+
transparent
47+
);
48+
}
49+
50+
.carousel::after {
51+
right: 0;
52+
background: linear-gradient(
53+
270deg,
54+
color-mix(in srgb, var(--ofga-neutral-darker), var(--ofga-neutral-black) 40%),
55+
transparent
56+
);
57+
}
58+
59+
.track {
60+
display: flex;
61+
align-items: center;
62+
gap: 2.5rem;
63+
width: max-content;
64+
animation: scroll 50s linear infinite;
65+
}
66+
67+
.carousel:hover .track {
68+
animation-play-state: paused;
69+
}
70+
71+
.logo {
72+
display: flex;
73+
align-items: center;
74+
justify-content: center;
75+
min-width: 120px;
76+
}
77+
78+
.logo img {
79+
height: 34px;
80+
width: auto;
81+
max-width: 140px;
82+
opacity: 0.92;
83+
transition: opacity 0.25s ease;
84+
}
85+
86+
@keyframes scroll {
87+
from {
88+
transform: translateX(0);
89+
}
90+
to {
91+
transform: translateX(-50%);
92+
}
93+
}
94+
95+
@media (width <= 600px) {
96+
.track {
97+
gap: 1.75rem;
98+
}
99+
100+
.logo {
101+
min-width: 96px;
102+
}
103+
104+
.logo img {
105+
height: 28px;
106+
}
107+
}
108+
109+
@media (prefers-reduced-motion: reduce) {
110+
.track {
111+
animation: none;
112+
transform: translateX(0);
113+
}
114+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import * as React from 'react';
2+
import useBaseUrl from '@docusaurus/useBaseUrl';
3+
4+
import styles from './AdoptersCarousel.module.css';
5+
6+
type AdopterLogo = {
7+
name: string;
8+
src: string;
9+
};
10+
11+
const adopterLogos: AdopterLogo[] = [
12+
{ name: 'Agicap', src: '/img/adopters/agicap.svg' },
13+
{ name: 'Appscode', src: '/img/adopters/appscode.svg' },
14+
{ name: 'Auth0', src: '/img/adopters/auth0.svg' },
15+
{ name: 'Canonical', src: '/img/adopters/canonical.svg' },
16+
{ name: 'Distyl', src: '/img/adopters/distyl.svg' },
17+
{ name: 'Docker', src: '/img/adopters/docker.svg' },
18+
{ name: 'EarthScope', src: '/img/adopters/earthscope.svg' },
19+
{ name: 'Flex', src: '/img/adopters/flex.svg' },
20+
{ name: 'Grafana', src: '/img/adopters/grafana.svg' },
21+
{ name: 'Headspace', src: '/img/adopters/headspace.svg' },
22+
{ name: 'Okta', src: '/img/adopters/okta.svg' },
23+
{ name: 'OpenObserve', src: '/img/adopters/openobserve.svg' },
24+
{ name: 'PlatformMesh', src: '/img/adopters/platformmesh.svg' },
25+
{ name: 'ReadAI', src: '/img/adopters/readai.svg' },
26+
{ name: 'Skyral', src: '/img/adopters/skyral.svg' },
27+
{ name: 'Sourcegraph', src: '/img/adopters/sourcegraph.svg' },
28+
{ name: 'Zuplo', src: '/img/adopters/zuplo.svg' },
29+
];
30+
31+
const AdopterImage: React.FC<{ logo: AdopterLogo; isDuplicate: boolean }> = ({ logo, isDuplicate }) => {
32+
const src = useBaseUrl(logo.src);
33+
return <img src={src} alt={isDuplicate ? '' : logo.name} loading="lazy" decoding="async" />;
34+
};
35+
36+
const AdoptersCarousel = () => {
37+
const repeatedLogos = [...adopterLogos, ...adopterLogos];
38+
39+
return (
40+
<section className={styles.banner} aria-label="OpenFGA adopters">
41+
<p className={styles.title}>Adopted by teams at</p>
42+
<div className={styles.carousel}>
43+
<div className={styles.track}>
44+
{repeatedLogos.map((logo, index) => {
45+
const isDuplicate = index >= adopterLogos.length;
46+
47+
return (
48+
<div className={styles.logo} key={`${logo.name}-${index}`} aria-hidden={isDuplicate}>
49+
<AdopterImage logo={logo} isDuplicate={isDuplicate} />
50+
</div>
51+
);
52+
})}
53+
</div>
54+
</div>
55+
</section>
56+
);
57+
};
58+
59+
export { AdoptersCarousel };

src/features/LandingPage/QuickStartSection/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Link from '@docusaurus/Link';
22
import * as React from 'react';
33
import { Section } from '@components/Section';
4+
import { AdoptersCarousel } from '@components/AdoptersCarousel';
45

56
import terminalMp4 from './terminal.mp4';
67
import terminalWebm from './terminal.webm';
@@ -90,6 +91,7 @@ const QuickStartSection = () => {
9091
</video>
9192
</div>
9293
</div>
94+
<AdoptersCarousel />
9395
</Section>
9496
);
9597
};

static/img/adopters/agicap.svg

Lines changed: 3 additions & 0 deletions
Loading

static/img/adopters/appscode.svg

Lines changed: 3 additions & 0 deletions
Loading

static/img/adopters/auth0.svg

Lines changed: 3 additions & 0 deletions
Loading

static/img/adopters/canonical.svg

Lines changed: 3 additions & 0 deletions
Loading

static/img/adopters/distyl.svg

Lines changed: 3 additions & 0 deletions
Loading

static/img/adopters/docker.svg

Lines changed: 3 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)