Problem
Empty states are inconsistent across the app, and some screens don't provide clear guidance when there's no content to display.
Issues Identified
1. Missing Empty States
- HomeScreen: No guidance when timetable is empty
- MyspaceScreen: Search with no results needs better UX
- CalorieScreen: Empty meal/burn logs lack context
- HangoutScreen: Empty room list is handled, but could be better
2. Inconsistent Patterns
- Different empty state designs across screens
- Some use inline text, others use cards
- Inconsistent iconography
- No clear call-to-action hierarchy
3. Poor User Guidance
- Users don't know what to do next
- Missing contextual help
- No suggestions or examples
- Unclear value proposition
Proposed Solutions
1. Use EmptyState Component
Leverage the newly created EmptyState component with:
- Consistent icon style
- Clear, friendly messaging
- Actionable CTA button
- Optional secondary text
2. Context-Specific Empty States
HomeScreen
Scenario: No timetable uploaded
<EmptyState
icon="calendar-outline"
title="No timetable yet"
description="Upload your weekly timetable screenshot to see your schedule, track classes, and get smart reminders."
actionLabel="Upload timetable"
onActionPress={openUploadSheet}
/>
MyspaceScreen
Scenario: No saved items
<EmptyState
icon="folder-open-outline"
title="Your space is empty"
description="Start capturing blackboard photos, notes, and links. Everything will be searchable by OCR text, date, and subject."
actionLabel="Add first item"
onActionPress={() => setAddSheetOpen(true)}
/>
Scenario: Search no results
<EmptyState
icon="search-outline"
title="No matches found"
description="Try searching by subject name, date, or a word from your notes. You can also add a new item."
actionLabel="Clear search"
onActionPress={() => setQuery('')}
/>
CalorieScreen
Scenario: No meals logged
<EmptyState
icon="restaurant-outline"
title="No meals logged today"
description="Start tracking your meals to see how you're progressing toward your daily calorie target."
actionLabel="Log first meal"
onActionPress={() => focusMealInput()}
/>
HangoutScreen
Scenario: No active rooms (already implemented, but can be enhanced)
- Current implementation is good
- Consider adding illustration or animation
3. Progressive Disclosure
For first-time users, show:
- Welcome state: Explain the feature
- Example content: Show what it looks like with data
- Quick start guide: 3-step getting started
4. Empty State Variations
Zero State (first time user):
- More educational
- Show value proposition
- Include examples or preview
Empty State (returning user):
- Assume familiarity
- Focus on action
- Shorter messaging
No Results State (filtered/searched):
- Suggest adjusting filters
- Offer to clear search
- Show related suggestions
Design Specifications
Visual Hierarchy
- Icon (64px, theme.colors.textMuted)
- Title (22px, bold, theme.colors.text)
- Description (15px, theme.colors.textSoft)
- Action button (primary style)
Spacing
- Icon container: 120x120pt with surfaceAlt background
- Title margin-top: 20pt
- Description margin-top: 12pt
- Button margin-top: 24pt
Tone
- Friendly and encouraging
- Action-oriented
- Avoid negative language
- Use 'your' to personalize
Implementation Checklist
Priority
Medium - Improves first-time user experience
Acceptance Criteria
Problem
Empty states are inconsistent across the app, and some screens don't provide clear guidance when there's no content to display.
Issues Identified
1. Missing Empty States
2. Inconsistent Patterns
3. Poor User Guidance
Proposed Solutions
1. Use EmptyState Component
Leverage the newly created
EmptyStatecomponent with:2. Context-Specific Empty States
HomeScreen
Scenario: No timetable uploaded
MyspaceScreen
Scenario: No saved items
Scenario: Search no results
CalorieScreen
Scenario: No meals logged
HangoutScreen
Scenario: No active rooms (already implemented, but can be enhanced)
3. Progressive Disclosure
For first-time users, show:
4. Empty State Variations
Zero State (first time user):
Empty State (returning user):
No Results State (filtered/searched):
Design Specifications
Visual Hierarchy
Spacing
Tone
Implementation Checklist
Priority
Medium - Improves first-time user experience
Acceptance Criteria