-
Read these first (5 min each):
docs/README.md— overviewdocs/architecture.md— how it all fits togetherIMPLEMENTATION_SUMMARY.md— what's done, what's next
-
Set up the scene (30 min):
- Open
MindStep/MindStepin Lens Studio - Follow
docs/architecture.mdscene hierarchy - Attach scripts to scene objects
- Open
-
Test Phase 1 (10 min):
- Click Preview in Lens Studio
- Verify home screen loads
D:/MindStep/
├── docs/ ← READ THESE FIRST
│ ├── README.md ← Start here (project overview)
│ ├── architecture.md ← How scripts are organized
│ ├── phases.md ← What to build when
│ └── ... (4 more docs)
│
├── MindStep/ ← Lens Studio project folder
│ └── Assets/Scripts/ ← All TypeScript source code
│ ├── SessionManager.ts
│ ├── MindStepUIManager.ts
│ ├── Exercises/ ← Exercise logic
│ └── ... (11 more files)
│
├── IMPLEMENTATION_SUMMARY.md ← Status report
└── QUICK_START.md ← This file
SessionManager.ts— tracks logged-in userMindStepUIManager.ts— switches between screensDevlogModal.ts— version info popup
TaskListController.ts— loads tasks from FirebaseTaskItem.ts— one task rowActivityBrowseController.ts— scrollable exercise gridActivityCardItem.ts— one exercise card
ExerciseController.ts— base class for all exercisesTomatoPrepExercise.ts— tomato cutting (4 steps)SetTableExercise.ts— table setting (4 steps)
ExerciseData.ts— hardcoded exercise info (NOT from Firebase)FirebaseService.ts— HTTP calls to Firestore
LoginController.ts— guest bypass (real auth in Phase 4)
- Create
.tsfile inAssets/Scripts/ - Use
@componentdecorator - Extend
BaseScriptComponent - Add
@inputfields for Inspector references
- Find scene object for that exercise
- Attach the exercise script (e.g.,
TomatoPrepExercise) - Drag-and-drop object references to script inputs
- Click Preview
- Look for
print("[ClassName] message")calls in scripts - Open Lens Studio console (bottom panel)
- Search for class name
- Check
docs/phases.mdPhase 2 section - Find relevant script file
- Look for
// Phase 2:comments - Implement the feature
- Find button in scene
- Look at script attached to it
- Search for
onTriggerUp.add()in that script
| What | Where |
|---|---|
| Exercise definitions | Scripts/ExerciseData.ts |
| UI state logic | Scripts/MindStepUIManager.ts |
| Firebase calls | Scripts/FirebaseService.ts |
| Tomato Prep logic | Scripts/Exercises/TomatoPrepExercise.ts |
| Table Setting logic | Scripts/Exercises/SetTableExercise.ts |
| Task list | Scripts/TaskListController.ts |
| Activity grid | Scripts/ActivityBrowseController.ts |
| Documentation | docs/*.md |
Lens Studio won't build?
- Check Build > Errors panel
- Look for missing
@inputreferences - Verify script is attached to correct scene object
Home screen not showing?
- Verify
MindStepUIManageris on main Frame - Check all button references are assigned
- Ensure HomeScreen scene object is enabled
Task list empty?
- Run
firebase-seed.ts(seedocs/firebase-schema.md) - Check Firebase project ID in
FirebaseService.ts - Look for network errors in console
Exercise not starting?
- Verify exercise script attached to scene object
- Check all
@inputfields are assigned - Ensure Interactable components exist on 3D objects
Steps not advancing?
- Check console for
[ExerciseName] Step X completemessages - Verify trigger conditions (e.g., proximity checks)
- Look at
onStepComplete()calls in exercise script
MindStepUIManager tracks UIState:
Home— home screenDashboard— task list + gridConfirm— exercise previewExercise— AR interaction
Transitions happen on button clicks.
When switching states, the Frame animates to a new size using SIK's animate() utility. Defined in MindStepUIManager:
- Home: 33 × 18 units
- Dashboard/Confirm: 33 × 28 units
Each exercise has a steps array (e.g., 4 steps for Tomato Prep). When user completes an action, call onStepComplete() to advance.
Collections:
patients— user profilesassignments— tasks assigned to patientsexercises— exercise definitionstherapists— therapist profiles
See docs/firebase-schema.md for details.
| Phase | Duration | Main Task | Status |
|---|---|---|---|
| 1 | Week 1 | Home screen + state machine | ✅ Done (scripts) |
| 2 | Week 2 | Firebase + dashboard | 🔲 Scripts done, need HTTP |
| 3 | Week 3 | Exercise logic | 🔲 Scripts done, need SIK wiring |
| 4 | Week 4 | Polish + auth | 🔲 Placeholder scripts only |
See docs/phases.md for detailed acceptance criteria.
-
Create script:
import { ExerciseController } from "./ExerciseController"; @component export class MyExercise extends ExerciseController { protected onExerciseStart(): void { // setup here } }
-
Add to ExerciseData.ts:
MY_EXERCISE: { id: "exercise_003", title: "My Exercise", steps: ["Step 1", "Step 2"], ... }
-
Scene:
- Create scene object for exercise
- Attach your script
- Assign 3D object references
-
Test:
- Launch preview
- Select exercise in Browse
- Confirm → start
| Key | Action |
|---|---|
| Ctrl+B | Build |
| Ctrl+P | Preview |
| Ctrl+Space | Search |
| Ctrl+Alt+I | Inspector |
print("Debug message"); // Log to console
print(vector.toString()); // Print vec3
print(object.getTransform()); // Print transform info- Lens Studio Docs: https://docs.snap.com/lens-studio/references/guides
- SIK Examples: See Cache/TypeScript/Src/Packages/SpectaclesInteractionKitExamples.lspkg
- Firestore REST API: https://firebase.google.com/docs/firestore/use-rest-api
-
Script doesn't compile?
- Check
Build > Errorsin Lens Studio - Match
@inputtype to actual component type
- Check
-
Button not working?
- Verify RectangleButton/PinchButton assigned in Inspector
- Check
onTriggerUp.add()handler in script
-
Scene object not showing?
- Toggle
enabledcheckbox in Inspector - Check parent object is enabled
- Verify position/scale are not zero
- Toggle
-
Exercise not responding?
- Look for Interactable component on 3D object
- Check
onTriggerEndevent binding - Print step completion messages to console
- 14 scripts provide full framework
- 7 docs explain architecture + design
- Phase 1 done (foundation)
- Phase 2–4 require scene wiring + feature implementation
Start with docs/README.md, then docs/architecture.md, then wire up the scene in Lens Studio.
Good luck! 🚀
Version: 0.0.3 Last Updated: 2026-03-22