diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000..c0e643829
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,35 @@
+# Usage:
+# make staging # channel = current git branch, expires in 7d
+# make staging CHANNEL=my-channel # custom channel name
+# make staging CHANNEL=my-channel EXPIRES=14d
+# make build # just build the site
+# make deploy-staging # deploy without rebuilding
+
+SHELL := /usr/bin/env bash
+.SHELLFLAGS := -eu -o pipefail -c
+
+BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
+CHANNEL ?= $(BRANCH)
+EXPIRES ?= 7d
+
+# Firebase channel IDs must match [a-zA-Z0-9_-]
+SAFE_CHANNEL := $(shell echo "$(CHANNEL)" | tr '/' '-' | tr -c 'a-zA-Z0-9_-' '-' | sed 's/-\+/-/g; s/^-//; s/-$$//')
+
+.PHONY: staging build deploy-staging check-firebase
+
+staging: build deploy-staging
+
+build:
+ npm run build
+
+deploy-staging: check-firebase
+ @echo "Branch: $(BRANCH)"
+ @echo "Channel: $(SAFE_CHANNEL)"
+ @echo "Expires: $(EXPIRES)"
+ firebase hosting:channel:deploy "$(SAFE_CHANNEL)" --expires "$(EXPIRES)"
+
+check-firebase:
+ @command -v firebase >/dev/null 2>&1 || { \
+ echo "firebase CLI not found. Install with: npm install -g firebase-tools" >&2; \
+ exit 1; \
+ }
diff --git a/README.md b/README.md
index 9f1b78360..196c1549d 100644
--- a/README.md
+++ b/README.md
@@ -28,6 +28,21 @@ You may want to run the docs site locally to test and visualize changes you are
1. **Install Dependencies:** Run **`npm install`** in your terminal to install the necessary dependencies.
2. **Preview Changes:** To see your changes in real-time as you edit the files, you can run a local development server. This server will host your website and reflect the latest changes. Use the command **`npm run start`**.
+## Deploying a Staging Preview
+To share your branch with reviewers before merging, deploy it to a Firebase Hosting preview channel. This builds the site and publishes it to a temporary URL (defaults to a 7-day expiry).
+
+```bash
+make staging # channel name = current git branch
+make staging CHANNEL=my-channel # custom channel name
+make staging CHANNEL=my-channel EXPIRES=14d
+```
+
+Other targets:
+- `make build` — build the site only
+- `make deploy-staging` — deploy without rebuilding
+
+Requires the Firebase CLI (`npm install -g firebase-tools`) and access to the `flutterflow-docs-82026` Firebase project.
+
## Ready to Contribute?
Your contributions are vital to keeping FlutterFlow's documentation clear, up-to-date, and helpful. We look forward to seeing your pull requests and are excited to welcome you into our community of contributors!
diff --git a/docs/accounts-billing/account-management.md b/docs/accounts-billing/account-management.md
index c0884fbe0..d963b6e74 100644
--- a/docs/accounts-billing/account-management.md
+++ b/docs/accounts-billing/account-management.md
@@ -76,7 +76,7 @@ Now, you are ready to log in with your new email address and password.

### How do I generate an API Token?
-An API token is required to use the [CLI](../testing-deployment-publishing/exporting-code/ff-cli.md) and the [Visual Studio Code Extension](../ff-concepts/adding-customization/vscode-extension.md)
+An API token is required to use the [CLI](../ff-concepts/advanced/flutterflow-cli/overview.md) and the [Visual Studio Code Extension](../ff-concepts/adding-customization/vscode-extension.md)
.
To create an API token tied to your account:
diff --git a/docs/ff-concepts/advanced/flutterflow-cli/_category_.json b/docs/ff-concepts/advanced/flutterflow-cli/_category_.json
new file mode 100644
index 000000000..4ffe689c9
--- /dev/null
+++ b/docs/ff-concepts/advanced/flutterflow-cli/_category_.json
@@ -0,0 +1,4 @@
+{
+ "label": "FlutterFlow CLI",
+ "position": 1
+}
\ No newline at end of file
diff --git a/docs/testing-deployment-publishing/exporting-code/ff-cli.md b/docs/ff-concepts/advanced/flutterflow-cli/exporting-projects.md
similarity index 79%
rename from docs/testing-deployment-publishing/exporting-code/ff-cli.md
rename to docs/ff-concepts/advanced/flutterflow-cli/exporting-projects.md
index 06aee5afa..d48ecba36 100644
--- a/docs/testing-deployment-publishing/exporting-code/ff-cli.md
+++ b/docs/ff-concepts/advanced/flutterflow-cli/exporting-projects.md
@@ -1,27 +1,14 @@
---
-slug: /exporting/ff-cli
-title: FlutterFlow CLI
+slug: /flutterflow-cli/exporting
+title: Exporting Projects
description: Learn how to download and manage your FlutterFlow projects locally using the FlutterFlow CLI.
tags: [CLI, Collaboration, FlutterFlow]
-sidebar_position: 1
+sidebar_position: 2
keywords: [CLI, Collaboration, FlutterFlow, Projects, Local Management]
---
-# FlutterFlow CLI
-
-The [FlutterFlow CLI](https://pub.dev/packages/flutterflow_cli) tool allows you to quickly and easily download your project files directly from FlutterFlow to your local machine.
-
-## Installation
-
-To use the FlutterFlow CLI, you first need to install it globally using Dart's package manager with the following command:
-
-```
-dart pub global activate flutterflow_cli
-```
-
-## Usage
-
+# Exporting Projects
Follow the steps below to export your project.
-### API Token
-To use the CLI, you'll need to create an API token and use it in your requests. See the documentation [here on how to generate an API token.](/accounts-billing/account-management)
-### CLI command details
+### Command Details
- If you wish to exclude assets from the download, use `-no-include-assets` in your command. This will download the project code without the assets. For example: `flutterflow export-code --project your_project_id --dest path_to_output_folde --no-include-assets --token your_token`
@@ -71,13 +56,13 @@ To use the CLI, you'll need to create an API token and use it in your requests.
| --[no]-parent-folder | Option to download the code into a subfolder instead of directly into the directory. | False |
| --[no]-as-module | Whether to generate the project as a Flutter module. | False |
| --[no]-as-debug | Whether to generate the project with debug logging to be able to use FlutterFlow Debug Panel inside the DevTools. | False |
-| --project-environment | Which [development environment](../development-environments/development-environments.md) to be used. If empty, the current environment in the project will be downloaded. | Current environment |
+| --project-environment | Which [development environment](../../../testing-deployment-publishing/development-environments/development-environments.md) to be used. If empty, the current environment in the project will be downloaded. | Current environment |
-## Filtered exports
+### Filtered exports
If you are updating an existing project and do not want certain files to be overwritten during a code export, you can create a `.flutterflowignore` file in the root of your project directory. This file should contain a list of files to be ignored using globbing syntax.
-### Example:
+#### Example:
If your project is located at:
```
/Users/yourname/projects/my_flutterflow_app/
@@ -87,7 +72,7 @@ Then, place the `.flutterflowignore` file in:
/Users/yourname/projects/.flutterflowignore
```
-### Example `.flutterflowignore` contents:
+#### Example `.flutterflowignore` contents:
```
my_flutterflow_app/android/app/build.gradle # Prevents FlutterFlow from overwriting native Android build configuration
my_flutterflow_app/ios/Runner/Info.plist # Keeps iOS app metadata unchanged
diff --git a/docs/ff-concepts/advanced/flutterflow-cli/flutterflow-mcp.md b/docs/ff-concepts/advanced/flutterflow-cli/flutterflow-mcp.md
new file mode 100644
index 000000000..f3c639d48
--- /dev/null
+++ b/docs/ff-concepts/advanced/flutterflow-cli/flutterflow-mcp.md
@@ -0,0 +1,328 @@
+---
+slug: /flutterflow-cli/build
+title: Build with AI Agents
+description: Create and edit FlutterFlow projects from your terminal using your preferred AI coding agent.
+tags: [CLI, AI, MCP]
+sidebar_position: 3
+keywords: [CLI, Agentic AI, Projects, Local Management, MCP]
+---
+
+# Build with AI Agents
+
+The [FlutterFlow CLI](https://pub.dev/packages/flutterflow_cli) lets you create and edit FlutterFlow apps from the terminal using your own AI coding agent — Claude Code, Gemini CLI, Codex, or any MCP-compatible client. You describe what you want in plain English, the agent plans and applies the changes, and the result lands as a real FlutterFlow project you can open in the visual builder.
+
+A FlutterFlow project is the source of truth. The CLI is how you create or edit it from your local workspace.
+
+
+
+## Architecture
+
+`flutterflow ai init` creates a local **workspace** - a folder pre-configured with an MCP config file pointing at the FlutterFlow MCP server. When you launch your AI agent inside that folder, it discovers the MCP server and gains a set of tools that talk to FlutterFlow's cloud:
+
+1. You prompt the agent.
+2. The agent plans changes and calls the MCP server's tools.
+3. The MCP server applies those changes to your FlutterFlow project.
+4. You verify the result in the FlutterFlow visual builder.
+
+The workspace is just a folder on your disk. The actual project lives in FlutterFlow server.
+
+:::tip[What is MCP?]
+The [**Model Context Protocol**](https://modelcontextprotocol.io) is an open standard that lets AI agents call external tools. The FlutterFlow AI MCP server exposes FlutterFlow's project APIs to your agent so it can read and modify your project on your behalf.
+:::
+
+:::note[Remember]
+- **FlutterFlow CLI is not a replacement for the visual builder.** FlutterFlow is still faster for most visual work. FlutterFlow CLI is for precision, repeatability, and automation.
+- **FlutterFlow CLI doesn't execute your app.** It produces a FlutterFlow project, which you can test and run inside the FlutterFlow visual builder.
+:::
+
+:::info[Prerequisites]
+
+Before you start, make sure you have:
+
+- **FlutterFlow CLI installed.** See [**Installation**](./overview.md).
+- **A FlutterFlow API key.** See [**generating an API token**](../../../accounts-billing/account-management.md#how-do-i-generate-an-api-token).
+- **An MCP-compatible AI agent installed locally** — for example, [**Claude Code**](https://www.claude.com/product/claude-code), [**Gemini CLI**](https://github.com/google-gemini/gemini-cli), or [**Codex**](https://github.com/openai/codex).
+- **A FlutterFlow project ID** (only if you're editing an existing project).
+:::
+
+## Setup Workspace
+
+Open your terminal in the folder where you want the workspace to live, then run:
+
+```bash
+flutterflow ai init
+```
+
+This launches an interactive setup wizard. Walk through the prompts:
+
+1. **Workspace name.** A short, lowercase name with no spaces. This becomes the folder name for your project.
+ ```
+ Workspace name
+ Directory to scaffold the FlutterFlow AI workspace in.
+ > mindfly
+ ```
+2. **Environment.** Use ↑ / ↓ to highlight the FlutterFlow environment you want this workspace to target, then press **Enter**.
+3. **Existing project ID.** Press **Enter** with no input to create a new app, or paste an existing project ID to bind the workspace to it.
+ ```
+ Existing project ID to edit (press Enter to create a new app)
+ >
+ ```
+4. **FlutterFlow API key.** Paste your API key and press **Enter**. Input is masked.
+5. **Register MCP server with detected coding CLIs.** The wizard scans your `PATH` and offers to register the FlutterFlow AI MCP server with each agent it finds (Claude Code, Gemini CLI, Codex). Answer `Y` (default) for each one you plan to use.
+ ```
+ Register FlutterFlow AI MCP server with coding CLIs
+ Detected: claude, gemini, codex
+ Register with claude? [Y/n]
+ ```
+6. **Confirm.** The wizard prints a summary. Review it and press **Enter** (default `Y`) to proceed.
+ ```
+ Ready to create:
+ Workspace: mindfly
+ Project ID: (none — unlinked)
+ API key: set (***abcd)
+ Base URL: https://api.flutterflow.io (built-in for prod)
+ MCP CLIs: claude, gemini, codex
+
+ Proceed? [Y/n]
+ ```
+
+When the wizard finishes, you'll have a workspace folder ready for your agent. Depending on which CLIs you registered, the folder will contain one or more of:
+
+- `.mcp.json` — for Claude Code
+- `.gemini/settings.json` — for Gemini CLI
+- `.codex/config.toml` — for Codex
+
+Each file points the corresponding agent at the FlutterFlow AI MCP server.
+
+
+
+
+
+
+## Launch your Agent
+
+Move into the workspace and start your agent. The example below uses Claude Code; the same pattern applies to any agent you registered in the wizard — `cd` into the workspace and launch the agent's CLI.
+
+```bash
+cd mindfly
+claude
+```
+
+The first time the agent opens the workspace, it detects the new MCP server and asks you to approve it. The exact prompt varies by agent — Claude Code's looks like this:
+
+```
+New MCP server found in .mcp.json: flutterflow_ai
+
+MCP servers may execute code or access system resources.
+All tool calls require approval.
+
+> 1. Use this and all future MCP servers in this project
+ 2. Use this MCP server
+ 3. Continue without using this MCP server
+```
+
+Choose **option 1** to approve the FlutterFlow AI MCP server (and any others added to this workspace later) without being asked again.
+
+> **Why approve?** Without the MCP server, the agent can edit local files but can't push changes to your FlutterFlow project. With it approved, the agent has the same tools you'd run yourself from the CLI.
+
+
+
+
+
+
+## Generate a New App
+
+With the agent connected, describe the app you want at the prompt:
+
+```
+> create a minimalist meditation app
+```
+
+Phrase it however you like — `a recipe-sharing app with a social feed`, `a habit tracker with streaks`, `a tip calculator for restaurants`. The agent plans the app, generates the changes, pushes them to FlutterFlow through the MCP server, and reports back. Open FlutterFlow in your browser and navigate to the project — the generated app will be reflected in the visual builder. From there you can keep refining visually or send another prompt to the agent.
+
+Once the app exists, the workspace is bound to it. Follow-up prompts in the same session are treated as edits, not new generations, you'll see the agent acknowledge the switch with something like:
+
+```
+The project is bound, so I'll switch to edit mode.
+Let me check the workspace and read the edit template.
+```
+
+From that point on, the same rules apply as when [editing an existing project](#edit-an-existing-project) - concurrency, branches, scope, and refreshing context.
+
+
+
+
+
+
+## Edit an Existing Project
+
+:::info[Prerequisite]
+Have your **project ID** ready. Open the project in the FlutterFlow editor. The project ID is the path segment after `/project/` in the URL.
+:::
+
+Editing an existing project follows the same flow as [creating a new one](#setup-workspace) — you run `flutterflow ai init` to scaffold a workspace, then drive changes from your agent. The only difference is one step in the wizard: when it asks for an **existing project ID**, paste yours instead of pressing Enter:
+
+```
+Existing project ID to edit (press Enter to create a new app)
+> mindfly-c9lbgr
+```
+
+The workspace is now bound to that project. `cd` into the workspace folder, [launch your agent](#launch-your-agent), and describe the changes you want — "add a profile screen", "switch the primary color to teal", "wire up the login form to Firebase Auth". The agent reads the current project, plans the change, and pushes it through the MCP server. Open FlutterFlow in your browser to verify.
+
+
+
+
+
+
+
+### Concurrent Edits with Builder
+
+You can edit visually while an agent is working, but writes use **optimistic concurrency**: when the agent pushes, the server checks the project's last-modified timestamp against the agent's snapshot. If anyone else (you in the visual builder, a teammate, or another agent) modified the project in between, the push is rejected. The agent will re-read the latest state and retry — which may also mean re-planning, if your change conflicts with what it was about to do.
+
+So nothing gets silently overwritten, but expect occasional retries when you and the agent are editing the same project at once.
+
+
+### Agent Edit Scope
+
+**In scope**
+
+- Pages, components, app state, theme, navigation, action blocks, app events
+- Custom functions, actions, widgets, classes, and enums
+- API endpoints, queries, custom data types and enums
+- Pub and library dependencies, design tokens, GenUI catalog, Firebase Auth wiring
+
+**Out of scope**
+
+- Anything outside the FlutterFlow project itself — running the app, deploying it, creating Firebase projects, managing secrets, App Store submissions.
+
+## MCP Server Tools
+
+### Refreshing Stale Context
+
+If you've made visual edits since the agent last read the project, the agent's local snapshot is stale. Two ways to fix it:
+
+- **Ask the agent to refresh.** Most agents call the MCP `refreshContext` tool on their own when they detect drift, but you can prompt explicitly: "refresh the project context."
+- **Run it from the CLI.** `flutterflow ai context-check` reports whether the local snapshot is behind, and `flutterflow ai refresh-context
` pulls the latest.
+
+## Branches and Rollback
+
+:::warning[Agents commit to main]
+Workspaces always target the project's **main branch**. There's no flag to point them at a feature branch. Every successful push creates a commit on main, so for high-stakes projects, work on a clone, make sure version history is enabled, or coordinate with your team before letting an agent run.
+:::
+
+To roll back, use FlutterFlow's project version history in the visual builder — the same mechanism you'd use for visual edits. Each agent push lands as a commit there with whatever commit message the agent supplied.
+
+
+## Switching Projects
+
+A workspace is bound to one project. To work on a different project, run `flutterflow ai init` in a **new** folder and link it to the new project ID. `init` refuses to run in a non-empty directory, so it won't re-bind an existing workspace.
+
+## MCP tools
+
+Run these from inside a FlutterFlow AI workspace. Your agent calls them via the MCP server; you can also run them directly in the terminal.
+
+| Category | Command | What it does |
+| --- | --- | --- |
+| **Build** | `run` | Apply changes to your FlutterFlow project. |
+| | `validate` | Dry-run a change without pushing it. |
+| **Explore** | `inspect` | Whole-project summary or a scoped view of structure. |
+| | `resources` | List reusable project and library resources. |
+| | `search` | Search the project for a name or identifier. |
+| | `status` | Show workspace and project state. |
+| **AI integration** | `mcp` | Register the FlutterFlow MCP server with Claude Code, Codex, Gemini CLI, Cursor, Copilot, and other MCP-aware clients. |
+| **Plan & audit** | `plan` | Capture intent before a run. |
+| | `trace` | Replay a prior run. |
+| | `history` | List prior commands and outcomes. |
+| **Diagnose** | `doctor` | Check for common workspace problems. |
+| | `context-check` | Report whether the local snapshot is behind the live project. |
+| | `precache` | Pre-load project context. |
+| **Stay current** | `upgrade` | Update the FlutterFlow CLI tooling. |
+| | `refresh-workspace` | Refresh the workspace's local config. |
+| | `refresh-context` | Pull the latest project state into the local snapshot. |
+| **Learn** | `docs [topic]` | Open FlutterFlow AI documentation for a topic. |
+
+Run `flutterflow ai --help` from inside a workspace for the full command list and per-command flags. When the agent invokes a command via MCP, every call is subject to your agent's approval rules.
diff --git a/docs/ff-concepts/advanced/flutterflow-cli/overview.md b/docs/ff-concepts/advanced/flutterflow-cli/overview.md
new file mode 100644
index 000000000..9ea33eba9
--- /dev/null
+++ b/docs/ff-concepts/advanced/flutterflow-cli/overview.md
@@ -0,0 +1,36 @@
+---
+slug: /flutterflow-cli
+title: Installation
+description: Learn how to download and manage your FlutterFlow projects locally using the FlutterFlow CLI.
+tags: [CLI, Collaboration, FlutterFlow]
+sidebar_position: 1
+keywords: [CLI, Collaboration, FlutterFlow, Projects, Local Management]
+---
+
+
+# FlutterFlow CLI
+The [FlutterFlow CLI](https://pub.dev/packages/flutterflow_cli) lets you manage FlutterFlow projects from the command line. You can create new projects, modify existing ones using AI agents, and download them to your local machine.
+
+## Installation
+
+To use the FlutterFlow CLI, you first need to install it globally using Dart's package manager with the following command:
+
+```
+dart pub global activate flutterflow_cli
+```
+
+### Get API Token
+To use the CLI, you'll need to create an API token and use it in your requests. See the documentation [here on how to generate an API token.](../../../accounts-billing/account-management.md#how-do-i-generate-an-api-token)
+
+
+## FAQ
+
+I am getting an error as FormatException: Missing argument for…
+
+This error likely indicates that you haven't correctly entered the command option along with its value. Double-check that all required information has been entered. If everything is correct and you're still encountering the error, it might be due to using an outdated version of the FlutterFlow CLI. To resolve this, you can update to the latest version by running the installation command:
+```
+dart pub global activate flutterflow_cli
+```
+This should update the CLI and fix the issue.
+
+
diff --git a/docs/ff-concepts/advanced/imgs/flutterflow-ff-builder-using-same-ff-app.avif b/docs/ff-concepts/advanced/imgs/flutterflow-ff-builder-using-same-ff-app.avif
new file mode 100644
index 000000000..060fb97ea
Binary files /dev/null and b/docs/ff-concepts/advanced/imgs/flutterflow-ff-builder-using-same-ff-app.avif differ
diff --git a/docs/ff-integrations/ads/admob.md b/docs/ff-integrations/ads/admob.md
index 18d3fb283..988376a77 100644
--- a/docs/ff-integrations/ads/admob.md
+++ b/docs/ff-integrations/ads/admob.md
@@ -159,7 +159,7 @@ While building your app, clicking on too many ads may cause your AdMob account t
### Testing AdBanner
-Ads cannot be tested in Test or Run Mode. They can only be tested on a real device or emulator. To do this, you can use [Local run](../../testing-deployment-publishing/running-your-app/local-run.md) or [download the code](../../testing-deployment-publishing/exporting-code/ff-cli.md) and run it in your IDE.
+Ads cannot be tested in Test or Run Mode. They can only be tested on a real device or emulator. To do this, you can use [Local run](../../testing-deployment-publishing/running-your-app/local-run.md) or [download the code](../../ff-concepts/advanced/flutterflow-cli/exporting-projects.md) and run it in your IDE.
## Interstitial Ad
diff --git a/docs/ff-integrations/firebase/app-check.md b/docs/ff-integrations/firebase/app-check.md
index 02c90bd2a..6010f6ef4 100644
--- a/docs/ff-integrations/firebase/app-check.md
+++ b/docs/ff-integrations/firebase/app-check.md
@@ -180,7 +180,7 @@ To add *Firebase App Check* to your app:
5. You might want to see if it works on a real device or an emulator. To run on a real device, you can set the **Android Provider** to **Play Integrity** and to run on an emulator, set it to **Debug,** and then try checking it by downloading the APK.
1. If it doesn't work for *Play Integrity*, ensure you have enabled the Play Integrity API. See how to do it in step 2 [here](https://firebase.google.com/docs/app-check/android/play-integrity-provider?authuser=1&hl=en#project-setup).
- 2. If it doesn't work for *Debug*, you can try [downloading the code](../../testing-deployment-publishing/exporting-code/ff-cli.md), following the instructions [here](https://firebase.google.com/docs/app-check/flutter/debug-provider#android), and running it locally.
+ 2. If it doesn't work for *Debug*, you can try [downloading the code](../../ff-concepts/advanced/flutterflow-cli/exporting-projects.md), following the instructions [here](https://firebase.google.com/docs/app-check/flutter/debug-provider#android), and running it locally.
:::tip
To add the App Check on the app with the non-Firebase (i.e., your self-hosted) backend, follow the instructions [**here**](https://firebase.google.com/docs/app-check/flutter/custom-resource).
diff --git a/docs/ff-integrations/firebase/crashlytics.md b/docs/ff-integrations/firebase/crashlytics.md
index 38bfbd9c3..9da8caf0e 100644
--- a/docs/ff-integrations/firebase/crashlytics.md
+++ b/docs/ff-integrations/firebase/crashlytics.md
@@ -19,6 +19,6 @@ You can see all the logged errors/crashes inside the Crashlytics dashboard of yo

1. Click on the issue name to see its details.
-2. To test the crash on your app, [download the app](../../testing-deployment-publishing/exporting-code/ff-cli.md), add a code that throws an error, and run it on a mobile device or emulator with an active internet connection.
+2. To test the crash on your app, [download the app](../../ff-concepts/advanced/flutterflow-cli/exporting-projects.md), add a code that throws an error, and run it on a mobile device or emulator with an active internet connection.

\ No newline at end of file
diff --git a/docs/ff-integrations/payments/stripe.md b/docs/ff-integrations/payments/stripe.md
index 0d5c6e1db..05ad02552 100644
--- a/docs/ff-integrations/payments/stripe.md
+++ b/docs/ff-integrations/payments/stripe.md
@@ -241,7 +241,7 @@ You can test Stripe payments on mobile and the Web before deployment. To do that
1. Go to the FlutterFlow project and navigate to **Settings and Integrations** > **In App Purchases & Subscriptions** > **Stripe**.
2. Make sure the **Is Production** is disabled.
3. Make sure you have entered the correct **Test Credentials,** such as **Publishable Key** and **Secret Key**.
-4. [Download](../../testing-deployment-publishing/exporting-code/ff-cli.md) and [run](../../testing-deployment-publishing/running-your-app/run-your-app.md) your project..
+4. [Download](../../ff-concepts/advanced/flutterflow-cli/exporting-projects.md) and [run](../../testing-deployment-publishing/running-your-app/run-your-app.md) your project..
5. To test the purchase, you can use any of these [basic test card numbers](https://stripe.com/docs/testing#cards).
### 5. Releasing to Production
diff --git a/docs/intro/ff-ui/toolbar.md b/docs/intro/ff-ui/toolbar.md
index 4119ffd63..780289928 100644
--- a/docs/intro/ff-ui/toolbar.md
+++ b/docs/intro/ff-ui/toolbar.md
@@ -102,7 +102,7 @@ The Developer Menu provides developers with access to tools such as code viewing
4. **Download APK**: Use this to generate a release build of your Android app. It will automatically download the `.apk` file after the building process is complete.
-5. **FlutterFlow CLI**: You can also download the code using *[FlutterFlow CLI](https://pub.dev/packages/flutterflow_cli)*. See instructions [here](../../testing-deployment-publishing/exporting-code/ff-cli.md).
+5. **FlutterFlow CLI**: You can also download the code using *[FlutterFlow CLI](https://pub.dev/packages/flutterflow_cli)*. See instructions [here](../../ff-concepts/advanced/flutterflow-cli/exporting-projects.md).
:::note
_Connect GitHub Repo_, _Download Code_, and _Download APK_ features requires a [**paid plan**](https://flutterflow.io/pricing).
diff --git a/docs/resources/projects/settings/general-settings.md b/docs/resources/projects/settings/general-settings.md
index 1569444f7..e4367d24b 100644
--- a/docs/resources/projects/settings/general-settings.md
+++ b/docs/resources/projects/settings/general-settings.md
@@ -132,7 +132,7 @@ To add the app launcher icon:
2. Under the **General** section, select **App Assets**.
3. Under the **Launcher Icon** section, click on the **Upload Image** button.
4. By clicking on the **Unset** dropdown menu, you can also select from the already uploaded images to the Project Media/Assets.
-5. [Download the project](../../../testing-deployment-publishing/exporting-code/ff-cli.md) and run the following command in your terminal to generate the launcher icon:
+5. [Download the project](../../../ff-concepts/advanced/flutterflow-cli/exporting-projects.md) and run the following command in your terminal to generate the launcher icon:
`flutter pub run flutter_launcher_icons:main`
@@ -151,7 +151,7 @@ Here are the steps to add adaptive icons:
2. Return to FlutterFlow and navigate to **Setting and Integrations > General** > **App Assets > Android Adaptive Icon.**
1. Upload the **Foreground Icon**. If you use the online tool, you'll find it inside the `IconKitchen-Output > android > res > mipmap-xxxhdpi > ic_launcher_foreground.png`.
2. For **Background Type**, you can either set the **Color** or **Image**. It's recommended to use a color that aligns with your app's branding for a cohesive look.
-3. [Download the project](../../../testing-deployment-publishing/exporting-code/ff-cli.md) and run the following command in your terminal to generate the launcher icon:
+3. [Download the project](../../../ff-concepts/advanced/flutterflow-cli/exporting-projects.md) and run the following command in your terminal to generate the launcher icon:
`flutter pub run flutter_launcher_icons:main`
diff --git a/docs/testing-deployment-publishing/exporting-code/push-to-github.md b/docs/testing-deployment-publishing/exporting-code/push-to-github.md
index 9ae3af489..5f5b5bc44 100644
--- a/docs/testing-deployment-publishing/exporting-code/push-to-github.md
+++ b/docs/testing-deployment-publishing/exporting-code/push-to-github.md
@@ -152,5 +152,5 @@ After testing the changes in `develop`:
2. Once reviewed and merged, deploy your application from the `main` branch using FlutterFlow’s deployment features.
:::tip
-Also, see how you can download the code using [**FlutterFlow CLI**](ff-cli) and [**Local Run**](../running-your-app/local-run.md).
+Also, see how you can download the code using [**FlutterFlow CLI**](../../ff-concepts/advanced/flutterflow-cli/overview.md) and [**Local Run**](../running-your-app/local-run.md).
:::
\ No newline at end of file
diff --git a/docs/testing-deployment-publishing/running-your-app/automated-tests.md b/docs/testing-deployment-publishing/running-your-app/automated-tests.md
index 09cdc734c..ce4813a7b 100644
--- a/docs/testing-deployment-publishing/running-your-app/automated-tests.md
+++ b/docs/testing-deployment-publishing/running-your-app/automated-tests.md
@@ -164,7 +164,7 @@ You can run tests on local devices or use the services like [Firebase Test Lab](
To run the tests locally:
-1. [Download the project code](../exporting-code/ff-cli.md).
+1. [Download the project code](../../ff-concepts/advanced/flutterflow-cli/exporting-projects.md).
2. Go to `your_project/integration_test/test.dart`.
3. To run a specific test, click the play button next to it. To execute all tests at once, double-click the play button next to `void main`.
4. Alternatively, you can use the terminal and enter the command: `flutter test integration_test/test.dart`."
diff --git a/docs/testing-deployment-publishing/running-your-app/local-run.md b/docs/testing-deployment-publishing/running-your-app/local-run.md
index 65a686162..46e59307b 100644
--- a/docs/testing-deployment-publishing/running-your-app/local-run.md
+++ b/docs/testing-deployment-publishing/running-your-app/local-run.md
@@ -212,7 +212,7 @@ Here’s how you do it:
To download your app code, you have two options:
-- Use the [FlutterFlow CLI](../exporting-code/ff-cli.md). (Recommended)
+- Use the [FlutterFlow CLI](../../ff-concepts/advanced/flutterflow-cli/exporting-projects.md). (Recommended)
- Alternatively, from the **Toolbar**, click on the **Developer Menu** > **Download Code**. This will download the *.zip* file. Extract the *.zip* file to view the contents of the project.
### 2. Setup Flutter SDK
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 104780f65..4feec30f4 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -45,10 +45,10 @@ const config: Config = {
// blogSidebarTitle: 'FlutterFlow Blog',
// blogSidebarCount: 'ALL'
// },
- gtag: {
+ gtag: process.env.NODE_ENV === 'production' ? {
trackingID: 'G-LC4SC6JY70',
anonymizeIP: true,
- },
+ } : undefined,
theme: {
customCss: './src/css/custom.css',
},
diff --git a/firebase.json b/firebase.json
index 6b362e431..268c7c27a 100644
--- a/firebase.json
+++ b/firebase.json
@@ -2447,6 +2447,16 @@
"source": "/resources/projects/settings/mcp-server",
"destination": "/",
"type": 301
+ },
+ {
+ "source": "/exporting/ff-cli",
+ "destination": "/flutterflow-cli",
+ "type": 301
+ },
+ {
+ "source": "/exporting/ff-cli#usage",
+ "destination": "/flutterflow-cli/exporting",
+ "type": 301
}
]
}