2026-03-04 12:43:44 +00:00
You are making the AIUI app compliant with iOS Human Interface Guidelines (HIG) for font sizes, touch targets, and button hitboxes — WITHOUT changing the visual design. Read these files first:
2026-03-03 18:24:17 +00:00
2026-03-03 22:29:18 +00:00
1. `loop/plan.md` — Your task checklist (mark items `- [x]` as you complete them)
2026-03-04 10:54:03 +00:00
2. `CLAUDE.md` — Project conventions, design system rules, and coding standards
2026-03-04 12:43:44 +00:00
## Key Principle
2026-03-04 10:54:03 +00:00
2026-03-04 12:43:44 +00:00
**Same design, better accessibility.** The app should look identical but be properly tappable and readable on mobile. All changes are about sizing minimums, not visual redesign.
2026-03-04 10:54:03 +00:00
2026-03-04 12:43:44 +00:00
## iOS HIG Requirements
2026-03-03 18:24:17 +00:00
2026-03-04 12:43:44 +00:00
1. **Font Sizes:**
- Body text: 17px (but we use 14px base — OK, it's a dense app)
- Footnote: 13px minimum
- Caption: 11px ABSOLUTE minimum (nothing smaller than 11px ever)
- Form inputs: 16px minimum (prevents iOS auto-zoom on focus)
2026-03-04 12:09:28 +00:00
2026-03-04 12:43:44 +00:00
2. **Touch Targets:**
- All interactive elements: 44× 44px minimum tappable area
- The VISUAL icon can be smaller (e.g., 20px SVG), but the tappable wrapper must be 44× 44px
- Pattern: `<button class="min-w-[44px] min-h-[44px] flex items-center justify-center"><svg class="w-5 h-5" ...></button>`
2026-03-04 12:09:28 +00:00
2026-03-04 12:43:44 +00:00
3. **Gaps Between Targets:**
- Minimum 8px (gap-2) between any two tappable elements
- `gap-0.5` (2px) and `gap-1` (4px) between buttons is a violation
2026-03-04 12:09:28 +00:00
2026-03-04 12:43:44 +00:00
## Current Violations Found (from audit)
2026-03-04 12:09:28 +00:00
2026-03-04 12:43:44 +00:00
- **301× `text-[10px]` ** — timestamps, labels, metadata throughout app
- **76× `text-[11px]` ** — settings, branch switcher, design system
- **100× `text-[9px]` / `text-[8px]` ** — badges, version numbers, plugin metadata
- **40+ buttons below 44× 44px** — `w-7 h-7` (28px), `w-8 h-8` (32px), `w-6 h-6` (24px), `w-5 h-5` (20px)
- **20+ locations with gap < 8px** between clickable elements
- **9+ inputs below 16px** — ChatInput textarea, settings inputs, search
## Key Files
- `packages/app/src/styles/main.css` — Glass button system, utility classes
- `packages/app/src/components/chat/ChatMessage.vue` — Message actions, timestamps
- `packages/app/src/components/chat/ChatInput.vue` — Main input, send button
- `packages/app/src/components/chat/ChatHeader.vue` — Toolbar buttons
- `packages/app/src/components/chat/ChatSearch.vue` — Search nav buttons
- `packages/app/src/components/chat/SettingsModal.vue` — Settings UI
- `packages/app/src/components/content/ContentPanel.vue` — Tab bar
- `packages/app/src/components/content/*Grid.vue` — All content grids
- `packages/app/src/components/content/*Detail.vue` — All detail views
- `packages/app/src/components/settings/` — Settings components
- `packages/app/src/components/ui/` — Shared UI components
2026-03-04 12:09:28 +00:00
2026-03-03 22:29:18 +00:00
## Design System Rules (must follow for every file you touch)
2026-03-04 05:03:03 +00:00
- **Glass morphism only** — use `.glass` , `.glass-card` , `.glass-button` , `.glass-button-sm` from `src/styles/main.css`
2026-03-04 12:43:44 +00:00
- **No light-mode conditionals** — never use `isDark ?` pattern. The app is dark-only.
2026-03-03 22:29:18 +00:00
- **No `bg-gray-*` or `bg-white` ** — use `bg-white/5` , `bg-white/10` , `bg-black/35` etc.
- **Text opacity scale** — `text-white/25` → `/40` → `/60` → `/70` → `/80` → `/90` → `/96` → `text-white`
2026-03-04 12:43:44 +00:00
- **Accent colour** — `text-accent` (`#F7931A` ), `bg-accent/15` , `border-accent/30`
2026-03-03 22:29:18 +00:00
- **Animations** — `animate-scale-in` , `animate-fade-up` , `animate-fade-in` from design system only
2026-03-04 12:43:44 +00:00
## How to Fix Touch Targets (Pattern)
**Before (violation):**
```html
< button class = "w-7 h-7 rounded-full" @ click = "doThing" >
< svg class = "w-4 h-4" ... ></ svg >
</ button >
```
**After (compliant):**
```html
< button class = "min-w-[44px] min-h-[44px] flex items-center justify-center rounded-full" @ click = "doThing" >
< svg class = "w-4 h-4" ... ></ svg >
</ button >
```
Or use the utility class (after T19):
```html
< button class = "touch-target rounded-full" @ click = "doThing" >
< svg class = "w-4 h-4" ... ></ svg >
</ button >
```
2026-03-03 22:29:18 +00:00
## For each task in loop/plan.md:
1. Find the first unchecked `- [ ]` item
2026-03-04 10:54:03 +00:00
2. Read the task description carefully
3. Read the relevant source files before making changes
2026-03-04 12:43:44 +00:00
4. Make the change — keep visual design identical, only adjust sizing
5. Run `pnpm typecheck && pnpm lint` — fix all errors
2026-03-04 10:54:03 +00:00
6. Run `pnpm test` — fix any failing tests
2026-03-04 12:43:44 +00:00
7. Commit: `type(scope): description` (conventional commits)
8. Mark it done `- [x]` in `loop/plan.md`
9. Move to the next unchecked task immediately
2026-03-03 22:29:18 +00:00
## Rules
- Never skip a testing gate — if tests fail, fix them before moving on
2026-03-04 12:43:44 +00:00
- If a task is proving difficult, keep trying different approaches. Make at least 30 genuine attempts.
2026-03-03 22:29:18 +00:00
- Always run typecheck + lint after every code change
2026-03-04 12:43:44 +00:00
- The visual design must NOT change — same colors, same layout, same glass morphism
- Only sizes of tappable areas, font minimums, and gaps change
2026-03-03 22:29:18 +00:00
- Do not stop until all tasks are checked or you are rate limited
2026-03-04 12:43:44 +00:00
- Commit and push after each TEST: task