mobieusKnow Trends, medications and clinician reports (support) History #612
Author
Patrick Bass
Submitted
Sep 1, 2026 12:46pm
Summary
Customize Trends: what a missing section means now members can hide them
'''What support needs to know about Trends, Medications and clinician reports.'''
== The three surfaces ==
+ * '''Trends''' (`/health/trends`, and Health → Trends in both apps) — rolling averages, weight trend, nutrient adequacy, fasting, adherence, consistency, and a ranked insight list.
+ * '''Medications and interaction alerts''' (`/health/medications`, `/health/interactions`) — the member's medication list, one-tap dose logging, and alerts drawn from FDA product labeling.
+ * '''Share with a clinician''' (`/health/exports`) — a generated PDF plus CSV, shared on a revocable link.
* '''Trends''' (`/health/trends`, and Health → Trends in both apps) covers rolling averages, weight trend, nutrient adequacy, fasting, adherence, consistency, and a ranked insight list.
* '''Medications and interaction alerts''' (`/health/medications`, `/health/interactions`) hold the member's medication list, one-tap dose logging, and alerts drawn from FDA product labeling.
* '''Share with a clinician''' (`/health/exports`) produces a PDF plus CSV, shared on a revocable link.
== Which of these is paid ==
* '''Medications, dose logging, the interaction check and the alert list are FREE.''' This is a deliberate product decision: interaction information affects member safety and is not paywalled. If a member reports being asked to pay for it, that is a bug, not a tier.
* '''Trends and the clinician report are Premium''', enforced server-side.
+ Pre-launch access closed on 1 September 2026, so that line is live and does block. Note that the 52 accounts which existed at the close hold Loopa Premium Family for life and are not blocked by it — see ''Handling free tier, Premium and daily AI allowance tickets''.
Pre-launch access closed on 1 September 2026, so that line is live and does block. Note that the 52 accounts which existed at the close hold Loopa Premium Family for life and are not blocked by it. See ''Handling free tier, Premium and daily AI allowance tickets''.
== "My trends say there is not enough data" ==
Working as designed. Most trends need '''four fully logged days'''; a day counts as fully logged at three or more meals. The weight trend needs three weigh-ins spanning at least a week. The relationship section needs six weeks each carrying four full days.
+ The screen states what is missing in words. If a member sees a blank card with no message, that '''is''' a bug — report it.
The screen states what is missing in words. If a member sees a blank card with no message, that '''is''' a bug. Report it.
Partial days are deliberately excluded from averages and shown separately. A member asking "why is my average not counting Tuesday" logged fewer than three meals that day.
== "My nutrient targets are missing" ==
The member's profile is missing '''date of birth or sex'''. Targets are banded by both, and Loopa refuses to guess rather than hand out the wrong iron or calcium figure. Point them at Health → Settings.
== Interaction alerts: what to tell a member ==
* The data is '''FDA-approved product labeling''', obtained through openFDA. Every alert quotes the label's own sentence, names the section it came from, and carries the label's effective date and identifier.
* Severity reflects '''where the label states the information''', not a clinical grade. Boxed warning and contraindications map to Severe; warnings to Major; precautions and drug interactions to Moderate; dosing to Timing; patient information to Informational.
* Coverage is drug-drug, drug-food, drug-alcohol, drug-caffeine and drug-supplement '''to the extent the labels state them'''. '''Supplement-to-supplement is not covered''', and the app says so.
* Loopa '''never''' says a combination is safe, and '''never''' recommends starting, stopping or changing a dose. Every alert directs to a pharmacist or prescriber. Support must not go further than the app does.
* '''Nothing about the member is sent to the FDA.''' The labeling is copied to our own infrastructure weekly and the check runs there.
== "Loopa did not flag something my pharmacist did" ==
Say this plainly: Loopa reports what FDA product labeling '''states'''. A pharmacist draws on clinical references that go well beyond labeling, plus the member's own history. The two disagreeing is expected and the pharmacist is the authority.
+ Also check whether the item is '''unmapped''' — an item typed without picking a suggestion cannot be checked, and its row on the Medications screen says so. Ask the member to re-add it and pick the match.
Also check whether the item is '''unmapped'''. An item typed without picking a suggestion cannot be checked, and its row on the Medications screen says so. Ask the member to re-add it and pick the match.
+ == "It says no interactions found — am I safe?" ==
== "It says no interactions found. Am I safe?" ==
No, and the wording is chosen to avoid implying it. The statement names how many items were checked, against what, and at which dataset version. It means nothing was stated in the labeling for the items Loopa could match. Escalate nothing; repeat the app's own line and point them at their pharmacist.
== Share links ==
Format `https://loopa.mobieus.io/shared/<token>`.
+ * Public by design — the member's clinician has no Loopa account.
* Public by design, because the member's clinician has no Loopa account.
* Expire on a date the member set (7 days default, 90 max), revocable at any time.
* '''Revoking deletes the file''', not just the link. It cannot be un-revoked; the member creates a new report.
* An optional passcode is stored hashed. '''We cannot recover it.''' If the member forgot it, they revoke and re-create.
* Every access attempt is logged, including failures. A member can see how many times a link was opened.
+ A link that returns "no longer available" is expired, revoked, or never existed — the page deliberately does not distinguish them, because doing so would confirm to a stranger that a guessed link was real.
A link that returns "no longer available" is expired, revoked, or never existed. The page deliberately does not distinguish them, because doing so would confirm to a stranger that a guessed link was real.
== "My report is stuck preparing" ==
+
+ Generation runs off the request path. A 180-day report is thousands of rows through a PDF renderer. If it is still preparing after a few minutes, check that the tenant's health worker is running:
+ <pre>systemctl status mobieus-health-worker@loopa</pre>
Generation runs off the request path. A 180-day report is thousands of rows through a PDF renderer. If it is still preparing after a few minutes, raise it with platform support so the tenant's background worker can be checked.
Past three failed attempts a report is marked failed with a reason rather than staying queued forever. The member can create another.
== Where diligence material lives ==
+ The design docs, the extraction rules, the golden set and the performance work are in `docs/review-2026-08/` in the mobieus-io repository — `interactions.md`, `trends-and-reporting.md`, `clinician-export.md` and `performance.md`. Point enterprise or diligence requests there rather than answering from memory.
Design documentation covering the interaction rules, the extraction logic, the evaluation set and the performance work is held internally. Route enterprise or diligence requests to platform support rather than answering from memory.
== Open item ==
An independent pharmacist review of the interaction golden set and the alert copy has '''not''' been completed. Until it is, do not describe the feature as clinically reviewed in any channel.
== The Trends section list is server-defined (2026-09-01) ==
'''Both apps render Trends from one canonical list the server sends''', so order and labels
are the same on iPhone and Android and a rename reaches both without an app release. If a
member says a chart is called one thing on their phone and something else on their tablet,
+ that is worth escalating — it should not be possible.
that is worth escalating. It should not be possible.
Three things this changed that generate tickets:
* '''Android gained Activity, Fasting and Measurements on Trends.''' A member who used to say
"my fasting stats are on my wife's iPhone but not mine" now has them.
+ * '''"Energy" is now "Feeling"''' — the 1–5 check-in, named after the quick-log button that
* '''"Energy" is now "Feeling"''', the 1–5 check-in, named after the quick-log button that
writes it. A member searching help for "Energy chart" wants Feeling.
* '''A section with no data does not render.''' Fasting with no completed fasts, or
Measurements with no sites, is absent rather than empty. "My Fasting section disappeared"
+ is usually a member who has not fasted inside the selected range — check the range pill
is usually a member who has not fasted inside the selected range. Check the range pill
before treating it as a fault.
== "A section is missing from my Trends page" (2026-09-01) ==
'''Members can now switch Trends sections off themselves''', at You → Preferences → Customize
Trends. So a missing section has three possible causes and they are worth telling apart before
escalating:
* '''They turned it off.''' Check that screen first. The choice is stored per member and
follows them to every device, so "it is missing on my tablet too" is expected rather than
evidence of a fault.
+ * '''There is no data for the range.''' A section with nothing in it does not render — Fasting
* '''There is no data for the range.''' A section with nothing in it does not render. Fasting
with no completed fasts, Measurements with no sites. Check the range pill.
* '''They are on the free tier.''' Free members can READ the list and see every section, but
cannot change it; their page renders the full default. If a free member reports sections
missing, it is one of the two causes above, not the tier.
+ '''Everything defaults to ON, including new sections.''' A member who customised their page in
'''Everything defaults to ON, including new sections.''' A member who customized their page in
August still gets a chart added in September. There is no backfill and no "reset" button:
switching everything back on removes their stored row, which is the same state as never having
+ customised.
customized.
+ '''Customising is Premium; seeing the list is not.''' The write is gated (`customize_trends`)
+ and the read is open, which is deliberate — a free member's page renders from the same response
'''Customizing is Premium; seeing the list is not.''' The write is gated (`customize_trends`)
and the read is open, which is deliberate. A free member's page renders from the same response
a paying member's does.

'''What support needs to know about Trends, Medications and clinician reports.'''

== The three surfaces ==

* '''Trends''' (`/health/trends`, and Health → Trends in both apps) — rolling averages, weight trend, nutrient adequacy, fasting, adherence, consistency, and a ranked insight list. * '''Medications and interaction alerts''' (`/health/medications`, `/health/interactions`) — the member's medication list, one-tap dose logging, and alerts drawn from FDA product labeling. * '''Share with a clinician''' (`/health/exports`) — a generated PDF plus CSV, shared on a revocable link.

== Which of these is paid ==

* '''Medications, dose logging, the interaction check and the alert list are FREE.''' This is a deliberate product decision: interaction information affects member safety and is not paywalled. If a member reports being asked to pay for it, that is a bug, not a tier. * '''Trends and the clinician report are Premium''', enforced server-side.

Pre-launch access closed on 1 September 2026, so that line is live and does block. Note that the 52 accounts which existed at the close hold Loopa Premium Family for life and are not blocked by it — see ''Handling free tier, Premium and daily AI allowance tickets''.

== "My trends say there is not enough data" ==

Working as designed. Most trends need '''four fully logged days'''; a day counts as fully logged at three or more meals. The weight trend needs three weigh-ins spanning at least a week. The relationship section needs six weeks each carrying four full days.

The screen states what is missing in words. If a member sees a blank card with no message, that '''is''' a bug — report it.

Partial days are deliberately excluded from averages and shown separately. A member asking "why is my average not counting Tuesday" logged fewer than three meals that day.

== "My nutrient targets are missing" ==

The member's profile is missing '''date of birth or sex'''. Targets are banded by both, and Loopa refuses to guess rather than hand out the wrong iron or calcium figure. Point them at Health → Settings.

== Interaction alerts: what to tell a member ==

* The data is '''FDA-approved product labeling''', obtained through openFDA. Every alert quotes the label's own sentence, names the section it came from, and carries the label's effective date and identifier. * Severity reflects '''where the label states the information''', not a clinical grade. Boxed warning and contraindications map to Severe; warnings to Major; precautions and drug interactions to Moderate; dosing to Timing; patient information to Informational. * Coverage is drug-drug, drug-food, drug-alcohol, drug-caffeine and drug-supplement '''to the extent the labels state them'''. '''Supplement-to-supplement is not covered''', and the app says so. * Loopa '''never''' says a combination is safe, and '''never''' recommends starting, stopping or changing a dose. Every alert directs to a pharmacist or prescriber. Support must not go further than the app does. * '''Nothing about the member is sent to the FDA.''' The labeling is copied to our own infrastructure weekly and the check runs there.

== "Loopa did not flag something my pharmacist did" ==

Say this plainly: Loopa reports what FDA product labeling '''states'''. A pharmacist draws on clinical references that go well beyond labeling, plus the member's own history. The two disagreeing is expected and the pharmacist is the authority.

Also check whether the item is '''unmapped''' — an item typed without picking a suggestion cannot be checked, and its row on the Medications screen says so. Ask the member to re-add it and pick the match.

== "It says no interactions found — am I safe?" ==

No, and the wording is chosen to avoid implying it. The statement names how many items were checked, against what, and at which dataset version. It means nothing was stated in the labeling for the items Loopa could match. Escalate nothing; repeat the app's own line and point them at their pharmacist.

== Share links ==

Format `https://loopa.mobieus.io/shared/`.

* Public by design — the member's clinician has no Loopa account. * Expire on a date the member set (7 days default, 90 max), revocable at any time. * '''Revoking deletes the file''', not just the link. It cannot be un-revoked; the member creates a new report. * An optional passcode is stored hashed. '''We cannot recover it.''' If the member forgot it, they revoke and re-create. * Every access attempt is logged, including failures. A member can see how many times a link was opened.

A link that returns "no longer available" is expired, revoked, or never existed — the page deliberately does not distinguish them, because doing so would confirm to a stranger that a guessed link was real.

== "My report is stuck preparing" ==

Generation runs off the request path. A 180-day report is thousands of rows through a PDF renderer. If it is still preparing after a few minutes, check that the tenant's health worker is running:

systemctl status mobieus-health-worker@loopa

Past three failed attempts a report is marked failed with a reason rather than staying queued forever. The member can create another.

== Where diligence material lives ==

The design docs, the extraction rules, the golden set and the performance work are in `docs/review-2026-08/` in the mobieus-io repository — `interactions.md`, `trends-and-reporting.md`, `clinician-export.md` and `performance.md`. Point enterprise or diligence requests there rather than answering from memory.

== Open item ==

An independent pharmacist review of the interaction golden set and the alert copy has '''not''' been completed. Until it is, do not describe the feature as clinically reviewed in any channel.

== The Trends section list is server-defined (2026-09-01) ==

'''Both apps render Trends from one canonical list the server sends''', so order and labels are the same on iPhone and Android and a rename reaches both without an app release. If a member says a chart is called one thing on their phone and something else on their tablet, that is worth escalating — it should not be possible.

Three things this changed that generate tickets:

* '''Android gained Activity, Fasting and Measurements on Trends.''' A member who used to say "my fasting stats are on my wife's iPhone but not mine" now has them. * '''"Energy" is now "Feeling"''' — the 1–5 check-in, named after the quick-log button that writes it. A member searching help for "Energy chart" wants Feeling. * '''A section with no data does not render.''' Fasting with no completed fasts, or Measurements with no sites, is absent rather than empty. "My Fasting section disappeared" is usually a member who has not fasted inside the selected range — check the range pill before treating it as a fault.

== "A section is missing from my Trends page" (2026-09-01) ==

'''Members can now switch Trends sections off themselves''', at You → Preferences → Customize Trends. So a missing section has three possible causes and they are worth telling apart before escalating:

* '''They turned it off.''' Check that screen first. The choice is stored per member and follows them to every device, so "it is missing on my tablet too" is expected rather than evidence of a fault. * '''There is no data for the range.''' A section with nothing in it does not render — Fasting with no completed fasts, Measurements with no sites. Check the range pill. * '''They are on the free tier.''' Free members can READ the list and see every section, but cannot change it; their page renders the full default. If a free member reports sections missing, it is one of the two causes above, not the tier.

'''Everything defaults to ON, including new sections.''' A member who customised their page in August still gets a chart added in September. There is no backfill and no "reset" button: switching everything back on removes their stored row, which is the same state as never having customised.

'''Customising is Premium; seeing the list is not.''' The write is gated (`customize_trends`) and the read is open, which is deliberate — a free member's page renders from the same response a paying member's does.

'''What support needs to know about Trends, Medications and clinician reports.'''

== The three surfaces ==

* '''Trends''' (`/health/trends`, and Health → Trends in both apps) — rolling averages, weight trend, nutrient adequacy, fasting, adherence, consistency, and a ranked insight list.
* '''Medications and interaction alerts''' (`/health/medications`, `/health/interactions`) — the member's medication list, one-tap dose logging, and alerts drawn from FDA product labeling.
* '''Share with a clinician''' (`/health/exports`) — a generated PDF plus CSV, shared on a revocable link.

== Which of these is paid ==

* '''Medications, dose logging, the interaction check and the alert list are FREE.''' This is a deliberate product decision: interaction information affects member safety and is not paywalled. If a member reports being asked to pay for it, that is a bug, not a tier.
* '''Trends and the clinician report are Premium''', enforced server-side.

Pre-launch access closed on 1 September 2026, so that line is live and does block. Note that the 52 accounts which existed at the close hold Loopa Premium Family for life and are not blocked by it — see ''Handling free tier, Premium and daily AI allowance tickets''.

== "My trends say there is not enough data" ==

Working as designed. Most trends need '''four fully logged days'''; a day counts as fully logged at three or more meals. The weight trend needs three weigh-ins spanning at least a week. The relationship section needs six weeks each carrying four full days.

The screen states what is missing in words. If a member sees a blank card with no message, that '''is''' a bug — report it.

Partial days are deliberately excluded from averages and shown separately. A member asking "why is my average not counting Tuesday" logged fewer than three meals that day.

== "My nutrient targets are missing" ==

The member's profile is missing '''date of birth or sex'''. Targets are banded by both, and Loopa refuses to guess rather than hand out the wrong iron or calcium figure. Point them at Health → Settings.

== Interaction alerts: what to tell a member ==

* The data is '''FDA-approved product labeling''', obtained through openFDA. Every alert quotes the label's own sentence, names the section it came from, and carries the label's effective date and identifier.
* Severity reflects '''where the label states the information''', not a clinical grade. Boxed warning and contraindications map to Severe; warnings to Major; precautions and drug interactions to Moderate; dosing to Timing; patient information to Informational.
* Coverage is drug-drug, drug-food, drug-alcohol, drug-caffeine and drug-supplement '''to the extent the labels state them'''. '''Supplement-to-supplement is not covered''', and the app says so.
* Loopa '''never''' says a combination is safe, and '''never''' recommends starting, stopping or changing a dose. Every alert directs to a pharmacist or prescriber. Support must not go further than the app does.
* '''Nothing about the member is sent to the FDA.''' The labeling is copied to our own infrastructure weekly and the check runs there.

== "Loopa did not flag something my pharmacist did" ==

Say this plainly: Loopa reports what FDA product labeling '''states'''. A pharmacist draws on clinical references that go well beyond labeling, plus the member's own history. The two disagreeing is expected and the pharmacist is the authority.

Also check whether the item is '''unmapped''' — an item typed without picking a suggestion cannot be checked, and its row on the Medications screen says so. Ask the member to re-add it and pick the match.

== "It says no interactions found — am I safe?" ==

No, and the wording is chosen to avoid implying it. The statement names how many items were checked, against what, and at which dataset version. It means nothing was stated in the labeling for the items Loopa could match. Escalate nothing; repeat the app's own line and point them at their pharmacist.

== Share links ==

Format `https://loopa.mobieus.io/shared/<token>`.

* Public by design — the member's clinician has no Loopa account.
* Expire on a date the member set (7 days default, 90 max), revocable at any time.
* '''Revoking deletes the file''', not just the link. It cannot be un-revoked; the member creates a new report.
* An optional passcode is stored hashed. '''We cannot recover it.''' If the member forgot it, they revoke and re-create.
* Every access attempt is logged, including failures. A member can see how many times a link was opened.

A link that returns "no longer available" is expired, revoked, or never existed — the page deliberately does not distinguish them, because doing so would confirm to a stranger that a guessed link was real.

== "My report is stuck preparing" ==

Generation runs off the request path. A 180-day report is thousands of rows through a PDF renderer. If it is still preparing after a few minutes, check that the tenant's health worker is running:

<pre>systemctl status mobieus-health-worker@loopa</pre>

Past three failed attempts a report is marked failed with a reason rather than staying queued forever. The member can create another.

== Where diligence material lives ==

The design docs, the extraction rules, the golden set and the performance work are in `docs/review-2026-08/` in the mobieus-io repository — `interactions.md`, `trends-and-reporting.md`, `clinician-export.md` and `performance.md`. Point enterprise or diligence requests there rather than answering from memory.

== Open item ==

An independent pharmacist review of the interaction golden set and the alert copy has '''not''' been completed. Until it is, do not describe the feature as clinically reviewed in any channel.

== The Trends section list is server-defined (2026-09-01) ==

'''Both apps render Trends from one canonical list the server sends''', so order and labels
are the same on iPhone and Android and a rename reaches both without an app release. If a
member says a chart is called one thing on their phone and something else on their tablet,
that is worth escalating — it should not be possible.

Three things this changed that generate tickets:

* '''Android gained Activity, Fasting and Measurements on Trends.''' A member who used to say
  "my fasting stats are on my wife's iPhone but not mine" now has them.
* '''"Energy" is now "Feeling"''' — the 1–5 check-in, named after the quick-log button that
  writes it. A member searching help for "Energy chart" wants Feeling.
* '''A section with no data does not render.''' Fasting with no completed fasts, or
  Measurements with no sites, is absent rather than empty. "My Fasting section disappeared"
  is usually a member who has not fasted inside the selected range — check the range pill
  before treating it as a fault.

== "A section is missing from my Trends page" (2026-09-01) ==

'''Members can now switch Trends sections off themselves''', at You → Preferences → Customize
Trends. So a missing section has three possible causes and they are worth telling apart before
escalating:

* '''They turned it off.''' Check that screen first. The choice is stored per member and
  follows them to every device, so "it is missing on my tablet too" is expected rather than
  evidence of a fault.
* '''There is no data for the range.''' A section with nothing in it does not render — Fasting
  with no completed fasts, Measurements with no sites. Check the range pill.
* '''They are on the free tier.''' Free members can READ the list and see every section, but
  cannot change it; their page renders the full default. If a free member reports sections
  missing, it is one of the two causes above, not the tier.

'''Everything defaults to ON, including new sections.''' A member who customised their page in
August still gets a chart added in September. There is no backfill and no "reset" button:
switching everything back on removes their stored row, which is the same state as never having
customised.

'''Customising is Premium; seeing the list is not.''' The write is gated (`customize_trends`)
and the read is open, which is deliberate — a free member's page renders from the same response
a paying member's does.