Update positioning guidance + safety disclaimer
This commit is contained in:
@@ -21,7 +21,7 @@ This is a prototype for safe, reliable core experience. It is **not** a medical
|
||||
### 2.1 Goals
|
||||
The MVP must prove that Android can reliably:
|
||||
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,
|
||||
4. run a timed session with synchronized visual + audio output,
|
||||
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
|
||||
8. Session Complete
|
||||
9. Settings
|
||||
10. Holder Guidance
|
||||
10. Positioning Guidance
|
||||
11. About / Disclaimer (can live inside Settings)
|
||||
|
||||
### 3.2 Navigation Model
|
||||
- Root stack navigation
|
||||
- Default landing after first-run completion: **Home**
|
||||
- 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
|
||||
|
||||
### 3.3 Back Navigation Rules
|
||||
@@ -103,7 +103,7 @@ To make MVP implementation-ready, the following are fixed decisions:
|
||||
- Setup: Back returns to Home
|
||||
- Active Session: system back disabled or mapped to Pause sheet; must not silently exit session
|
||||
- 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)
|
||||
- default mode preference (Audiovisual, Audio, Visual)
|
||||
- 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)
|
||||
- about/disclaimer access
|
||||
|
||||
@@ -224,6 +224,9 @@ Purpose: mandatory risk disclosure.
|
||||
Required warnings:
|
||||
- flashing lights may be unsafe for people with epilepsy, seizure sensitivity, or migraine triggers
|
||||
- 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
|
||||
- binaural mode requires stereo headphones
|
||||
- app is not a medical device
|
||||
@@ -232,7 +235,7 @@ Components:
|
||||
- scrollable warning text
|
||||
- acknowledgment checkbox: “I understand the risks and will stop if I feel discomfort.”
|
||||
- primary button: I Understand
|
||||
- secondary link: Holder Guidance
|
||||
- secondary link: Positioning Guidance
|
||||
|
||||
Behavior:
|
||||
- primary button disabled until checkbox checked
|
||||
@@ -247,7 +250,7 @@ Purpose: launch point for returning users.
|
||||
|
||||
Components:
|
||||
- top app bar: title + Settings
|
||||
- optional info action: Holder Guidance
|
||||
- optional info action: Positioning Guidance
|
||||
- three preset cards: Relax, Focus, Sleep Prep
|
||||
- each card shows duration, pattern type, beat frequency summary, short description
|
||||
- optional footer disclaimer: not medical / use safely
|
||||
@@ -277,7 +280,7 @@ Components:
|
||||
- audio mode section
|
||||
- headphone status row
|
||||
- brightness recommendation row
|
||||
- holder guidance link
|
||||
- positioning guidance link
|
||||
- Start button
|
||||
|
||||
Layout and reachability:
|
||||
@@ -309,7 +312,7 @@ Behavior:
|
||||
- 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
|
||||
- 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
|
||||
- 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
|
||||
@@ -328,11 +331,14 @@ States:
|
||||
- blocked by missing headphones
|
||||
- loading not needed beyond quick preset load
|
||||
|
||||
## 5.5 Holder Guidance
|
||||
## 5.5 Positioning Guidance
|
||||
Purpose: give practical safe setup help.
|
||||
|
||||
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
|
||||
- do not press device against eyes/face
|
||||
- allow airflow and comfort
|
||||
@@ -440,7 +446,7 @@ Behavior:
|
||||
MVP contents:
|
||||
- countdown preference
|
||||
- default session mode
|
||||
- show holder guidance before session
|
||||
- show positioning guidance before session
|
||||
- re-open safety information
|
||||
- about/disclaimer
|
||||
|
||||
@@ -622,7 +628,7 @@ If crash reporting or analytics is later added, it must be explicitly reviewed a
|
||||
- Android native app
|
||||
- first-run intro + mandatory safety acknowledgment
|
||||
- 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
|
||||
- pause/resume/stop
|
||||
- countdown
|
||||
@@ -674,7 +680,7 @@ Decision: any significant interruption forces immediate pause and explicit resum
|
||||
|
||||
### 11.6 User Comfort / Holder Confusion
|
||||
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
|
||||
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
|
||||
|
||||
### 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
|
||||
- [ ] Persist safety acknowledgment version, settings, last preset, and repeat-session config locally
|
||||
- [ ] Implement preflight validation for mode selection, parameter ranges, and headphone route
|
||||
|
||||
BIN
app/src/main/assets/positioning_guide.png
Normal file
BIN
app/src/main/assets/positioning_guide.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.4 MiB |
@@ -349,7 +349,7 @@ fun App(vm: MainViewModel = viewModel()) {
|
||||
SettingsScreen(vm)
|
||||
}
|
||||
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)
|
||||
Spacer(Modifier.height(12.dp))
|
||||
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
|
||||
)
|
||||
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)
|
||||
}
|
||||
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()
|
||||
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
|
||||
fun HolderScreen() {
|
||||
fun PositioningScreen() {
|
||||
Column(
|
||||
Modifier
|
||||
.fillMaxSize()
|
||||
@@ -816,12 +819,11 @@ fun HolderScreen() {
|
||||
.padding(16.dp),
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp)
|
||||
) {
|
||||
Text("Holder Guidance", style = MaterialTheme.typography.headlineSmall, color = MaterialTheme.colorScheme.onBackground)
|
||||
Text("• Use a simple cardboard visor/holder.", color = MaterialTheme.colorScheme.onBackground)
|
||||
Text("• Keep phone stable and hands-free.", color = MaterialTheme.colorScheme.onBackground)
|
||||
Text("• Do not press device against eyes/face.", color = MaterialTheme.colorScheme.onBackground)
|
||||
Text("• Allow airflow and comfort.", color = MaterialTheme.colorScheme.onBackground)
|
||||
Text("• Test fit before session.", color = MaterialTheme.colorScheme.onBackground)
|
||||
Text("• Sit or lie down in a safe place.", color = MaterialTheme.colorScheme.onBackground)
|
||||
Text("Positioning Guidance", style = MaterialTheme.typography.headlineSmall, color = MaterialTheme.colorScheme.onBackground)
|
||||
Text("• Lie on your back in a safe, comfortable place.", color = MaterialTheme.colorScheme.onBackground)
|
||||
Text("• Rest the phone across the upper nose/forehead area so it stays stable.", color = MaterialTheme.colorScheme.onBackground)
|
||||
Text("• Keep your eyes closed during immersive visual sessions.", color = MaterialTheme.colorScheme.onBackground)
|
||||
Text("• Do not place the phone directly on your eyes or apply pressure.", color = MaterialTheme.colorScheme.onBackground)
|
||||
Text("• Ensure comfortable breathing/airflow and stop if you feel discomfort.", color = MaterialTheme.colorScheme.onBackground)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user