Skip to content

Prototype 2 new design directions: Aurora and Mono#74

Open
devin-ai-integration[bot] wants to merge 2 commits into
mainfrom
devin/1783274555-design-prototypes
Open

Prototype 2 new design directions: Aurora and Mono#74
devin-ai-integration[bot] wants to merge 2 commits into
mainfrom
devin/1783274555-design-prototypes

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Two new design direction prototypes accessible via a new Lab tab in the bottom navigation.

Direction 1: Aurora (Dark Glassmorphic)

  • Deep purple-blue gradient background with ambient glow orbs
  • Translucent glass-effect message bubbles (rgba backgrounds + subtle borders)
  • Horizontal scrollable model selector as compact chips with active glow state
  • Floating rounded input bar with inline attach + send actions
  • Vertical glow indicator strip on assistant responses
  • Color palette: #0f0c29 base, #7c3aed primary, #06b6d4 secondary accent

Direction 2: Mono (Light Editorial Minimal)

  • Pure white/neutral surface with maximum content density
  • No message bubbles — user queries render as bold headings, assistant text as clean paragraphs
  • Inline dropdown model picker (replaces bottom sheet)
  • Slide-out conversation sidebar with history
  • User/assistant avatars as compact identifiers
  • Action bar per response: Copy / Retry / Share
  • Thinking state as a subtle progress bar
  • Color palette: #fafafa base, #0a0a0a single accent

Integration

  • DesignLab screen with card-based picker to preview each direction
  • Both aurora and mono added to the theme system for app-wide use
  • New "Lab" tab uses headerShown: false for full-bleed prototype rendering

Link to Devin session: https://app.devin.ai/sessions/225f7daf906c4b84b85bf68476781cb0
Requested by: @dabit3


Devin Review

Status Commit
⚪ Not started

Run Devin Review

Open in Devin Review (Staging)
Open in Devin Review

- Aurora: Glassmorphic dark UI with gradient backgrounds, translucent panels,
  ambient glow accents, horizontal model chip selector, floating input bar
- Mono: Ultra-minimal editorial light UI with bold typography, content-first
  hierarchy, inline model picker, conversation sidebar, generous whitespace
- New 'Lab' tab in navigation to preview both directions side-by-side
- Added aurora and mono themes to the theme system for app-wide use
- Mock data demonstrates chat flow patterns in each direction

Co-Authored-By: Nader Dabit <dabit3@gmail.com>
@dabit3 dabit3 self-assigned this Jul 5, 2026
@dabit3
dabit3 self-requested a review July 5, 2026 18:06
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 3 potential issues.

Open in Devin Review

Comment on lines +64 to +88
<TouchableOpacity
style={styles.sidebarOverlay}
activeOpacity={1}
onPress={() => setShowSidebar(false)}
>
<View style={styles.sidebar}>
<View style={styles.sidebarHeader}>
<Text style={styles.sidebarTitle}>Conversations</Text>
<TouchableOpacity onPress={() => setShowSidebar(false)}>
<Ionicons name="close" size={20} color={MONO_THEME.text} />
</TouchableOpacity>
</View>
<TouchableOpacity style={styles.newChatButton}>
<Ionicons name="add" size={18} color={MONO_THEME.text} />
<Text style={styles.newChatText}>New conversation</Text>
</TouchableOpacity>
{MOCK_CONVERSATIONS.map((conv) => (
<TouchableOpacity key={conv.id} style={styles.conversationItem}>
<Text style={styles.conversationTitle}>{conv.title}</Text>
<Text style={styles.conversationPreview}>{conv.preview}</Text>
<Text style={styles.conversationTime}>{conv.time}</Text>
</TouchableOpacity>
))}
</View>
</TouchableOpacity>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Sidebar closes when tapping on its own background area instead of only when tapping the dimmed overlay outside it

The sidebar panel is placed as a child of the dismissal overlay (<View style={styles.sidebar}> inside <TouchableOpacity style={styles.sidebarOverlay}> at app/src/screens/prototypes/MonoChat.tsx:64-88), so tapping non-interactive areas within the sidebar (padding, gaps between items) bubbles up and triggers the overlay's close handler.

Impact: Users accidentally close the sidebar when tapping empty space inside it, making it frustrating to use.

Touch event propagation from sidebar to overlay

The sidebar overlay is a TouchableOpacity at line 64 with onPress={() => setShowSidebar(false)}. The sidebar View at line 69 is a direct child of this TouchableOpacity. In React Native, touches on a plain View propagate to the nearest parent responder. While the inner TouchableOpacity elements (close button at line 72, new chat button at line 76, conversation items at line 81) intercept their own touches, any tap on the sidebar's background — the paddingTop: 60 area (app/src/screens/prototypes/MonoChat.tsx:274), the paddingHorizontal: 20 gutters (app/src/screens/prototypes/MonoChat.tsx:275), or gaps between conversation items — will propagate to the overlay and close the sidebar.

The fix is to wrap the sidebar View in a TouchableWithoutFeedback (or Pressable) with an empty onPress handler to absorb touches, or restructure so the overlay and sidebar are siblings rather than parent-child.

Prompt for agents
In MonoChat.tsx, the sidebar View (line 69) is a direct child of the overlay TouchableOpacity (line 64). This means tapping on non-interactive areas within the sidebar (padding, background between items) propagates the touch to the overlay and closes the sidebar.

To fix this, you need to prevent touch propagation from the sidebar to the overlay. Options:
1. Wrap the sidebar View in a TouchableWithoutFeedback (from react-native) with an empty onPress handler, so touches on the sidebar are absorbed and don't reach the overlay.
2. Restructure the layout so the overlay background and sidebar are siblings rather than parent-child. For example, use a container View with absoluteFillObject, place a TouchableOpacity for the overlay background, and place the sidebar View as a sibling.

The relevant code is in the MonoChat component around lines 63-88.
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed — wrapped the sidebar View in TouchableWithoutFeedback with an empty onPress handler to absorb touches and prevent propagation to the overlay.

Comment on lines +60 to +63
<KeyboardAvoidingView
behavior="padding"
style={styles.keyboardAvoid}
keyboardVerticalOffset={100}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚩 KeyboardAvoidingView behavior hardcoded to 'padding' without platform check

Both AuroraChat.tsx:61-63 and MonoChat.tsx:91-94 use <KeyboardAvoidingView behavior="padding"> without checking Platform.OS. On Android, behavior="padding" can produce unexpected layout shifts; the React Native docs recommend behavior={Platform.OS === 'ios' ? 'padding' : 'height'}. Since these are design prototypes and may only be tested on iOS, this may be intentional, but it could cause layout issues on Android devices.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Intentional for the prototype — matches the existing chat.tsx pattern. Would use Platform.OS check if promoting to production.

Comment thread app/src/main.tsx
Comment on lines +60 to +73
<Tab.Screen
name="Lab"
component={DesignLab}
options={{
headerShown: false,
tabBarIcon: ({ color, size }) => (
<FeatherIcon
name="layers"
color={color}
size={size}
/>
),
}}
/>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚩 Lab tab disables header, shifting safe area responsibility to child components

The new Lab tab at app/src/main.tsx:60-73 sets headerShown: false, unlike the Chat, Images, and Settings tabs which all render <Header />. This means the DesignLab component and its children (AuroraChat, MonoChat) must handle safe area insets themselves. They do this via hardcoded paddingTop: 60 values (e.g., app/src/screens/prototypes/AuroraChat.tsx:219, app/src/screens/prototypes/MonoChat.tsx:337, app/src/screens/prototypes/DesignLab.tsx:113). This works on most modern iPhones but may not be correct for devices with different status bar heights (e.g., iPads, older iPhones, or Android devices with varying notch sizes). Using useSafeAreaInsets() would be more robust.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acknowledged — hardcoded paddingTop is intentional for quick prototyping. Would switch to useSafeAreaInsets() if either direction is chosen for production.

Wrap sidebar View in TouchableWithoutFeedback to prevent taps on
non-interactive areas from propagating to the overlay and closing it.

Co-Authored-By: Nader Dabit <dabit3@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant