diff --git a/docs/faqs/lf-history.md b/docs/faqs/lf-history.md
index c890fbc..e93d1a1 100644
--- a/docs/faqs/lf-history.md
+++ b/docs/faqs/lf-history.md
@@ -2,6 +2,28 @@
## New Feature Highlights
+### Version 7.0.0
+
+!!! tip ""
+ New with *LoopFollow* v7.0.0:
+
+ * Requires iOS 18 or newer
+ * A [first-run onboarding guide](../setup/lf-setup.md#the-onboarding-guide){: target="_blank" } walks new users through setup; system permissions are requested only when first needed
+ * A [status banner](../setup/lf-features.md#status-banner){: target="_blank" } explains Nightscout, Dexcom Share, and heartbeat problems instead of silently showing no data
+ * [Custom alarm sounds](../setup/lf-features.md#custom-sounds){: target="_blank" } — use your own audio files as alarm tones
+ * [Skip options](../setup/lf-features.md#skip-options){: target="_blank" } keep Low/High BG alarms silent while glucose is already correcting, and the phone battery alarm silent while charging
+ * The [predictive Low BG alert](../setup/lf-features.md#predictive-low-alert){: target="_blank" } now works for *Trio* (watching all four forecast lines) and is fixed for *Loop*
+ * New [*Nightscout* Database Size](../setup/lf-setup.md#information-display){: target="_blank" } information row and alarm
+ * [Color thresholds](../setup/lf-setup.md#color-thresholds){: target="_blank" } for Information Display rows
+ * Search added to the alarms list, the Add Alarm sheet, and the [Menu](../setup/lf-setup.md#menu-screen){: target="_blank" }
+ * [APNS credentials can be exported/imported](../setup/lf-setup.md#importexport){: target="_blank" } via QR code
+ * Graph updates:
+ * All graphs rebuilt on native Swift Charts
+ * Dragging on the small graph moves the main chart in real time
+ * Rec. Bolus is shown using the pump's bolus increment
+
+### Version 6.2
+
!!! tip ""
New with *LoopFollow* v6.2:
@@ -21,6 +43,8 @@
* Trio forecast lines match Trio colors
* Trio Override / Temp Target display colors match Trio colors
+### Versions 6.0 and 6.1
+
!!! tip ""
New with *LoopFollow* v6.0 and v6.1:
@@ -31,6 +55,8 @@
* Settings rows updated for clarity
* For Trio users: choice of cone of uncertainty or forecast lines
+### Version 5.0
+
!!! tip ""
New with *LoopFollow* v5.0:
@@ -46,6 +72,8 @@ The feature history is summarized below in reverse chronological order.
| *LoopFollow* Version | Feature Added |
|:--|:--|
+| 7.0 | Requires iOS 18 or newer; first-run onboarding guide; graphs rebuilt on native Swift Charts |
+| 6.2 | WebSocket for near real-time *Nightscout* updates; Quick Pick remote buttons; Run Diagnostics for remote setup |
| 6.1 | Live Activity requires APN credentials
see [APN Settings](../setup/lf-setup.md#apn){: target="_blank" } |
| 6.0 | Live Activity added - Browser Builders must use LoopFollow App Group to build
see [Browser Build: Add LoopFollow App Group](../build/lf-browser-build.md#create-app-group){: target="_blank" } |
| 4.6 | Real-time APNS notifications returned from the *Loop* phone (requires *Loop* v3.11.1 or newer) |
diff --git a/docs/index.md b/docs/index.md
index 47b681f..8886bbc 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -38,7 +38,7 @@ See [New Feature Highlights](faqs/lf-history.md#new-feature-highlights){: target
## Hardware Requirements
-The *LoopFollow* app will run on any iPhone or iPad that supports iOS 16.6 or newer operating system and on any Mac computer with an Apple Silicon chip, i.e., M1, M2, M3, M4, etc.
+The *LoopFollow* app will run on any iPhone or iPad that supports iOS 18 or newer operating system and on any Mac computer with an Apple Silicon chip, i.e., M1, M2, M3, M4, etc.
- - -
diff --git a/docs/remote/img/lf-lrc-bolus-old.png b/docs/remote/img/lf-lrc-bolus-old.png
deleted file mode 100644
index 017e9f5..0000000
Binary files a/docs/remote/img/lf-lrc-bolus-old.png and /dev/null differ
diff --git a/docs/remote/img/lf-lrc-bolus.png b/docs/remote/img/lf-lrc-bolus.png
index a75b992..8e825e2 100644
Binary files a/docs/remote/img/lf-lrc-bolus.png and b/docs/remote/img/lf-lrc-bolus.png differ
diff --git a/docs/remote/img/lf-lrc-diagnostics.png b/docs/remote/img/lf-lrc-diagnostics.png
new file mode 100644
index 0000000..3a03a45
Binary files /dev/null and b/docs/remote/img/lf-lrc-diagnostics.png differ
diff --git a/docs/remote/img/lf-lrc-meal.png b/docs/remote/img/lf-lrc-meal.png
index 5845330..b2e8113 100644
Binary files a/docs/remote/img/lf-lrc-meal.png and b/docs/remote/img/lf-lrc-meal.png differ
diff --git a/docs/remote/img/lf-lrc-override-modal.png b/docs/remote/img/lf-lrc-override-modal.png
new file mode 100644
index 0000000..0ed98a8
Binary files /dev/null and b/docs/remote/img/lf-lrc-override-modal.png differ
diff --git a/docs/remote/img/lf-lrc-override.png b/docs/remote/img/lf-lrc-override.png
index de6daf0..ed9489f 100644
Binary files a/docs/remote/img/lf-lrc-override.png and b/docs/remote/img/lf-lrc-override.png differ
diff --git a/docs/remote/img/lf-trc-bolus.png b/docs/remote/img/lf-trc-bolus.png
new file mode 100644
index 0000000..267fa92
Binary files /dev/null and b/docs/remote/img/lf-trc-bolus.png differ
diff --git a/docs/remote/img/lf-trc-meal.png b/docs/remote/img/lf-trc-meal.png
new file mode 100644
index 0000000..c3aafb9
Binary files /dev/null and b/docs/remote/img/lf-trc-meal.png differ
diff --git a/docs/remote/img/lf-trc-override.png b/docs/remote/img/lf-trc-override.png
new file mode 100644
index 0000000..268fca0
Binary files /dev/null and b/docs/remote/img/lf-trc-override.png differ
diff --git a/docs/remote/img/lf-trc-temp-target.png b/docs/remote/img/lf-trc-temp-target.png
new file mode 100644
index 0000000..5dd7981
Binary files /dev/null and b/docs/remote/img/lf-trc-temp-target.png differ
diff --git a/docs/remote/remote-control-loop.md b/docs/remote/remote-control-loop.md
index 0d49e59..2d2994c 100644
--- a/docs/remote/remote-control-loop.md
+++ b/docs/remote/remote-control-loop.md
@@ -60,19 +60,30 @@ Example messages are highlighted by red rectangles in the composite below for re
### Remote Meal
-***More info coming soon!***
+The Meal screen sends remote carbs to *Loop*:
+
+* **Carbs Amount** — up to the **Max Carbs** guardrail set in Remote Settings.
+* **Time** — defaults to now; the − / + buttons move it in 5-minute steps, or tap the time to pick it directly. Entries can be backdated up to 12 hours or set up to 1 hour into the future.
+* **Food Type** — the emoji shortcuts also set the absorption time: 🍭 30 minutes, 🌮 3 hours, 🍕 5 hours. The plate opens a custom picker; absorption time can be set between 0.5 and 8 hours.
+* **Security** — the current one-time password (OTP) is displayed with its remaining lifetime. Codes rotate every 30 seconds, and each code can authorize only **one** command — after sending, the Send button stays disabled until the next code is issued.
+
+Tapping **Send Carbs** shows a confirmation of the entry before anything is sent.
{width="300"}
{align=center}
### Remote Bolus
-***More info coming soon!***
+The Insulin screen sends a remote bolus to *Loop*:
+* **Recommended Bolus** — when the last recommendation *Loop* uploaded is less than 12 minutes old, it is shown at the top; tap the arrow to fill it into the amount field. A warning reminds you that new treatments may have occurred since it was calculated.
+* **Insulin Amount** — from 0.025 U up to the **Max Bolus** guardrail set in Remote Settings.
+* **Security** — the same one-time password rules as Remote Meal apply: the code rotates every 30 seconds and each code can be used only once.
-| Recent Rec Bolus | Last `Loop` > 12 minutes |
-|:-:|:-:|
-| {width="300"} | {width="300"} |
+After the confirmation, you must authenticate with Face ID or your passcode before the bolus command is sent.
+
+{width="300"}
+{align=center}
!!! tip "Make sure *Loop* information is up to date"
The insulin amount is filled out with the last recommended bolus that *LoopFollow* downloaded from the *Nightscout* site, which in turn was uploaded from the *Loop* phone.
@@ -126,11 +137,21 @@ or **Quick-Pick Meals** in the app for a short in-screen explanation.
### Overrides
-***More info coming soon!***
+The override presets listed on this screen are defined in *Loop* — *LoopFollow* reads them (name, symbol, target range, overall insulin needs, and duration) from the profile that *Loop* uploads to *Nightscout*. New presets cannot be created from *LoopFollow*.
{width="300"}
{align=center}
+Tap a preset to open the activation sheet:
+
+* Presets with a set duration are activated for that duration.
+* Presets defined as indefinite in *Loop* offer a choice: leave **Enable indefinitely** on, or turn it off and pick a duration with the slider (15 minutes up to 24 hours, in 15-minute steps).
+
+{width="300"}
+{align=center}
+
+While an override is active, it is listed in an **Active Override** section with a button to cancel it.
+
- - -
## FAQs for Remote Commands
@@ -340,5 +361,33 @@ The graphic below shows a properly configured *LoopFollow* when the *Loop* app w
## Troubleshooting
-This section is a placeholder for troubleshooting issues.
+* [Loop Remote Control is not available or stopped working](#loop-remote-control-is-not-available-or-stopped-working)
+* [Run Diagnostics](#run-diagnostics)
+* [Common send errors](#common-send-errors)
+
+### Loop Remote Control is not available or stopped working
+
+*LoopFollow* addresses commands to the *Loop* phone using the **device token** and **bundle ID** found in the profile that *Loop* uploads to your *Nightscout* site. Both are shown in the **Debug / Info** section at the bottom of Remote Settings. If they are empty or outdated — for example after the *Loop* app was rebuilt or moved to a new phone — commands cannot reach the *Loop* phone until *Loop* uploads a fresh profile.
+
+### Run Diagnostics
+
+The **Run diagnostics** button in the Debug / Info section of Remote Settings scans the recent profile uploads on your *Nightscout* site and warns about the most common causes of failing remote commands:
+
+* **Profile uploaded by a different app** — the current *Nightscout* profile was uploaded by another app than the one you are configured for. When *Loop* and *Trio* share one *Nightscout* site, they overwrite each other's profile.
+* **Multiple devices uploading profiles** — device tokens are alternating between recent profile uploads, which usually means more than one installation of the app is uploading to the same *Nightscout*. Remove the app from spare or unused phones.
+* **Future-dated profile record found** — *LoopFollow* ignores profile records dated in the future; they usually come from a phone with the wrong system clock. Consider deleting the record.
+
+{width="300"}
+{align=center}
+
+### Common send errors
+
+If sending a command fails immediately, *LoopFollow* shows the reason:
+
+| Message | Usual cause |
+|:--|:--|
+| Authentication error / JWT error | The APNS Key ID, APNS Key, or Team ID is wrong |
+| Bad request | The **Production** environment toggle does not match how *Loop* was built — Production on for browser builds, off for Xcode builds |
+| The device token is no longer active | *Loop* was rebuilt or moved; wait for *Loop* to upload a fresh profile with the new token |
+| Too many requests | APNS is rate-limiting; wait before retrying |
diff --git a/docs/remote/remote-control-trio.md b/docs/remote/remote-control-trio.md
index 08b31d1..4ffca45 100644
--- a/docs/remote/remote-control-trio.md
+++ b/docs/remote/remote-control-trio.md
@@ -70,7 +70,17 @@ The sequence is *LoopFollow* to *Apple Push Notifications* to *Trio*, which uplo
### Remote Meal
-***More info coming soon!***
+The Meal screen sends a remote meal entry to *Trio*:
+
+* **Carbs** — up to the **Max Carbs** guardrail set in Remote Settings.
+* **Fat** and **Protein** — shown when **Meal with Fat/Protein** is enabled in [Meal Settings](#meal-settings), each with its own guardrail.
+* **Bolus Amount** — shown when **Meal with Bolus** is enabled, capped by the **Max Bolus** guardrail.
+* **Schedule for later** — enter the carbs at a chosen time instead of now.
+
+{width="300"}
+{align=center}
+
+Tapping **Send Meal** shows a confirmation that summarizes the whole entry. If a bolus is included, you must also authenticate with Face ID or your passcode before the command is sent.
When entering meals and choosing to schedule the meal, any bolus included in the meal is enacted immediately. Only the carb entry is entered according to the schedule.
@@ -79,7 +89,15 @@ When entering meals and choosing to schedule the meal, any bolus included in the
### Remote Bolus
-***More info coming soon!***
+The Bolus screen sends a remote bolus to *Trio*:
+
+* **Recommended Bolus** — when *Trio*'s latest recommendation is less than 12 minutes old, it is shown at the top; tap the arrow to fill it into the amount field. A warning reminds you that new treatments may have occurred since it was calculated.
+* **Bolus Amount** — capped by the **Max Bolus** guardrail. The amount is rounded down to the pump's bolus increment, which is detected automatically from *Nightscout*; a manual **Bolus Increment** setting appears in Remote Settings only when it cannot be detected.
+
+After the confirmation, you must authenticate with Face ID or your passcode before the bolus command is sent.
+
+{width="300"}
+{align=center}
### Quick-Pick Boluses and Meals
@@ -130,11 +148,26 @@ or **Quick-Pick Meals** in the app for a short in-screen explanation.
### Temp Target
-***More info coming soon!***
+The Temp Target screen enacts or cancels a temporary glucose target on *Trio*:
+
+* **Target** — between 80 and 200 mg/dL, shown in your glucose unit.
+* **Duration** — at least 5 minutes.
+* **Enact** — shows a confirmation with the target and duration before sending.
+* **Save as Preset** — stores the current values under a name of your choice. Presets are listed below the entry card; tap one to enact it, swipe left to delete it.
+
+{width="300"}
+{align=center}
+
+When a temp target is already running, the screen shows it with a **Cancel Temp Target** button.
### Overrides
-***More info coming soon!***
+The override presets listed on this screen are defined in *Trio* — *LoopFollow* reads them (name, duration, percentage, and target) from the profile that *Trio* uploads to *Nightscout*. New presets cannot be created from *LoopFollow*.
+
+Tap a preset to activate it; a confirmation is shown before the command is sent. While an override is active, it is listed with a button to cancel it.
+
+{width="300"}
+{align=center}
- - -
diff --git a/docs/setup/img/lf-background-refresh-scanning.png b/docs/setup/img/lf-background-refresh-scanning.png
new file mode 100644
index 0000000..3f9e46f
Binary files /dev/null and b/docs/setup/img/lf-background-refresh-scanning.png differ
diff --git a/docs/setup/img/lf-background-refresh-type.png b/docs/setup/img/lf-background-refresh-type.png
new file mode 100644
index 0000000..5271380
Binary files /dev/null and b/docs/setup/img/lf-background-refresh-type.png differ
diff --git a/docs/setup/img/lf-contact-settings.png b/docs/setup/img/lf-contact-settings.png
new file mode 100644
index 0000000..e2d0397
Binary files /dev/null and b/docs/setup/img/lf-contact-settings.png differ
diff --git a/docs/setup/img/lf-snoozer-alarm.png b/docs/setup/img/lf-snoozer-alarm.png
new file mode 100644
index 0000000..d48c845
Binary files /dev/null and b/docs/setup/img/lf-snoozer-alarm.png differ
diff --git a/docs/setup/img/lf-snoozer-snoozed.png b/docs/setup/img/lf-snoozer-snoozed.png
new file mode 100644
index 0000000..631fb5b
Binary files /dev/null and b/docs/setup/img/lf-snoozer-snoozed.png differ
diff --git a/docs/setup/img/lf-snoozer.png b/docs/setup/img/lf-snoozer.png
new file mode 100644
index 0000000..0bc2cf5
Binary files /dev/null and b/docs/setup/img/lf-snoozer.png differ
diff --git a/docs/setup/img/onboarding-data-source.png b/docs/setup/img/onboarding-data-source.png
new file mode 100644
index 0000000..70c0bc2
Binary files /dev/null and b/docs/setup/img/onboarding-data-source.png differ
diff --git a/docs/setup/img/onboarding-nightscout.png b/docs/setup/img/onboarding-nightscout.png
new file mode 100644
index 0000000..3a51c02
Binary files /dev/null and b/docs/setup/img/onboarding-nightscout.png differ
diff --git a/docs/setup/img/onboarding-overview.png b/docs/setup/img/onboarding-overview.png
new file mode 100644
index 0000000..b5568c8
Binary files /dev/null and b/docs/setup/img/onboarding-overview.png differ
diff --git a/docs/setup/img/onboarding-welcome.png b/docs/setup/img/onboarding-welcome.png
new file mode 100644
index 0000000..c811996
Binary files /dev/null and b/docs/setup/img/onboarding-welcome.png differ
diff --git a/docs/setup/lf-features.md b/docs/setup/lf-features.md
index 6c41dbc..cf8a1bc 100644
--- a/docs/setup/lf-features.md
+++ b/docs/setup/lf-features.md
@@ -4,10 +4,30 @@ Most features and the settings that control them are self-explanatory and docume
- - -
+## Status Banner
+
+When *LoopFollow* has trouble reaching your data source or keeping itself awake in the background, it shows a dismissable banner across the top of the screen. The banner is visible on every tab and pushes the content down rather than covering it. It explains *what* went wrong so you can fix it, instead of the app silently showing no data.
+
+### What it reports
+
+* **Nightscout problems** — after a failed download, *LoopFollow* checks your site and reports the cause, for example *"The token is invalid."*, *"A token is required."*, *"The site was not found."*, or *"A network error occurred."* If the site is reachable but the data still didn't load, a softer warning says so.
+* **Dexcom Share problems** — a failed *Dexcom Share* login is explained in plain language (account not found, incorrect username or password, or too many failed attempts). If *Nightscout* is also configured, *LoopFollow* falls back to it and the banner notes that data keeps flowing using *Nightscout* as backup.
+* **Frequent heartbeat dropouts** — when a [Bluetooth heartbeat](#bluetooth-heartbeat) device starts arriving late repeatedly within the last hour — a typical sign of a dying transmitter battery — the banner suggests checking the transmitter/RileyLink/pod battery or Bluetooth range. A single late beat never triggers it.
+
+### Clearing and dismissing
+
+* A banner clears **automatically** when its source recovers (the next successful download, or a clean heartbeat window) or when you remove that source (URL/credentials cleared, device disconnected).
+* Tapping **✕** hides the banner. The same problem stays hidden for about 30 minutes and then reappears if it is still occurring; a *different* problem appears right away.
+* When more than one source has a problem, the most serious message is shown first; dismissing it reveals the next one.
+
+- - -
+
## Alarms
When you select the Alarms Feature, the initial screen will be blank. By tapping on the plus sign upper right, you can add as many alarms as desired. There is quick access to the overall [Alarm Settings](lf-setup.md#alarms) by tapping the gear icon on this screen.
+Both the alarms list and the **Add Alarm** sheet have a search field. On the alarms list, type to filter your configured alarms by name or alarm type. In the **Add Alarm** sheet, type to filter the available alarm types by name, description, or group — non-matching groups are hidden. When nothing matches, a **No Results** message is shown.
+
The graphic below shows a few typical alarms that might be chosen.
{width="350"}
@@ -23,6 +43,40 @@ The graphic below shows the many types of alarms that are available with *LoopFo
{width="700"}
{align="center"}
+### Alarm Sounds
+
+Each alarm plays a tone that you choose in the alarm's settings. Tap **Choose Tone** to open the tone picker, where you can preview and select from the built-in tones.
+
+#### Custom Sounds
+
+You can also use your own audio as an alarm tone. In the tone picker, the **Custom** section at the top offers two ways to add sounds:
+
+* **Import Sound…** — opens the Files browser so you can pick an audio file.
+* **Shared folder** — drop audio files into *LoopFollow*'s folder in the Files app; they are picked up automatically the next time you open the tone picker.
+
+Imported sounds must be a supported audio format (mp3, wav, m4a, aac, aif/aiff, caf), no larger than **2 MB**, and no longer than **30 seconds**.
+
+Custom sounds are stored on your device only and are **not** included in a settings export. Swipe a custom sound to delete it; any alarm still using a deleted sound falls back to a built-in tone.
+
+### Skip Options
+
+Some alarms can be told to stay quiet when the situation is already correcting itself. These toggles are **off by default**, so existing alarms behave exactly as before.
+
+| Alarm | Option | Behavior |
+|:--|:--|:--|
+| Low BG | **Skip if BG is rising** | Stays silent while glucose is rising; only sounds when the latest reading is flat or still falling. |
+| High BG | **Skip if BG is falling** | Stays silent while glucose is falling; only sounds when the latest reading is flat or still rising. |
+| Low Battery (phone) | **Skip while charging** | Stays silent while the phone is charging. Requires the uploader to report charging status; if it doesn't, the alert still sounds. |
+
+For the two BG alarms, the direction is judged from the last two readings.
+
+### Predictive Low Alert
+
+The Low BG Alert can warn you *before* glucose actually goes low, based on the forecast from the looping app. In the alarm's settings, set **Predictive** to the number of minutes to look ahead in the forecast (up to 60); if any forecast value in that window is at or below the alarm's threshold, you are warned early. Set it to 0 to alert only on actual readings.
+
+* For *Loop*, the forecast that *Loop* uploads is used.
+* For *Trio*, the lowest of *Trio*'s four forecast lines (ZT, IOB, COB, UAM) at each point in time is used.
+
### Alarm Types Reference
The table below lists every alarm type available in *LoopFollow*, organized by group.
@@ -31,7 +85,7 @@ The table below lists every alarm type available in *LoopFollow*, organized by g
| Alarm | Description |
|:--|:--|
-| Low BG Alert | Alerts when BG goes below a limit |
+| Low BG Alert | Alerts when BG goes below a limit, now or in the [forecast](#predictive-low-alert) |
| High BG Alert | Alerts when BG rises above a limit |
| Fast Drop Alert | Rapid downward BG trend |
| Fast Rise Alert | Rapid upward BG trend |
@@ -60,6 +114,7 @@ The table below lists every alarm type available in *LoopFollow*, organized by g
| Sensor Change Alert | Sensor change due |
| Not Looping Alert | Loop hasn't completed within a configurable number of minutes |
| Looping app expiration | Looping-app build is expiring soon |
+| Nightscout Database Size | *Nightscout* database has filled to or above a chosen percentage of its configured size limit (defaults to 75%, daytime only) |
#### Override / Target
@@ -75,7 +130,28 @@ The table below lists every alarm type available in *LoopFollow*, organized by g
## Snoozer
-🚧 Documentation Under Construction 🚧
+The Snoozer is a dedicated tab designed for the night stand and at-a-glance monitoring: a black screen with a large glucose value, the trend arrow, the delta, how long ago the reading arrived, and a clock. When the reading is stale, the glucose value is crossed out. Like the other features, the Snoozer can be placed in the toolbar using [Settings: Tabs](lf-setup.md#tabs).
+
+{width="350"}
+{align="center"}
+
+Two options in [Settings: General](lf-setup.md#general) tailor the screen: **Show Display Name** adds the app name (handy when following more than one person), and **Snoozer emoji** adds a face that reflects the current glucose.
+
+### When an Alarm Sounds
+
+When an alarm fires, a card appears at the bottom of the Snoozer showing the alarm name, a **Snooze for** stepper, and a **Snooze** button. The stepper's unit and limits depend on the alarm type — minutes for most alarms, hours or days for slow-moving ones like the expiration alerts. Setting the stepper to 0 turns the button into **Acknowledge**, which silences the alarm without snoozing it.
+
+{width="350"}
+{align="center"}
+
+### Snooze All Alarms
+
+Tap anywhere on the Snoozer screen to show the bar at the top. When nothing is snoozed, it offers a one-tap **Snooze all · 1h** button, and a sun or moon symbol indicates whether your daytime or nighttime alarm hours are active. The bar hides itself again after a few seconds.
+
+While a global snooze is active, the bar reads **All alerts snoozed** and shows the end date and time — tap either one to adjust it — along with **− 30m** and **+ 30m** buttons and **End now**. Adjusting the end time below the current time also ends the snooze.
+
+{width="350"}
+{align="center"}
- - -
@@ -146,16 +222,25 @@ These devices can provide a constant Bluetooth connection for your *LoopFollow*
* Dexcom Device (the battery can last for months after it is no longer in service with a sensor)
* Dexcom G5/G6/ONE/Anubis transmitter
* Dexcom G7/ONE+ sensor
+* Omnipod DASH pod within Bluetooth range (provides a heartbeat about every 3 minutes)
If you use *LoopFollow* on your Looping phone for the features offered, you can connect to your own Dexcom device. You don’t need to use an expired device in addition.
#### How do I configure Bluetooth Heartbeat?
-These graphics walk you through how to select the Background Refresh Type. The example shows the steps if you choose to use a Dexcom Device (G5/G6/ONE/G7/ONE+). A similar process is used for a radiolink device.
+Open Settings: Background Refresh and tap **Background Refresh Type** to pick a mode. The example below shows the steps if you choose to use a Dexcom Device (G6/ONE/G7/ONE+). A similar process is used for a radiolink device or an Omnipod DASH pod.
-If the person using *LoopFollow* is also wearing a Dexcom or radiolink, they should choose their own device. The RSSI is a measure of the strength of the signal. It is normal for the Dexcom device to disconnect. It will reconnect regularly.
+{width="350"}
+{align="center"}
+
+After selecting a Bluetooth type, *LoopFollow* scans for nearby devices and lists what it finds — tap a device to connect it.
-🚧 import graphics from lnl 🚧
+{width="350"}
+{align="center"}
+
+Once connected, the **Selected Device** card shows the device name, its connection status, the signal strength (RSSI), and the expected BG delay, along with a Disconnect button.
+
+If the person using *LoopFollow* is also wearing a Dexcom or radiolink, they should choose their own device. The RSSI is a measure of the strength of the signal. It is normal for the Dexcom device to disconnect. It will reconnect regularly.
- - -
@@ -206,5 +291,8 @@ Bullet List with Instructions:
You’re ready to monitor your glucose data directly on your Apple Watch!
-🚧 import graphics from lnl 🚧
+The Contact settings screen also offers color options for the complication (not all watch faces honor them) and lets you include the trend, delta, or IOB in the same or a separate contact:
+
+{width="350"}
+{align="center"}
diff --git a/docs/setup/lf-setup.md b/docs/setup/lf-setup.md
index 3062483..c772995 100644
--- a/docs/setup/lf-setup.md
+++ b/docs/setup/lf-setup.md
@@ -1,19 +1,54 @@
## Initial Configuration
-After you build *LoopFollow* the first time, you are asked a few questions (your initial choices can always be modified later):
+The first time you open *LoopFollow*, a short **onboarding guide** walks you through the essentials. It takes about five minutes, and anything you choose can be changed later in Settings. If you are already familiar with *LoopFollow* — for example when setting up a second phone — tap **Skip** at the top of any step to jump straight to the app.
-* **Calendar Access**: if you want to allow *LoopFollow* to provide real-time updates to carplay using the Calendar, choose **Allow Full Access**
-* **Bluetooth Access**: if you want to use an expired Dexcom sensor or a spare RileyLink device to keep *LoopFollow* running in the background while your phone is locked, choose **Allow**
-* **Notifications**: if you want *LoopFollow* to notify you for any of your alarms or if *LoopFollow* stops working, choose **Allow**
+!!! note "Permissions are no longer requested at launch"
+ *LoopFollow* does not ask for Notifications, Calendar, or Bluetooth permission when it first starts. Each is requested only when you first use the feature that needs it — see [Deferred permissions](#deferred-permissions) below — so a fresh install opens with the guide instead of a stack of prompts.
-You will then be presented with a home screen as shown below.
+### The Onboarding Guide
-{width="300"}
+{width="280"}
+{width="280"}
+{align="center"}
+
+The guide steps through:
+
+1. **Welcome** — a short introduction with a **Get Started** button.
+2. **Overview** — *"Here's what we'll do"*: connect your data, units & metrics, recommended alarms, and finish up.
+3. **Choose a data source** — *LoopFollow* needs a glucose source. Pick one (you can change or add more later):
+ * **Nightscout**
+ * **Dexcom Share**
+ * **Copy from another phone** — scan a QR code exported from a phone that is already set up
+4. **Connect** — enter credentials for the source you picked:
+ * *Nightscout*: enter or paste your **Site URL**. For the access token, choose **I have a token** (paste a token, or a URL that already includes one) or **Create one for me**, which uses your Nightscout **API secret** once to create a read-only token. The API secret only authorizes that request and is never stored.
+ * *Dexcom Share*: enter your **Username** and **Password**, and choose **US** or **Outside US**.
+5. **Units & metrics** — choose your glucose unit and how statistics are measured and displayed. See [Units and Metrics](#units-and-metrics).
+6. **Alarm basics** — set when your day and night begin, and how alarm sound behaves (for example, overriding the system volume so alarms are heard when the phone is silenced or in a Focus mode).
+7. **Recommended alarms** — a set of useful alarms is offered with sensible defaults and a single control each: **Low glucose**, **Urgent low**, **High glucose**, **Fast drop**, and **Missed readings**. When following *Nightscout*, alarms that rely on loop/uploader data are also offered: **Not looping**, **Looping phone battery**, **IOB**, **COB**, **Sensor change**, **Pump change**, and **Pump insulin**. Alarm types you already have are not offered again.
+8. **Tabs** — arrange which features sit in the tab bar. You can always reach everything through the [Menu](#menu-screen).
+9. **Notifications** — *LoopFollow* explains why it needs notifications for alarms, then asks iOS for permission. Choose **Enable Notifications** or **Not now**.
+10. **Privacy** — optionally share anonymous diagnostics to help improve *LoopFollow*. Choose **Yes, send anonymous stats** or **No thanks**; you can change this any time in Settings → General → Diagnostics. See [Telemetry](../privacy/lf-telemetry.md){: target="_blank" } for exactly what is and isn't shared.
+11. **You're all set** — a summary with a **Finish** button, plus a few features worth exploring next.
+
+{width="280"}
+{width="280"}
{align="center"}
+### Deferred Permissions
+
+*LoopFollow* asks for each system permission only when it is first needed:
+
+* **Notifications** — requested when you set up alarms in the guide, or the first time you add an alarm.
+* **Camera** — requested when you need to scan a QR code, for example to import a configuration from a different phone or set up Loop remote control
+* **Calendar** — requested from the [Calendar](#calendar) settings screen when you enable calendar updates for CarPlay.
+* **Bluetooth** — requested only when you choose a Bluetooth [Background Refresh](lf-features.md#background-refresh){: target="_blank" } mode (an expired Dexcom sensor or a RileyLink device).
+
### Setup Your Data Source
-Tap on the "Setup Nightscout" button or "Setup Dexcom Share" button to enter your credentials for your preferred service.
+If you skip the guide, or finish it without adding a source, you land on the home screen below. Tap the **Setup Nightscout** button or **Setup Dexcom Share** button to enter your credentials for your preferred service.
+
+{width="300"}
+{align="center"}
For more information about how to configure your data source, refer to these sections:
@@ -66,6 +101,8 @@ The following graphic shows the menu screen. The menu can always be reached usin
* Settings, Logging and Build Information are covered below
* [Support & Community](../index.md#community-support-and-build-help){: target="_blank" } are discussed on the *LoopFollowDocs* home page
+The Menu has a search field. Type to filter the menu's own rows (Settings, the tab features, View Log / Share Logs, and the support links) as well as the rows inside the Settings screen (General, Graph, Units and Metrics, Alarms, …). Selecting a Settings result opens that screen directly. An empty search shows the normal menu; a query with no matches shows a **No Results** state.
+
{width=400}
{align="center"}
@@ -183,7 +220,7 @@ There are a few more sections on the Settings screen. These are summarized in th
| Alarms | Control overall alarm behavior; individual alarms are configured in the Alarms feature | [Alarms](#alarms) |
| Calendar | Configure calendar updates for CarPlay | [Calendar](#calendar) |
| Contact | Configure real-time glucose updates on Apple Watch | [Contact](#contact) |
-| Advanced | Control which data is downloaded from Nightscout and adjust graph options | [Advanced](#advanced) |
+| Advanced | Control which data is downloaded from Nightscout and adjust graph options | [Advanced](#advanced-settings) |
- - -
@@ -199,7 +236,7 @@ These settings are accessed through the General row in the Settings screen.
| Persistent Notification | Typically disabled
When enabled, glucose is reported with every update |
| Appearance | Choose Light, Dark or System for appearance |
| Display Stats | When enabled, statistics for the last 24 hours are displayed on Home screen |
-| Display Small Graph | When enabled, a full history graph is displayed under the main plot. The history is determined by the Number of Days Back chosen in the Graph screen |
+| Display Small Graph | When enabled, a full history graph is displayed under the main plot. The history is determined by the Number of Days Back chosen in the Graph screen. Tap the small graph to move the main graph to that point in time; drag your finger across it to scrub the main graph in real time |
| Color BG Text | When enabled, use colors to highlight low, in-range and high values |
| Keep Screen Active | When enabled, override the auto-lock setting
This works whether the phone is plugged in or not, so be sure to lock screen manually|
| Show Display Name | When enabled, the app name is shown on the Home screen
Very useful if more than one person is being followed|
@@ -242,6 +279,7 @@ These items can be chosen for display on the Home screen. A Nightscout Site is r
* The order in the table below is the order in the LoopFollow code
* You can drag the rows up and down to suit your preferred order
+ * Tap a row to open its detail, where you set its visibility and, for supported rows, [color thresholds](#color-thresholds)
| Name | Description | `Loop` / `Trio` / Both |
|:--|:--|:-:|
@@ -254,7 +292,7 @@ These items can be chosen for display on the Home screen. A Nightscout Site is r
| Pump Battery | Battery level on pumps that report levels | Both |
| SAGE | Sensor Age | Both |
| CAGE | Cannula Age | Both |
-| Rec. Bolus | Recommended bolus
from last `loop` | Both |
+| Rec. Bolus | Recommended bolus
from last `loop`, shown using the pump's bolus increment | Both |
| Min/Max | Minimum and maximum values for glucose from current OS-AID forecast | Both |
| Carbs today | Total grams of Carbs since Midnight | Both |
| Autosens | `Trio`: autosens value | `Trio` |
@@ -265,6 +303,34 @@ These items can be chosen for display on the Home screen. A Nightscout Site is r
| Updated | Time of last `loop` | `Trio` |
| TDD | Total Daily Dose in the last 24 hours | `Trio` |
| IAGE | Insulin Age | Both |
+| DB Size | *Nightscout* database size: mebibytes (MiB) used and the percentage of the site's configured limit, for example `123 MiB (25%)`. Hidden by default | Both |
+
+!!! note "DB Size"
+ The **DB Size** row and the [*Nightscout* Database Size alarm](lf-features.md#alarms){: target="_blank" } both read from *Nightscout*'s `dbsize` plugin, so your site must have that plugin enabled. The percentage is measured against the site's `DBSIZE_MAX` setting, which is **496 MiB** unless the site owner changed it. Because that setting may not match your hosting plan's real limit, the row leads with the absolute used MiB figure, which is always meaningful.
+
+#### Color Thresholds
+
+Rows that show a single number can optionally turn **yellow** or **red** when their value crosses a threshold you set. This is a purely visual cue — it never triggers an alarm. Values that are in range stay green.
+
+To set them up, open a row's detail from the Information Display screen, turn on **Coloring**, and set the **Yellow at** and **Red at** thresholds. Each supported row starts with sensible defaults you can adjust.
+
+The "concerning" direction is fixed per row: battery and reservoir rows color when the value is **low**, while insulin/carb load and the age rows color when the value is **high**. *LoopFollow* keeps the Red threshold on the correct side of Yellow for that direction.
+
+Rows that support color thresholds:
+
+| Row | Colors when | Default Yellow / Red |
+|:--|:-:|:--|
+| IOB | high | 3 / 5 U |
+| COB | high | 30 / 60 g |
+| Battery (phone) | low | 30 / 15 % |
+| Pump Battery | low | 30 / 15 % |
+| Pump (reservoir) | low | 20 / 10 U |
+| TDD | high | 60 / 80 U |
+| Rec. Bolus | high | 1 / 2 U |
+| Carbs today | high | 150 / 250 g |
+| SAGE (sensor age) | high | 9 / 9.5 days |
+| CAGE (cannula age) | high | 2.5 / 3 days |
+| IAGE (insulin age) | high | 2.5 / 3 days |
### Units and Metrics
@@ -353,6 +419,7 @@ When setting up LoopFollow for another caregiver that will use some or all of th
* Nightscout Site and token
* Dexcom Share
* Remote Configuration
+* APNS credentials (APNS Key ID and Key)
* Alarms
@@ -371,12 +438,15 @@ To export settings, select one of the options for
* Export Nightscout Settings
* Export Dexcom Share Settings
* Export Remote Settings
+* Export APNS Settings
* Export Alarm Settings
{width="300"}
{align="center"}
-Export Nightscout Settings, Export Dexcom Share Settings and Export Remote Settings will show a QR code directly that you can scan with the receiving phone.
+Export Nightscout Settings, Export Dexcom Share Settings, Export Remote Settings and Export APNS Settings will show a QR code directly that you can scan with the receiving phone.
+
+> Export APNS Settings requires a valid APNS Key ID and APNS Key to be configured first. It transfers only the APNS credentials, so a caregiver setting up a second device can reuse the same key without re-entering it. Importing APNS settings overwrites the existing APNS Key ID and APNS Key on the receiving phone.
Export Alarm Settings will let you select up to 5 alarms at a time to export. If you re-enter the export screen after a successful export, it will mark the exported alarms so that you can export more alarms if needed