-
-
Notifications
You must be signed in to change notification settings - Fork 161
/
Copy pathindex.js
287 lines (280 loc) · 9.76 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
import React from 'react';
import styles from './styles.module.css';
import clsx from 'clsx';
import Link from '@docusaurus/Link';
import PropTypes from 'prop-types';
import {integrations} from '@site/data/integrations';
import {sdk} from '@site/data/sdk';
SocialIcon.propTypes = {
colorClassName: PropTypes.string,
fontAwesomeIcon: PropTypes.string,
img: PropTypes.string,
tooltipText: PropTypes.string.isRequired,
backgroundColor: PropTypes.string,
};
function SocialIcon(props) {
return (
<div className={styles.tooltip}>
<span
className={clsx(styles.socialIcon, props.colorClassName)}
style={{backgroundColor: props.backgroundColor}}>
{props.fontAwesomeIcon && <i className={props.fontAwesomeIcon}></i>}
{props.img && !props.fontAwesomeIcon && (
<img src={props.img} width="36" alt={'logo'} />
)}
</span>
<span className={styles.tooltiptext}>{props.tooltipText}</span>
</div>
);
}
export function Rollout() {
return (
<div className="container my-8">
<div className="row">
<div className={'col col--6'}>
<div className={clsx(styles.featureContent, 'mr-25')}>
<h2>Advanced rollout capabilities</h2>
<p>
Feature flags allows to unlink deploy and release, this means that
you can decide how to release a feature without thinking about
architecture and complex deployments.
</p>
<p>
These capabilities will give you more control on your rollout
changes and will ensure that everything happened as expected.
</p>
<div className={styles.featureContentList}>
<ul>
<li>
<i className="fa-solid fa-circle-arrow-right"></i>
<p>Rules: Impact only the users you want to target.</p>
</li>
<li>
<i className="fa-solid fa-circle-arrow-right"></i>
<p>
Canary release: Enable the feature only to a subset of your
users.
</p>
</li>
<li>
<i className="fa-solid fa-circle-arrow-right"></i>
<p>
Progressive rollout: Affect from 0% to 100% of users within
a time frame, you can monitor while releasing the change.
</p>
</li>
<li>
<i className="fa-solid fa-circle-arrow-right"></i>
<p>
Scheduled Workflows: Modify your flag at a specific time to
impact more/less users.
</p>
</li>
<li>
<i className="fa-solid fa-circle-arrow-right"></i>
<p>
A/B testing: Split your audience in multiple groups and
track their usage.
</p>
</li>
</ul>
</div>
<p className={'mt-3'}>
<Link to={'/docs/configure_flag/rollout-strategies'}>
{' '}
See our rollout capabilites{' '}
<i className="fa-solid fa-arrow-right"></i>
</Link>
</p>
</div>
</div>
<div className={'col col--6'}>
<div className={clsx(styles.imgRollout, 'max-md:hidden')}>
<div className={styles.featureImage}>
<img src="img/features/rollout.png" alt="feature-image" />
</div>
</div>
</div>
</div>
</div>
);
}
export function Sdk() {
return (
<div className="container my-8">
<div className="row">
<div className={'col col--6'}>
<div className={'grid grid-cols-4'}>
{sdk.map(sdk => (
<SocialIcon
key={sdk.name}
backgroundColor="#cdf7e7"
fontAwesomeIcon={sdk.faLogo}
tooltipText={sdk.name}
/>
))}
</div>
</div>
<div className="col col--6">
<div className={clsx(styles.featureContent, 'mr-25')}>
<h2>Supports your favorite languages</h2>
<p>
GO Feature Flag believe in OpenSource, and offer providers for the
feature flag standard{' '}
<Link href={'https://openfeature.dev'}>OpenFeature</Link>.
<br />
In combination with the <b>Open Feature SDKs</b> these{' '}
<b>providers</b> will allow you to use GO Feature Flag with all
supported languages.
</p>
<p>
<Link to={'/docs/sdk'}>
{' '}
See our SDKs <i className="fa-solid fa-arrow-right"></i>
</Link>
</p>
</div>
</div>
</div>
</div>
);
}
export function Integration() {
const allIntegrations = [
...integrations.retrievers,
...integrations.exporters,
...integrations.notifiers,
];
const displayIntegrations = allIntegrations
.map(({name, logo, faLogo, bgColor}) => ({name, logo, faLogo, bgColor}))
.filter(
// remove duplicates
(integration, index, self) =>
index ===
self.findIndex(
t =>
t.name === integration.name &&
t.logo === integration.logo &&
t.faLogo === integration.faLogo &&
t.bgColor === integration.bgColor
)
);
return (
<div className="container my-8">
<div className="row">
<div className={'col col--6'}>
<div className={clsx(styles.featureContent, 'mr-25')}>
<h2>Integrates with different systems</h2>
<p>
GO Feature flag is cloud ready and can retrieve its configuration
from various places, store your data usage where you want and
notify you when something changes.
</p>
<div className={styles.featureContentList}>
<ul>
<li>
<i className="fa-solid fa-circle-arrow-right"></i>
<p>
Retrieve your file from S3, Google Cloud, Github,
Kubernetes, and more.
</p>
</li>
<li>
<i className="fa-solid fa-circle-arrow-right"></i>
<p>Store flags usage in your favorite dataset (S3, GCP, ).</p>
</li>
<li>
<i className="fa-solid fa-circle-arrow-right"></i>
<p>
Be notified on slack or via a webhook that your flag has
changed.
</p>
</li>
<li>
<i className="fa-solid fa-circle-arrow-right"></i>
<p>You can also extend GO Feature Flag if needed.</p>
</li>
</ul>
<p className={'mt-10 flex gap-2 items-center'}>
{' '}
See our integrations <i className="fa-solid fa-arrow-right"></i>
<Link to={'/docs/integrations/store-flags-configuration'}>
Retrievers
</Link>
|
<Link to={'/docs/integrations/export-evaluation-data'}>
Exporters
</Link>
|
<Link to={'/docs/integrations/notify-flags-changes'}>
Notifiers
</Link>
</p>
</div>
</div>
</div>
<div className={'col col--6'}>
<div className={'grid grid-cols-4'}>
{displayIntegrations.map(integration => (
<SocialIcon
key={integration.name}
backgroundColor={integration.bgColor}
fontAwesomeIcon={integration.faLogo}
img={integration.logo}
tooltipText={integration.name}
colorClassName={''}
/>
))}
</div>
</div>
</div>
</div>
);
}
export function OpenFeatureEcosystem() {
// how to know if we are in dark mode
return (
<div className="container my-8">
<div className="row">
<div className={'col col--6'}>
<div className={clsx(styles.openfeaturelogo, 'text-center xl:mt-16')}>
<img
src={'img/features/openfeature.svg'}
alt="openfeature-logo"
className={styles.openfeaturelogo}
/>
</div>
</div>
<div className={'col col--6'}>
<div className={clsx(styles.featureContent, 'mr-25')}>
<h2>Part of the OpenFeature Ecosystem</h2>
<p>
At GO Feature Flag, we believe in the power of open standards and,
the importance of vendor neutrality. That's why we've chosen to
rely on Open Feature for our SDKs.
<br />
By adopting GO Feature Flag you embrace the OpenFeature standard
and you get all the benefits of the ecosystem.
</p>
<div className={styles.featureContentList}>
<ul>
<li>
<i className="fa-solid fa-circle-arrow-right"></i>
<p>Open-Source SDKs</p>
</li>
<li>
<i className="fa-solid fa-circle-arrow-right"></i>
<p>No Vendor Lock-In</p>
</li>
<li>
<i className="fa-solid fa-circle-arrow-right"></i>
<p>OpenFeature community based support for SDKs</p>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
);
}