Skip to content

Commit 1d05e1b

Browse files
docs: add backlog tasks 024-027
- task-024: Android viewport safe area - task-025: iOS viewport regression investigation - task-026: Remove Roll Lunch button animation - task-027: Disable web-style zoom
1 parent e6c4cab commit 1d05e1b

4 files changed

Lines changed: 310 additions & 0 deletions
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
---
2+
id: task-024
3+
title: Fix Android viewport to respect status bar safe area
4+
status: Done
5+
assignee:
6+
- '@claude'
7+
created_date: '2026-01-05 17:02'
8+
updated_date: '2026-01-05 17:33'
9+
labels:
10+
- android
11+
- ui
12+
dependencies: []
13+
priority: high
14+
---
15+
16+
## Description
17+
18+
<!-- SECTION:DESCRIPTION:BEGIN -->
19+
The app content on Android is not respecting the system status bar height, causing the UI to overlap with or appear too close to the top system bar. Content should start beneath the status bar in the safe area.
20+
<!-- SECTION:DESCRIPTION:END -->
21+
22+
## Acceptance Criteria
23+
<!-- AC:BEGIN -->
24+
- [x] #1 App content starts below the status bar on Android devices
25+
- [x] #2 Safe area insets are properly configured in Tauri Android settings
26+
- [x] #3 UI layout is visually correct on both emulator and physical devices
27+
<!-- AC:END -->
28+
29+
## Implementation Plan
30+
31+
<!-- SECTION:PLAN:BEGIN -->
32+
1. Add viewport-fit=cover to viewport meta tags in all 4 HTML files (enables safe-area-insets)
33+
2. Update app.css to use env(safe-area-inset-top) for theme-toggle positioning
34+
3. Update app.css to use env(safe-area-inset-top) for main-content padding
35+
4. Update app.css to use env(safe-area-inset-bottom) for bottom-nav padding
36+
5. Test on Android emulator to verify safe areas are respected
37+
<!-- SECTION:PLAN:END -->
38+
39+
## Implementation Notes
40+
41+
<!-- SECTION:NOTES:BEGIN -->
42+
Added viewport-fit=cover to all HTML viewport metas and CSS safe-area-inset handling:
43+
- app-container: padding-top for status bar
44+
- theme-toggle: top position offset for status bar
45+
- bottom-nav: padding-bottom for gesture area
46+
47+
Also removed theme-toggle from add.html, list.html, settings.html - now only shows on home page.
48+
49+
iOS verified working on physical iPhone 13 mini.
50+
<!-- SECTION:NOTES:END -->
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
---
2+
id: task-025
3+
title: Investigate iOS simulator viewport regression - content shifted up
4+
status: Done
5+
assignee:
6+
- '@claude'
7+
created_date: '2026-01-05 17:36'
8+
updated_date: '2026-01-06 16:24'
9+
labels:
10+
- ios
11+
- bug-investigation
12+
- viewport
13+
dependencies: []
14+
priority: medium
15+
---
16+
17+
## Description
18+
19+
<!-- SECTION:DESCRIPTION:BEGIN -->
20+
The iOS simulator (iPhone 13 mini) shows content shifted toward the top of the screen with excessive empty white space at the bottom. The main content (LUNCH logo, radio buttons, Roll Lunch button) is vertically imbalanced.
21+
22+
Need to determine if this is:
23+
1. A simulator-only visual artifact
24+
2. A real regression that affects physical iOS devices
25+
3. A CSS/layout issue introduced in recent changes
26+
27+
Reference screenshots:
28+
- Simulator: /Users/lance/Desktop/Simulator Screenshot - iPhone 13 mini - 2026-01-05 at 11.23.10.png
29+
- Comparison: /Users/lance/Desktop/Screenshot 2026-01-05 at 11.24.13 AM.jpeg
30+
<!-- SECTION:DESCRIPTION:END -->
31+
32+
## Acceptance Criteria
33+
<!-- AC:BEGIN -->
34+
- [x] #1 Tested on physical iOS device to confirm if issue reproduces
35+
- [x] #2 Compared viewport behavior between simulator and real device
36+
- [x] #3 Root cause identified (simulator bug vs actual regression)
37+
- [x] #4 If regression: fix implemented and verified on both simulator and device
38+
- [ ] #5 If simulator-only: documented as known simulator quirk
39+
<!-- AC:END -->
40+
41+
## Implementation Plan
42+
43+
<!-- SECTION:PLAN:BEGIN -->
44+
1. Analyze current CSS layout logic for vertical centering
45+
2. Check git history for recent CSS changes that might have caused regression
46+
3. Test on physical device via `task ios:device` to confirm issue reproduces (AC #1, #2)
47+
4. Compare layout behavior between simulator and device
48+
5. Identify root cause (AC #3)
49+
6. Fix if regression, document if simulator-only quirk (AC #4 or #5)
50+
<!-- SECTION:PLAN:END -->
51+
52+
## Implementation Notes
53+
54+
<!-- SECTION:NOTES:BEGIN -->
55+
- Fixed Xcode build PATH issue: npm not found because Xcode's restricted PATH doesn't include mise shims
56+
- Solution: Modified `src-tauri/gen/apple/lunch.xcodeproj/project.pbxproj` shellScript to prepend `$HOME/.local/share/mise/shims` to PATH
57+
- iOS simulator build now succeeds
58+
59+
- Analyzed CSS layout: `.main-content` has `justify-content: center` but content appears top-aligned on iOS simulator
60+
- Root cause hypothesis: iOS WKWebView doesn't handle `height: 100%` correctly for viewport calculations
61+
- CSS Fix applied: Added `min-height: 100dvh` to `.app-container` with `@supports` for `100svh` (small viewport height for iOS)
62+
- iOS simulator build succeeds with the fix
63+
- **NEEDS TESTING**: User should verify on simulator and physical device to confirm fix
64+
65+
**Physical Device Install Error:**
66+
67+
Attempted to test on physical iPhone 13 mini (iPhone14,4, iOS 18.7.1) but installation failed with entitlement error:
68+
69+
```
70+
Unable to Install "Lunch"
71+
Domain: IXUserPresentableErrorDomain
72+
Code: 14
73+
Recovery Suggestion: Failed to install embedded profile for com.lunch.desktop : 0xe800801f (Attempted to install a Beta profile without the proper entitlement.)
74+
```
75+
76+
Error details:
77+
- MIInstallerErrorDomain Code 13
78+
- LibMISErrorNumber: -402620385
79+
- ApplicationVerificationFailed: "This app cannot be installed because its integrity could not be verified"
80+
- Root cause: Missing entitlement for beta/development profile installation
81+
82+
Blocking: Cannot test viewport fix on physical device until provisioning/entitlement issue is resolved
83+
84+
Environment:
85+
- macOS 15.7.1 (Build 24G231)
86+
- Xcode 16.4 (23792)
87+
- Device: iPhone 13 mini, iOS 18.7.1 (22H31)
88+
89+
**Provisioning Fix Applied:**
90+
- User opened Xcode and enabled "Automatically manage signing"
91+
- Logged into Apple Developer account
92+
- Entitlement error resolved
93+
94+
**New Error: WebSocket Connection Refused**
95+
```
96+
failed to read CLI options: Context("failed to build WebSocket client", Io(Os { code: 61, kind: ConnectionRefused }))
97+
```
98+
99+
**Root Cause:** Building directly from Xcode instead of using CLI.
100+
101+
**Correct Workflow:**
102+
1. NEVER build directly from Xcode's Build button
103+
2. ALWAYS use `task ios:device` from terminal
104+
3. This starts the Tauri dev server (WebSocket) → then opens Xcode → Xcode builds with server running
105+
106+
The Tauri iOS dev workflow requires the CLI to start a WebSocket server that Xcode's build script connects to for passing configuration.
107+
108+
**WebKit Sandbox Fix Applied:**
109+
110+
Root cause: WKWebView on physical iOS devices requires explicit sandbox extension to read app bundle files. The strictly sandboxed webview process fails without App Groups entitlement.
111+
112+
Fixes applied:
113+
1. `src-tauri/Info.ios.plist` - Added NSAppTransportSecurity with NSAllowsArbitraryLoads and NSLocalNetworkUsageDescription
114+
2. `src-tauri/gen/apple/lunch_iOS/lunch_iOS.entitlements` - Added App Groups entitlement (group.com.lunch.desktop)
115+
116+
**MANUAL STEP REQUIRED:**
117+
User must register the App Group in Apple Developer Portal:
118+
1. Go to https://developer.apple.com/account/resources/identifiers/list/applicationGroup
119+
2. Click + to add new App Group
120+
3. Enter: `group.com.lunch.desktop`
121+
4. In Xcode, go to Signing & Capabilities > + Capability > App Groups
122+
5. Enable the `group.com.lunch.desktop` group
123+
124+
Then rebuild: `task ios:device`
125+
126+
**Corrected command:** `task ios:dev:device` (not `task ios:device`)
127+
128+
**Resolution:**
129+
130+
- Tauri iOS dev mode has WebKit sandbox issues on physical devices
131+
- Release builds work correctly - bundled assets avoid dev server network/sandbox complications
132+
- Created new task `task ios:run:device` that builds release and installs via devicectl
133+
- `task ios:dev:device` kept for reference but has known issues (WebSocket connection, WebKit sandbox)
134+
135+
**Files modified:**
136+
- `taskfiles/ios.yml` - Added `run:device` task
137+
- `CLAUDE.md` - Updated to recommend `ios:run:device` for physical device testing
138+
139+
**Final cleanup:**
140+
- Removed `task ios:dev:device` (unreliable due to Tauri dev mode WebKit sandbox issues)
141+
- Renamed workflow to `task ios:run:device` (release build approach)
142+
- Updated CLAUDE.md and README.md
143+
144+
**Final Resolution:**
145+
146+
- Root cause: CSS viewport height issue - iOS WKWebView doesn't handle `height: 100%` correctly
147+
- Fix: Added `min-height: 100dvh` to `.app-container` with `@supports` for `100svh` (small viewport height)
148+
- Verified working on both iOS simulator and physical device (iPhone 13 mini)
149+
- AC #5 N/A - was a real CSS regression, not simulator-only quirk
150+
151+
**Additional fixes during investigation:**
152+
- Fixed Xcode build PATH issue (mise shims not in PATH)
153+
- Added ENABLE_USER_SCRIPT_SANDBOXING: false to project.yml
154+
- Fixed device ID extraction in ios:run:device task
155+
- Created reliable physical device workflow via release builds
156+
<!-- SECTION:NOTES:END -->
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
id: task-026
3+
title: Remove jarring 'Roll Lunch' button animation
4+
status: Done
5+
assignee:
6+
- '@claude'
7+
created_date: '2026-01-06 16:25'
8+
updated_date: '2026-01-06 16:27'
9+
labels:
10+
- ui
11+
- ux
12+
dependencies: []
13+
priority: low
14+
---
15+
16+
## Description
17+
18+
<!-- SECTION:DESCRIPTION:BEGIN -->
19+
The current animation on the 'Roll Lunch' button is too fast and feels jarring. Since the restaurant name appears beneath the button instantly, the animation adds no value and creates a poor user experience.
20+
<!-- SECTION:DESCRIPTION:END -->
21+
22+
## Acceptance Criteria
23+
<!-- AC:BEGIN -->
24+
- [x] #1 Clicking 'Roll Lunch' button no longer triggers any animation on the button itself
25+
- [x] #2 Restaurant result still appears immediately beneath the button
26+
- [x] #3 Button remains visually responsive (hover/active states preserved)
27+
<!-- AC:END -->
28+
29+
## Implementation Plan
30+
31+
<!-- SECTION:PLAN:BEGIN -->
32+
1. Remove x-show loading states from button spans
33+
2. Remove :disabled="loading" from button
34+
3. Keep the loading state variable for error handling but don't use it for visual changes
35+
4. Test that button still works and result appears
36+
<!-- SECTION:PLAN:END -->
37+
38+
## Implementation Notes
39+
40+
<!-- SECTION:NOTES:BEGIN -->
41+
Removed loading state visual feedback from Roll Lunch button in index.html:
42+
- Removed `:disabled="loading"` binding
43+
- Removed x-show conditionals that toggled between "Roll Lunch" and "Rolling..." text
44+
- Button now displays static "Roll Lunch" text
45+
- CSS hover/active states preserved (handled by basecoat .btn class)
46+
<!-- SECTION:NOTES:END -->
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
id: task-027
3+
title: Investigate disabling web-style zoom in app
4+
status: Done
5+
assignee:
6+
- '@claude'
7+
created_date: '2026-01-06 16:29'
8+
updated_date: '2026-01-06 16:31'
9+
labels:
10+
- ios
11+
- ux
12+
- research
13+
dependencies: []
14+
priority: low
15+
---
16+
17+
## Description
18+
19+
<!-- SECTION:DESCRIPTION:BEGIN -->
20+
Double-tap currently zooms the view like a Safari web page, which feels non-native for a mobile app. Investigate whether Tauri/WKWebView allows disabling this behavior.
21+
<!-- SECTION:DESCRIPTION:END -->
22+
23+
## Acceptance Criteria
24+
<!-- AC:BEGIN -->
25+
- [x] #1 Research if WKWebView zoom can be disabled in Tauri iOS apps
26+
- [x] #2 Document findings and implementation approach if possible
27+
- [x] #3 If feasible, implement the fix
28+
<!-- AC:END -->
29+
30+
## Implementation Plan
31+
32+
<!-- SECTION:PLAN:BEGIN -->
33+
1. Update viewport meta tag in all HTML files to add user-scalable=no, maximum-scale=1
34+
2. Add CSS touch-action: manipulation to html/body in app.css
35+
3. Test on iOS simulator to verify zoom is disabled
36+
<!-- SECTION:PLAN:END -->
37+
38+
## Implementation Notes
39+
40+
<!-- SECTION:NOTES:BEGIN -->
41+
**Research findings:**
42+
- WKWebView (used by Tauri on iOS) respects viewport meta tag zoom settings
43+
- iOS Safari ignores `user-scalable=no` since iOS 10 for accessibility, but WKWebView may still honor it
44+
- CSS `touch-action: manipulation` prevents double-tap zoom while preserving single-tap and scroll
45+
46+
**Implementation:**
47+
- Updated viewport meta tag in all 4 HTML files: added `maximum-scale=1, user-scalable=no`
48+
- Added `touch-action: manipulation` to html/body in app.css
49+
50+
**Files modified:**
51+
- src-tauri/dist/index.html
52+
- src-tauri/dist/add.html
53+
- src-tauri/dist/list.html
54+
- src-tauri/dist/settings.html
55+
- src-tauri/dist/app.css
56+
57+
Requires iOS testing to confirm zoom is disabled.
58+
<!-- SECTION:NOTES:END -->

0 commit comments

Comments
 (0)