From bf8110c49b7d9d1b35fedf9cff2f73a454ea95b0 Mon Sep 17 00:00:00 2001 From: melindafekete Date: Mon, 24 Nov 2025 17:34:10 +0100 Subject: [PATCH] update language-specific guides --- website/docs/get-started/guides-overview.mdx | 26 +- website/docs/get-started/quickstart.mdx | 2 +- website/docs/guides/a-b-testing.md | 2 +- .../django/django-examples.md | 8 +- .../implementing-feature-flags-django.md | 10 +- .../dotnet/dotnet-examples.md | 14 +- .../implementing-feature-flags-dotnet.md | 12 +- .../flutter/a-b-testing.md | 2 +- .../golang/golang-examples.md | 4 +- .../implementing-feature-flags-golang.md | 6 +- .../ios/examples.md | 6 +- .../ios/implementing-feature-flags-ios.md | 4 +- .../java/implementing-feature-flags.mdx | 2 +- .../java/spring-boot-examples.md | 4 +- ...spring-boot-implementing-feature-flags.mdx | 4 +- .../implementing-feature-flags-js.md | 8 +- .../implementing-feature-flags-nextjs.md | 2 +- .../python/examples.md | 8 +- .../python/implementing-feature-flags.mdx | 4 +- .../rails/implementing-feature-flags-rails.md | 10 +- .../rails/rails-examples.md | 14 +- .../react/examples.md | 10 +- .../react/implementing-feature-flags.mdx | 6 +- .../ruby/implementing-feature-flags-ruby.mdx | 10 +- .../ruby/ruby-examples.md | 14 +- .../rust/implementing-feature-flags-rust.md | 20 +- .../rust/rust-examples.md | 14 +- ...mplementing-feature-flags-in-aws-lambda.md | 2 +- .../implementing-feature-flags-sveltekit.md | 2 +- website/docusaurus.config.ts | 6 +- website/sidebars.ts | 54 ++-- .../img/dotnet-guide-diagram.png} | Bin .../img/golang-guide-diagram.png} | Bin .../img/javascript-guide-corgi-site.png} | Bin .../img/javascript-guide-diagram.png} | Bin .../img/javascript-guide-template.png} | Bin .../img/rails-guide-blog-app.png} | Bin .../img/rails-guide-diagram.png} | Bin .../img/rails-guide-enable-ff.png} | Bin .../img/ruby-guide-50-gradual.png} | Bin .../img/ruby-guide-diagram.png} | Bin .../img/ruby-guide-enable-ff.png} | Bin .../ruby-guide-enable-impression-data.png} | Bin .../img/ruby-guide-event-logs.png} | Bin .../img/ruby-guide-flag-settings.png} | Bin .../img/ruby-guide-graphql-ff.png} | Bin .../img/ruby-guide-new-ff.png} | Bin .../img/ruby-guide-strategy.png} | Bin .../img/rust-guide-diagram.png} | Bin .../img/rust-guide-enable-ff.png} | Bin .../img/rust-guide-input.png} | Bin .../img/rust-guide-webp-image-in-folder.png} | Bin website/vercel.json | 245 ++++++++++++++++++ 53 files changed, 390 insertions(+), 145 deletions(-) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/django/django-examples.md (94%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/django/implementing-feature-flags-django.md (94%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/dotnet/dotnet-examples.md (96%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/dotnet/implementing-feature-flags-dotnet.md (95%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/flutter/a-b-testing.md (99%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/golang/golang-examples.md (97%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/golang/implementing-feature-flags-golang.md (97%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/ios/examples.md (97%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/ios/implementing-feature-flags-ios.md (98%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/java/implementing-feature-flags.mdx (99%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/java/spring-boot-examples.md (97%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/java/spring-boot-implementing-feature-flags.mdx (98%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/javascript/implementing-feature-flags-js.md (97%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/nextjs/implementing-feature-flags-nextjs.md (99%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/python/examples.md (94%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/python/implementing-feature-flags.mdx (98%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/rails/implementing-feature-flags-rails.md (95%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/rails/rails-examples.md (96%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/react/examples.md (96%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/react/implementing-feature-flags.mdx (98%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/ruby/implementing-feature-flags-ruby.mdx (95%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/ruby/ruby-examples.md (96%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/rust/implementing-feature-flags-rust.md (93%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/rust/rust-examples.md (97%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/serverless/implementing-feature-flags-in-aws-lambda.md (99%) rename website/docs/{feature-flag-tutorials => guides/language-specific-tutorials}/sveltekit/implementing-feature-flags-sveltekit.md (99%) rename website/{docs/feature-flag-tutorials/dotnet/diagram.png => static/img/dotnet-guide-diagram.png} (100%) rename website/{docs/feature-flag-tutorials/golang/diagram.png => static/img/golang-guide-diagram.png} (100%) rename website/{docs/feature-flag-tutorials/javascript/corgi-site.png => static/img/javascript-guide-corgi-site.png} (100%) rename website/{docs/feature-flag-tutorials/javascript/diagram.png => static/img/javascript-guide-diagram.png} (100%) rename website/{docs/feature-flag-tutorials/javascript/template.png => static/img/javascript-guide-template.png} (100%) rename website/{docs/feature-flag-tutorials/rails/blog-app.png => static/img/rails-guide-blog-app.png} (100%) rename website/{docs/feature-flag-tutorials/rails/diagram.png => static/img/rails-guide-diagram.png} (100%) rename website/{docs/feature-flag-tutorials/rails/enable-ff.png => static/img/rails-guide-enable-ff.png} (100%) rename website/{docs/feature-flag-tutorials/ruby/50-gradual.png => static/img/ruby-guide-50-gradual.png} (100%) rename website/{docs/feature-flag-tutorials/ruby/diagram.png => static/img/ruby-guide-diagram.png} (100%) rename website/{docs/feature-flag-tutorials/ruby/enable-ff.png => static/img/ruby-guide-enable-ff.png} (100%) rename website/{docs/feature-flag-tutorials/ruby/enable-impression-data.png => static/img/ruby-guide-enable-impression-data.png} (100%) rename website/{docs/feature-flag-tutorials/ruby/event-logs.png => static/img/ruby-guide-event-logs.png} (100%) rename website/{docs/feature-flag-tutorials/ruby/flag-settings.png => static/img/ruby-guide-flag-settings.png} (100%) rename website/{docs/feature-flag-tutorials/ruby/graphql-ff.png => static/img/ruby-guide-graphql-ff.png} (100%) rename website/{docs/feature-flag-tutorials/ruby/new-ff.png => static/img/ruby-guide-new-ff.png} (100%) rename website/{docs/feature-flag-tutorials/ruby/strategy.png => static/img/ruby-guide-strategy.png} (100%) rename website/{docs/feature-flag-tutorials/rust/diagram.png => static/img/rust-guide-diagram.png} (100%) rename website/{docs/feature-flag-tutorials/rust/enable-ff.png => static/img/rust-guide-enable-ff.png} (100%) rename website/{docs/feature-flag-tutorials/rust/input.png => static/img/rust-guide-input.png} (100%) rename website/{docs/feature-flag-tutorials/rust/webp-image-in-folder.png => static/img/rust-guide-webp-image-in-folder.png} (100%) diff --git a/website/docs/get-started/guides-overview.mdx b/website/docs/get-started/guides-overview.mdx index c6bfd05352..f5b9599480 100644 --- a/website/docs/get-started/guides-overview.mdx +++ b/website/docs/get-started/guides-overview.mdx @@ -69,18 +69,18 @@ Learn more: Step-by-step examples for React, Java, Python, and other SDKs show you how to connect, configure, and evaluate feature flags in real applications. **Frontend SDKs** -- [React](/feature-flag-tutorials/react) -- [JavaScript](/feature-flag-tutorials/javascript) -- [Next.js](/feature-flag-tutorials/nextjs) -- [SvelteKit](/feature-flag-tutorials/sveltekit) -- [Flutter](/feature-flag-tutorials/flutter/a-b-testing) -- [iOS](/feature-flag-tutorials/ios) +- [React](/guides/implement-feature-flags-in-react) +- [JavaScript](/guides/implement-feature-flags-in-javascript) +- [Next.js](/guides/implement-feature-flags-in-nextjs) +- [SvelteKit](/guides/implement-feature-flags-in-sveltekit) +- [Flutter](/guides/implement-ab-test-in-flutter) +- [iOS](/guides/implement-feature-flags-in-ios) **Backend SDKs** -- [Java](/feature-flag-tutorials/java) -- [Python](/feature-flag-tutorials/python) -- [Go](/feature-flag-tutorials/go) -- [.NET](/feature-flag-tutorials/dotnet) -- [Ruby](/feature-flag-tutorials/ruby) -- [Rust](/feature-flag-tutorials/rust) -- [Serverless](/feature-flag-tutorials/serverless/lambda) \ No newline at end of file +- [Java](/guides/implement-feature-flags-in-java) +- [Python](/guides/implement-feature-flags-in-python) +- [Go](/guides/implement-feature-flags-in-golang) +- [.NET](/guides/implement-feature-flags-in-dotnet) +- [Ruby](/guides/implement-feature-flags-in-ruby) +- [Rust](/guides/implement-feature-flags-in-rust) +- [Serverless](/guides/implement-feature-flags-in-aws-lambda) \ No newline at end of file diff --git a/website/docs/get-started/quickstart.mdx b/website/docs/get-started/quickstart.mdx index a637b23b80..799749c02c 100644 --- a/website/docs/get-started/quickstart.mdx +++ b/website/docs/get-started/quickstart.mdx @@ -128,5 +128,5 @@ For examples that show how to connect to Unleash in other programming languages, You have successfully connected Unleash to your application. To continue exploring, see the following resources: - **Core concepts**: Learn about the [Unleash architecture](/get-started/unleash-overview), available [hosting options](/deploy/hosting-options), and other [reference documentation](/reference/projects). -- **Developer guides**: Explore feature flag [best practices](/guides/feature-flag-best-practices) and [language-specific tutorials](/feature-flag-tutorials/react). +- **Developer guides**: Explore feature flag [best practices](/guides/feature-flag-best-practices) and [language-specific tutorials](/guides/implement-feature-flags-in-react). - **Join the community**: Have questions or feedback? Join the [Unleash community on Slack](https://slack.unleash.run) to connect with other developers and the Unleash team. diff --git a/website/docs/guides/a-b-testing.md b/website/docs/guides/a-b-testing.md index 788ba2d492..1b20f597d8 100644 --- a/website/docs/guides/a-b-testing.md +++ b/website/docs/guides/a-b-testing.md @@ -136,7 +136,7 @@ The output from the impression data in your app may look like this code snippet: } ``` -In order to capture impression events in your app, follow our [language and framework-specific tutorials](/feature-flag-tutorials/react). +In order to capture impression events in your app, follow our [language and framework-specific tutorials](/guides/implement-feature-flags-in-react). Now that your application is capturing impression events, you can configure the correct data fields and formatting to send to any analytics tool or data warehouse you use. diff --git a/website/docs/feature-flag-tutorials/django/django-examples.md b/website/docs/guides/language-specific-tutorials/django/django-examples.md similarity index 94% rename from website/docs/feature-flag-tutorials/django/django-examples.md rename to website/docs/guides/language-specific-tutorials/django/django-examples.md index e6ab59e1ff..f77b0ec608 100644 --- a/website/docs/feature-flag-tutorials/django/django-examples.md +++ b/website/docs/guides/language-specific-tutorials/django/django-examples.md @@ -1,9 +1,9 @@ --- title: Django Feature Flag Examples -slug: /feature-flag-tutorials/django/examples +slug: /guides/feature-flag-examples-django --- -In our [Django feature flag tutorial](/feature-flag-tutorials/django), we implemented a simple feature flag that could be turned on and off. In the real world, many feature flag use cases have more nuance than this. This document will walk you through some common examples of using feature flags in Django with some of those more advanced use cases in mind. +In our [Django feature flag tutorial](/guides/implement-feature-flags-in-django), we implemented a simple feature flag that could be turned on and off. In the real world, many feature flag use cases have more nuance than this. This document will walk you through some common examples of using feature flags in Django with some of those more advanced use cases in mind. We built multiple features into Unleash, an open-source feature flag platform, to address the complexities of releasing code and managing feature flags along the way. This tutorial will explore the following: @@ -186,7 +186,7 @@ A/B testing is a common way for teams to test out how users interact with two or When a feature flag is enabled, we can expose a particular version of a feature to select user bases. From there, we can use the variants to view the performance metrics in Unleash and see which is more efficient. -In the context of our [Python tutorial](/feature-flag-tutorials/python), let’s say we want to test a new variation of the flag for deleting surveys. In this new variation, we want the UI to remain the same–a delete button that removes a survey–but server-side, we’d like to store the deleted surveys in a new database model so they can be restored if a user decides to. +In the context of our [Python tutorial](/guides/implement-feature-flags-in-python), let’s say we want to test a new variation of the flag for deleting surveys. In this new variation, we want the UI to remain the same–a delete button that removes a survey–but server-side, we’d like to store the deleted surveys in a new database model so they can be restored if a user decides to. While we won’t implement all the functionality required to save and restore deleted surveys in this example, we can walk through how to set up variants and where the server-side changes would take place in the Python app. @@ -326,7 +326,7 @@ You can find more information in our [impression data docs](/reference/impressio ## Application Metrics and Monitoring for Django -Under your feature flag’s Metrics tab in Unleash, you can see the general activity of the [Flask Surveys Container App](/feature-flag-tutorials/python) tutorial in the development environment over different periods of time. If the app had a production environment enabled, we would also be able to view exposure (amount of users that are exposed to the flag by count and overall percentage) and requests the app is receiving over time. +Under your feature flag’s Metrics tab in Unleash, you can see the general activity of the [Flask Surveys Container App](/guides/implement-feature-flags-in-python) tutorial in the development environment over different periods of time. If the app had a production environment enabled, we would also be able to view exposure (amount of users that are exposed to the flag by count and overall percentage) and requests the app is receiving over time. ![A Metrics graph provides the visualization of your flag being exposed in your environments for your connected application.](/img/python-ex-metrics.png) diff --git a/website/docs/feature-flag-tutorials/django/implementing-feature-flags-django.md b/website/docs/guides/language-specific-tutorials/django/implementing-feature-flags-django.md similarity index 94% rename from website/docs/feature-flag-tutorials/django/implementing-feature-flags-django.md rename to website/docs/guides/language-specific-tutorials/django/implementing-feature-flags-django.md index cd10650a08..24af28529f 100644 --- a/website/docs/feature-flag-tutorials/django/implementing-feature-flags-django.md +++ b/website/docs/guides/language-specific-tutorials/django/implementing-feature-flags-django.md @@ -1,7 +1,7 @@ --- title: How to Implement Feature Flags in Django description: "How to use Unleash feature flags with Django." -slug: /feature-flag-tutorials/django +slug: /guides/implement-feature-flags-in-django --- Hello! In this tutorial, we’ll show you how to add feature flags to your Django app, using [Unleash](https://www.getunleash.io/) and the official [Unleash Python SDK](/reference/sdks/python). With Unleash, an open-source feature flag service, you can use our tooling to add feature flags to your application and release new features faster. @@ -16,7 +16,7 @@ For this tutorial, you'll need the following: - Git - Docker and Docker Compose -![architecture diagram for our implementation](../rails/diagram.png) +![architecture diagram for our implementation](/img/rails-guide-diagram.png) The Unleash Server is a **Feature Flag Control Service**, which manages your feature flags and lets you retrieve flag data. Unleash has a UI for creating and managing projects and feature flags. For backend applications or automated scripts, Unleash exposes an [API](/get-started/api-overview) defined by an OpenAPI specification, allowing you to perform these actions programmatically. @@ -43,11 +43,11 @@ Password: unleash4all Click the 'New feature flag' button to create a new feature flag. -![Create a new feature flag](../ruby/new-ff.png) +![Create a new feature flag](/img/ruby-guide-new-ff.png) Call it `top-3` and enable it in the `development` environment. -![A feature flag called `top-3` is now visible.](../rails/enable-ff.png) +![A feature flag called `top-3` is now visible.](/img/rails-guide-enable-ff.png) Everything's now set up on the Unleash side. Let's set up the Django application. @@ -84,7 +84,7 @@ python manage.py runserver Go to [http://localhost:8000](http://localhost:8000) and check that you see the following: -![A blog app with a list of posts](../rails/blog-app.png) +![A blog app with a list of posts](/img/rails-guide-blog-app.png) ## 3. Restrict the number of posts diff --git a/website/docs/feature-flag-tutorials/dotnet/dotnet-examples.md b/website/docs/guides/language-specific-tutorials/dotnet/dotnet-examples.md similarity index 96% rename from website/docs/feature-flag-tutorials/dotnet/dotnet-examples.md rename to website/docs/guides/language-specific-tutorials/dotnet/dotnet-examples.md index f8af071dff..81f602144f 100644 --- a/website/docs/feature-flag-tutorials/dotnet/dotnet-examples.md +++ b/website/docs/guides/language-specific-tutorials/dotnet/dotnet-examples.md @@ -1,9 +1,9 @@ --- title: .NET Feature Flag Examples -slug: /feature-flag-tutorials/dotnet/examples +slug: /guides/feature-flag-examples-dotnet --- -In our [.NET feature flag tutorial](/feature-flag-tutorials/dotnet), we implemented a simple feature flag that could be turned on and off. This document will walk you through some common examples of using feature flags in .NET. +In our [.NET feature flag tutorial](/guides/implement-feature-flags-in-dotnet), we implemented a simple feature flag that could be turned on and off. This document will walk you through some common examples of using feature flags in .NET. We built many features into Unleash, our open-source feature flag platform, to address the complexities of releasing code. This tutorial will explore the following: @@ -182,7 +182,7 @@ When a feature flag is enabled, we can expose a particular version of a feature In Unleash, navigate go to a feature flag, then click on an environment to open your strategy. -![Open the strategy menu](../ruby/strategy.png) +![Open the strategy menu](/img/ruby-guide-strategy.png) Click ‘Edit Strategy' @@ -190,7 +190,7 @@ Click ‘Edit Strategy' Only enable your flag for 50% of users. -![The slider that controls the graduality of the rollout is set to 50%](../ruby/50-gradual.png) +![The slider that controls the graduality of the rollout is set to 50%](/img/ruby-guide-50-gradual.png) Alternatively, you can do that with a `PUT` request in .NET using our API: @@ -244,13 +244,13 @@ Let’s walk through how to enable impression data for a feature flag. At the flag level in Unleash, navigate to the Settings view. -![From your flag page in Unleash, you go to Settings and edit the settings for your flag called 'feature information'.](../ruby/flag-settings.png) +![From your flag page in Unleash, you go to Settings and edit the settings for your flag called 'feature information'.](/img/ruby-guide-flag-settings.png) In the Settings view, there's an edit button with pencil icon. This will take us to the ‘Edit Feature flag’ form. Turn on the impression data and then save it. Events will now be emitted every time the feature flag is triggered. -![There is a flag that turns on the impression data events in your flag form.](../ruby/enable-impression-data.png) +![There is a flag that turns on the impression data events in your flag form.](/img/ruby-guide-enable-impression-data.png) You can also use our API command to enable the impression data: @@ -318,7 +318,7 @@ You can view [Event Log](/reference/events#event-log) to monitor the changes to - How the gradual rollout strategy was configured - When and how the variants were created and configured -![Event Log in Unleash tracks every single change made to flags, similar to Git commit history.](../ruby/event-logs.png) +![Event Log in Unleash tracks every single change made to flags, similar to Git commit history.](/img/ruby-guide-event-logs.png) You can also retrieve events by using an API command, like below: diff --git a/website/docs/feature-flag-tutorials/dotnet/implementing-feature-flags-dotnet.md b/website/docs/guides/language-specific-tutorials/dotnet/implementing-feature-flags-dotnet.md similarity index 95% rename from website/docs/feature-flag-tutorials/dotnet/implementing-feature-flags-dotnet.md rename to website/docs/guides/language-specific-tutorials/dotnet/implementing-feature-flags-dotnet.md index 4e14c25d94..1d2b4ee2a1 100644 --- a/website/docs/feature-flag-tutorials/dotnet/implementing-feature-flags-dotnet.md +++ b/website/docs/guides/language-specific-tutorials/dotnet/implementing-feature-flags-dotnet.md @@ -1,7 +1,7 @@ --- title: How to Implement Feature Flags in .NET description: "How to use Unleash feature flags with .NET." -slug: /feature-flag-tutorials/dotnet +slug: /guides/implement-feature-flags-in-dotnet --- Hello! In this tutorial we’ll show you how to add feature flags to your .NET app, using [Unleash](https://www.getunleash.io/) and the official [Unleash .NET SDK](/reference/sdks/dotnet). With Unleash, an open-source feature management service, you can use our tooling to add feature flags to your application and release new features faster. @@ -22,7 +22,7 @@ For this tutorial, you’ll need the following: - Git - Docker and Docker Compose -![architecture diagram for our implementation](./diagram.png) +![architecture diagram for our implementation](/img/dotnet-guide-diagram.png) The Unleash Server is a **Feature Flag Control Service**, which manages your feature flags and lets you retrieve flag data. Unleash has a UI for creating and managing projects and feature flags. There are also [API commands available](/get-started/api-overview) to perform the same actions straight from your CLI or app. @@ -49,11 +49,11 @@ Password: unleash4all Click the ‘New feature flag’ button to create a new feature flag. -![Create a new feature flag](../ruby/new-ff.png) +![Create a new feature flag](/img/ruby-guide-new-ff.png) Call it `graphql-api` and enable it in the `development` environment. -![A feature flag called `graphql-api` is now visible.](../ruby/enable-ff.png) +![A feature flag called `graphql-api` is now visible.](/img/ruby-guide-enable-ff.png) Next, generate an API token to authenticate calls made to Unleash servers from your project. @@ -281,7 +281,7 @@ Now that we’ve connected our project to Unleash and grabbed our feature flag, > **Note:** An update to a feature flag may take 30 seconds to propagate. -![A feature flag called `graphql-api` is now disabled](../ruby/graphql-ff.png) +![A feature flag called `graphql-api` is now disabled](/img/ruby-guide-graphql-ff.png) ## Conclusion @@ -292,6 +292,6 @@ All done! Now you know how to add feature flags with Unleash in .NET. You’ve l - Initialise the Unleash client as part of your web api's services - Grab the value of a feature flag with the .NET SDK -Feel free to checkout our [.NET Examples docs](/feature-flag-tutorials/dotnet/examples) for more use-cases. +Feel free to checkout our [.NET Examples docs](/guides/feature-flag-examples-dotnet) for more use-cases. Thank you diff --git a/website/docs/feature-flag-tutorials/flutter/a-b-testing.md b/website/docs/guides/language-specific-tutorials/flutter/a-b-testing.md similarity index 99% rename from website/docs/feature-flag-tutorials/flutter/a-b-testing.md rename to website/docs/guides/language-specific-tutorials/flutter/a-b-testing.md index 476e8d875b..5f18f46d09 100644 --- a/website/docs/feature-flag-tutorials/flutter/a-b-testing.md +++ b/website/docs/guides/language-specific-tutorials/flutter/a-b-testing.md @@ -1,6 +1,6 @@ --- title: A/B Testing in Flutter using Unleash and Mixpanel -slug: "/feature-flag-tutorials/flutter/a-b-testing" +slug: /guides/implement-ab-test-in-flutter --- :::note diff --git a/website/docs/feature-flag-tutorials/golang/golang-examples.md b/website/docs/guides/language-specific-tutorials/golang/golang-examples.md similarity index 97% rename from website/docs/feature-flag-tutorials/golang/golang-examples.md rename to website/docs/guides/language-specific-tutorials/golang/golang-examples.md index fbeec56f2f..19a24b127f 100644 --- a/website/docs/feature-flag-tutorials/golang/golang-examples.md +++ b/website/docs/guides/language-specific-tutorials/golang/golang-examples.md @@ -1,9 +1,9 @@ --- title: Go feature flag examples -slug: /feature-flag-tutorials/golang/examples +slug: /guides/feature-flag-examples-golang --- -In our [Go feature flag tutorial](/feature-flag-tutorials/go), we implemented a simple feature flag that could be turned on and off. This document will walk you through other examples of what can be achieved using feature flags in Go. +In our [Go feature flag tutorial](/guides/implement-feature-flags-in-golang), we implemented a simple feature flag that could be turned on and off. This document will walk you through other examples of what can be achieved using feature flags in Go. We built many features into Unleash, our open-source feature flag platform, to address the complexities of releasing code. diff --git a/website/docs/feature-flag-tutorials/golang/implementing-feature-flags-golang.md b/website/docs/guides/language-specific-tutorials/golang/implementing-feature-flags-golang.md similarity index 97% rename from website/docs/feature-flag-tutorials/golang/implementing-feature-flags-golang.md rename to website/docs/guides/language-specific-tutorials/golang/implementing-feature-flags-golang.md index 490fa76607..465166792e 100644 --- a/website/docs/feature-flag-tutorials/golang/implementing-feature-flags-golang.md +++ b/website/docs/guides/language-specific-tutorials/golang/implementing-feature-flags-golang.md @@ -1,7 +1,7 @@ --- title: How to Implement Feature Flags in Go description: "How to use Unleash feature flags with Go." -slug: /feature-flag-tutorials/go +slug: /guides/implement-feature-flags-in-golang --- import VideoContent from '@site/src/components/VideoContent.jsx'; @@ -19,7 +19,7 @@ For this tutorial, you'll need the following: - Docker and Docker Compose - Go Modules, to manage your dependencies -![architecture diagram for our implementation](./diagram.png) +![architecture diagram for our implementation](/img/golang-guide-diagram.png) The Unleash Server is a **Feature Flag Control Service**, which manages your feature flags and lets you retrieve flag data. Unleash has a UI for creating and managing projects and feature flags. You can perform the same actions straight from your CLI or server-side app using the [Unleash API](/get-started/api-overview). @@ -276,6 +276,6 @@ All done! Now you know how to add feature flags with Unleash in Go. You've learn - Install Unleash and create/enable a feature flag - Grab the value of a feature flag with the Go SDK -Feel free to have a look at our [Go Examples page](/feature-flag-tutorials/golang/examples) for more. +Feel free to have a look at our [Go Examples page](/guides/feature-flag-examples-golang) for more. Thank you diff --git a/website/docs/feature-flag-tutorials/ios/examples.md b/website/docs/guides/language-specific-tutorials/ios/examples.md similarity index 97% rename from website/docs/feature-flag-tutorials/ios/examples.md rename to website/docs/guides/language-specific-tutorials/ios/examples.md index b71f698f33..5237d1de9e 100644 --- a/website/docs/feature-flag-tutorials/ios/examples.md +++ b/website/docs/guides/language-specific-tutorials/ios/examples.md @@ -1,9 +1,9 @@ --- title: iOS Feature Flag Examples -slug: /feature-flag-tutorials/ios/examples +slug: /guides/feature-flag-examples-ios --- -In our [iOS feature flag tutorial](/feature-flag-tutorials/ios), we implemented a simple feature flag that could be turned on and off. In the real world, many feature flag use cases have more nuance than this. This document will walk through some common examples of using feature flags in iOS Swift with some of those more advanced use cases in mind. +In our [iOS feature flag tutorial](/guides/implement-feature-flags-in-ios), we implemented a simple feature flag that could be turned on and off. In the real world, many feature flag use cases have more nuance than this. This document will walk through some common examples of using feature flags in iOS Swift with some of those more advanced use cases in mind. We built multiple features into Unleash, an open-source feature flag platform, to address the complexities of releasing code and managing feature flags along the way. This tutorial will explore the following: @@ -19,7 +19,7 @@ We built multiple features into Unleash, an open-source feature flag platform, t It’s common to use feature flags to roll out changes to a percentage of users. Flags allow you to monitor your application and infrastructure for undesired behavior (such as errors, memory bottlenecks, etc.) and to see if the changes improve the outcomes for your application (to increase sales, reduce support requests, etc.) -Doing a gradual rollout for a iOS-based application with Unleash is very straightforward. To see this in action, follow our [How to Implement Feature Flags in iOS](/feature-flag-tutorials/ios) tutorial. +Doing a gradual rollout for a iOS-based application with Unleash is very straightforward. To see this in action, follow our [How to Implement Feature Flags in iOS](/guides/implement-feature-flags-in-ios) tutorial. Once you have completed the tutorial, you can modify the basic setup to adjust the percentage of users who experience this feature with a gradual rollout. The experience that the user is exposed to is cached for consistency. diff --git a/website/docs/feature-flag-tutorials/ios/implementing-feature-flags-ios.md b/website/docs/guides/language-specific-tutorials/ios/implementing-feature-flags-ios.md similarity index 98% rename from website/docs/feature-flag-tutorials/ios/implementing-feature-flags-ios.md rename to website/docs/guides/language-specific-tutorials/ios/implementing-feature-flags-ios.md index 2a0dcfefe8..7f2ffecef9 100644 --- a/website/docs/feature-flag-tutorials/ios/implementing-feature-flags-ios.md +++ b/website/docs/guides/language-specific-tutorials/ios/implementing-feature-flags-ios.md @@ -1,6 +1,6 @@ --- title: How to Implement Feature Flags in iOS -slug: /feature-flag-tutorials/ios +slug: /guides/implement-feature-flags-in-ios --- iOS is a mobile operating system developed by Apple for their mostly used mobile device: the iPhone. [Swift](https://www.swift.org/) is a programming language designed for Apple iOS devices. Unleash offers an [iOS SDK](/reference/sdks/ios) for connecting SwiftUI with your iOS application to use feature flags. We will be using the open-source iOS Swift project called [Open Meteo](https://github.com/ighiba/open-meteo)! @@ -204,4 +204,4 @@ Next, return to your app and rebuild the project. With the flag disabled, the fl In this tutorial, we ran Unleash locally, created a new feature flag, installed the iOS SDK into an iOS app, and logged a feature flag status. -Explore some [more advanced uses cases in our iOS Examples](/feature-flag-tutorials/ios/examples) +Explore some [more advanced uses cases in our iOS Examples](/guides/feature-flag-examples-ios) diff --git a/website/docs/feature-flag-tutorials/java/implementing-feature-flags.mdx b/website/docs/guides/language-specific-tutorials/java/implementing-feature-flags.mdx similarity index 99% rename from website/docs/feature-flag-tutorials/java/implementing-feature-flags.mdx rename to website/docs/guides/language-specific-tutorials/java/implementing-feature-flags.mdx index 4f11ef7f75..fcb2ca51a8 100644 --- a/website/docs/feature-flag-tutorials/java/implementing-feature-flags.mdx +++ b/website/docs/guides/language-specific-tutorials/java/implementing-feature-flags.mdx @@ -1,6 +1,6 @@ --- title: How to Implement Feature Flags in Java -slug: /feature-flag-tutorials/java +slug: /guides/implement-feature-flags-in-java --- import VideoContent from '@site/src/components/VideoContent.jsx'; diff --git a/website/docs/feature-flag-tutorials/java/spring-boot-examples.md b/website/docs/guides/language-specific-tutorials/java/spring-boot-examples.md similarity index 97% rename from website/docs/feature-flag-tutorials/java/spring-boot-examples.md rename to website/docs/guides/language-specific-tutorials/java/spring-boot-examples.md index 920b882206..b1e47efdbd 100644 --- a/website/docs/feature-flag-tutorials/java/spring-boot-examples.md +++ b/website/docs/guides/language-specific-tutorials/java/spring-boot-examples.md @@ -1,9 +1,9 @@ --- title: Java Spring Boot Feature Flag Examples -slug: /feature-flag-tutorials/spring-boot/examples +slug: /guides/feature-flag-examples-spring-boot --- -In our [Java Spring Boot feature flag tutorial](/feature-flag-tutorials/spring-boot), we implemented a simple feature flag that could be turned on and off. In the real world, many feature flag use cases have more nuance than this. This document will walk you through some common examples of using feature flags in Java Spring Boot with some of those more advanced use cases in mind. +In our [Java Spring Boot feature flag tutorial](/guides/implement-feature-flags-in-spring-boot), we implemented a simple feature flag that could be turned on and off. In the real world, many feature flag use cases have more nuance than this. This document will walk you through some common examples of using feature flags in Java Spring Boot with some of those more advanced use cases in mind. We built multiple features into Unleash, an open-source feature flag platform, to address the complexities of releasing code and managing feature flags along the way. This tutorial will explore the following: diff --git a/website/docs/feature-flag-tutorials/java/spring-boot-implementing-feature-flags.mdx b/website/docs/guides/language-specific-tutorials/java/spring-boot-implementing-feature-flags.mdx similarity index 98% rename from website/docs/feature-flag-tutorials/java/spring-boot-implementing-feature-flags.mdx rename to website/docs/guides/language-specific-tutorials/java/spring-boot-implementing-feature-flags.mdx index ab87ec9bab..1031eb8a64 100644 --- a/website/docs/feature-flag-tutorials/java/spring-boot-implementing-feature-flags.mdx +++ b/website/docs/guides/language-specific-tutorials/java/spring-boot-implementing-feature-flags.mdx @@ -1,6 +1,6 @@ --- title: How to Implement Feature Flags in Java Spring Boot -slug: /feature-flag-tutorials/spring-boot +slug: /guides/implement-feature-flags-in-spring-boot --- import VideoContent from '@site/src/components/VideoContent.jsx'; @@ -376,4 +376,4 @@ The message rendering in the browser confirms that the app is now targeting the In this tutorial, we created a new feature flag in Unleash and built a new page in the Spring Pet Clinic app. From there, we created two service implementations within the app for the new page and toggled between them with the feature flag. The Unleash Spring Boot SDK gave us the proper annotations to automatically toggle between the two implementations with minimal configuration. -Continue on to our [Spring Boot examples documentation](/feature-flag-tutorials/spring-boot/examples) for more advanced use cases of feature flags in Java Spring Boot using the Spring PetClinic app! +Continue on to our [Spring Boot examples documentation](/guides/feature-flag-examples-spring-boot) for more advanced use cases of feature flags in Java Spring Boot using the Spring PetClinic app! diff --git a/website/docs/feature-flag-tutorials/javascript/implementing-feature-flags-js.md b/website/docs/guides/language-specific-tutorials/javascript/implementing-feature-flags-js.md similarity index 97% rename from website/docs/feature-flag-tutorials/javascript/implementing-feature-flags-js.md rename to website/docs/guides/language-specific-tutorials/javascript/implementing-feature-flags-js.md index 3aa98c5855..3edf187d1b 100644 --- a/website/docs/feature-flag-tutorials/javascript/implementing-feature-flags-js.md +++ b/website/docs/guides/language-specific-tutorials/javascript/implementing-feature-flags-js.md @@ -1,7 +1,7 @@ --- title: How to Implement Feature Flags in JavaScript description: "How to use Unleash feature flags with plain JavaScript." -slug: /feature-flag-tutorials/javascript +slug: /guides/implement-feature-flags-in-javascript --- import VideoContent from '@site/src/components/VideoContent.jsx'; @@ -17,7 +17,7 @@ For this tutorial, you'll need the following: - Docker and Docker Compose - A browser or IDE; you can also use [CodeSandbox](https://codesandbox.io/docs/learn) -![architecture diagram for our implementation](./diagram.png) +![architecture diagram for our implementation](/img/javascript-guide-diagram.png) The Unleash Server is a **Feature Flag Control Service**, which manages your feature flags and lets you retrieve flag data. Unleash has a UI for creating and managing projects and feature flags. In this example, we'll set up a script to make requests to Unleash using the Unleash SDK and show/hide a DOM element based on the flag data we receive. @@ -104,7 +104,7 @@ In the `index.html` file, add the following: Open the file in your browser, you'll see something like this: -![A non-functional website with only a button and a notice box](./template.png) +![A non-functional website with only a button and a notice box](/img/javascript-guide-template.png) ## Fetch images from the API @@ -154,7 +154,7 @@ start(); Refresh your browser again. Our website is now functional. -![Our mini corgi website](./corgi-site.png) +![Our mini corgi website](/img/javascript-guide-corgi-site.png) ## 5. Add Unleash to your website diff --git a/website/docs/feature-flag-tutorials/nextjs/implementing-feature-flags-nextjs.md b/website/docs/guides/language-specific-tutorials/nextjs/implementing-feature-flags-nextjs.md similarity index 99% rename from website/docs/feature-flag-tutorials/nextjs/implementing-feature-flags-nextjs.md rename to website/docs/guides/language-specific-tutorials/nextjs/implementing-feature-flags-nextjs.md index 2342e658ad..f534db50d1 100644 --- a/website/docs/feature-flag-tutorials/nextjs/implementing-feature-flags-nextjs.md +++ b/website/docs/guides/language-specific-tutorials/nextjs/implementing-feature-flags-nextjs.md @@ -1,6 +1,6 @@ --- title: How to Implement Feature Flags in Next.js using Unleash -slug: /feature-flag-tutorials/nextjs +slug: /guides/implement-feature-flags-in-nextjs --- :::note diff --git a/website/docs/feature-flag-tutorials/python/examples.md b/website/docs/guides/language-specific-tutorials/python/examples.md similarity index 94% rename from website/docs/feature-flag-tutorials/python/examples.md rename to website/docs/guides/language-specific-tutorials/python/examples.md index a83a1f077a..207111eaf9 100644 --- a/website/docs/feature-flag-tutorials/python/examples.md +++ b/website/docs/guides/language-specific-tutorials/python/examples.md @@ -1,9 +1,9 @@ --- title: Python Feature Flag Examples -slug: /feature-flag-tutorials/python/examples +slug: /guides/feature-flag-examples-python --- -In our [Python feature flag tutorial](/feature-flag-tutorials/python), we implemented a simple feature flag that could be turned on and off. In the real world, many feature flag use cases have more nuance than this. This document will walk you through some common examples of using feature flags in Python with some of those more advanced use cases in mind. +In our [Python feature flag tutorial](/guides/implement-feature-flags-in-python), we implemented a simple feature flag that could be turned on and off. In the real world, many feature flag use cases have more nuance than this. This document will walk you through some common examples of using feature flags in Python with some of those more advanced use cases in mind. We built multiple features into Unleash, an open-source feature flag platform, to address the complexities of releasing code and managing feature flags along the way. This tutorial will explore the following: @@ -185,7 +185,7 @@ A/B testing is a common way for teams to test out how users interact with two or When a feature flag is enabled, we can expose a particular version of a feature to select user bases. From there, we can use the variants to view the performance metrics in Unleash and see which is more efficient. -In the context of our [Python tutorial](/feature-flag-tutorials/python), let’s say we want to test a new variation of the flag for deleting surveys. In this new variation, we want the UI to remain the same–a delete button that removes a survey–but server-side, we’d like to store the deleted surveys in a new database model so they can be restored if a user decides to. +In the context of our [Python tutorial](/guides/implement-feature-flags-in-python), let’s say we want to test a new variation of the flag for deleting surveys. In this new variation, we want the UI to remain the same–a delete button that removes a survey–but server-side, we’d like to store the deleted surveys in a new database model so they can be restored if a user decides to. While we won’t implement all the functionality required to save and restore deleted surveys in this example, we can walk through how to set up variants and where the server-side changes would take place in the Python app. @@ -325,7 +325,7 @@ You can find more information in our [impression data docs](/reference/impressio ## Application Metrics & Monitoring for Python -Under your feature flag’s Metrics tab in Unleash, you can see the general activity of the [Flask Surveys Container App](/feature-flag-tutorials/python) tutorial in the development environment over different periods of time. If the app had a production environment enabled, we would also be able to view exposure (amount of users that are exposed to the flag by count and overall percentage) and requests the app is receiving over time. +Under your feature flag’s Metrics tab in Unleash, you can see the general activity of the [Flask Surveys Container App](/guides/implement-feature-flags-in-python) tutorial in the development environment over different periods of time. If the app had a production environment enabled, we would also be able to view exposure (amount of users that are exposed to the flag by count and overall percentage) and requests the app is receiving over time. ![A Metrics graph provides the visualization of your flag being exposed in your environments for your connected application.](/img/python-ex-metrics.png) diff --git a/website/docs/feature-flag-tutorials/python/implementing-feature-flags.mdx b/website/docs/guides/language-specific-tutorials/python/implementing-feature-flags.mdx similarity index 98% rename from website/docs/feature-flag-tutorials/python/implementing-feature-flags.mdx rename to website/docs/guides/language-specific-tutorials/python/implementing-feature-flags.mdx index be8a6e55d6..0b65ca4ef7 100644 --- a/website/docs/feature-flag-tutorials/python/implementing-feature-flags.mdx +++ b/website/docs/guides/language-specific-tutorials/python/implementing-feature-flags.mdx @@ -1,6 +1,6 @@ --- title: How to Implement Feature Flags in Python -slug: /feature-flag-tutorials/python +slug: /guides/implement-feature-flags-in-python --- import VideoContent from '@site/src/components/VideoContent.jsx'; @@ -281,4 +281,4 @@ Next, return to your Survey app and refresh the browser. With the flag disabled, In this tutorial, we ran Unleash locally, created a new feature flag, installed the Python SDK into a Python Flask app, and toggled new functionality that altered a database with a containerized project! -Continue to our [Python Examples docs](/feature-flag-tutorials/python/examples) for more advanced applications of feature flags in Python using our Flask Surveys Containers App! +Continue to our [Python Examples docs](/guides/feature-flag-examples-python) for more advanced applications of feature flags in Python using our Flask Surveys Containers App! diff --git a/website/docs/feature-flag-tutorials/rails/implementing-feature-flags-rails.md b/website/docs/guides/language-specific-tutorials/rails/implementing-feature-flags-rails.md similarity index 95% rename from website/docs/feature-flag-tutorials/rails/implementing-feature-flags-rails.md rename to website/docs/guides/language-specific-tutorials/rails/implementing-feature-flags-rails.md index 0383f8e9ba..90783e93f6 100644 --- a/website/docs/feature-flag-tutorials/rails/implementing-feature-flags-rails.md +++ b/website/docs/guides/language-specific-tutorials/rails/implementing-feature-flags-rails.md @@ -1,7 +1,7 @@ --- title: How to Implement Feature Flags in Rails description: "How to use Unleash feature flags with Rails." -slug: /feature-flag-tutorials/rails +slug: /guides/implement-feature-flags-in-rails --- Hello! In this tutorial, we’ll show you how to add feature flags to your Ruby on Rails app, using [Unleash](https://www.getunleash.io/) and the official [Unleash Ruby SDK](/reference/sdks/ruby). With Unleash, an open-source feature flag service, you can use our tooling to add feature flags to your application and release new features faster. @@ -28,7 +28,7 @@ For this tutorial, you’ll need the following: - Git - Docker and Docker Compose -![architecture diagram for our implementation](./diagram.png) +![architecture diagram for our implementation](/img/rails-guide-diagram.png) The Unleash Server is a **Feature Flag Control Service**, which manages your feature flags and lets you retrieve flag data. Unleash has a UI for creating and managing projects and feature flags. There are also [API commands available](/get-started/api-overview) to perform the same actions straight from your CLI or server-side app. @@ -67,11 +67,11 @@ Password: unleash4all Click the ‘New feature flag’ button to create a new feature flag. -![Create a new feature flag](../ruby/new-ff.png) +![Create a new feature flag](/img/ruby-guide-new-ff.png) Call it `top-3` and enable it in the `development` environment. -![A feature flag called `top-3` is now visible.](./enable-ff.png) +![A feature flag called `top-3` is now visible.](/img/rails-guide-enable-ff.png) Everything’s now set up on the Unleash side. Let’s set up the Rails application. @@ -114,7 +114,7 @@ rails server Go to [http://localhost:3000](http://localhost:3000) and check that you see the following: -![A blog app with a list of posts](./blog-app.png) +![A blog app with a list of posts](/img/rails-guide-blog-app.png) ## 4. Restrict the number of posts diff --git a/website/docs/feature-flag-tutorials/rails/rails-examples.md b/website/docs/guides/language-specific-tutorials/rails/rails-examples.md similarity index 96% rename from website/docs/feature-flag-tutorials/rails/rails-examples.md rename to website/docs/guides/language-specific-tutorials/rails/rails-examples.md index fc8b7e0f6b..ca4b354dd1 100644 --- a/website/docs/feature-flag-tutorials/rails/rails-examples.md +++ b/website/docs/guides/language-specific-tutorials/rails/rails-examples.md @@ -1,9 +1,9 @@ --- title: Rails Feature Flag Examples -slug: /feature-flag-tutorials/rails/examples +slug: /guides/feature-flag-examples-rails --- -In our [Rails feature flag tutorial](/feature-flag-tutorials/rails), we implemented a simple feature flag that could be turned on and off. This document will walk you through some common examples of using feature flags in Rails. +In our [Rails feature flag tutorial](/guides/implement-feature-flags-in-rails), we implemented a simple feature flag that could be turned on and off. This document will walk you through some common examples of using feature flags in Rails. We built many features into Unleash, our open-source feature flag platform, to address the complexities of releasing code. This tutorial will explore the following: @@ -181,7 +181,7 @@ When a feature flag is enabled, we can expose a particular version of a feature In Unleash, navigate go to a feature flag, then click on an environment to open your strategy. -![Open the strategy menu](../ruby/strategy.png) +![Open the strategy menu](/img/ruby-guide-strategy.png) Click ‘Edit Strategy' @@ -189,7 +189,7 @@ Click ‘Edit Strategy' Only enable your flag for 50% of users. -![The slider that controls the graduality of the rollout is set to 50%](../ruby/50-gradual.png) +![The slider that controls the graduality of the rollout is set to 50%](/img/ruby-guide-50-gradual.png) Alternatively, you can do that with a `PUT` request in Ruby using our API: @@ -243,13 +243,13 @@ Let’s walk through how to enable impression data for a feature flag. At the flag level in Unleash, navigate to the Settings view. -![From your flag page in Unleash, you go to Settings and edit the settings for your flag called 'feature information'.](../ruby/flag-settings.png) +![From your flag page in Unleash, you go to Settings and edit the settings for your flag called 'feature information'.](/img/ruby-guide-flag-settings.png) In the Settings view, there's an edit button with pencil icon. This will take us to the ‘Edit Feature flag’ form. Turn on the impression data and then save it. Events will now be emitted every time the feature flag is triggered. -![There is a flag that turns on the impression data events in your flag form.](../ruby/enable-impression-data.png) +![There is a flag that turns on the impression data events in your flag form.](/img/ruby-guide-enable-impression-data.png) You can also use our API command to enable the impression data: @@ -315,7 +315,7 @@ You can view events in [Event Log](/reference/events#event-log) to monitor the c - How the gradual rollout strategy was configured - When and how the variants were created and configured -![Event Log in Unleash tracks every single change made to flags, similar to Git commit history.](../ruby/event-logs.png) +![Event Log in Unleash tracks every single change made to flags, similar to Git commit history.](/img/ruby-guide-event-logs.png) You can also retrieve events by using an API command, like below: diff --git a/website/docs/feature-flag-tutorials/react/examples.md b/website/docs/guides/language-specific-tutorials/react/examples.md similarity index 96% rename from website/docs/feature-flag-tutorials/react/examples.md rename to website/docs/guides/language-specific-tutorials/react/examples.md index 0f3b98d3ad..b2541a4fe7 100644 --- a/website/docs/feature-flag-tutorials/react/examples.md +++ b/website/docs/guides/language-specific-tutorials/react/examples.md @@ -1,9 +1,9 @@ --- title: React Feature Flag Examples -slug: /feature-flag-tutorials/react/examples +slug: /guides/feature-flag-examples-react --- -In our [React tutorial](/feature-flag-tutorials/react), we implemented a simple on/off feature flag. In the real world, many feature flag use cases have more nuance than this. This document will walk you through some common examples of using feature flags in React with some of those more advanced use cases in mind. +In our [React tutorial](/guides/implement-feature-flags-in-react), we implemented a simple on/off feature flag. In the real world, many feature flag use cases have more nuance than this. This document will walk you through some common examples of using feature flags in React with some of those more advanced use cases in mind. Applications evolve, and teams must manage all aspects of this evolution, including the flags used to control the application. We built multiple features into Unleash to address the complexities of releasing code and managing feature flags along the way: @@ -34,7 +34,7 @@ Applications evolve, and teams must manage all aspects of this evolution, includ It’s common to use feature flags to roll out changes to a percentage of users. Flags allow you to monitor your application and infrastructure for undesired behavior (such as errors, memory bottlenecks, etc.) and to see if the changes improve the outcomes for your application (to increase sales, reduce support requests, etc.) -Doing a gradual rollout for a React-based application with Unleash is very straightforward. To see this in action, follow our [How to Implement Feature Flags in React](/feature-flag-tutorials/react) tutorial, which implements a notification feature using feature flags. +Doing a gradual rollout for a React-based application with Unleash is very straightforward. To see this in action, follow our [How to Implement Feature Flags in React](/guides/implement-feature-flags-in-react) tutorial, which implements a notification feature using feature flags. Once you have completed the tutorial, you can modify the basic setup to adjust the percentage of users who experience this feature with a gradual rollout. The experience that the user is exposed to is cached for consistency. @@ -172,7 +172,7 @@ We can expose a particular version of the feature to select user bases when a fl We can create several variations of this feature to release to users and gather performance metrics to determine which one yields better results. While teams may have different goals for measuring performance, Unleash enables you to configure strategy for the feature variants within your application/service and the platform. -In the context of our [React tutorial](/feature-flag-tutorials/react), we have a notifications badge feature that displays in the top navigation menu. To implement feature flag variants for an A/B Test in React, we will set up a variant in the feature flag and use an announcement icon from Material UI to render a different version. +In the context of our [React tutorial](/guides/implement-feature-flags-in-react), we have a notifications badge feature that displays in the top navigation menu. To implement feature flag variants for an A/B Test in React, we will set up a variant in the feature flag and use an announcement icon from Material UI to render a different version. In Unleash, navigate to the feature flag’s Variants tab and add a variant. @@ -376,7 +376,7 @@ Now that the application is capturing impression events, you can configure the c ### Application Metrics & Monitoring -Under the Metrics tab, you can see the general activity of the [Cypress Real World App from our React tutorial](/feature-flag-tutorials/react) in the development environment over different periods of time. If the app had a production environment enabled, we would also be able to view the amount of exposure and requests the app is receiving over time. +Under the Metrics tab, you can see the general activity of the [Cypress Real World App from our React tutorial](/guides/implement-feature-flags-in-react) in the development environment over different periods of time. If the app had a production environment enabled, we would also be able to view the amount of exposure and requests the app is receiving over time. ![We have a Metrics graph in Unleash to review flag exposure and request rates.](/img/react-ex-metrics.png) diff --git a/website/docs/feature-flag-tutorials/react/implementing-feature-flags.mdx b/website/docs/guides/language-specific-tutorials/react/implementing-feature-flags.mdx similarity index 98% rename from website/docs/feature-flag-tutorials/react/implementing-feature-flags.mdx rename to website/docs/guides/language-specific-tutorials/react/implementing-feature-flags.mdx index b3a9ad2b2b..9d9ea51ab7 100644 --- a/website/docs/feature-flag-tutorials/react/implementing-feature-flags.mdx +++ b/website/docs/guides/language-specific-tutorials/react/implementing-feature-flags.mdx @@ -1,7 +1,7 @@ --- title: How to Implement Feature Flags in React -slug: /feature-flag-tutorials/react -pagination_next: feature-flag-tutorials/react/examples +slug: /guides/implement-feature-flags-in-react +pagination_next: guides/language-specific-tutorials/react/examples --- import VideoContent from '@site/src/components/VideoContent.jsx'; @@ -253,4 +253,4 @@ You've successfully implemented a feature flag using best practices to control t In this tutorial, we installed Unleash locally, created a new feature flag, installed Unleash into a React app, and toggled the visibility of a notifications feature within a [real world open source project](https://github.com/cypress-io/cypress-realworld-app)! -Explore some [more advanced uses cases in our React Examples](/feature-flag-tutorials/react/examples) +Explore some [more advanced uses cases in our React Examples](/guides/feature-flag-examples-react) diff --git a/website/docs/feature-flag-tutorials/ruby/implementing-feature-flags-ruby.mdx b/website/docs/guides/language-specific-tutorials/ruby/implementing-feature-flags-ruby.mdx similarity index 95% rename from website/docs/feature-flag-tutorials/ruby/implementing-feature-flags-ruby.mdx rename to website/docs/guides/language-specific-tutorials/ruby/implementing-feature-flags-ruby.mdx index 766e7a4daa..b6524e7683 100644 --- a/website/docs/feature-flag-tutorials/ruby/implementing-feature-flags-ruby.mdx +++ b/website/docs/guides/language-specific-tutorials/ruby/implementing-feature-flags-ruby.mdx @@ -1,7 +1,7 @@ --- title: How to Implement Feature Flags in Ruby description: "How to use Unleash feature flags with Ruby." -slug: /feature-flag-tutorials/ruby +slug: /guides/implement-feature-flags-in-ruby --- import VideoContent from '@site/src/components/VideoContent.jsx'; @@ -33,7 +33,7 @@ For this tutorial, you’ll need the following: - Docker and Docker Compose - (Optional) Bundler, to manage your gemfile -![architecture diagram for our implementation](./diagram.png) +![architecture diagram for our implementation](/img/ruby-guide-diagram.png) The Unleash Server is a **Feature Flag Control Service**, which manages your feature flags and lets you retrieve flag data. Unleash has a UI for creating and managing projects and feature flags. There are also [API commands available](/get-started/api-overview) to perform the same actions straight from your CLI or server-side app. @@ -72,11 +72,11 @@ Password: unleash4all Click the ‘New feature flag’ button to create a new feature flag. -![Create a new feature flag](./new-ff.png) +![Create a new feature flag](/img/ruby-guide-new-ff.png) Call it `graphql-api` and enable it in the `development` environment. -![A feature flag called `graphql-api` is now visible.](./enable-ff.png) +![A feature flag called `graphql-api` is now visible.](/img/ruby-guide-enable-ff.png) Everything’s now setup on the Unleash side. Let’s go to the code now. @@ -225,7 +225,7 @@ Now that we’ve connected our project to Unleash and grabbed our feature flag, > **Note:** An update to a feature flag may take 30 seconds to propagate. -![A feature flag called `graphql-api` is now disabled](./graphql-ff.png) +![A feature flag called `graphql-api` is now disabled](/img/ruby-guide-graphql-ff.png) ## Conclusion diff --git a/website/docs/feature-flag-tutorials/ruby/ruby-examples.md b/website/docs/guides/language-specific-tutorials/ruby/ruby-examples.md similarity index 96% rename from website/docs/feature-flag-tutorials/ruby/ruby-examples.md rename to website/docs/guides/language-specific-tutorials/ruby/ruby-examples.md index 629a1d4c58..b71db36b5e 100644 --- a/website/docs/feature-flag-tutorials/ruby/ruby-examples.md +++ b/website/docs/guides/language-specific-tutorials/ruby/ruby-examples.md @@ -1,9 +1,9 @@ --- title: Ruby Feature Flag Examples -slug: /feature-flag-tutorials/ruby/examples +slug: /guides/feature-flag-examples-ruby --- -In our [Ruby feature flag tutorial](/feature-flag-tutorials/ruby), we implemented a simple feature flag that could be turned on and off. This document will walk you through some common examples of using feature flags in Ruby. +In our [Ruby feature flag tutorial](/guides/implement-feature-flags-in-ruby), we implemented a simple feature flag that could be turned on and off. This document will walk you through some common examples of using feature flags in Ruby. We built many features into Unleash, our open-source feature flag platform, to address the complexities of releasing code. This tutorial will explore the following: @@ -180,7 +180,7 @@ When a feature flag is enabled, we can expose a particular version of a feature In Unleash, navigate go to a feature flag, then click on an environment to open your strategy. -![Open the strategy menu](./strategy.png) +![Open the strategy menu](/img/ruby-guide-strategy.png) Click ‘Edit Strategy' @@ -188,7 +188,7 @@ Click ‘Edit Strategy' Only enable your flag for 50% of users. -![The slider that controls the graduality of the rollout is set to 50%](./50-gradual.png) +![The slider that controls the graduality of the rollout is set to 50%](/img/ruby-guide-50-gradual.png) Alternatively, you can do that with a `PUT` request in Ruby using our API: @@ -242,13 +242,13 @@ Let’s walk through how to enable impression data for a feature flag. At the flag level in Unleash, navigate to the Settings view. -![From your flag page in Unleash, you go to Settings and edit the settings for your flag called 'feature information'.](./flag-settings.png) +![From your flag page in Unleash, you go to Settings and edit the settings for your flag called 'feature information'.](/img/ruby-guide-flag-settings.png) In the Settings view, there's an edit button with pencil icon. This will take us to the ‘Edit Feature flag’ form. Turn on the impression data and then save it. Events will now be emitted every time the feature flag is triggered. -![There is a flag that turns on the impression data events in your flag form.](./enable-impression-data.png) +![There is a flag that turns on the impression data events in your flag form.](/img/ruby-guide-enable-impression-data.png) You can also use our API command to enable the impression data: @@ -314,7 +314,7 @@ You can view [Event Log](/reference/events#event-log) to monitor the changes to - How the gradual rollout strategy was configured - When and how the variants were created and configured -![Event Log in Unleash tracks every single change made to flags, similar to Git commit history.](./event-logs.png) +![Event Log in Unleash tracks every single change made to flags, similar to Git commit history.](/img/ruby-guide-event-logs.png) You can also retrieve events by using an API command, like below: diff --git a/website/docs/feature-flag-tutorials/rust/implementing-feature-flags-rust.md b/website/docs/guides/language-specific-tutorials/rust/implementing-feature-flags-rust.md similarity index 93% rename from website/docs/feature-flag-tutorials/rust/implementing-feature-flags-rust.md rename to website/docs/guides/language-specific-tutorials/rust/implementing-feature-flags-rust.md index 170714a540..9db8bc4f85 100644 --- a/website/docs/feature-flag-tutorials/rust/implementing-feature-flags-rust.md +++ b/website/docs/guides/language-specific-tutorials/rust/implementing-feature-flags-rust.md @@ -1,7 +1,7 @@ --- title: How to Implement Feature Flags in Rust description: "How to use Unleash feature flags with Rust." -slug: /feature-flag-tutorials/rust +slug: /guides/implement-feature-flags-in-rust --- Hello! In this tutorial we’ll show you how to add feature flags to your Rust app, using [Unleash](https://www.getunleash.io/) and the official [Unleash Rust SDK](/reference/sdks/rust). With Unleash, an open-source feature management service, you can add feature flags to your applications and release new features faster. @@ -24,7 +24,7 @@ For this tutorial, you’ll need the following: - Git - Docker and Docker Compose -![architecture diagram for our implementation](./diagram.png) +![architecture diagram for our implementation](/img/rust-guide-diagram.png) The Unleash Server is a **Feature Flag Control Service**, which manages your feature flags and lets you retrieve flag data. Unleash has a UI for creating and managing projects and feature flags. There are also [API commands available](/get-started/api-overview) to perform the same actions straight from your CLI or app. @@ -51,11 +51,11 @@ Password: unleash4all Click the ‘New feature flag’ button to create a new feature flag. -![The "new feature flag" button is located on the project page](../ruby/new-ff.png) +![The "new feature flag" button is located on the project page](/img/ruby-guide-new-ff.png) Call it `webp` and enable it in the `development` environment. -![A feature flag called `webp` is now visible.](./enable-ff.png) +![A feature flag called `webp` is now visible.](/img/rust-guide-enable-ff.png) Next, generate an API token to authenticate calls made to Unleash servers from your project. @@ -99,9 +99,9 @@ cargo add image webp We use the `image` and `webp` crates to convert images to JPEG and WebP, respectively. The `unleash_api_client` crate is used to communicate with the Unleash server. The `tokio` crate will be used to make this connection asynchronous. -Final step before we start coding: Download this image or add an image of your own to your folder. Call it "input.png." Make sure it's in the same folder as the rest of your cargo project. +Final step before we start coding: Download this image or add an image of your own to your folder. Call it "/img/rust-guide-input.png." Make sure it's in the same folder as the rest of your cargo project. -!["The Great Wave off Kanagawa" by Hokusai. A woodblock print of a cresting wave.](input.png) +!["The Great Wave off Kanagawa" by Hokusai. A woodblock print of a cresting wave.](/img/rust-guide-input.png) Let's write some Rust code to convert the image to jpeg. We're relying on the `image` crate to read and convert the image file. We'll then use the feature flag that we just created to toggle the conversion to WebP rather than JPEG. @@ -118,7 +118,7 @@ fn main() -> Result<(), Box> { } fn process_image() -> Result<(), Box> { - let img = ImageReader::open("input.png")?.decode()?; + let img = ImageReader::open("/img/rust-guide-input.png")?.decode()?; img.save_with_format("output.jpeg", image::ImageFormat::Jpeg)?; Ok(()) @@ -153,7 +153,7 @@ fn main() -> Result<(), Box> { } fn process_image(is_webp: bool) -> Result<(), Box> { - let img = ImageReader::open("input.png")?.decode()?; + let img = ImageReader::open("/img/rust-guide-input.png")?.decode()?; if is_webp { let webp_data = Encoder::from_image(&img)?.encode(0.75); @@ -175,7 +175,7 @@ cargo run You should see another image named `output.webp` in your folder, alongside the `.jpeg` image. Make sure that all images are the same before continuing. -![Project directory containing the newly created `output.webp`](./webp-image-in-folder.png) +![Project directory containing the newly created `output.webp`](/img/rust-guide-webp-image-in-folder.png) ## 4. Add Unleash to your Rust app @@ -244,7 +244,7 @@ async fn main() -> Result<(), Box> { } fn process_image(is_webp: bool) -> Result<(), Box> { - let img = ImageReader::open("input.png")?.decode()?; + let img = ImageReader::open("/img/rust-guide-input.png")?.decode()?; if is_webp { let webp_data = Encoder::from_image(&img)?.encode(0.75); diff --git a/website/docs/feature-flag-tutorials/rust/rust-examples.md b/website/docs/guides/language-specific-tutorials/rust/rust-examples.md similarity index 97% rename from website/docs/feature-flag-tutorials/rust/rust-examples.md rename to website/docs/guides/language-specific-tutorials/rust/rust-examples.md index bf89ea3fe5..e58b10bdbe 100644 --- a/website/docs/feature-flag-tutorials/rust/rust-examples.md +++ b/website/docs/guides/language-specific-tutorials/rust/rust-examples.md @@ -1,9 +1,9 @@ --- title: Rust Feature Flag Examples -slug: /feature-flag-tutorials/rust/examples +slug: /guides/feature-flag-examples-rust --- -In our [Rust feature flag tutorial](/feature-flag-tutorials/rust), we implemented a simple feature flag that could be turned on and off. This document will walk you through some common examples of using feature flags in Rust with our SDK. +In our [Rust feature flag tutorial](/guides/implement-feature-flags-in-rust), we implemented a simple feature flag that could be turned on and off. This document will walk you through some common examples of using feature flags in Rust with our SDK. We built many features into Unleash, our open-source feature flag platform, to address the complexities of releasing code. This tutorial will explore the following: @@ -219,7 +219,7 @@ When a feature flag is enabled, we can expose a particular version of a feature In Unleash, navigate go to a feature flag, then click on an environment to open your strategy. -![Open the strategy menu](../ruby/strategy.png) +![Open the strategy menu](/img/ruby-guide-strategy.png) Click ‘Edit Strategy' @@ -227,7 +227,7 @@ Click ‘Edit Strategy' Only enable your flag for 50% of users. -![The slider that controls the graduality of the rollout is set to 50%](../ruby/50-gradual.png) +![The slider that controls the graduality of the rollout is set to 50%](/img/ruby-guide-50-gradual.png) Alternatively, you can do that with a `PUT` request in Rust: @@ -296,13 +296,13 @@ Let’s walk through how to enable impression data for a feature flag. At the flag level in Unleash, navigate to the Settings view. -![From your flag page in Unleash, you go to Settings and edit the settings for your flag called 'feature information'.](../ruby/flag-settings.png) +![From your flag page in Unleash, you go to Settings and edit the settings for your flag called 'feature information'.](/img/ruby-guide-flag-settings.png) In the Settings view, there's an edit button with pencil icon. This will take us to the ‘Edit Feature flag’ form. Turn on the impression data and then save it. Events will now be emitted every time the feature flag is triggered. -![There is a flag that turns on the impression data events in your flag form.](../ruby/enable-impression-data.png) +![There is a flag that turns on the impression data events in your flag form.](/img/ruby-guide-enable-impression-data.png) You can also use our API command to enable the impression data: @@ -378,7 +378,7 @@ You can view events in [Event Log](/reference/events#event-log) to monitor the c - How the gradual rollout strategy was configured - When and how the variants were created and configured -![Event Log in Unleash tracks every single change made to flags, similar to Git commit history.](../ruby/event-logs.png) +![Event Log in Unleash tracks every single change made to flags, similar to Git commit history.](/img/ruby-guide-event-logs.png) You can also retrieve events by using an API command, like below: diff --git a/website/docs/feature-flag-tutorials/serverless/implementing-feature-flags-in-aws-lambda.md b/website/docs/guides/language-specific-tutorials/serverless/implementing-feature-flags-in-aws-lambda.md similarity index 99% rename from website/docs/feature-flag-tutorials/serverless/implementing-feature-flags-in-aws-lambda.md rename to website/docs/guides/language-specific-tutorials/serverless/implementing-feature-flags-in-aws-lambda.md index c7ff6b15fd..c87979dcd2 100644 --- a/website/docs/feature-flag-tutorials/serverless/implementing-feature-flags-in-aws-lambda.md +++ b/website/docs/guides/language-specific-tutorials/serverless/implementing-feature-flags-in-aws-lambda.md @@ -1,7 +1,7 @@ --- title: 'Serverless feature flags: How to' description: 'Use the Unleash Node.js SDK with AWS Lambda to implement feature flags in a serverless environment.' -slug: /feature-flag-tutorials/serverless/lambda +slug: /guides/implement-feature-flags-in-aws-lambda --- Developers can add feature flagging capabilities to serverless functions and validate new parts of them. Leveraging feature flags gives you complete control over feature exposure and simplifies serverless function versioning management. diff --git a/website/docs/feature-flag-tutorials/sveltekit/implementing-feature-flags-sveltekit.md b/website/docs/guides/language-specific-tutorials/sveltekit/implementing-feature-flags-sveltekit.md similarity index 99% rename from website/docs/feature-flag-tutorials/sveltekit/implementing-feature-flags-sveltekit.md rename to website/docs/guides/language-specific-tutorials/sveltekit/implementing-feature-flags-sveltekit.md index e5959992ba..d7adcff873 100644 --- a/website/docs/feature-flag-tutorials/sveltekit/implementing-feature-flags-sveltekit.md +++ b/website/docs/guides/language-specific-tutorials/sveltekit/implementing-feature-flags-sveltekit.md @@ -1,7 +1,7 @@ --- title: How to Implement Feature Flags in SvelteKit description: "How to use Unleash feature flags with SvelteKit." -slug: /feature-flag-tutorials/sveltekit +slug: /guides/implement-feature-flags-in-sveltekit --- Hello and welcome to another tutorial. This is about adding feature flags to an app made with [SvelteKit](https://kit.svelte.dev/), [Unleash](https://www.getunleash.io/) and the official [Unleash Svelte SDK](/reference/sdks/svelte). diff --git a/website/docusaurus.config.ts b/website/docusaurus.config.ts index 9c6849d4fc..856de9cd3b 100644 --- a/website/docusaurus.config.ts +++ b/website/docusaurus.config.ts @@ -330,11 +330,11 @@ class="header-github-link" }, { label: 'Progressive or gradual rollouts', - to: '/feature-flag-tutorials/use-cases/gradual-rollout', + to: '/guides/gradual-rollout', }, { label: 'Trunk-based development', - to: '/feature-flag-tutorials/use-cases/trunk-based-development', + to: '/guides/trunk-based-development', }, { label: 'Software kill switches', @@ -342,7 +342,7 @@ class="header-github-link" }, { label: 'A/B testing', - to: '/feature-flag-tutorials/use-cases/a-b-testing', + to: '/guides/a-b-testing', }, { label: 'Feature management', diff --git a/website/sidebars.ts b/website/sidebars.ts index 4adc7be2b9..e6a4c007ac 100644 --- a/website/sidebars.ts +++ b/website/sidebars.ts @@ -338,7 +338,7 @@ const sidebars: SidebarsConfig = { collapsed: true, link: { type: 'doc', - id: 'feature-flag-tutorials/react/implementing-feature-flags', + id: 'guides/language-specific-tutorials/react/implementing-feature-flags', }, items: [ { @@ -346,13 +346,13 @@ const sidebars: SidebarsConfig = { label: 'React', link: { type: 'doc', - id: 'feature-flag-tutorials/react/implementing-feature-flags', + id: 'guides/language-specific-tutorials/react/implementing-feature-flags', }, items: [ { type: 'doc', label: 'Examples', - id: 'feature-flag-tutorials/react/examples', + id: 'guides/language-specific-tutorials/react/examples', }, ], }, @@ -361,18 +361,18 @@ const sidebars: SidebarsConfig = { label: 'Java', link: { type: 'doc', - id: 'feature-flag-tutorials/java/implementing-feature-flags', + id: 'guides/language-specific-tutorials/java/implementing-feature-flags', }, items: [ { type: 'doc', label: 'Spring Boot', - id: 'feature-flag-tutorials/java/spring-boot-implementing-feature-flags', + id: 'guides/language-specific-tutorials/java/spring-boot-implementing-feature-flags', }, { type: 'doc', label: 'Spring Boot Examples', - id: 'feature-flag-tutorials/java/spring-boot-examples', + id: 'guides/language-specific-tutorials/java/spring-boot-examples', }, ], }, @@ -381,63 +381,63 @@ const sidebars: SidebarsConfig = { label: 'Python', link: { type: 'doc', - id: 'feature-flag-tutorials/python/implementing-feature-flags', + id: 'guides/language-specific-tutorials/python/implementing-feature-flags', }, items: [ { type: 'doc', label: 'Python Examples', - id: 'feature-flag-tutorials/python/examples', + id: 'guides/language-specific-tutorials/python/examples', }, { type: 'doc', label: 'Django Tutorial', - id: 'feature-flag-tutorials/django/implementing-feature-flags-django', + id: 'guides/language-specific-tutorials/django/implementing-feature-flags-django', }, { type: 'doc', label: 'Django Examples', - id: 'feature-flag-tutorials/django/django-examples', + id: 'guides/language-specific-tutorials/django/django-examples', }, ], }, { type: 'doc', label: 'Next.js', - id: 'feature-flag-tutorials/nextjs/implementing-feature-flags-nextjs', + id: 'guides/language-specific-tutorials/nextjs/implementing-feature-flags-nextjs', }, { type: 'category', label: 'Go', link: { type: 'doc', - id: 'feature-flag-tutorials/golang/implementing-feature-flags-golang', + id: 'guides/language-specific-tutorials/golang/implementing-feature-flags-golang', }, items: [ { type: 'doc', label: 'Go Examples', - id: 'feature-flag-tutorials/golang/golang-examples', + id: 'guides/language-specific-tutorials/golang/golang-examples', }, ], }, { type: 'doc', label: 'JavaScript', - id: 'feature-flag-tutorials/javascript/implementing-feature-flags-js', + id: 'guides/language-specific-tutorials/javascript/implementing-feature-flags-js', }, { type: 'category', label: '.NET', link: { type: 'doc', - id: 'feature-flag-tutorials/dotnet/implementing-feature-flags-dotnet', + id: 'guides/language-specific-tutorials/dotnet/implementing-feature-flags-dotnet', }, items: [ { type: 'doc', label: 'Examples', - id: 'feature-flag-tutorials/dotnet/dotnet-examples', + id: 'guides/language-specific-tutorials/dotnet/dotnet-examples', }, ], }, @@ -446,68 +446,68 @@ const sidebars: SidebarsConfig = { label: 'iOS', link: { type: 'doc', - id: 'feature-flag-tutorials/ios/implementing-feature-flags-ios', + id: 'guides/language-specific-tutorials/ios/implementing-feature-flags-ios', }, items: [ { type: 'doc', label: 'Examples', - id: 'feature-flag-tutorials/ios/examples', + id: 'guides/language-specific-tutorials/ios/examples', }, ], }, { type: 'doc', label: 'Serverless', - id: 'feature-flag-tutorials/serverless/implementing-feature-flags-in-aws-lambda', + id: 'guides/language-specific-tutorials/serverless/implementing-feature-flags-in-aws-lambda', }, { type: 'category', label: 'Rust', link: { type: 'doc', - id: 'feature-flag-tutorials/rust/implementing-feature-flags-rust', + id: 'guides/language-specific-tutorials/rust/implementing-feature-flags-rust', }, items: [ { type: 'doc', label: 'Examples', - id: 'feature-flag-tutorials/rust/rust-examples', + id: 'guides/language-specific-tutorials/rust/rust-examples', }, ], }, { type: 'doc', label: 'Flutter', - id: 'feature-flag-tutorials/flutter/a-b-testing', + id: 'guides/language-specific-tutorials/flutter/a-b-testing', }, { type: 'doc', label: 'SvelteKit', - id: 'feature-flag-tutorials/sveltekit/implementing-feature-flags-sveltekit', + id: 'guides/language-specific-tutorials/sveltekit/implementing-feature-flags-sveltekit', }, { type: 'category', label: 'Ruby', link: { type: 'doc', - id: 'feature-flag-tutorials/ruby/implementing-feature-flags-ruby', + id: 'guides/language-specific-tutorials/ruby/implementing-feature-flags-ruby', }, items: [ { type: 'doc', label: 'Ruby Examples', - id: 'feature-flag-tutorials/ruby/ruby-examples', + id: 'guides/language-specific-tutorials/ruby/ruby-examples', }, { type: 'doc', label: 'Rails Tutorial', - id: 'feature-flag-tutorials/rails/implementing-feature-flags-rails', + id: 'guides/language-specific-tutorials/rails/implementing-feature-flags-rails', }, { type: 'doc', label: 'Rails Examples', - id: 'feature-flag-tutorials/rails/rails-examples', + id: 'guides/language-specific-tutorials/rails/rails-examples', }, ], }, diff --git a/website/docs/feature-flag-tutorials/dotnet/diagram.png b/website/static/img/dotnet-guide-diagram.png similarity index 100% rename from website/docs/feature-flag-tutorials/dotnet/diagram.png rename to website/static/img/dotnet-guide-diagram.png diff --git a/website/docs/feature-flag-tutorials/golang/diagram.png b/website/static/img/golang-guide-diagram.png similarity index 100% rename from website/docs/feature-flag-tutorials/golang/diagram.png rename to website/static/img/golang-guide-diagram.png diff --git a/website/docs/feature-flag-tutorials/javascript/corgi-site.png b/website/static/img/javascript-guide-corgi-site.png similarity index 100% rename from website/docs/feature-flag-tutorials/javascript/corgi-site.png rename to website/static/img/javascript-guide-corgi-site.png diff --git a/website/docs/feature-flag-tutorials/javascript/diagram.png b/website/static/img/javascript-guide-diagram.png similarity index 100% rename from website/docs/feature-flag-tutorials/javascript/diagram.png rename to website/static/img/javascript-guide-diagram.png diff --git a/website/docs/feature-flag-tutorials/javascript/template.png b/website/static/img/javascript-guide-template.png similarity index 100% rename from website/docs/feature-flag-tutorials/javascript/template.png rename to website/static/img/javascript-guide-template.png diff --git a/website/docs/feature-flag-tutorials/rails/blog-app.png b/website/static/img/rails-guide-blog-app.png similarity index 100% rename from website/docs/feature-flag-tutorials/rails/blog-app.png rename to website/static/img/rails-guide-blog-app.png diff --git a/website/docs/feature-flag-tutorials/rails/diagram.png b/website/static/img/rails-guide-diagram.png similarity index 100% rename from website/docs/feature-flag-tutorials/rails/diagram.png rename to website/static/img/rails-guide-diagram.png diff --git a/website/docs/feature-flag-tutorials/rails/enable-ff.png b/website/static/img/rails-guide-enable-ff.png similarity index 100% rename from website/docs/feature-flag-tutorials/rails/enable-ff.png rename to website/static/img/rails-guide-enable-ff.png diff --git a/website/docs/feature-flag-tutorials/ruby/50-gradual.png b/website/static/img/ruby-guide-50-gradual.png similarity index 100% rename from website/docs/feature-flag-tutorials/ruby/50-gradual.png rename to website/static/img/ruby-guide-50-gradual.png diff --git a/website/docs/feature-flag-tutorials/ruby/diagram.png b/website/static/img/ruby-guide-diagram.png similarity index 100% rename from website/docs/feature-flag-tutorials/ruby/diagram.png rename to website/static/img/ruby-guide-diagram.png diff --git a/website/docs/feature-flag-tutorials/ruby/enable-ff.png b/website/static/img/ruby-guide-enable-ff.png similarity index 100% rename from website/docs/feature-flag-tutorials/ruby/enable-ff.png rename to website/static/img/ruby-guide-enable-ff.png diff --git a/website/docs/feature-flag-tutorials/ruby/enable-impression-data.png b/website/static/img/ruby-guide-enable-impression-data.png similarity index 100% rename from website/docs/feature-flag-tutorials/ruby/enable-impression-data.png rename to website/static/img/ruby-guide-enable-impression-data.png diff --git a/website/docs/feature-flag-tutorials/ruby/event-logs.png b/website/static/img/ruby-guide-event-logs.png similarity index 100% rename from website/docs/feature-flag-tutorials/ruby/event-logs.png rename to website/static/img/ruby-guide-event-logs.png diff --git a/website/docs/feature-flag-tutorials/ruby/flag-settings.png b/website/static/img/ruby-guide-flag-settings.png similarity index 100% rename from website/docs/feature-flag-tutorials/ruby/flag-settings.png rename to website/static/img/ruby-guide-flag-settings.png diff --git a/website/docs/feature-flag-tutorials/ruby/graphql-ff.png b/website/static/img/ruby-guide-graphql-ff.png similarity index 100% rename from website/docs/feature-flag-tutorials/ruby/graphql-ff.png rename to website/static/img/ruby-guide-graphql-ff.png diff --git a/website/docs/feature-flag-tutorials/ruby/new-ff.png b/website/static/img/ruby-guide-new-ff.png similarity index 100% rename from website/docs/feature-flag-tutorials/ruby/new-ff.png rename to website/static/img/ruby-guide-new-ff.png diff --git a/website/docs/feature-flag-tutorials/ruby/strategy.png b/website/static/img/ruby-guide-strategy.png similarity index 100% rename from website/docs/feature-flag-tutorials/ruby/strategy.png rename to website/static/img/ruby-guide-strategy.png diff --git a/website/docs/feature-flag-tutorials/rust/diagram.png b/website/static/img/rust-guide-diagram.png similarity index 100% rename from website/docs/feature-flag-tutorials/rust/diagram.png rename to website/static/img/rust-guide-diagram.png diff --git a/website/docs/feature-flag-tutorials/rust/enable-ff.png b/website/static/img/rust-guide-enable-ff.png similarity index 100% rename from website/docs/feature-flag-tutorials/rust/enable-ff.png rename to website/static/img/rust-guide-enable-ff.png diff --git a/website/docs/feature-flag-tutorials/rust/input.png b/website/static/img/rust-guide-input.png similarity index 100% rename from website/docs/feature-flag-tutorials/rust/input.png rename to website/static/img/rust-guide-input.png diff --git a/website/docs/feature-flag-tutorials/rust/webp-image-in-folder.png b/website/static/img/rust-guide-webp-image-in-folder.png similarity index 100% rename from website/docs/feature-flag-tutorials/rust/webp-image-in-folder.png rename to website/static/img/rust-guide-webp-image-in-folder.png diff --git a/website/vercel.json b/website/vercel.json index 6685a47096..b76f637180 100644 --- a/website/vercel.json +++ b/website/vercel.json @@ -1330,6 +1330,251 @@ "source": "/understanding-unleash/the-anatomy-of-unleash", "destination": "/reference/core-concepts", "permanent": true + }, + { + "source": "/feature-flag-tutorials/django", + "destination": "/guides/implement-feature-flags-in-django", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/django/implementing-feature-flags-django", + "destination": "/guides/implement-feature-flags-in-django", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/django/examples", + "destination": "/guides/feature-flag-examples-django", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/django/django-examples", + "destination": "/guides/feature-flag-examples-django", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/dotnet", + "destination": "/guides/implement-feature-flags-in-dotnet", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/dotnet/implementing-feature-flags-dotnet", + "destination": "/guides/implement-feature-flags-in-dotnet", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/dotnet/examples", + "destination": "/guides/feature-flag-examples-dotnet", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/dotnet/dotnet-examples", + "destination": "/guides/feature-flag-examples-dotnet", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/go", + "destination": "/guides/implement-feature-flags-in-golang", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/golang", + "destination": "/guides/implement-feature-flags-in-golang", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/golang/implementing-feature-flags-golang", + "destination": "/guides/implement-feature-flags-in-golang", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/golang/examples", + "destination": "/guides/feature-flag-examples-golang", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/golang/golang-examples", + "destination": "/guides/feature-flag-examples-golang", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/ios", + "destination": "/guides/implement-feature-flags-in-ios", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/ios/implementing-feature-flags-ios", + "destination": "/guides/implement-feature-flags-in-ios", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/ios/examples", + "destination": "/guides/feature-flag-examples-ios", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/java", + "destination": "/guides/implement-feature-flags-in-java", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/java/implementing-feature-flags", + "destination": "/guides/implement-feature-flags-in-java", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/java/spring-boot-implementing-feature-flags", + "destination": "/guides/implement-feature-flags-in-spring-boot", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/java/spring-boot-examples", + "destination": "/guides/feature-flag-examples-spring-boot", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/javascript", + "destination": "/guides/implement-feature-flags-in-javascript", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/javascript/implementing-feature-flags-js", + "destination": "/guides/implement-feature-flags-in-javascript", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/nextjs", + "destination": "/guides/implement-feature-flags-in-nextjs", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/nextjs/implementing-feature-flags-nextjs", + "destination": "/guides/implement-feature-flags-in-nextjs", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/python", + "destination": "/guides/implement-feature-flags-in-python", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/python/implementing-feature-flags", + "destination": "/guides/implement-feature-flags-in-python", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/python/examples", + "destination": "/guides/feature-flag-examples-python", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/rails", + "destination": "/guides/implement-feature-flags-in-rails", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/rails/implementing-feature-flags-rails", + "destination": "/guides/implement-feature-flags-in-rails", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/rails/examples", + "destination": "/guides/feature-flag-examples-rails", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/rails/rails-examples", + "destination": "/guides/feature-flag-examples-rails", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/react", + "destination": "/guides/implement-feature-flags-in-react", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/react/implementing-feature-flags", + "destination": "/guides/implement-feature-flags-in-react", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/react/examples", + "destination": "/guides/feature-flag-examples-react", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/ruby", + "destination": "/guides/implement-feature-flags-in-ruby", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/ruby/implementing-feature-flags-ruby", + "destination": "/guides/implement-feature-flags-in-ruby", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/ruby/examples", + "destination": "/guides/feature-flag-examples-ruby", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/ruby/ruby-examples", + "destination": "/guides/feature-flag-examples-ruby", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/rust", + "destination": "/guides/implement-feature-flags-in-rust", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/rust/implementing-feature-flags-rust", + "destination": "/guides/implement-feature-flags-in-rust", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/rust/examples", + "destination": "/guides/feature-flag-examples-rust", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/rust/rust-examples", + "destination": "/guides/feature-flag-examples-rust", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/serverless/lambda", + "destination": "/guides/implement-feature-flags-in-aws-lambda", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/serverless/implementing-feature-flags-in-aws-lambda", + "destination": "/guides/implement-feature-flags-in-aws-lambda", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/spring-boot", + "destination": "/guides/implement-feature-flags-in-spring-boot", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/spring-boot/examples", + "destination": "/guides/feature-flag-examples-spring-boot", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/sveltekit", + "destination": "/guides/implement-feature-flags-in-sveltekit", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/sveltekit/implementing-feature-flags-sveltekit", + "destination": "/guides/implement-feature-flags-in-sveltekit", + "permanent": true + }, + { + "source": "/feature-flag-tutorials/flutter/a-b-testing", + "destination": "/guides/implement-ab-test-in-flutter", + "permanent": true } ] }