Update positioning guidance + safety disclaimer

This commit is contained in:
Tretzi
2026-04-09 20:51:39 -05:00
parent 9472b3b8f3
commit 75c6df6188
3 changed files with 35 additions and 27 deletions

View File

@@ -21,7 +21,7 @@ This is a prototype for safe, reliable core experience. It is **not** a medical
### 2.1 Goals ### 2.1 Goals
The MVP must prove that Android can reliably: The MVP must prove that Android can reliably:
1. present required safety information before use, 1. present required safety information before use,
2. guide the user through headphone + holder setup, 2. guide the user through headphone setup and safe positioning,
3. let the user choose a built-in preset, 3. let the user choose a built-in preset,
4. run a timed session with synchronized visual + audio output, 4. run a timed session with synchronized visual + audio output,
5. handle pause, resume, stop, completion, and interruptions safely, 5. handle pause, resume, stop, completion, and interruptions safely,
@@ -87,14 +87,14 @@ To make MVP implementation-ready, the following are fixed decisions:
7. Interruption / Headphone Warning Sheet 7. Interruption / Headphone Warning Sheet
8. Session Complete 8. Session Complete
9. Settings 9. Settings
10. Holder Guidance 10. Positioning Guidance
11. About / Disclaimer (can live inside Settings) 11. About / Disclaimer (can live inside Settings)
### 3.2 Navigation Model ### 3.2 Navigation Model
- Root stack navigation - Root stack navigation
- Default landing after first-run completion: **Home** - Default landing after first-run completion: **Home**
- Main forward path: `Welcome -> Safety -> Home -> Setup -> Active Session -> Complete` - Main forward path: `Welcome -> Safety -> Home -> Setup -> Active Session -> Complete`
- Settings and Holder Guidance reachable from Home and Setup - Settings and Positioning Guidance reachable from Home and Setup
- During Active Session, user should not navigate elsewhere except via pause/stop/OS interruption handling - During Active Session, user should not navigate elsewhere except via pause/stop/OS interruption handling
### 3.3 Back Navigation Rules ### 3.3 Back Navigation Rules
@@ -103,7 +103,7 @@ To make MVP implementation-ready, the following are fixed decisions:
- Setup: Back returns to Home - Setup: Back returns to Home
- Active Session: system back disabled or mapped to Pause sheet; must not silently exit session - Active Session: system back disabled or mapped to Pause sheet; must not silently exit session
- Complete: Back returns Home - Complete: Back returns Home
- Settings/Holder Guidance: Back returns to prior screen - Settings/Positioning Guidance: Back returns to prior screen
--- ---
@@ -189,7 +189,7 @@ User can modify:
- countdown preference (Off/5/10) - countdown preference (Off/5/10)
- default mode preference (Audiovisual, Audio, Visual) - default mode preference (Audiovisual, Audio, Visual)
- keep screen on during session (default on, locked on for session regardless) - keep screen on during session (default on, locked on for session regardless)
- show holder guidance before every session (default off) - show positioning guidance before every session (default off)
- theme behavior if needed (dark only for MVP preferred) - theme behavior if needed (dark only for MVP preferred)
- about/disclaimer access - about/disclaimer access
@@ -224,6 +224,9 @@ Purpose: mandatory risk disclosure.
Required warnings: Required warnings:
- flashing lights may be unsafe for people with epilepsy, seizure sensitivity, or migraine triggers - flashing lights may be unsafe for people with epilepsy, seizure sensitivity, or migraine triggers
- do not use while driving, walking, cycling, or operating machinery - do not use while driving, walking, cycling, or operating machinery
- use at your own risk; this app provides no medical advice
- for immersive visual sessions, keep your eyes closed; do not stare at the screen
- do not place the phone directly on your eyes; avoid pressure on face/eyes and ensure comfortable breathing/airflow
- stop immediately if discomfort, dizziness, headache, nausea, anxiety, or eye strain occurs - stop immediately if discomfort, dizziness, headache, nausea, anxiety, or eye strain occurs
- binaural mode requires stereo headphones - binaural mode requires stereo headphones
- app is not a medical device - app is not a medical device
@@ -232,7 +235,7 @@ Components:
- scrollable warning text - scrollable warning text
- acknowledgment checkbox: “I understand the risks and will stop if I feel discomfort.” - acknowledgment checkbox: “I understand the risks and will stop if I feel discomfort.”
- primary button: I Understand - primary button: I Understand
- secondary link: Holder Guidance - secondary link: Positioning Guidance
Behavior: Behavior:
- primary button disabled until checkbox checked - primary button disabled until checkbox checked
@@ -247,7 +250,7 @@ Purpose: launch point for returning users.
Components: Components:
- top app bar: title + Settings - top app bar: title + Settings
- optional info action: Holder Guidance - optional info action: Positioning Guidance
- three preset cards: Relax, Focus, Sleep Prep - three preset cards: Relax, Focus, Sleep Prep
- each card shows duration, pattern type, beat frequency summary, short description - each card shows duration, pattern type, beat frequency summary, short description
- optional footer disclaimer: not medical / use safely - optional footer disclaimer: not medical / use safely
@@ -277,7 +280,7 @@ Components:
- audio mode section - audio mode section
- headphone status row - headphone status row
- brightness recommendation row - brightness recommendation row
- holder guidance link - positioning guidance link
- Start button - Start button
Layout and reachability: Layout and reachability:
@@ -309,7 +312,7 @@ Behavior:
- Start disabled if invalid config or no selected mode - Start disabled if invalid config or no selected mode
- if selected mode includes audio and no headset detected, show blocking warning and CTA: Continue as Visual - if selected mode includes audio and no headset detected, show blocking warning and CTA: Continue as Visual
- brightness row is advisory text, not a system-permission flow - brightness row is advisory text, not a system-permission flow
- optional “Show holder guidance” interstitial before countdown if setting enabled - optional “Show positioning guidance” interstitial before countdown if setting enabled
- helper text for flash interval must explain that lower ms = faster flashing and higher ms = slower flashing - helper text for flash interval must explain that lower ms = faster flashing and higher ms = slower flashing
- Setup must preserve access to all controls when the device rotates between portrait and landscape - Setup must preserve access to all controls when the device rotates between portrait and landscape
- scrolling behavior must keep validation messages, helper text, and the Start action discoverable rather than hidden below a clipped layout - scrolling behavior must keep validation messages, helper text, and the Start action discoverable rather than hidden below a clipped layout
@@ -328,11 +331,14 @@ States:
- blocked by missing headphones - blocked by missing headphones
- loading not needed beyond quick preset load - loading not needed beyond quick preset load
## 5.5 Holder Guidance ## 5.5 Positioning Guidance
Purpose: give practical safe setup help. Purpose: give practical safe setup help.
Content blocks: Content blocks:
- use a simple cardboard visor/holder - lie on your back in a safe, comfortable place
- rest the phone across the upper nose/forehead area so it stays stable
- keep your eyes closed during immersive visual sessions
- stop immediately if you feel discomfort
- keep phone stable and hands-free - keep phone stable and hands-free
- do not press device against eyes/face - do not press device against eyes/face
- allow airflow and comfort - allow airflow and comfort
@@ -440,7 +446,7 @@ Behavior:
MVP contents: MVP contents:
- countdown preference - countdown preference
- default session mode - default session mode
- show holder guidance before session - show positioning guidance before session
- re-open safety information - re-open safety information
- about/disclaimer - about/disclaimer
@@ -622,7 +628,7 @@ If crash reporting or analytics is later added, it must be explicitly reviewed a
- Android native app - Android native app
- first-run intro + mandatory safety acknowledgment - first-run intro + mandatory safety acknowledgment
- built-in presets: Relax, Focus, Sleep Prep - built-in presets: Relax, Focus, Sleep Prep
- Home, Setup, Active Session, Completion, Settings, Holder Guidance - Home, Setup, Active Session, Completion, Settings, Positioning Guidance
- audio+visual synchronized session engine - audio+visual synchronized session engine
- pause/resume/stop - pause/resume/stop
- countdown - countdown
@@ -674,7 +680,7 @@ Decision: any significant interruption forces immediate pause and explicit resum
### 11.6 User Comfort / Holder Confusion ### 11.6 User Comfort / Holder Confusion
Risk: uncomfortable or unsafe placement. Risk: uncomfortable or unsafe placement.
Decision: ship concise holder guidance accessible in onboarding and setup; no printable template in MVP. Decision: ship concise positioning guidance accessible in onboarding and setup; no holder required; no printable template in MVP.
### 11.7 Scope Creep ### 11.7 Scope Creep
Risk: custom sessions and advanced patterns delay MVP. Risk: custom sessions and advanced patterns delay MVP.
@@ -793,7 +799,7 @@ Use concise, plain copy. Avoid wellness hype and all medical claims.
## 15. Handoff for Andy ## 15. Handoff for Andy
### Explicit Implementation Checklist ### Explicit Implementation Checklist
- [ ] Build Android-only MVP with screens: Welcome, Safety, Home, Setup, Active Session, Completion, Settings, Holder Guidance - [ ] Build Android-only MVP with screens: Welcome, Safety, Home, Setup, Active Session, Completion, Settings, Positioning Guidance
- [ ] Implement bundled presets: Relax, Focus, Sleep Prep with defaults from this spec - [ ] Implement bundled presets: Relax, Focus, Sleep Prep with defaults from this spec
- [ ] Persist safety acknowledgment version, settings, last preset, and repeat-session config locally - [ ] Persist safety acknowledgment version, settings, last preset, and repeat-session config locally
- [ ] Implement preflight validation for mode selection, parameter ranges, and headphone route - [ ] Implement preflight validation for mode selection, parameter ranges, and headphone route

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

View File

@@ -349,7 +349,7 @@ fun App(vm: MainViewModel = viewModel()) {
SettingsScreen(vm) SettingsScreen(vm)
} }
composable("holder") { composable("holder") {
HolderScreen() PositioningScreen()
} }
} }
} }
@@ -383,7 +383,7 @@ fun SafetyScreen(onAck: () -> Unit, onHolder: () -> Unit) {
Text("Read before using MindMachine", style = MaterialTheme.typography.headlineSmall, color = MaterialTheme.colorScheme.onBackground) Text("Read before using MindMachine", style = MaterialTheme.typography.headlineSmall, color = MaterialTheme.colorScheme.onBackground)
Spacer(Modifier.height(12.dp)) Spacer(Modifier.height(12.dp))
Text( Text(
"Flashing lights may be unsafe for people with epilepsy, seizure sensitivity, or migraine triggers.\n\nDo not use while driving, walking, cycling, or operating machinery.\n\nStop immediately for discomfort, dizziness, headache, nausea, anxiety, or eye strain.\n\nBinaural mode requires stereo headphones.\n\nThis app is not a medical device.", "Flashing lights may be unsafe for people with epilepsy, seizure sensitivity, or migraine triggers.\n\nDo not use while driving, walking, cycling, or operating machinery.\n\nFor immersive visual sessions, keep your eyes closed. Do not stare at the screen.\n\nDo not place the phone directly on your eyes. Avoid pressure on face/eyes and ensure comfortable breathing/airflow.\n\nUse at your own risk. This app is a prototype and not a medical device.\n\nStop immediately for discomfort, dizziness, headache, nausea, anxiety, or eye strain.\n\nBinaural mode requires stereo headphones.",
color = MaterialTheme.colorScheme.onBackground color = MaterialTheme.colorScheme.onBackground
) )
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
@@ -391,7 +391,7 @@ fun SafetyScreen(onAck: () -> Unit, onHolder: () -> Unit) {
Text("I understand the risks and will stop immediately if I feel discomfort.", color = MaterialTheme.colorScheme.onBackground) Text("I understand the risks and will stop immediately if I feel discomfort.", color = MaterialTheme.colorScheme.onBackground)
} }
Button(onClick = onAck, enabled = checked, modifier = Modifier.semantics { contentDescription = "I Understand" }) { Text("I Understand") } Button(onClick = onAck, enabled = checked, modifier = Modifier.semantics { contentDescription = "I Understand" }) { Text("I Understand") }
TextButton(onClick = onHolder) { Text("Holder Guidance") } TextButton(onClick = onHolder) { Text("Positioning Guidance") }
} }
} }
@@ -802,12 +802,15 @@ fun SettingsScreen(vm: MainViewModel) {
} }
HorizontalDivider() HorizontalDivider()
Text("About/Disclaimer: MindMachine is a prototype and not a medical device.", color = MaterialTheme.colorScheme.onBackground) Text(
"About/Disclaimer: MindMachine is a prototype and not a medical device. Use at your own risk. For immersive visual sessions, keep your eyes closed and do not place the phone directly on your eyes.",
color = MaterialTheme.colorScheme.onBackground
)
} }
} }
@Composable @Composable
fun HolderScreen() { fun PositioningScreen() {
Column( Column(
Modifier Modifier
.fillMaxSize() .fillMaxSize()
@@ -816,12 +819,11 @@ fun HolderScreen() {
.padding(16.dp), .padding(16.dp),
verticalArrangement = Arrangement.spacedBy(8.dp) verticalArrangement = Arrangement.spacedBy(8.dp)
) { ) {
Text("Holder Guidance", style = MaterialTheme.typography.headlineSmall, color = MaterialTheme.colorScheme.onBackground) Text("Positioning Guidance", style = MaterialTheme.typography.headlineSmall, color = MaterialTheme.colorScheme.onBackground)
Text("Use a simple cardboard visor/holder.", color = MaterialTheme.colorScheme.onBackground) Text("Lie on your back in a safe, comfortable place.", color = MaterialTheme.colorScheme.onBackground)
Text("Keep phone stable and hands-free.", color = MaterialTheme.colorScheme.onBackground) Text("Rest the phone across the upper nose/forehead area so it stays stable.", color = MaterialTheme.colorScheme.onBackground)
Text("Do not press device against eyes/face.", color = MaterialTheme.colorScheme.onBackground) Text("Keep your eyes closed during immersive visual sessions.", color = MaterialTheme.colorScheme.onBackground)
Text("Allow airflow and comfort.", color = MaterialTheme.colorScheme.onBackground) Text("Do not place the phone directly on your eyes or apply pressure.", color = MaterialTheme.colorScheme.onBackground)
Text("Test fit before session.", color = MaterialTheme.colorScheme.onBackground) Text("Ensure comfortable breathing/airflow and stop if you feel discomfort.", color = MaterialTheme.colorScheme.onBackground)
Text("• Sit or lie down in a safe place.", color = MaterialTheme.colorScheme.onBackground)
} }
} }