-
Notifications
You must be signed in to change notification settings - Fork 1
feat/ai #4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
omarraf
wants to merge
7
commits into
main
Choose a base branch
from
feat/ai
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
feat/ai #4
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
c7a9f6f
feat: add ai chatbot
omarraf d69b014
adjust block size
omarraf 66ad859
persist chat
omarraf 3a4a03c
migrate ai backend to firebase functions and railway server
omarraf f10640d
update cors config to allow GET and OPTIONS methods with additional h…
omarraf 929ae11
update
omarraf f3eb1ca
add ai usage tracking
omarraf File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,371 @@ | ||
| # Mobile Support Improvement Plan | ||
|
|
||
| ## Current Issues | ||
|
|
||
| Based on testing, the current mobile implementation has several usability problems: | ||
|
|
||
| 1. **Circular chart is not properly centered** - Main feature of the app is hard to use | ||
| 2. **Horizontal scrolling occurs** - Creates poor UX, elements overflow viewport | ||
| 3. **Sidebar approach is clunky** - Takes up too much space when open, not intuitive | ||
| 4. **Elements not optimally sized** - Some elements too small, others too large | ||
| 5. **Footer visibility** - Footer might be interfering with content | ||
|
|
||
| --- | ||
|
|
||
| ## Mobile-First Design Goals | ||
|
|
||
| ### Priority 1: Circular Chart (The Core Feature) | ||
| - **Must be perfectly centered** on the screen | ||
| - **Must never cause horizontal scrolling** | ||
| - **Must scale to fit viewport width** with proper padding | ||
| - **Must be the dominant visual element** on mobile | ||
| - All interactions must work smoothly with touch | ||
|
|
||
| ### Priority 2: Navigation | ||
| - **Remove sidebar completely on mobile** - not suitable for small screens | ||
| - Replace with **bottom navigation bar** (industry standard for mobile apps) | ||
| - 3-4 icons at bottom: Schedule Editor, My Schedules, Settings | ||
| - Always visible, doesn't take up much space | ||
| - Easy thumb access on phones | ||
|
|
||
| ### Priority 3: Layout & Viewport | ||
| - **No horizontal scrolling anywhere** | ||
| - **Vertical scrolling only** for timeline/content areas | ||
| - **Sticky header** with minimal height | ||
| - **Remove or minimize footer** on mobile (or make it absolutely positioned at bottom) | ||
|
|
||
| ### Priority 4: Controls & Actions | ||
| - **Compact header controls** - smaller, icon-only where possible | ||
| - **Floating Action Button (FAB)** for primary actions like "Save" | ||
| - **View toggle** (Linear/Circular) should be compact icons, not text buttons | ||
|
|
||
| --- | ||
|
|
||
| ## Detailed Implementation Plan | ||
|
|
||
| ### 1. Circular Chart Component (src/components/CircularChart.tsx) | ||
|
|
||
| **Changes:** | ||
| ``` | ||
| - Calculate chart size based on viewport width | ||
| - Add horizontal padding: 16px on mobile, 24px on tablet | ||
| - Center chart using flex container | ||
| - Prevent overflow with: overflow-x: hidden on parent | ||
| - Max width: min(100vw - 32px, 500px) for chart container | ||
| - Position absolutely within centered container | ||
| ``` | ||
|
|
||
| **Layout:** | ||
| ```html | ||
| <div className="flex-1 overflow-y-auto overflow-x-hidden"> | ||
| <div className="flex items-center justify-center min-h-full p-4"> | ||
| <div className="w-full max-w-[500px]"> | ||
| <!-- Circular Chart Here --> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| ``` | ||
|
|
||
| ### 2. Timeline Component (src/components/Timeline.tsx) | ||
|
|
||
| **Changes:** | ||
| ``` | ||
| - Full width on mobile (no side padding that causes overflow) | ||
| - Vertical scrolling only | ||
| - Time labels positioned carefully to not overflow | ||
| - Hour markers on left with negative margin: careful sizing | ||
| ``` | ||
|
|
||
| **Layout:** | ||
| ```html | ||
| <div className="flex-1 overflow-y-auto overflow-x-hidden px-4"> | ||
| <div className="max-w-3xl mx-auto"> | ||
| <!-- Timeline content --> | ||
| </div> | ||
| </div> | ||
| ``` | ||
|
|
||
| ### 3. Navigation - Bottom Nav Bar (New Approach) | ||
|
|
||
| **Create: src/components/BottomNav.tsx** | ||
|
|
||
| ```typescript | ||
| // Bottom navigation bar for mobile only | ||
| // Shown only on screens < 1024px (lg breakpoint) | ||
| // 3 main tabs: Schedule Editor, My Schedules, Settings | ||
| // Icons with labels below | ||
| // Active state highlighting | ||
| // Fixed to bottom of screen | ||
| ``` | ||
|
|
||
| **Design:** | ||
| ``` | ||
| - Fixed position at bottom | ||
| - White background with top border shadow | ||
| - Height: 64px | ||
| - 3 equal-width buttons | ||
| - Icon (24px) + Label (10px text) | ||
| - Active: blue color, inactive: gray | ||
| - Safe area padding for iOS notch | ||
| ``` | ||
|
|
||
| **Example:** | ||
| ```html | ||
| <nav className="fixed bottom-0 left-0 right-0 bg-white border-t border-gray-200 lg:hidden z-50 safe-area-pb"> | ||
| <div className="flex items-center justify-around h-16"> | ||
| <button>Schedule Editor</button> | ||
| <button>Schedules</button> | ||
| <button>Settings</button> | ||
| </div> | ||
| </nav> | ||
| ``` | ||
|
|
||
| ### 4. Dashboard Layout Restructure (src/components/Dashboard.tsx) | ||
|
|
||
| **Mobile Layout (< 1024px):** | ||
| ``` | ||
| ┌─────────────────────┐ | ||
| │ Compact Header │ ← Minimal height, essential controls only | ||
| ├─────────────────────┤ | ||
| │ │ | ||
| │ Main Content │ ← Chart/Timeline fills space | ||
| │ (Scrollable) │ | ||
| │ │ | ||
| ├─────────────────────┤ | ||
| │ Bottom Nav Bar │ ← Fixed at bottom (mobile only) | ||
| └─────────────────────┘ | ||
| ``` | ||
|
|
||
| **Desktop Layout (≥ 1024px):** | ||
| ``` | ||
| ┌───────┬─────────────────────┐ | ||
| │ │ Header │ | ||
| │ Side ├─────────────────────┤ | ||
| │ bar │ │ | ||
| │ │ Main Content │ | ||
| │ │ │ | ||
| └───────┴─────────────────────┘ | ||
| ``` | ||
|
|
||
| **Changes:** | ||
| ``` | ||
| - Remove sidebar on mobile entirely (not even hamburger menu) | ||
| - Remove mobile sidebar backdrop/overlay | ||
| - Remove hamburger button | ||
| - Add bottom navigation component | ||
| - Header: much more compact on mobile | ||
| - Footer: hidden on mobile OR absolutely positioned | ||
| - Main content: flex-1 with proper overflow handling | ||
| ``` | ||
|
|
||
| ### 5. Header Improvements (Mobile) | ||
|
|
||
| **Current Issues:** | ||
| - Too tall on mobile | ||
| - Controls take up too much space | ||
| - Schedule dropdown is clunky | ||
|
|
||
| **Mobile Header Design:** | ||
| ``` | ||
| Height: 48px (down from current ~60px) | ||
| Layout: | ||
| - Left: Page title (small, 16px font) | ||
| - Right: Compact controls (icon buttons only) | ||
|
|
||
| View toggle: Icon-only buttons (☰ for linear, ⭕ for circular) | ||
| Save button: Icon-only (💾) or FAB instead | ||
| Schedule selector: Icon/chevron only, opens bottom sheet | ||
| ``` | ||
|
|
||
| ### 6. Footer Handling | ||
|
|
||
| **Options:** | ||
|
|
||
| **Option A: Hide on Mobile** | ||
| ```css | ||
| .footer { | ||
| @apply hidden lg:block; | ||
| } | ||
| ``` | ||
|
|
||
| **Option B: Absolute Position** | ||
| ```css | ||
| .footer { | ||
| @apply absolute bottom-0 left-0 right-0 lg:relative; | ||
| padding-bottom: env(safe-area-inset-bottom); | ||
| } | ||
| ``` | ||
|
|
||
| **Option C: Above Bottom Nav** | ||
| ```css | ||
| .footer { | ||
| @apply mb-16 lg:mb-0; /* 64px for bottom nav */ | ||
| } | ||
| ``` | ||
|
|
||
| **Recommendation: Option A (Hide on mobile)** - Simplest, keeps focus on content | ||
|
|
||
| ### 7. Responsive Breakpoints Strategy | ||
|
|
||
| ```css | ||
| Mobile: < 640px (default styles) | ||
| - Bottom nav visible | ||
| - Sidebar hidden | ||
| - Compact header | ||
| - Chart: full width minus 32px padding | ||
| - Icon-only controls | ||
|
|
||
| Tablet: 640px - 1023px (sm: to lg:) | ||
| - Bottom nav visible | ||
| - Sidebar hidden | ||
| - Slightly larger header | ||
| - Chart: max-width 500px, centered | ||
| - Some text labels shown | ||
|
|
||
| Desktop: ≥ 1024px (lg:) | ||
| - Bottom nav hidden | ||
| - Sidebar visible (always shown) | ||
| - Full header with text labels | ||
| - Chart: flexible sizing | ||
| - All features visible | ||
| ``` | ||
|
|
||
| ### 8. Specific Component Updates | ||
|
|
||
| #### CircularChart.tsx | ||
| ``` | ||
| ✓ Container: flex justify-center items-center | ||
| ✓ Max width constraint | ||
| ✓ Responsive sizing based on viewport | ||
| ✓ Prevent horizontal overflow | ||
| ✓ Center tooltip positioning | ||
| ``` | ||
|
|
||
| #### Timeline.tsx | ||
| ``` | ||
| ✓ Full width within container | ||
| ✓ Remove side overflow | ||
| ✓ Time labels: careful positioning | ||
| ✓ Blocks: proper touch targets (min 44px height) | ||
| ``` | ||
|
|
||
| #### Dashboard.tsx | ||
| ``` | ||
| ✓ Remove sidebar for mobile | ||
| ✓ Add BottomNav component | ||
| ✓ Restructure layout with proper flex | ||
| ✓ Add overflow-x-hidden to main container | ||
| ✓ Make header compact on mobile | ||
| ✓ Hide/reposition footer | ||
| ``` | ||
|
|
||
| #### Header Controls | ||
| ``` | ||
| ✓ View toggle: sm:text-xs → icons only on mobile | ||
| ✓ Save button: Consider FAB instead | ||
| ✓ Schedule dropdown: Bottom sheet modal on mobile | ||
| ``` | ||
|
|
||
| --- | ||
|
|
||
| ## Implementation Order | ||
|
|
||
| ### Phase 1: Layout Foundation (Critical) | ||
| 1. Add `overflow-x-hidden` to main Dashboard container | ||
| 2. Remove sidebar/hamburger on mobile (< lg) | ||
| 3. Restructure Dashboard flex layout | ||
| 4. Hide footer on mobile | ||
|
|
||
| ### Phase 2: Bottom Navigation | ||
| 1. Create BottomNav.tsx component | ||
| 2. Add to Dashboard (mobile only) | ||
| 3. Implement active state logic | ||
| 4. Test navigation flow | ||
|
|
||
| ### Phase 3: Chart Centering | ||
| 1. Wrap CircularChart in flex centering container | ||
| 2. Add max-width constraints | ||
| 3. Calculate responsive sizing | ||
| 4. Test on various mobile sizes (320px - 768px) | ||
|
|
||
| ### Phase 4: Header Optimization | ||
| 1. Reduce header height on mobile | ||
| 2. Convert text buttons to icon-only | ||
| 3. Simplify schedule selector | ||
| 4. Test touch targets (min 44x44px) | ||
|
|
||
| ### Phase 5: Timeline Optimization | ||
| 1. Ensure no horizontal overflow | ||
| 2. Improve vertical scrolling | ||
| 3. Optimize time label positioning | ||
| 4. Test block creation on mobile | ||
|
|
||
| ### Phase 6: Polish & Testing | ||
| 1. Test on real devices (iPhone, Android) | ||
| 2. Test in Chrome DevTools mobile mode | ||
| 3. Check all screen sizes: 320px, 375px, 390px, 414px, 768px | ||
| 4. Verify no horizontal scrolling anywhere | ||
| 5. Verify circular chart is perfectly centered | ||
| 6. Test all touch interactions | ||
|
|
||
| --- | ||
|
|
||
| ## Testing Checklist | ||
|
|
||
| ### Layout Tests | ||
| - [ ] No horizontal scrolling on any page | ||
| - [ ] Circular chart is perfectly centered | ||
| - [ ] Bottom nav is visible on mobile only | ||
| - [ ] Sidebar is hidden on mobile | ||
| - [ ] Footer doesn't interfere with content | ||
| - [ ] All pages use full viewport height | ||
|
|
||
| ### Interaction Tests | ||
| - [ ] Tap navigation items in bottom nav | ||
| - [ ] Drag to create time blocks (circular) | ||
| - [ ] Drag to create time blocks (linear) | ||
| - [ ] Toggle between linear/circular views | ||
| - [ ] Save schedule | ||
| - [ ] Edit time blocks | ||
| - [ ] All buttons are tappable (44x44px minimum) | ||
|
|
||
| ### Visual Tests | ||
| - [ ] Text is readable (min 14px on mobile) | ||
| - [ ] Colors have sufficient contrast | ||
| - [ ] Touch targets are appropriately sized | ||
| - [ ] Spacing feels comfortable | ||
| - [ ] No UI elements cut off or hidden | ||
| - [ ] Safe area padding on iPhone notch | ||
|
|
||
| ### Device Tests | ||
| - [ ] iPhone SE (375x667) - smallest modern iPhone | ||
| - [ ] iPhone 12/13/14 (390x844) | ||
| - [ ] iPhone 14 Pro Max (430x932) | ||
| - [ ] Samsung Galaxy S21 (360x800) | ||
| - [ ] iPad Mini (768x1024) | ||
| - [ ] Test in both portrait and landscape | ||
|
|
||
| --- | ||
|
|
||
| ## Success Criteria | ||
|
|
||
| After implementation, mobile experience should have: | ||
|
|
||
| 1. ✅ **Circular chart is the hero** - Perfectly centered, no scrolling to see it | ||
| 2. ✅ **Zero horizontal scrolling** - Anywhere in the app | ||
| 3. ✅ **Easy navigation** - Bottom nav is intuitive and thumb-friendly | ||
| 4. ✅ **All features accessible** - Nothing hidden or hard to reach | ||
| 5. ✅ **Smooth interactions** - Drag-to-create works flawlessly | ||
| 6. ✅ **Professional feel** - Looks and feels like a native mobile app | ||
|
|
||
| --- | ||
|
|
||
| ## Notes | ||
|
|
||
| - **Don't use a hamburger menu** - Bottom nav is much better for mobile apps | ||
| - **Keep mobile simple** - Remove features if they clutter the UI | ||
| - **Touch targets matter** - Minimum 44x44px for all tappable elements | ||
| - **Test on real devices** - Emulators are good, but real devices are better | ||
| - **Consider gestures** - Swipe to switch between views could be cool (future) | ||
|
|
||
| This plan prioritizes the circular chart as the centerpiece of the mobile experience and removes friction from navigation and layout. | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add language tags to fenced code blocks (MD040).
Markdownlint reports missing language identifiers. Please add a language (e.g.,
text,html,css,typescript) to each fenced block for consistency.🔧 Example fix
📝 Committable suggestion
🤖 Prompt for AI Agents