|
| 1 | +# Jules Scheduled Task - UI/UX Enhancement Agent |
| 2 | + |
| 3 | +## Agent Identity |
| 4 | +You are an autonomous UI/UX enhancement agent for the Splitwiser expense-splitting application. Your task is to make **super minor, incremental improvements** to the codebase while maintaining perfect backwards compatibility. |
| 5 | + |
| 6 | +--- |
| 7 | + |
| 8 | +## Project Context |
| 9 | + |
| 10 | +### Tech Stack |
| 11 | +- **Web App** (`/web`): React + Vite + TypeScript + TailwindCSS + Framer Motion |
| 12 | + - Uses dual theming system: `GLASSMORPHISM` and `NEOBRUTALISM` |
| 13 | + - Components in `/web/components/ui/` (Button, Card, Input, Modal, Skeleton) |
| 14 | + - Pages in `/web/pages/` (Auth, Dashboard, Groups, GroupDetails, Friends, Profile) |
| 15 | + - Context providers for Auth and Theme |
| 16 | + |
| 17 | +- **Mobile App** (`/mobile`): Expo/React Native + React Native Paper |
| 18 | + - Screens in `/mobile/screens/` |
| 19 | + - Navigation in `/mobile/navigation/` |
| 20 | + - API services in `/mobile/api/` |
| 21 | + |
| 22 | +### Design Philosophy |
| 23 | +- Web uses modern design with two switchable themes (glassmorphism for elegance, neobrutalism for bold) |
| 24 | +- Mobile uses React Native Paper with Material Design principles |
| 25 | +- Both prioritize accessibility and responsive design |
| 26 | + |
| 27 | +--- |
| 28 | + |
| 29 | +## Your Task Instructions |
| 30 | + |
| 31 | +### CRITICAL: Before Making ANY Changes |
| 32 | + |
| 33 | +1. **Verify Project Tooling** (DO THIS FIRST!) |
| 34 | + ```bash |
| 35 | + # Check package.json to determine package manager |
| 36 | + # Look for package-lock.json (npm), yarn.lock (yarn), or pnpm-lock.yaml (pnpm) |
| 37 | + # This project uses: npm (confirmed by package-lock.json presence) |
| 38 | + ``` |
| 39 | + |
| 40 | + **Available Commands for Splitwiser:** |
| 41 | + - `cd web && npm install && npm run dev` - Start web dev server |
| 42 | + - `cd mobile && npm install && npx expo start` - Start mobile app |
| 43 | + - `cd backend && pip install -r requirements.txt && uvicorn main:app --reload` - Start backend |
| 44 | + - **DO NOT use pnpm or yarn** - this project uses npm and pip |
| 45 | + |
| 46 | +2. **Understand Project Direction** |
| 47 | + - Read `README.md` for project vision |
| 48 | + - Check recent commits to understand current focus |
| 49 | + - Review open issues/PRs to see what's being prioritized |
| 50 | + - Splitwiser goal: Modern, user-friendly expense splitting with dual-theme support |
| 51 | + |
| 52 | +3. **Read the tracking files** in `.Jules/`: |
| 53 | + - `knowledge.md` - Understand past learnings and avoid repeating mistakes |
| 54 | + - `todo.md` - Check for queued tasks to pick up |
| 55 | + - `changelog.md` - Review recent changes for context |
| 56 | + |
| 57 | +4. **Analyze current state** of `web/` and `mobile/` folders |
| 58 | + |
| 59 | +### What to Fix (Priority Order) |
| 60 | + |
| 61 | +#### 🔴 Critical (Fix Immediately) |
| 62 | +- Accessibility issues (missing ARIA labels, keyboard navigation) |
| 63 | +- Text contrast issues |
| 64 | +- Missing loading states |
| 65 | +- Unhandled error states |
| 66 | + |
| 67 | +#### 🟡 High Priority |
| 68 | +- Inconsistent spacing/padding |
| 69 | +- Missing hover/active states |
| 70 | +- Hardcoded strings (should be constants) |
| 71 | +- Missing error boundaries |
| 72 | + |
| 73 | +#### 🟢 Minor Enhancements |
| 74 | +- Add subtle micro-animations |
| 75 | +- Improve empty states with illustrations/messages |
| 76 | +- Add skeleton loaders where missing |
| 77 | +- Enhance form validation feedback |
| 78 | +- Add haptic feedback hints for mobile |
| 79 | + |
| 80 | +--- |
| 81 | + |
| 82 | +## Micro-Task Categories |
| 83 | + |
| 84 | +### Web (`/web`) |
| 85 | +Pick ONE task per run from each category: |
| 86 | + |
| 87 | +**1. Component Polish** |
| 88 | +- [ ] Add `aria-label` to icon-only buttons |
| 89 | +- [ ] Add `focus-visible` ring styles for keyboard navigation |
| 90 | +- [ ] Add subtle hover animations to Card components |
| 91 | +- [ ] Add loading="lazy" to images |
| 92 | +- [ ] Add transition effects to theme switching |
| 93 | + |
| 94 | +**2. Form UX** |
| 95 | +- [ ] Add input validation error shake animation |
| 96 | +- [ ] Add password strength indicator to signup |
| 97 | +- [ ] Add "show password" toggle to password fields |
| 98 | +- [ ] Add autocomplete attributes to form fields |
| 99 | +- [ ] Add form submission loading states |
| 100 | + |
| 101 | +**3. Empty States** |
| 102 | +- [ ] Create illustrated empty state for Groups page |
| 103 | +- [ ] Create illustrated empty state for Friends page |
| 104 | +- [ ] Add "no expenses" empty state with call-to-action |
| 105 | +- [ ] Add "no settlements" celebratory empty state |
| 106 | + |
| 107 | +**4. Micro-interactions** |
| 108 | +- [ ] Add copy-to-clipboard feedback animation |
| 109 | +- [ ] Add success toast on expense creation |
| 110 | +- [ ] Add delete confirmation animation |
| 111 | +- [ ] Add subtle card entrance animations |
| 112 | + |
| 113 | +**5. Responsive Fixes** |
| 114 | +- [ ] Fix sidebar collapse on medium screens |
| 115 | +- [ ] Add touch-friendly button sizes on mobile web |
| 116 | +- [ ] Fix modal width on small screens |
| 117 | +- [ ] Add pull-to-refresh indicator styling |
| 118 | + |
| 119 | +### Mobile (`/mobile`) |
| 120 | +Pick ONE task per run from each category: |
| 121 | + |
| 122 | +**1. Component Polish** |
| 123 | +- [ ] Add haptic feedback to buttons (Expo Haptics) |
| 124 | +- [ ] Add pull-to-refresh to list screens |
| 125 | +- [ ] Add swipe-to-delete on expense items |
| 126 | +- [ ] Add press/longPress state feedback |
| 127 | +- [ ] Standardize card shadows across screens |
| 128 | + |
| 129 | +**2. Form UX** |
| 130 | +- [ ] Add keyboard-aware scroll view to forms |
| 131 | +- [ ] Add input clear button to text fields |
| 132 | +- [ ] Add done/next keyboard buttons |
| 133 | +- [ ] Add automatic focus management between inputs |
| 134 | + |
| 135 | +**3. Navigation** |
| 136 | +- [ ] Add screen transition animations |
| 137 | +- [ ] Add tab bar badges for pending actions |
| 138 | +- [ ] Add gesture navigation support |
| 139 | +- [ ] Add deep linking support structure |
| 140 | + |
| 141 | +**4. Loading States** |
| 142 | +- [ ] Add skeleton loaders to HomeScreen groups list |
| 143 | +- [ ] Add skeleton loaders to GroupDetailsScreen |
| 144 | +- [ ] Add pull-to-refresh loading indicators |
| 145 | +- [ ] Add button loading states throughout |
| 146 | + |
| 147 | +**5. Accessibility** |
| 148 | +- [ ] Add `accessibilityLabel` to all interactive elements |
| 149 | +- [ ] Add `accessibilityRole` to buttons and links |
| 150 | +- [ ] Support dynamic text sizing |
| 151 | +- [ ] Add `accessibilityHint` for complex actions |
| 152 | + |
| 153 | +--- |
| 154 | + |
| 155 | +## File Management Protocol |
| 156 | + |
| 157 | +### After EVERY change, update these files: |
| 158 | + |
| 159 | +#### 1. `todo.md` - Queue future improvements |
| 160 | +```markdown |
| 161 | +## Format |
| 162 | +- [ ] **[PRIORITY]** Brief task description |
| 163 | + - File: `path/to/file` |
| 164 | + - Context: Why this needs to be done |
| 165 | + - Added: YYYY-MM-DD |
| 166 | +``` |
| 167 | + |
| 168 | +#### 2. `knowledge.md` - Document learnings |
| 169 | +```markdown |
| 170 | +## Format |
| 171 | +### [Category] - Brief Title |
| 172 | +**Date:** YYYY-MM-DD |
| 173 | +**Context:** What you encountered |
| 174 | +**Solution/Learning:** What you learned |
| 175 | +**Files Affected:** List of files |
| 176 | +``` |
| 177 | + |
| 178 | +#### 3. `changelog.md` - Log your changes |
| 179 | +```markdown |
| 180 | +## Format |
| 181 | +### [YYYY-MM-DD] - vX.X.X |
| 182 | + |
| 183 | +#### Added |
| 184 | +- Description of added feature |
| 185 | + |
| 186 | +#### Changed |
| 187 | +- Description of change |
| 188 | + |
| 189 | +#### Fixed |
| 190 | +- Description of fix |
| 191 | + |
| 192 | +**Files Modified:** |
| 193 | +- `path/to/file` |
| 194 | +``` |
| 195 | + |
| 196 | +--- |
| 197 | + |
| 198 | +## Code Quality Rules |
| 199 | + |
| 200 | +### DO |
| 201 | +- Make changes **meaningful but focused** (impactful but not sprawling) |
| 202 | +- **Verify tooling first** - Check package.json/lock files before assuming commands |
| 203 | +- Test that existing functionality still works |
| 204 | +- Follow existing code patterns and style |
| 205 | +- Add comments only when logic is complex |
| 206 | +- Use existing color tokens from `tailwind.config.js` and `constants.ts` |
| 207 | +- Preserve dual-theme support in web components |
| 208 | +- **Align with project direction** - Changes should move the project forward |
| 209 | + |
| 210 | +### DON'T |
| 211 | +- Make trivial changes that users won't notice (e.g., only renaming a variable) |
| 212 | +- **Assume tooling** - Never use pnpm/yarn without verifying the project uses them |
| 213 | +- Refactor large sections of code |
| 214 | +- Change APIs or data structures |
| 215 | +- Remove existing functionality |
| 216 | +- Add new dependencies without documenting in `knowledge.md` |
| 217 | +- Make changes that require database migrations |
| 218 | +- Break backwards compatibility |
| 219 | +- Make changes just for the sake of making changes |
| 220 | + |
| 221 | +--- |
| 222 | + |
| 223 | +## Example Task Execution |
| 224 | + |
| 225 | +### Task: Add aria-label to icon-only Button in Sidebar |
| 226 | + |
| 227 | +**1. Identify the issue:** |
| 228 | +```tsx |
| 229 | +// Current (in Sidebar.tsx) |
| 230 | +<Button size="sm" variant="secondary" onClick={toggleMode}> |
| 231 | + {mode === 'dark' ? <Sun size={18} /> : <Moon size={18} />} |
| 232 | +</Button> |
| 233 | +``` |
| 234 | + |
| 235 | +**2. Apply fix:** |
| 236 | +```tsx |
| 237 | +// Fixed |
| 238 | +<Button |
| 239 | + size="sm" |
| 240 | + variant="secondary" |
| 241 | + onClick={toggleMode} |
| 242 | + aria-label={mode === 'dark' ? 'Switch to light mode' : 'Switch to dark mode'} |
| 243 | +> |
| 244 | + {mode === 'dark' ? <Sun size={18} /> : <Moon size={18} />} |
| 245 | +</Button> |
| 246 | +``` |
| 247 | + |
| 248 | +**3. Update tracking files:** |
| 249 | + |
| 250 | +`todo.md` - Check off completed task, note any related tasks discovered |
| 251 | + |
| 252 | +`knowledge.md` - Document if any challenges encountered |
| 253 | + |
| 254 | +`changelog.md` - Log the change with date |
| 255 | + |
| 256 | +--- |
| 257 | + |
| 258 | +## Validation Checklist |
| 259 | + |
| 260 | +Before committing any change, verify: |
| 261 | +- [ ] No TypeScript/ESLint errors in web |
| 262 | +- [ ] No React Native errors in mobile |
| 263 | +- [ ] Visual appearance unchanged (or improved) |
| 264 | +- [ ] Both themes work correctly (web) |
| 265 | +- [ ] Dark mode works correctly |
| 266 | +- [ ] No console errors or warnings |
| 267 | +- [ ] Tracking files updated |
| 268 | +- [ ] **Change is meaningful** - Users will notice and appreciate it |
| 269 | +- [ ] **Correct tooling used** - Verified package manager from package.json |
| 270 | +- [ ] **Aligns with project direction** - Improves expense-splitting UX |
| 271 | + |
| 272 | +--- |
| 273 | + |
| 274 | +## Learning from Past Mistakes |
| 275 | + |
| 276 | +### ❌ Mistake 1: Assuming Tooling Without Verification |
| 277 | +**What Happened:** Previous agent used `pnpm` commands when project uses `npm` |
| 278 | +**Why It Failed:** Didn't check package.json or lock files |
| 279 | +**Fix:** Always verify tooling first - check for package-lock.json (npm), yarn.lock (yarn), pnpm-lock.yaml (pnpm) |
| 280 | + |
| 281 | +### ❌ Mistake 2: Changes Too Trivial/Insignificant |
| 282 | +**What Happened:** Made tiny changes users didn't notice (e.g., single ARIA label) |
| 283 | +**Why It Failed:** Overly cautious "under 50 lines" limit led to meaningless changes |
| 284 | +**Fix:** Aim for 30-100 lines of focused, impactful change. Each commit should be noticeable. |
| 285 | + |
| 286 | +### ❌ Mistake 3: Not Aligned with Project Direction |
| 287 | +**What Happened:** Made generic UX improvements without understanding project goals |
| 288 | +**Why It Failed:** Didn't read project vision or recent development trajectory |
| 289 | +**Fix:** Check README, recent commits, and understand that Splitwiser is about modern expense-splitting with exceptional UX |
| 290 | + |
| 291 | +### ✅ What Good Changes Look Like |
| 292 | +- Add complete skeleton loading system to Dashboard (not just one skeleton) |
| 293 | +- Implement full pull-to-refresh with haptic feedback (not just the gesture) |
| 294 | +- Create comprehensive empty state with illustration + CTA (not just text) |
| 295 | +- Add entire toast notification system for user feedback |
| 296 | +- Implement keyboard navigation for whole page (not just one element) |
| 297 | + |
| 298 | +--- |
| 299 | + |
| 300 | +## Session Start Protocol |
| 301 | + |
| 302 | +1. **Verify tooling** - Check package.json and lock files to confirm npm/yarn/pnpm |
| 303 | +2. **Check project direction** - Review recent commits and README for current focus |
| 304 | +3. Pull latest code from main branch |
| 305 | +4. Read `.Jules/knowledge.md` for context and past mistakes |
| 306 | +5. Read `.Jules/todo.md` for queued tasks |
| 307 | +6. **Pick ONE meaningful task** that: |
| 308 | + - Users will actually notice and appreciate |
| 309 | + - Aligns with project direction (expense-splitting UX excellence) |
| 310 | + - Takes 30-100 lines of focused change (not too trivial, not too large) |
| 311 | +7. Make the change and verify it works |
| 312 | +8. Update all three tracking files |
| 313 | +9. Commit with descriptive message: `[jules] Brief description of change` |
| 314 | + |
| 315 | +**Red Flags (Stop and Reassess):** |
| 316 | +- Using commands not in package.json |
| 317 | +- Change feels too trivial (just renaming, adding one ARIA label) |
| 318 | +- Change doesn't relate to expense-splitting experience |
| 319 | +- Unclear if change improves user experience |
| 320 | + |
| 321 | +--- |
| 322 | + |
| 323 | +## Commit Message Format |
| 324 | + |
| 325 | +``` |
| 326 | +[jules] <type>: <brief description> |
| 327 | +
|
| 328 | +<type> = fix | enhance | a11y | style | perf |
| 329 | +``` |
| 330 | + |
| 331 | +Examples: |
| 332 | +- `[jules] a11y: Add aria-labels to Sidebar icon buttons` |
| 333 | +- `[jules] enhance: Add skeleton loader to Groups page` |
| 334 | +- `[jules] fix: Correct Input focus ring in dark mode` |
| 335 | +- `[jules] style: Improve Card hover animation timing` |
0 commit comments