- PassphraseDialog: submit button h-10→h-11 (44px) - ShareToNostr: close/cancel/publish buttons expanded to 44px - ComparisonView: tab buttons min-h-[44px], gap-1→gap-2 - NostrProfileEditor: publish button min-h-[44px] - NostrRelayManager: all action buttons expanded to 44px - ChatHistory: conversation items min-h-[44px] Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
8.6 KiB
Overnight Plan — iOS HIG Compliance & Continued Hardening
Format:
- [ ]= pending,- [x]= done. Make at least 30 attempts on any difficult task before moving on. Loop reads this file. After each phase, commit and push.
Phase 1: Input & Text Foundation (Prevent iOS Zoom + Readability)
-
T1 — Fix all input/textarea font sizes to prevent iOS auto-zoom. Every
<input>,<textarea>, and<select>must usetext-base(16px) minimum. Files to fix:ChatInput.vue(main message textarea usestext-sm),ChatSearch.vue(search input),SettingsModal.vue(memory inputs usetext-xs),PersonaSelector.vue,MemoryPanel.vue,PluginSettingsForm.vue,ShareToNostr.vue,AdvancedSettings.vue,PromptPalette.vue. Search for all<inputand<textareatags acrosspackages/app/src/and verify each has at leasttext-base. Do NOT change the visual design — only increase font size on the form elements themselves. -
T2 — Replace all
text-[10px]withtext-xs(12px) across the entire app. There are ~301 instances. Use find-and-replace but verify each file still looks correct. The main offenders:ChatMessage.vue(timestamps, token counts, edit labels),SettingsModal.vue(section headers),ContentPanel.vue(tab labels), all*Detail.vueand*Grid.vuefiles. Rungrep -r 'text-\[10px\]' packages/app/src/to find all instances. Replace withtext-xs. This is the single biggest compliance fix. -
T3 — Replace all
text-[9px]andtext-[8px]withtext-[11px](iOS absolute minimum). There are ~100 instances. These are used in badges, version numbers, metadata labels. Files:PluginMarketplace.vue,NostrGrid.vue,DesignSystemDetail.vue,DesignSystemGrid.vue, settings components. Search withgrep -r 'text-\[9px\]\|text-\[8px\]' packages/app/src/. Replace withtext-[11px]. -
T4 — Replace all
text-[11px]withtext-xs(12px). There are ~76 instances plus the new ones from T3. These are inSettingsModal.vue,BranchSwitcher.vue,DesignSystemGrid.vue. After T3 creates newtext-[11px]instances, this task bumps them all totext-xs. Search withgrep -r 'text-\[11px\]' packages/app/src/. Replace withtext-xs. -
TEST:P1 — Run
pnpm typecheck && pnpm lint && pnpm test. Fix all failures. Commit and push.
Phase 2: Touch Targets — Chat Interface (44×44px Minimum)
-
T5 — Fix ChatMessage.vue action buttons. The edit/reply/branch/feedback buttons use
w-7 h-7(28px). Change the button wrapper tomin-w-[44px] min-h-[44px]withflex items-center justify-centerwhile keeping the inner SVG icon atw-4 h-4orw-5 h-5. This makes the tap target 44px but the visual icon stays the same size. Also fix thegap-0.5(2px) between action buttons togap-2(8px). Apply to all button rows in this file. -
T6 — Fix ChatHeader.vue toolbar buttons. All 9 buttons use
w-8 h-8orw-9 h-9(32-36px). Wrap each in a 44px touch target:min-w-[44px] min-h-[44px] flex items-center justify-center. Keep the visual icon sizes unchanged. Fix anygap-1between toolbar buttons togap-2. -
T7 — Fix ChatInput.vue buttons. The image attach button (
w-8 h-8), close reply button (w-5 h-5), and send button need 44px minimum touch targets. Also fix the send button row gap to 8px minimum between targets. -
T8 — Fix ChatSearch.vue navigation buttons. Previous/Next/Close buttons use
w-6 h-6(24px). Expand to 44px touch targets with padding. -
T9 — Fix ArticleReader.vue and PdfViewer.vue controls. Close/navigation buttons use
w-8 h-8(32px). Expand to 44px. Fix button gaps. -
TEST:P2 — Run
pnpm typecheck && pnpm lint && pnpm test. Commit and push.
Phase 3: Touch Targets — Content & Settings Components
-
T10 — Fix all content detail view buttons. Search for
w-7 h-7,w-6 h-6,w-5 h-5button patterns in:BookDetail.vue,FilmDetail.vue,TVSeriesDetail.vue,SongDetail.vue,PodcastDetail.vue,PlaceDetail.vue,ImageDetail.vue,AppDetail.vue,MagazineSectionDetail.vue,NostrGrid.vue. Expand all interactive buttons to 44px minimum touch targets. Keep icon sizes unchanged. -
T11 — Fix SettingsModal.vue and SettingsPanel.vue buttons. Close button (
w-7 h-7), color picker buttons (w-8 h-8), edit/delete buttons (w-5 h-5). All need 44px. Fix allgap-0.5togap-2. -
T12 — Fix MemoryPanel.vue, PersonaSelector.vue, and PluginMarketplace.vue buttons. Edit/delete memory buttons (
w-5 h-5), persona buttons, plugin action buttons. All need 44px touch targets with 8px gaps. -
T13 — Fix MapRenderer.vue fullscreen button, BranchSwitcher.vue buttons, and any remaining small buttons found by searching for
w-5 h-5,w-6 h-6,w-7 h-7,w-8 h-8on clickable elements across all.vuefiles. Each interactive element needs 44px minimum. -
TEST:P3 — Run
pnpm typecheck && pnpm lint && pnpm test. Commit and push.
Phase 4: Touch Target Gaps & ContentPanel Tab Bar
-
T14 — Fix ContentPanel.vue tab bar. Tab buttons likely have
gap-1(4px) between them. Increase togap-2(8px). Ensure each tab button has at least 44px height. The tab labels should usetext-xsminimum (from Phase 1 fixes). The tab bar should be horizontally scrollable on mobile with sufficient padding. -
T15 — Audit and fix ALL remaining
gap-0.5andgap-1between clickable elements. Search all.vuefiles forgap-0.5andgap-1. For each result, check if the container holds clickable elements (buttons, links, tabs). If so, increase togap-2(8px). Leave non-clickable layout gaps (like text spacing) unchanged. -
T16 — Fix grid card touch targets. In all
*Grid.vuecomponents, verify that cards have sufficient tap area. Cards themselves are usually fine (full-width), but action buttons within cards (favorite, play, expand) need 44px targets. Check:FilmGrid.vue,SongGrid.vue,BookGrid.vue,TVSeriesGrid.vue,PodcastGrid.vue,AppsGrid.vue,ArchyAppsGrid.vue,ImageGrid.vue,PlaceGrid.vue. -
TEST:P4 — Run
pnpm typecheck && pnpm lint && pnpm test. Commit and push.
Phase 5: Glass Button System & Utility Classes
-
T17 — Update
.glass-buttonand.glass-button-sminpackages/app/src/styles/main.cssto enforce 44px minimum height on mobile. Add a responsive rule: on screens ≤ 768px,.glass-buttongetsmin-height: 48pxand.glass-button-smgetsmin-height: 44px. This catches all uses of these classes automatically. On desktop they stay as-is. -
T18 — Audit all
!h-7 !min-h-0overrides. These force 28px height, defeating the glass button minimum. Search all.vuefiles for!h-7and!min-h-0. Replace with mobile-responsive approach: keep desktop size but ensure 44px minimum on mobile usingmin-h-[44px] md:min-h-0. -
T19 — Add a
.touch-targetutility class tomain.css:.touch-target { min-width: 44px; min-height: 44px; display: inline-flex; align-items: center; justify-content: center; }. Then refactor at least 15 icon buttons across the app to use this class instead of manual min-w/min-h. This creates a reusable pattern for future development. -
TEST:P5 — Run
pnpm typecheck && pnpm lint && pnpm test. Commit and push.
Phase 6: Modals, Dialogs & Overlays
-
T20 — Fix PassphraseDialog.vue. Submit button uses
h-10(40px, 4px short). Change toh-11(44px). Verify input field istext-base. Ensure the dialog has proper padding for mobile. -
T21 — Audit all modal/overlay/dialog components for mobile compliance. Check:
ArticleOverlay.vue,ShareToNostr.vue,ConversationExport.vue,ComparisonMode.vue,NostrProfileEditor.vue,NostrRelayManager.vue. Each should have: 44px button touch targets, 16px input text, 8px button gaps, proper padding on mobile. -
T22 — Fix the sidebar/conversation list touch targets.
ConversationList.vueor sidebar entries should have at least 44px height per item. Delete/rename buttons within list items need 44px targets. -
TEST:P6 — Run
pnpm typecheck && pnpm lint && pnpm test. Commit and push.
Phase 7: Comprehensive Verification
-
T23 — Run a final grep audit to verify NO remaining violations:
text-[10px],text-[9px],text-[8px]— should return 0 results inpackages/app/src/text-[11px]— should return 0 results (all bumped to text-xs)gap-0.5between clickable elements — should be 0- All inputs have
text-baseminimum Fix any remaining violations found.
-
T24 — Run
pnpm test(all tests pass),pnpm typecheck(no errors),pnpm lint(0 errors). Final commit with summary message. Push to remote.