From 696c9a70ef1dcfa45c4b80bd703a41a30ab69163 Mon Sep 17 00:00:00 2001 From: ehsan shariati Date: Sun, 30 Aug 2026 13:33:16 -0400 Subject: [PATCH] docs: lead with the FxBlox web app, mark the mobile apps as being discontinued The FxBlox app now runs in the browser at https://docs.fx.land/fxblox-web/. Every setup path in the docs still told users to install a phone app. - fxblox-app.md: rewritten as a web-app-first walkthrough matching the real screens (welcome, browser check, identity, Bluetooth/LAN/hotspot, authorizer + format, Wi-Fi, finish), with four new screenshots. Adds "already set up from the phone?" (same password + wallet = same identity, no re-pairing), replaces the obsolete log-out-and-re-add loop with the multi-select flow, and keeps the store links in a clearly-labelled "Legacy mobile apps" section. Anchors #add-multiple-fxbloxes and #format-drive preserved for inbound links from join.md and fxblox-hardware-rk1.md; fixes the page's own broken #add-multiple-fxbloxs self-link. Version claims corrected to 2.0.1+. - mainnet-transition/: content made platform-neutral, file paths and every front-matter id unchanged so no URL moves. android-connected/-disconnected now split on Blox state rather than phone OS; ios.md says plainly that the web app cannot run on iOS (every iOS browser is WebKit, no Web Bluetooth or local-network access) and points to a desktop with Chrome or Edge. - disconnected-blox.md: "reinstall from your app store" becomes "Clear app storage"; Bluetooth recovery points at the web app's Settings > Bluetooth. - announcementBar, a "Web App" navbar item, and a sidebar link to the web app. - Smaller fixes in getting-started-testnet, fxblox-hardware-rpi, switch-chain and add-storage. FxFotos/FxFiles store links are deliberately untouched. Verified with a local docusaurus build (onBrokenLinks: throw) - passes. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01YJyqpFReP1wbz86nsqsoXq --- docs/functionyard/add-storage.md | 8 +- docs/functionyard/fxblox-app.md | 217 ++++++++++++------ .../hardware/fxblox-hardware-rpi.md | 4 +- .../mainnet-transition/android-connected.md | 40 ++-- .../android-disconnected.md | 33 ++- .../mainnet-transition/existing-testnet.md | 71 +++--- docs/functionyard/mainnet-transition/index.md | 48 ++-- docs/functionyard/mainnet-transition/ios.md | 92 ++++---- .../mainnet-transition/new-installation.md | 63 ++--- .../troubleshooting/disconnected-blox.md | 34 +-- .../troubleshooting/switch-chain.md | 2 +- docs/getting-started-testnet.md | 6 +- docusaurus.config.js | 11 + sidebars.js | 5 + static/img/fxblox-web/01-welcome.jpg | Bin 0 -> 31633 bytes static/img/fxblox-web/02-requirements.jpg | Bin 0 -> 23294 bytes static/img/fxblox-web/03-connect-blox.jpg | Bin 0 -> 24789 bytes static/img/fxblox-web/04-connect-existing.jpg | Bin 0 -> 23859 bytes 18 files changed, 360 insertions(+), 274 deletions(-) create mode 100644 static/img/fxblox-web/01-welcome.jpg create mode 100644 static/img/fxblox-web/02-requirements.jpg create mode 100644 static/img/fxblox-web/03-connect-blox.jpg create mode 100644 static/img/fxblox-web/04-connect-existing.jpg diff --git a/docs/functionyard/add-storage.md b/docs/functionyard/add-storage.md index a6f3b17..cec0c66 100644 --- a/docs/functionyard/add-storage.md +++ b/docs/functionyard/add-storage.md @@ -89,7 +89,7 @@ In the following commands, replace `sdx` with the device name(s) found in the ou 6. Assign your drive the `GPT` partition standard with `sudo parted /dev/sdx mklabel gpt` 7. Partition your drive with `sudo parted -a opt /dev/sdx mkpart primary ext4 0% 100%` 8. Format the newly created partition with `sudo mkfs.ext4 /dev/sdx1` -9. Wait for it to complete. Then restart FxBlox app. +9. Wait for it to complete. Then restart the FxBlox app (in the web app, reload the tab). 10. You should now see that your total maximum storage has increased by the size of the drive you installed. You may also need to hit the refresh button. If you have any issues, checkout the [Troubleshoot](#troubleshoot) section for more information. @@ -137,7 +137,7 @@ After partitioning is complete. Now we can format using the `e2fsprogs` command. ::: 19. Wait for it to complete and safely eject drive. 20. Connect your drive to the FxBlox. -21. **Close FxBlox app**. Now open your Fxblox app now and see your total maximum storage increase in the FxBlox app. +21. **Restart the FxBlox app** (in the web app, reload the tab; on the mobile app, close and re-open it). You should now see your total maximum storage increase. If the drive does not show within the next 5 minutes there maybe a variety of issues occurring. **Checkout the [Troubleshooting](#troubleshoot) section for more details.** @@ -192,12 +192,12 @@ Ext4 is a linux standard that Windows does not support without some third-party 11. Connect your drive to the FxBlox -12. Close FxBlox app if its currently opened, otherwise open your Fxblox app now and see your total maximum storage increase in the FxBlox app. +12. Restart the FxBlox app (in the web app, reload the tab; on the mobile app, close and re-open it) and see your total maximum storage increase. ## Troubleshoot - **Drive not recognized in Windows.** If your windows computer doesn't see the connected drive, try restarting your computer first. Then look into potentially installing drivers for the storage device. - **Storage capacity not updating** This could be for a variety of issues: - - Try closing/opening your app a couple of times, but also press the `retry` buttons a once or twice in between. + - Try reloading the app a couple of times (reload the tab in the web app), but also press the `retry` buttons a once or twice in between. - Restart the FxBlox by unplug-plugging it back in. - The usb3 drive is connected to a usb2 port. On a **FxBlox Lite**, the top two ports are USB2.0 and the bottom is USB3.0. On a **FxBlox Lite Plus**, the top port is USB2.0 and the bottom two are USB3.0. - **Additional storage devices not showing up under `Device` Tab.** This is a known bug, as of app version 1.6.2. Currently, newly added storage gets added to the total instead of as a separate device. diff --git a/docs/functionyard/fxblox-app.md b/docs/functionyard/fxblox-app.md index 71b09cc..d2d682b 100644 --- a/docs/functionyard/fxblox-app.md +++ b/docs/functionyard/fxblox-app.md @@ -3,114 +3,189 @@ title: FxBlox App Setup id: fxblox-app --- -## Installing the FxBlox App +## Open the FxBlox app + +The FxBlox app now runs **in your browser**. There is nothing to install and nothing to update — open: + +### [https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/) + +:::info What you need +- **Google Chrome or Microsoft Edge**, on a computer (Windows, macOS, Linux) or an Android phone. +- Setting up a Blox uses Web Bluetooth and your browser's local-network permission, which only Chromium-based browsers provide. Firefox and Safari will show an "unsupported browser" page. +::: + +:::caution iPhone and iPad +The web app **cannot run on an iPhone or iPad**. Every browser on iOS — including Chrome and Edge — is built on Apple's WebKit engine, which has no Web Bluetooth and no local-network access, so there is no way for a page to reach your Blox. + +If you have an iPhone, set your Blox up from **a computer with Chrome or Edge**, or from an Android phone. The legacy iOS app still works for now — see [Legacy mobile apps](#legacy-mobile-apps) at the bottom of this page. +::: :::warning -Please note there is no need for extra reboots, long waits other than what is specified or multiple retries if you exactly follow these instructions. If at any point it is not as expected, it means there is an issue and you need to contact hte support +There is no need for extra reboots, long waits other than what is specified, or multiple retries if you follow these instructions exactly. If at any point it is not as expected, it means there is an issue and you need to [contact support](/functionyard/support). ::: -### Initial Setup +## Before you start + +1. **A wallet.** MetaMask as a browser extension on desktop, or the MetaMask app on Android. It does not matter which network your wallet is on during setup. +2. **Storage.** Either a Blox with internal storage, or at least **300 GB** of external storage attached. If your Blox has internal storage, disconnect any external disk before you begin. +3. **A powered-on Blox** whose LED is flashing light blue. If it is not, wait — after the first boot it can take 10-15 minutes to get there. + +--- + +## Set up your Blox + +### 1. Welcome + +Open [https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/). Read the [Terms and Conditions](https://fx.land/terms) and, if you agree, choose **Agree & Setup my Blox**. + +FxBlox web app welcome screen -1. **Download the App**: - - For Android: [FxBlox on Google Play (v1.6.14+)](https://play.google.com/store/apps/details?id=land.fx.blox). - - For iOS: [FxBlox on AppStore (v1.6.14+)](https://apps.apple.com/ca/app/fxblox/id6444862171). -2. **Metamask Wallet**: Ensure you have a [Metamask wallet](https://play.google.com/store/apps/details?id=io.metamask) for setting up your identity. +### 2. Before you start (browser check) -### App Configuration Steps -:::info -If adding more than one FxBlox to your app, get familiar with [these instructions first.](#add-multiple-fxbloxs) +The app checks your browser and shows only what needs your attention — an unsupported browser, blocked local-network access, or the optional camera permission used for scanning a pairing QR code. You can always type a pairing code by hand instead of allowing the camera. + +Browser requirements check + +:::tip +If Chrome asks to **allow this site to access devices on your local network**, choose **Allow**. Without it the app cannot reach your Blox over Wi-Fi. You can change it later at `chrome://settings/content/localNetworkAccess`. ::: -:::info -For a successful setup you should either have the Blox with internal storage, or attach an external storage to it. -::: - -:::warning -Please make sure to first uninstall (not update) any previous version of FxBlox on your phone and then re-install the latest version -::: - -1. Open Metamask Wallet. We recommend having the opening network set to "Ethereum Mainnet" for a smoother setup process. -2. Minimize Metamask (not close) and open the FxBlox app. -3. Read the [Terms and Condition](https://fx.land/terms) and if you agree, then select `Agree and Setup Blox` in the app. -4. Enter a memorable password for data encryption and click `Sign` (Note: This is not your Metamask password). -5. Complete the connection in the Metamask app, then return to the FxBlox app. - - You may need to click back to manually return to the app if it does not open Blox automatically after you sign in Metamask - - It does not matter which chain (Ethereum, Amoy, etc) you are on in your Metamask wallet. -6. Tap `Connect to new blox`. -7. Manually connect your phone to the "FxBlox" WiFi/Hotspot, and turn off "mobile data", then continue in the app. - -:::warning -Everyone should format their storage in step 8. If you have Blox with internal storage, disconnect any external disk. If you have Blox with no internal storage, attach your external storage. At the "set Authorizer" page, wait for 10 seconds and a green button named "Format Disk" appears. click on it and blox turns purple and reboots after a few minutes. The app goes to `Connect to blox` screen again. You should wait for the light to turn flashing light blue again and then reconnect your phone to FxBlox again to continue the process. - -If for any reason you see the capacity at 0 again after Format, you should format the external disk yourself, of if you have 1TB internal, contact support +### 3. Set your identity + +Enter a memorable **password** — this encrypts your data and is **not** your MetaMask password. Then connect your wallet and approve the signature request. + +Your password plus that one signature is what produces your identity. **Write the password down**: the same password with the same wallet always produces the same identity, and a different password produces a different one. + +:::tip Wallet opened but stuck on its splash screen? +On Android this happens occasionally. Close MetaMask completely from your recent apps, return to the FxBlox tab and tap **Open wallet to approve** again — your signature request is still waiting. ::: -8. Make sure you have attached at least 300GB of external storage to your FxBlox. Proceed by clicking `Next` once the app recognizes the storage. - - If the storage is not recognized ensure that is it correctly formatted by clicking on the `Format` button. - - The light will turn purple, to indicate it is formatting. **Formatting times depend on storage medium and capacity**, so be patient during this time. Device will reboot automatically and eventually start flashing light blue again when it is ready to proceed. - - If you have an FxBlox version with internal storage, there is no need to attach external storage. -9. Select your desired WiFi network for the FxBlox and enter the password. - - If you entered the wrong password, double check you're connected to FxBlox Wifi and just go back to the wifi selection screen to choose and re-enter your password. -10. Finally, on the last screen reconnect your mobile device to your home WiFi and you can turn on the mobile data again if you want to. The app will confirm the successful setup. Please note the app does not continue if you do not have an active internet connection. When Blox is connected to the internet, the LEDs turn `green` for 30 seconds and then turn off. -11. We recommend unplugging and replugging the Blox after the initial setup once for a hard reboot and ensuring that everything is set. After you re-plug the power and it boots, it may reboot automatically once as well. +### 4. Connect to your Blox + +Connect to Blox screen + +There are three ways to reach the Blox. Try them in this order: + +1. **Connect via Bluetooth** — the most reliable, and it works whatever network you are on. Chrome opens its own device chooser; pick the entry starting with **`fulatower`** or **`fxblox`** and click **Pair**. + - The Blox only advertises over Bluetooth periodically. If you do not see it, wait up to 90 seconds with the chooser open and it will appear. +2. **By its address on your network** — if your Blox is plugged into your router with a cable, or is already on your Wi-Fi. Find its address in your router's list of connected devices; it usually starts with `192.168.`. +3. **Over the Blox's own Wi-Fi hotspot** — open your Wi-Fi settings, join the network called **"FxBlox"**, then come back and press the check button. Your internet will pause while you are connected to it. :::info -At the end of the setup when it is completed, the chain starts syncing. It may give a popup to `Reset Chain Data`, Please ignore that and wait until the sync is completed. you can check the progress of the sync in `Settings` -> `Pools` +The hotspot route needs recent Blox firmware. If the app reports that the Blox answered but its firmware predates the web update, use **Connect via Bluetooth** instead — that path works on every firmware version. ::: -### Troubleshoot +### 5. Set the Blox authorizer and format the disk -- **Final step connection issues**: Connect to mobile or home wifi, restart the FxBlox app, select `Connect to Existing Blox`. If that doesn't work, restart the FxBlox device. Close app and reopen to proceed with `Connect to new Blox`. -- **If Metamask doesn't redirect after signing transaction**: Manually go back to the FxBlox app. -- **App issues with Metamask**: On some phones, if you cannot get the "Connect" and "sign" prompts in Metamask, you may need to put both the Metamask app and Blox app in Unrestricted mode from the "Battery Optimization". Go to: `Settings` > `Apps` > `FxBlox` > `Battery` / `App Battery` > Choose `Unrestricted`. Do the same for the Metamask app. After the setup, you can return it back to the default of `Optimized` +This screen claims the Blox for your identity. -## Add Multiple FxBloxes +:::warning Everyone should format their storage at this step +At the *Set authorizer* page, wait about **10 seconds** and a green **Format Disk** button appears. Click it. The Blox turns purple and reboots after a few minutes, and the app returns to the *Connect to Blox* screen. Wait for the LED to be flashing light blue again, then reconnect and continue. + +If the capacity still shows 0 after formatting, format the external disk yourself — or, if you have a 1 TB internal drive, [contact support](/functionyard/support). +::: + +Once the app recognises your storage, continue. Formatting time depends on the drive's speed and capacity, so be patient; the Blox reboots by itself and eventually flashes light blue again when it is ready. + +### 6. Connect the Blox to Wi-Fi -As of Android/iOS app version 1.6.7, there is not an easy way to add more than one blox to your account. Follow these additional steps if you would like to connect more than one blox: +Choose the network you want the **Blox** to join and enter its password. The list shows the networks *the Blox* can see, not the ones your computer can see. Set the two-letter country code to match where you are (for example `CA`, `US`, `DE`). + +If you mistype the password, go back to the network list and select it again. + +### 7. Reconnect and finish + +The Blox's own "FxBlox" hotspot switches off as soon as it joins your Wi-Fi, so your computer or phone may drop off the network. Rejoin the same Wi-Fi as the Blox and press **I'm connected**. + +When the Blox reaches the internet, its LEDs turn green for 30 seconds and then switch off. Keep the browser tab open while this happens. -1. If not already done, complete setup of your first Blox. -2. Verify Blox is listed as `Authorized` under `Settings`->`Blox Discovery`. If not, restart your Blox by unplug/plug-ing it back in. -3. `Log Out` of your account by going to `Settings` -> `Log Out`. -4. Proceed and complete set-up of your next FxBlox. -5. Repeat steps 2-4 for all the FxBloxes you have, except for the last one. :::info -If you're using the default naming scheme `Blox unit #X`, then name your last Blox `Blox unit #1`. The reason for this is because the app will auto-number the rest of your Bloxes when you add them back in. +After setup completes, the chain starts syncing. If you see a **Reset Chain Data** prompt, ignore it and wait for the sync to finish — you can watch the progress in **Settings → Pools**. ::: -6. When you've finally added the last FxBlox, go to `Settings` -> `Blox Discovery`. -7. All FxBloxes should say `Authorized`, so select them and click `Add selected blox(s)`. -8. Verify you can see all of them by going to `Blox` tab and swiping left/right between them. -:::info -As you can see the functionality is there, but prioritization of an easier way to add them is scheduled for after testnet launch. +We recommend unplugging and replugging the Blox once after the initial setup. It may reboot itself once more after that. + +--- + +## Already set up from the phone? + +**You do not need to set your Blox up again.** The web app derives your identity exactly the same way the mobile app does: the same password with the same wallet produces the same identity, so a Blox that was paired from your phone recognises the browser straight away. + +Open the web app, enter your existing password, sign with the same wallet, then choose **Reconnect to existing blox**: + +Finding Bloxes on your network + +- **Search the network** finds your Blox by its name on the network you are on and reads its peer ID. +- **Find over Bluetooth** also reaches a Blox that is already set up. +- **Add by peer ID** works from anywhere — the Blox does not need to be on your network. In the mobile app the peer ID is on the **Users** tab under *Bloxs' PeerId*, with a copy button. It starts with `12D3KooW` and is 52 characters long. + +## Add Multiple FxBloxes + +Adding more than one Blox no longer requires logging out and back in. From the web app: + +1. Complete setup of your first Blox. +2. Go to **Settings → Blox discovery** (or open [/setup/connect-existing](https://docs.fx.land/fxblox-web/setup/connect-existing) directly). +3. **Search the network**, or **Find over Bluetooth**, or **Add by peer ID**. +4. Tick every Blox you want, then press **Add selected blox(s)**. +5. Check them all under the **Blox** tab. -**Our apps are open-source and built in React Native for cross-platform support. So if you would like to [contribute to the project](https://github.com/functionland/fx-components), that would be greatly appreciated!** +:::info +**Our apps are open source. If you would like to [contribute to the project](https://github.com/functionland/fxblox-web), that would be greatly appreciated!** ::: ## Format Drive -If you were eager to test out nightly releases on your own, you may have trouble joining the official launch of the testnet. This is because the blocks from the temporary chains are incompatible with the official testnet blocks. To fix this, you need to erase all previous blocks, easiest way is to format the drive. +If you tested nightly releases before the official launch, blocks from those temporary chains are incompatible with the official network. The easiest fix is to erase them by formatting the drive. + +During setup, use the **Format Disk** button on the *Set authorizer* screen (see [step 5](#5-set-the-blox-authorizer-and-format-the-disk) above). -To format your drive: -1. Tap on the `Blox` tab to see this screen +After setup, from the **Blox** tab: + +1. Open the **Blox** tab.
-2. **Tap and hold** the `Hard Disk` you want to format -3. When the pop-up shows, click the `Format` button +2. Open the actions for the **Hard Disk** you want to format. +3. Choose **Format** and confirm.
-4. **Now wait!** The light will turn purple. This process may take more or less than 5 minutes, dependent on the speed of your drive. -5. The FxBlox will auto-reboot, after it is done the lights will turn off. +4. **Now wait.** The LED turns purple. This can take more or less than 5 minutes depending on the speed of your drive. +5. The Blox reboots by itself; when it is done the lights turn off. + +The Blox reconnects to the network and saves chain history automatically. + +## Troubleshooting -FxBlox will automatically connect to testnet and save chain history. You should be able to join testnet now. +- **The app says your browser will not work.** Use Chrome or Edge on a computer or an Android phone. iPhones and iPads cannot run it — see the note at the top of this page. +- **"Your browser is blocking access to your network."** Chrome has not been granted local network access for this site. Allow it at `chrome://settings/content/localNetworkAccess`, then reload the page. Or use **Connect via Bluetooth**, which does not need that permission. +- **The Blox answers but the app reports missing CORS headers.** The firmware predates the web update. Use **Connect via Bluetooth** to continue, or update the Blox from the legacy mobile app. +- **Chrome's Bluetooth chooser is empty.** Leave it open for up to 90 seconds — the Blox advertises periodically rather than continuously. Make sure Bluetooth is on and, on Android, that the browser has location/nearby-devices permission. +- **The wallet does not come back after signing.** Switch back to the FxBlox tab yourself. If MetaMask is stuck on its splash screen, close it fully from recent apps and tap **Open wallet to approve** again. +- **Connection problems at the final step.** Connect to the same Wi-Fi as the Blox, reload the page, and use **Reconnect to existing blox**. If that does not work, restart the Blox, wait for the flashing light blue, and set it up again. +- **Starting completely over.** The browser equivalent of uninstalling and reinstalling the app is **Clear app storage** on the *Set identity* screen. It deletes everything FxBlox stored in this browser — identity, Blox list, settings and caches — and reloads the page. +- **Nothing loads after a new release.** Reload the tab. If a "new version available" prompt appears, accept it. ## App features -1- You can transfer your earned tokens to your wallet by holding your finger on the `Earnings` section in the Home Page and paste the address of you wallet by clicking the icon (Please note manually entering is not allowed) +1. You can transfer your earned tokens to your wallet from the **Earnings** section on the Blox page, pasting the destination address (manual entry is not allowed). +2. You can format storage from the **Hard Disks** section of the Blox page. +3. You can see Blox details from the Blox icon, and account details from the profile icon in the top right. +4. You can find Bloxes already on your network under **Settings → Blox discovery**. + +--- + +## Legacy mobile apps + +:::caution Being discontinued +The Android and iOS FxBlox apps are being discontinued and will stop receiving updates. Please move to the web app at [https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/). + +You do not lose anything by switching: the same password and the same wallet give you the same identity, so your existing Bloxes are recognised immediately. +::: -2- You can format the storage by holding your finger on the `Hard Disks` section of the Home Page +While they last, the mobile apps are still available: -3- You can check blox details by clicking on the blox icon in Home page and some other details by clicking on the profile icon on top right +- Android: [FxBlox on Google Play](https://play.google.com/store/apps/details?id=land.fx.blox) (version 2.0.1 or higher) +- iOS: [FxBlox on the App Store](https://apps.apple.com/ca/app/fxblox/id6444862171) (version 2.0.1 or higher) -4- You can see added or existing Bloxes in the network, when you are connected to the same wifi as blox and choose `Blox Discovery` from Settings tab +If you use the mobile app: check your version in **Settings → About**, and if you are reinstalling, uninstall the old version first rather than updating over it. On some Android phones you may need to set both MetaMask and FxBlox to **Unrestricted** under `Settings → Apps → FxBlox → Battery` for the connect and sign prompts to appear. diff --git a/docs/functionyard/hardware/fxblox-hardware-rpi.md b/docs/functionyard/hardware/fxblox-hardware-rpi.md index c26cb07..8e784b0 100644 --- a/docs/functionyard/hardware/fxblox-hardware-rpi.md +++ b/docs/functionyard/hardware/fxblox-hardware-rpi.md @@ -54,7 +54,7 @@ In update process the LED blinks red and green. This phase is very critical, and Please wait for `10-15 minutes` before doing anything. You may think it is done or stuck or it is turned off, but be sure that it is processing the update for `10-15 minutes` after the first boot. At the end of process the LED starts blinking light blue (cyan) consistently if an external storage is plugged to the blox or it has internal storage (XL orders). If no external storage is plugged, then you cannot see this sequence until you plug one. -**Use FxBlox App**: After the lights become a flashing blue, you can start setting up the Blox with the application. Follow on-screen instructions in the app. Please make sure follow instructions as detailed in the [documentation](../fxblox-app.md) +**Use the FxBlox App**: After the lights become a flashing blue, you can start setting up the Blox from your browser at [https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/) (Chrome or Edge). Follow the on-screen instructions, and make sure to follow the steps as detailed in the [documentation](../fxblox-app.md) - If at the end of setup through the FxBlox app, you see a message that the app could not connect to Blox, Close the app, unplug and re-plug the blox and wait for 1 minute and open the app. @@ -67,7 +67,7 @@ If this is your very first time setting up your FxBlox Lite (RPI), you will not To automatically get that version, you need to connect the Blox to the wifi first. You can do so by following these steps: -1. Download the latest iOS/Android app. +1. Open the FxBlox app at [https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/) in Chrome or Edge (see [FxBlox App Setup](../fxblox-app.md)). 2. Follow prompts to create password and connect Metamask. 3. On the authorize blox screen wait for 15 seconds and a "skip" button appears in the bottom left. click that to skip the authorization and then click yes to confirm. [** * **](#troubleshoot) 4. Connect Blox to wifi. [** * **](#troubleshoot) diff --git a/docs/functionyard/mainnet-transition/android-connected.md b/docs/functionyard/mainnet-transition/android-connected.md index f909fc2..ca4fc7a 100644 --- a/docs/functionyard/mainnet-transition/android-connected.md +++ b/docs/functionyard/mainnet-transition/android-connected.md @@ -1,29 +1,31 @@ --- -title: Android - Blox Connected +title: Blox Connected id: android-connected --- -# Android Mainnet Transition - Blox Connected +# Mainnet Transition - Blox Connected -This guide is for Android users whose Blox app shows as **connected** to their Blox device. +This guide is for users whose FxBlox app shows their Blox as **connected**. -
-✅ Prerequisites: -
    -
  • Your Blox app shows "Connected" status
  • -
  • FxBlox app version 2.0.1 or higher
  • -
  • Your Blox account ID saved for token claiming
  • -
-
+:::info Prerequisites +- Your app shows "Connected" status +- You are using the web app at [https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/), or the legacy mobile app at version 2.0.1 or higher +- Your Blox account ID is saved for token claiming +::: Blox Connected Status -## Step 1: Update Your App +## Step 1: Open the app + +Open **[https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/)** in Chrome or Edge, on a computer or an Android phone. There is nothing to install and nothing to update — reload the tab and you are on the latest version. -Ensure your FxBlox app is updated to at least **version 2.0.1**. +Sign in with the same password and the same wallet you used before; your Blox is recognised immediately. If it does not appear, use **Reconnect to existing blox** and search your network. -1. Check your app version in **Settings > About** (at the bottom of the screen) -2. Update from Google Play Store if needed +You can check the version at any time in **Settings > About**. + +:::info Still on the mobile app? +Make sure it is at least **version 2.0.1** — update it from your app store. The Android and iOS apps are being discontinued, so please move to the web app when you can. +::: Version Check @@ -37,12 +39,12 @@ Default selection is **Skale**. If you have an authorization code, change to **B 2. Ensure you are on the correct chain (Base/Skale) 3. Click the **"Add and Switch to Skale/Base"** button 4. This will open MetaMask -5. In MetaMask, ensure you are on the same chain selected in the Blox app +5. In MetaMask, ensure you are on the same chain selected in the FxBlox app -## Step 3: Close and Restart Apps +## Step 3: Restart -1. **Close both** FxBlox app and MetaMask completely -2. **Re-open** the FxBlox app +1. **Close MetaMask** completely +2. **Reload the FxBlox tab** (or, on the mobile app, close and re-open it) ## Step 4: Switch to Mainnet diff --git a/docs/functionyard/mainnet-transition/android-disconnected.md b/docs/functionyard/mainnet-transition/android-disconnected.md index f6f2f80..245b291 100644 --- a/docs/functionyard/mainnet-transition/android-disconnected.md +++ b/docs/functionyard/mainnet-transition/android-disconnected.md @@ -1,21 +1,18 @@ --- -title: Android - Blox Disconnected +title: Blox Disconnected id: android-disconnected --- -# Android Mainnet Transition - Blox Disconnected +# Mainnet Transition - Blox Disconnected -This guide is for Android users whose Blox app shows as **disconnected** from their Blox device. +This guide is for users whose FxBlox app shows their Blox as **disconnected**. -
-⚠️ Prerequisites: -
    -
  • Your Blox app shows "Disconnected" status
  • -
  • You've tried unplugging/replugging and clicking retry without success
  • -
  • FxBlox app version 2.0.1 or higher
  • -
  • Your Blox account ID saved for token claiming
  • -
-
+:::caution Prerequisites +- Your app shows "Disconnected" status +- You've tried unplugging/replugging and clicking retry without success +- You are using the web app at [https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/), or the legacy mobile app at version 2.0.1 or higher +- Your Blox account ID is saved for token claiming +::: Blox Disconnected Status @@ -23,8 +20,8 @@ This guide is for Android users whose Blox app shows as **disconnected** from th First, ensure your Blox is connected to the internet: -1. Go to **Settings > Blox Discovery** (ensure your mobile is on the same WiFi network as your Blox) -2. If Blox is connected to internet, the page should show it +1. Go to **Settings > Blox discovery** and search the network (make sure your computer or phone is on the same Wi-Fi as the Blox) +2. If the Blox is on the network, it will be listed there 3. You can also check from your router admin panel Blox Discovery @@ -70,7 +67,7 @@ Purple and blue LEDs indicate the factory reset is in progress. Be patient durin After the Blox starts **flashing cyan**: -1. Use the FxBlox app to set up your Blox +1. Open the FxBlox web app at **[https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/)** in Chrome or Edge and set your Blox up again — the full walkthrough is on the [FxBlox App Setup](/functionyard/fxblox-app) page 2. Connect it to your internet/WiFi 3. The app should now show **"Connected"** 4. **Wait 2 hours** for the Blox to get fully updated @@ -83,7 +80,7 @@ The 2-hour waiting period is crucial for the Blox to download and install all ne Once your Blox shows as connected and has been updated for 2 hours: -1. Follow the instructions in the **[Android - Blox Connected](/functionyard/mainnet-transition/android-connected)** section +1. Follow the instructions in the **[Blox Connected](/functionyard/mainnet-transition/android-connected)** section 2. This includes chain selection, app restart, and pool joining ## LED Status Reference @@ -93,7 +90,7 @@ Once your Blox shows as connected and has been updated for 2 hours: | 🟢 Green | Power on | Normal | | 🟡 Yellow | Booting | Wait for it to turn off | | 🟣 Purple + 🔵 Blue | Factory reset | Wait 10 minutes | -| 🔵 Cyan (flashing) | Ready for setup | Use app to configure | +| 🔵 Cyan (flashing) | Ready for setup | Use the app to configure | :::success Success Indicator When your app shows "Connected" status after the reset and 2-hour wait period, you're ready to proceed with the mainnet transition! @@ -111,6 +108,6 @@ When your app shows "Connected" status after the reset and 2-hour wait period, y **If still showing disconnected after reset:** - Verify WiFi credentials are correct - Check router settings for device blocking -- Ensure Blox and phone are on same network +- Ensure the Blox and the device running the app are on the same network **Need more help?** Visit our [Support page](/functionyard/support) for additional assistance. diff --git a/docs/functionyard/mainnet-transition/existing-testnet.md b/docs/functionyard/mainnet-transition/existing-testnet.md index d81d05e..cc5fd6e 100644 --- a/docs/functionyard/mainnet-transition/existing-testnet.md +++ b/docs/functionyard/mainnet-transition/existing-testnet.md @@ -7,62 +7,42 @@ id: existing-testnet This guide is for users who have **already joined the testnet** and want to transition to mainnet. -
-⚠️ Critical First Step -
-Before proceeding, copy and save your Blox account ID for future claiming of earned testnet tokens. You will need this for the claim process at https://claim-ui.fula.network -
- -## Choose Your Device Path +:::warning Critical First Step +Before proceeding, **copy and save your Blox account ID** for future claiming of earned testnet tokens. You will need this for the claim process at [https://claim-ui.fula.network](https://claim-ui.fula.network). +::: -The transition process varies depending on your device type and current Blox connection status. Select the path that matches your situation: +## Choose Your Path -### 📱 Android Users +The transition process depends on your Blox's current connection status. Select the path that matches your situation: -Your next steps depend on whether your Blox is currently connected or disconnected in the app: +### Blox is connected -
+Your FxBlox app shows your Blox as connected and working properly. -
-

✅ Blox is Connected

-

Your FxBlox app shows your Blox as connected and working properly.

- -→ Follow Android Connected Guide - -
+→ **[Follow the Blox Connected guide](/functionyard/mainnet-transition/android-connected)** -
-

⚠️ Blox is Disconnected

-

Your FxBlox app shows your Blox as disconnected or you're having connection issues.

- -→ Follow Android Disconnected Guide - -
+### Blox is disconnected -
+Your FxBlox app shows your Blox as disconnected, or you're having connection issues. -### 🍎 iOS Users +→ **[Follow the Blox Disconnected guide](/functionyard/mainnet-transition/android-disconnected)** -
-

📱 iOS Requires Full Reset

-

iOS users need to reset both the Blox device and the application. Make sure you have your Blox account ID saved before proceeding!

- -→ Follow iOS Transition Guide - -
+:::caution Using an iPhone or iPad? +The Blox itself still needs a factory reset, but the web app cannot run on iOS. See **[iPhone & iPad](/functionyard/mainnet-transition/ios)** for what to do. +::: ## Pre-Transition Checklist Before starting your transition, ensure you have: - [ ] **Saved your Blox account ID** from the current app -- [ ] **Updated your FxBlox app** to version 2.0.1 or higher +- [ ] **Opened the web app** at [https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/) in Chrome or Edge — or, if you are staying on the legacy mobile app, updated it to version 2.0.1 or higher - [ ] **Stable internet connection** for your Blox device -- [ ] **MetaMask app** installed on your device (if not already installed) +- [ ] **MetaMask** available (browser extension on desktop, app on Android) - [ ] **2+ hours of time** available for the complete process -:::info App Version Check -You can check your app version in **Settings > About** at the bottom of the screen. +:::info Version Check +The web app is always current — just reload the tab. On the legacy mobile app you can check the version in **Settings > About** at the bottom of the screen. ::: ![Version Check](/img/mainnet-transition/version_check.jpg) @@ -85,23 +65,26 @@ Your testnet rewards will be claimable separately through the claim portal. The **Q: Will I lose my testnet rewards?** A: No, if you saved your Blox account ID, you can claim testnet rewards at [https://claim-ui.fula.network](https://claim-ui.fula.network) +**Q: Do I have to set my Blox up again to use the web app?** +A: No. Your identity comes from your password plus your wallet signature, exactly as on the phone. Sign in with the same password and the same wallet and your Blox is recognised straight away. + **Q: How long does the transition take?** A: The process takes 2-3 hours total, including waiting time for device updates. **Q: Can I go back to testnet?** A: The transition to mainnet is intended to be permanent. Contact support if you need to revert. -**Q: What if my device type isn't listed?** -A: These guides cover Android and iOS. For other devices, contact our [Support team](/functionyard/support). +**Q: I only have an iPhone. What now?** +A: Use a computer with Chrome or Edge, or an Android phone. See [iPhone & iPad](/functionyard/mainnet-transition/ios). --- ## Need Help? -If you're unsure about your device type or connection status: +If you're unsure about your connection status: -1. **Check your device**: Look at your phone/tablet settings to confirm Android or iOS -2. **Check connection status**: Open your FxBlox app and look at the main screen +1. **Open the app** and look at the main screen — it shows Connected or Disconnected +2. **Check from your router** admin panel to see whether the Blox is on your network 3. **Contact support**: Visit our [Support page](/functionyard/support) for assistance -**Ready to start?** Choose your device path above and follow the detailed instructions! +**Ready to start?** Choose your path above and follow the detailed instructions! diff --git a/docs/functionyard/mainnet-transition/index.md b/docs/functionyard/mainnet-transition/index.md index aca00c5..098e74a 100644 --- a/docs/functionyard/mainnet-transition/index.md +++ b/docs/functionyard/mainnet-transition/index.md @@ -7,25 +7,33 @@ id: index Welcome to the Mainnet Transition guide! This section will help you smoothly transition from testnet to mainnet based on your specific situation. +## Manage your Blox from the browser + +The FxBlox app now runs in your browser at **[https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/)** — nothing to install, and always the latest version. + +Open it in **Chrome or Edge**, on a computer or an Android phone. Your identity is derived from your password and your wallet signature exactly as it was on the phone, so a Blox you already set up is recognised straight away. + +:::caution The Android and iOS apps are being discontinued +They will stop receiving updates. See [FxBlox App Setup](/functionyard/fxblox-app) for the full walkthrough, and [iPhone & iPad](/functionyard/mainnet-transition/ios) if you use an Apple device. +::: + ## Quick Navigation -To get the most relevant instructions for your situation, please answer these simple questions: +Pick the guide that matches your situation: -
+### What is your Blox's connection status? -### 📱 What device are you using? -- **[Android](/functionyard/mainnet-transition/android-connected)** - For Android devices -- **[iOS](/functionyard/mainnet-transition/ios)** - For iPhone/iPad devices +- **[Blox is connected](/functionyard/mainnet-transition/android-connected)** — the app shows your Blox as connected and working +- **[Blox is disconnected](/functionyard/mainnet-transition/android-disconnected)** — the app shows your Blox as disconnected -### 📦 What's your installation status? -- **[Already Joined Testnet](/functionyard/mainnet-transition/existing-testnet)** - You've been using the testnet -- **[New Installation](/functionyard/mainnet-transition/new-installation)** - Fresh setup, never joined testnet +### What is your installation status? -### 🔗 What's your Blox connection status? -- **Connected** - Your Blox app shows connected to your device -- **Disconnected** - Your Blox app shows disconnected from your device +- **[Already joined testnet](/functionyard/mainnet-transition/existing-testnet)** — you have been using the testnet +- **[New installation](/functionyard/mainnet-transition/new-installation)** — fresh setup, never joined testnet -
+### Using an iPhone or iPad? + +- **[iPhone & iPad](/functionyard/mainnet-transition/ios)** — what to do, since the web app cannot run on iOS ## Important Notes @@ -33,22 +41,10 @@ To get the most relevant instructions for your situation, please answer these si Before starting the transition process, make sure to **copy and save your Blox account ID** for future claiming of earned testnet tokens. You will need this for the claim process at [https://claim-ui.fula.network](https://claim-ui.fula.network). ::: -:::info App Version Requirement -Ensure your FxBlox app is updated to **version 2.0.1 or higher**. You can check your app version in **Settings > About** at the bottom of the screen. +:::info Version requirement +The web app is always up to date — just reload the tab. If you are still on the legacy mobile app, make sure it is **version 2.0.1 or higher**; you can check it in **Settings > About** at the bottom of the screen. ::: -## Quick Start Paths - -### For Android Users -1. **[Connected Blox](/functionyard/mainnet-transition/android-connected)** - Your Blox is connected and working -2. **[Disconnected Blox](/functionyard/mainnet-transition/android-disconnected)** - Your Blox shows as disconnected - -### For iOS Users -1. **[iOS Transition Guide](/functionyard/mainnet-transition/ios)** - Complete iOS transition process - -### For New Users -1. **[New Installation Guide](/functionyard/mainnet-transition/new-installation)** - Fresh setup instructions - --- *Need help? Visit our [Support](/functionyard/support) page for additional assistance.* diff --git a/docs/functionyard/mainnet-transition/ios.md b/docs/functionyard/mainnet-transition/ios.md index 14e8eb7..b12f3a4 100644 --- a/docs/functionyard/mainnet-transition/ios.md +++ b/docs/functionyard/mainnet-transition/ios.md @@ -1,36 +1,51 @@ --- -title: iOS Mainnet Transition +title: iPhone & iPad id: ios --- -# iOS Mainnet Transition Guide +# iPhone & iPad -This guide is for iOS users (iPhone/iPad) transitioning from testnet to mainnet. +## The web app does not run on iOS -
-⚠️ Critical: Save Your Account ID -
-Before updating the application, ensure you have copied and saved your Blox account ID from the app. This will not be shown after the update and you'll need it for claiming testnet tokens. -
+The FxBlox app now runs in the browser, but **it cannot run on an iPhone or iPad**. -:::danger Important Notice -iOS requires both Blox device reset AND application reset. Make sure you have your Blox account ID saved before proceeding! +Setting up and managing a Blox needs Web Bluetooth and your browser's local-network permission. Apple requires every browser on iOS — including Chrome and Edge — to use its WebKit engine, and WebKit provides neither. This is a limitation of iOS itself, not something the app can work around. + +:::tip What to do instead +1. **Use a computer.** Windows, macOS or Linux with **Chrome or Edge**, at [https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/). This is the recommended route and gives you the full app. +2. **Or use an Android phone**, also with Chrome or Edge. +3. **Or keep using the legacy iOS app** for now — see below. + +Your identity is derived from your password and your wallet signature, so whichever device you use, the same password with the same wallet gives you the same identity and your existing Bloxes are recognised immediately. Nothing needs re-pairing. +::: + +:::caution The iOS app is being discontinued +[FxBlox on the App Store](https://apps.apple.com/ca/app/fxblox/id6444862171) still works and should be at **version 2.0.1 or higher**, but it will stop receiving updates. Please move to a computer with Chrome or Edge when you can. +::: + +--- + +# Mainnet Transition on iOS + +If you are transitioning from testnet on an iPhone, the Blox itself still needs a factory reset. The device steps below are the same regardless of which app you use afterwards. + +:::warning Critical: Save Your Account ID +Before doing anything else, **copy and save your Blox account ID** from the app. You will need it for claiming testnet tokens at [https://claim-ui.fula.network](https://claim-ui.fula.network). ::: ## Step 1: Save Your Account Information -**Before doing anything else:** 1. Open your current FxBlox app -2. Go to account/profile section +2. Go to the account/profile section 3. **Copy and save your Blox account ID** -4. Store it safely - you'll need this for token claiming at [https://claim-ui.fula.network](https://claim-ui.fula.network) +4. Store it safely ## Step 2: Verify Internet Connection Ensure your Blox is connected to the internet: -1. Go to **Settings > Blox Discovery** (ensure your iPhone is on the same WiFi network as your Blox) -2. If Blox is connected to internet, the page should show it +1. Go to **Settings > Blox discovery** (make sure your device is on the same WiFi network as your Blox) +2. If the Blox is on the network, it will be listed there 3. You can also check from your router admin panel Blox Discovery @@ -68,17 +83,13 @@ On the **5th time** you plug it back: Your browser does not support the video tag. -## Step 4: Update Your iOS App - -1. Update your FxBlox app from the App Store to version **2.0.1 or higher** -2. The app will be reset during this process (this is expected) - -## Step 5: Setup After Reset +## Step 4: Set the Blox up again -After the Blox starts **flashing cyan** and you've updated the app: +After the Blox starts **flashing cyan**: -1. Use the updated FxBlox app to set up your Blox -2. Connect it to your internet/WiFi +1. Open **[https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/)** on a computer with Chrome or Edge — or on an Android phone — and follow the [FxBlox App Setup](/functionyard/fxblox-app) guide. + - If you are staying on the legacy iOS app, update it from the App Store to version 2.0.1 or higher first. The app is reset during the update; that is expected. +2. Connect the Blox to your internet/WiFi 3. The app should now show **"Connected"** 4. **Wait 2 hours** for the Blox to get fully updated @@ -86,33 +97,33 @@ After the Blox starts **flashing cyan** and you've updated the app: The 2-hour waiting period is crucial for the Blox to download and install all necessary updates. ::: -## Step 6: Follow Android Connected Instructions +## Step 5: Complete the Mainnet Transition -Once your Blox shows as connected and has been updated for 2 hours, the process is the same as Android: +Once your Blox shows as connected and has been updated for 2 hours, the remaining steps are the same for everyone: ### Chain Selection 1. Go to **Settings > Chain Selection** 2. Ensure you are on the correct chain (Base/Skale) - default is Skale -3. If you have authorization code, change to Base only if instructed by the team +3. If you have an authorization code, change to Base only if instructed by the team 4. Click **"Add and Switch to Skale/Base"** button (opens MetaMask) -5. In MetaMask, ensure you're on the same chain selected in Blox app +5. In MetaMask, ensure you're on the same chain selected in the FxBlox app -### App Restart -1. **Close both** FxBlox app and MetaMask completely -2. **Re-open** the FxBlox app +### Restart +1. **Close MetaMask** completely +2. **Reload the FxBlox tab** (or close and re-open the mobile app) ### Switch to Mainnet -1. On home screen, click **"Switch to Skale/Base"** button +1. On the home screen, click the **"Switch to Skale/Base"** button 2. This opens MetaMask - **wait a few seconds** -3. You'll see "Go back to application" message -4. Switch back to FxBlox app +3. You'll see a "Go back to application" message +4. Switch back to the FxBlox app 5. The button should disappear ### Join Global Pool 1. Go to **Settings > Pools** 2. Join the **Global pool** -## Step 7: Verify Success +## Step 6: Verify Success You should now see: - **Rewards displayed** on the home page @@ -125,10 +136,10 @@ You should now see: | 🟢 Green | Power on | Normal | | 🟡 Yellow | Booting | Wait for it to turn off | | 🟣 Purple + 🔵 Blue | Factory reset | Wait 10 minutes | -| 🔵 Cyan (flashing) | Ready for setup | Use app to configure | +| 🔵 Cyan (flashing) | Ready for setup | Use the app to configure | :::success Congratulations! -You have successfully transitioned your iOS device to mainnet! Your rewards will now accumulate and you can claim them when available. +You have successfully transitioned to mainnet! Your rewards will now accumulate and you can claim them when available. ::: --- @@ -136,13 +147,12 @@ You have successfully transitioned your iOS device to mainnet! Your rewards will ## Troubleshooting **App Issues:** -- Ensure you're using the latest version from App Store -- Try force-closing and reopening the app -- Restart your iPhone if needed +- On the web app, reload the tab; if a "new version available" prompt appears, accept it +- On the legacy iOS app, ensure you're using the latest version from the App Store and try force-closing and reopening it **Blox Connection Issues:** - Verify WiFi credentials are correct -- Ensure Blox and iPhone are on same network +- Ensure the Blox and the device running the app are on the same network - Check router settings for device blocking **Reset Problems:** diff --git a/docs/functionyard/mainnet-transition/new-installation.md b/docs/functionyard/mainnet-transition/new-installation.md index 8d50dd7..9d172b7 100644 --- a/docs/functionyard/mainnet-transition/new-installation.md +++ b/docs/functionyard/mainnet-transition/new-installation.md @@ -7,24 +7,24 @@ id: new-installation This guide is for users who are setting up their Blox device for the **first time** and want to start directly on mainnet (skipping testnet). -
-✅ This guide is for you if: -
    -
  • You have a brand new Blox device
  • -
  • You've never joined the testnet
  • -
  • You want to start directly on mainnet
  • -
  • Your FxBlox app is version 2.0.1 or higher
  • -
-
+:::success This guide is for you if: +- You have a brand new Blox device +- You've never joined the testnet +- You want to start directly on mainnet +::: ## Step 1: Initial Setup -1. **Download** the FxBlox app from your device's app store -2. Ensure you have version **2.0.1 or higher** -3. **Connect** your Blox device to power and internet using the app setup wizard +1. **Open** the FxBlox app at **[https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/)** — there is nothing to install +2. Use **Chrome or Edge**, on a computer (Windows, macOS, Linux) or an Android phone +3. **Connect** your Blox device to power and to your network by following the setup wizard :::info Setup Process -Follow the in-app instructions to connect your Blox to your WiFi network. The setup process is guided and straightforward. +The full walkthrough, with screenshots, is on the [FxBlox App Setup](/functionyard/fxblox-app) page. The setup process is guided and straightforward. +::: + +:::caution iPhone and iPad +The web app cannot run on an iPhone or iPad — every iOS browser uses Apple's WebKit engine, which has no Web Bluetooth or local-network access. Use a computer with Chrome or Edge, or an Android phone. See [iPhone & iPad](/functionyard/mainnet-transition/ios). ::: ## Step 2: Skip Testnet @@ -45,13 +45,11 @@ After your Blox shows as **"Connected"** in the app: 1. **Wait approximately 2 hours** for your Blox to download and install updates 2. During this time, your device will automatically update to the latest firmware -3. You can use your phone normally during this waiting period +3. You can carry on with other things during this waiting period -
-💡 Why the wait? -
+:::info Why the wait? Your Blox needs time to download the latest mainnet-compatible firmware and sync with the network. This ensures optimal performance. -
+::: ## Step 4: Configure for Mainnet @@ -66,11 +64,11 @@ After the 2-hour waiting period, follow these steps: ### Add and Switch Chain 1. Click the **"Add and Switch to Skale/Base"** button 2. This will open MetaMask -3. In MetaMask, ensure you are on the same chain selected in the Blox app +3. In MetaMask, ensure you are on the same chain selected in the FxBlox app -### Restart Apps -1. **Close both** FxBlox app and MetaMask completely -2. **Re-open** the FxBlox app +### Restart +1. **Close MetaMask** completely +2. **Reload the FxBlox tab** ### Complete Mainnet Switch 1. On the home screen, you'll see a **"Switch to Skale/Base"** button @@ -96,13 +94,16 @@ You should now see: - A **Claim button** below the rewards when rewards become available - Your Blox status showing as "Connected" -## Device Compatibility +## Browser Compatibility -This process works for both: -- **Android devices** (phones and tablets) -- **iOS devices** (iPhone and iPad) +| Where you run it | Works? | +|---|---| +| Chrome or Edge on Windows / macOS / Linux | Yes — recommended | +| Chrome or Edge on Android | Yes | +| Firefox, Safari | No — the app shows an "unsupported browser" page | +| Any browser on iPhone / iPad | No — see [iPhone & iPad](/functionyard/mainnet-transition/ios) | -The steps are identical regardless of your mobile device platform. +The steps are identical on every platform where the app runs. ## Timeline Summary @@ -123,13 +124,13 @@ You've successfully set up your Blox device directly on mainnet! You can now sta **Setup Issues:** - Ensure your WiFi password is correct -- Make sure Blox and phone are on the same network +- Make sure the Blox and the device running the app are on the same network - Try restarting your router if connection fails **App Issues:** -- Force close and reopen the FxBlox app -- Ensure you have the latest version from the app store -- Restart your phone if needed +- Reload the FxBlox tab; if a "new version available" prompt appears, accept it +- Make sure you are using Chrome or Edge +- If the app cannot reach the Blox over Wi-Fi, allow local network access for the site, or connect via Bluetooth instead **Connection Problems:** - Check that your Blox device LED is showing the correct status diff --git a/docs/functionyard/troubleshooting/disconnected-blox.md b/docs/functionyard/troubleshooting/disconnected-blox.md index 6dbeee4..c07014d 100644 --- a/docs/functionyard/troubleshooting/disconnected-blox.md +++ b/docs/functionyard/troubleshooting/disconnected-blox.md @@ -11,11 +11,13 @@ First, observe your FxBlox LED to determine its current state: **What it means**: Your FxBlox needs to be set up from scratch. **Solution**: -1. **Uninstall the FxBlox app** from your mobile device -2. **Reinstall the FxBlox app** from your app store -3. **Open the app** and follow the setup process +1. **Open the FxBlox app** at [https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/) in Chrome or Edge +2. On the *Set identity* screen, use **Clear app storage** — this is the browser equivalent of uninstalling and reinstalling, and removes the stored identity, Blox list, settings and caches +3. **Follow the setup process** from the start 4. **Set up your FxBlox from the beginning** as if it were a new device +See [FxBlox App Setup](../fxblox-app.md) for the full walkthrough. + :::info A continuously flashing cyan LED indicates the device is in setup mode and ready for initial configuration. ::: @@ -40,7 +42,7 @@ A continuously flashing cyan LED indicates the device is in setup mode and ready - The LED will turn yellow, then **immediately purple** 4. **Wait 10 minutes** while it processes 5. After 10 minutes, it will start **flashing cyan** -6. **Uninstall and reinstall** the FxBlox app +6. **Clear app storage** in the web app (on the *Set identity* screen) 7. **Set up from the beginning** :::warning @@ -52,16 +54,16 @@ Make sure to wait for the complete yellow → off sequence before each unplug/re If the above methods don't work, try connecting via Bluetooth: **Steps**: -1. **Open the FxBlox app** -2. **Go to Settings → Bluetooth Commands** -3. **Click the connect icon** in the top right corner -4. The app will attempt to connect via Bluetooth to your Blox -5. **If connection succeeds**, you'll see several buttons appear -6. **Click "Hotspot"** to put your Blox into hotspot mode -7. **Connect your mobile phone** to the "FxBlox" WiFi network -8. **In the app**, click the **down arrow next to "Disconnected"** -9. **Click "Connect to WiFi"** -10. **Follow the on-screen instructions** to reconnect your Blox to WiFi +1. **Open the FxBlox app** at [https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/) in Chrome or Edge +2. **Go to Settings → Bluetooth** ([/settings/bluetooth](https://docs.fx.land/fxblox-web/settings/bluetooth)) +3. **Click the connect icon** in the top right corner, then pick the device starting with `fulatower` or `fxblox` in Chrome's chooser + - The Blox advertises periodically — leave the chooser open for up to 90 seconds if it does not appear straight away +4. **If connection succeeds**, you'll see several command buttons appear +5. **Click "Hotspot"** to put your Blox into hotspot mode +6. **Connect your computer or phone** to the "FxBlox" WiFi network +7. **In the app**, open the connection options next to **"Disconnected"** +8. **Click "Connect to WiFi"** +9. **Follow the on-screen instructions** to reconnect your Blox to WiFi :::tip The Bluetooth connection method is useful when your Blox can't connect to WiFi but is still responsive via Bluetooth. @@ -85,10 +87,10 @@ Most FxBlox devices are RK1 models. If you're unsure which model you have, try t | LED Pattern | Meaning | Action Required | |-------------|---------|----------------| -| Continuously flashing cyan | Setup mode | Reinstall app and setup from scratch | +| Continuously flashing cyan | Setup mode | Clear app storage and set up from scratch | | Blue → Green → Off → Yellow → Off | Latest firmware detected | Perform 4x unplug/replug reset | | Yellow → Purple | Factory reset in progress | Wait 10 minutes | -| Flashing cyan (after reset) | Ready for setup | Reinstall app and setup | +| Flashing cyan (after reset) | Ready for setup | Clear app storage and set up | | Off/No response | Possible hardware issue | Try Bluetooth method or re-imaging | ## Additional Support diff --git a/docs/functionyard/troubleshooting/switch-chain.md b/docs/functionyard/troubleshooting/switch-chain.md index a49db7d..777363a 100644 --- a/docs/functionyard/troubleshooting/switch-chain.md +++ b/docs/functionyard/troubleshooting/switch-chain.md @@ -68,7 +68,7 @@ When you see "Return to App" in MetaMask, it means the network switching process ### If the Button Still Appears - **Clear your browser cache** if using the web version - **Try disconnecting and reconnecting** your wallet in the app -- **Ensure you have the latest version** of both FxBlox app and MetaMask +- **Reload the FxBlox tab** to make sure you are on the latest version of the web app, and check that MetaMask is up to date ### Network Configuration Issues - **Verify network details** in MetaMask match the official network parameters diff --git a/docs/getting-started-testnet.md b/docs/getting-started-testnet.md index a8026a8..6633d28 100644 --- a/docs/getting-started-testnet.md +++ b/docs/getting-started-testnet.md @@ -33,6 +33,10 @@ You can report issues through the following channels: At a high level, follow these steps to connect your Blox to the network: ![Blox Setup Flow](/img/welcome/getting-started.jpeg) +:::info The FxBlox app runs in your browser +Set your Blox up at **[https://docs.fx.land/fxblox-web/](https://docs.fx.land/fxblox-web/)** using Chrome or Edge, on a computer or an Android phone — there is nothing to install. The Android and iOS apps are being discontinued. See [FxBlox App Setup](/functionyard/fxblox-app) for the full walkthrough. +::: + :::info When going through the setup documentation, please read each instruction carefully! The docs are created to give you the smoothest onboarding experience as possible! ::: @@ -45,7 +49,7 @@ Choose your path based on your needs: - **[Mainnet Transition](/functionyard/mainnet-transition)** - Transition from testnet to mainnet or start fresh on mainnet - **[Hardware Setup](/functionyard/hardware/fxblox-hardware)** - Detailed hardware guides for your FxBlox device -- **[FxBlox App Setup](/functionyard/fxblox-app)** - Configure your mobile app +- **[FxBlox App Setup](/functionyard/fxblox-app)** - Set up your Blox with the web app - **[Add Storage](/functionyard/add-storage)** - Expand your storage capacity - **[Functionyard Testnet](/functionyard)** - Join the testnet for testing and development - **[Support](/functionyard/support)** - Get help when you need it \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js index 83c2264..98fd400 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -36,6 +36,12 @@ const config = { themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ + announcementBar: { + id: "fxblox-web-app", + content: + 'FxBlox is now set up from your browser. Open the web app — the Android and iOS apps are being discontinued.', + isCloseable: true, + }, navbar: { title: "Functionland", logo: { @@ -43,6 +49,11 @@ const config = { src: "img/logo.webp", }, items: [ + { + href: "https://docs.fx.land/fxblox-web/", + label: "Web App", + position: "right", + }, { href: "https://github.com/functionland", label: "GitHub", diff --git a/sidebars.js b/sidebars.js index 4f81140..90b07f4 100644 --- a/sidebars.js +++ b/sidebars.js @@ -43,6 +43,11 @@ const sidebars = { ] }, 'getting-started-testnet', + { + type: 'link', + label: 'Open the FxBlox Web App', + href: 'https://docs.fx.land/fxblox-web/', + }, { type: 'category', label: 'Mainnet Transition', diff --git a/static/img/fxblox-web/01-welcome.jpg b/static/img/fxblox-web/01-welcome.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a8bf35092872731a8badd0fce2c9553f7573dc4 GIT binary patch literal 31633 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 b^&7>p*Stk=jm7_lLH-fb{Hu>ap9cN|HKVh8 literal 0 HcmV?d00001 diff --git a/static/img/fxblox-web/02-requirements.jpg b/static/img/fxblox-web/02-requirements.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7467d170011c36b78a6d1550fc07557964d13bde GIT binary patch literal 23294 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ⅅ z`5=>Vfh@G>HVaaHTEfg;iku5q$DY1CWA){!BNl+76D~8dCVlXL-y?gV>zq#jLw$z_ z%X`;&u}q;JxRF1p07^PHHxUh#CS1h*Ig@x(1GGb3#ftzBiZ9lSGBP+@1zGlI`y{-6 z@AI&TUQ|L3%}J7&&Ml@)0HN;OoF)IU9iHc@REyj$bJBIPs^`r(& zr}t_&kox#mpTH|kt|l}@UN|@o-eEV|e^3{}i?L^>Dcmx5kDmHwr8|cr6rvp-)B3ag zo^)w4juP6#FxktVT3bY@La8MfJqrBfou5f0f4#ufmaJqPXpd;N;^?Ht;F?``^^Oe5sH{cvlv52cd#IpII~oV zgS>PM(prPP>{^n8S~ji0x)n|XA>7ayWM6c34d(mq102cH&%Rqg5tKt}(=y-Wn9#l0 zC=^?<;*i6p!==VRREyCiVI*I?LsMI&cOB)R#uGTXG(>E2ht=zxisJCE*$gaMUP_17Bp z@h!D1C7f+-rxYH`o$W9}zNrdj7S>4&A7wx@+yp1n{b`wZ1in_QfmZm6D`sI+Hq=E# z7C<~4^!$J)7^Sy^sS%o*`xEPqH~DCl_bm)ijA)r+fjA;;6`hNDg@ChoYN(p-`hkej zsRMAq&QL-ztw&aP2%pBbEMw>i;rPubA4o6tNzKBGho)=KgNfN`zo6IUM?Ao;BAF#b z-K25uU12Q7;993smT`gog?HZND4N}qf`_t|S-DRtAgwFNW*I{gAf!Rik7ruu-sOlG zls9WIeNEG938FZ;@XbT>4q~-wCO7|St?kho42B=2QO4GF62OZ=4tIuA2{y=eb*0Bv zNs2x`Z_yqD9Ba%shO@}J_}i73)CJtMFvi4%E?Op|2RXVexes&89BiScI=V;EvOjfz z8qI=VfJ;goUx=1Q9rDoV-sbu&#r~UymuFLnc4(o~g(=>g7_|Hl3l~e)U_nPq(K=ZJ z5I}yC=uR+aBhKN8w+2eCComgJ#3QjZXhcs(JuKh}$QR92Bnp$S4u}NOl1GZPKxg+CM zX1zO-tlZ?eT0@Vn^b9gTb(5LpZNUN_A5Y#N6wxbYItysfQu8gSEnUl}b<7x~=Vq*8 zL18@wc!L8QA;;xL^x_D9+N)apS!tnX4h@UDDQV#q5vH@5TLyTk(-t|@Z|S3GekPTu^-i+ zrk7bwF1riPTR=Flt=wRC@PnE4pPPLu=#?b@n+-yJ7SDCY&O+A+y8uCFi~)Mghg9X# z8B=yk7)ag_Axb%3X2q3df}AV~@WYR1PpAA3Ce{CGa!b+={>iqht>_gUEb!kqWob)K zYV#gjMgi_Xrs8?_5$ju~`Cy^a-2E7-I1BnH(#`#MO>n)Q1Ie#>QYoZ)zbGIo2>}HeJeF~7{`14Qf;!PYT z?h!U+)GcYEt7;arA87o(o$tAVwNH0~^ zFVL5lyj)17F)JtVSpiVUF-T9|{|vq0)9G!F5fR3^^g1A@R}<5}**?4oUfKgP;}qEF zQM{&ih_J?YMHD_yCcAPb?@4=Osw7Au{%4bOpD+0{Lxi2fAv=bTpa?7bkLV5P+SfFz z3Hh@mhKxm|Z%cuJUD#$(#^m`*T2fRls%_*`Kk9QoB!4`J%G};OK+|JF9M-Zc2U{y~ z6k!TO#^O6xJF1JbhvMox=K1=d9jCWUWy56fXd2p)T0!eOauA+uh$*Vz*H}2JWeQ1< zoQx%zsSFfd#a+mIkUji)PPeUqZQi`Vb-=8|Po>`gWn~yV1L8xxZ>K!QQrw9ebel;JZ>>R%%z(=D(cX5Z;8-F5 jVa!dU`^W@6Bn6fZA5LkE>5$E2{69k~e{HOdYXiRkJKuH1 literal 0 HcmV?d00001 diff --git a/static/img/fxblox-web/03-connect-blox.jpg b/static/img/fxblox-web/03-connect-blox.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07b3613667ea54890345d76948077003e582486c GIT binary patch literal 24789 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 DuU77E literal 0 HcmV?d00001 diff --git a/static/img/fxblox-web/04-connect-existing.jpg b/static/img/fxblox-web/04-connect-existing.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce4a99c4cc8e0db2fc57f19112158e0847fe0266 GIT binary patch literal 23859 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%0DIy6hDxsa}kCN{^nFp*2Ue2`86TZ7A;m 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