push notifications
This commit is contained in:
19
.claude/agent-memory/ui-ux-reviewer/MEMORY.md
Normal file
19
.claude/agent-memory/ui-ux-reviewer/MEMORY.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# UI/UX Reviewer Memory — Fluffytrix
|
||||
|
||||
See `patterns.md` for detailed design conventions.
|
||||
|
||||
## Key Conventions (short form)
|
||||
- Spacing rhythm: 4/6/8/10/12/16/24/32dp — no odd values
|
||||
- Channel list item padding: horizontal 12dp, vertical 10dp
|
||||
- Settings screen row padding: vertical 6dp (info rows), vertical 12dp (nav rows)
|
||||
- Icon size in lists: 20dp (channel icons, drag handles); 32dp (member avatars)
|
||||
- Space sidebar icons: 48dp touch target, 64dp column width
|
||||
- Color tokens: always MaterialTheme.colorScheme — EXCEPT senderColors array (Discord palette, intentional)
|
||||
- Two hardcoded colors in SpaceList unread dots: `Color.Red` and `Color.Gray` — inconsistent with ChannelList which uses `colorScheme.error` and `colorScheme.primary`
|
||||
- Typography: titleMedium for section headers in panels; labelMedium uppercase for channel sections; bodyLarge for channel names; bodyMedium for settings labels; bodySmall for subtitles
|
||||
- Icon style: filled (Icons.Default.*) throughout — AutoMirrored used for directional icons
|
||||
- Scaffold used in SettingsScreen with TopAppBar; MainScreen Scaffold has no topBar (custom layout)
|
||||
- `collectAsStateWithLifecycle` used in MainScreen; `collectAsState` used in SettingsScreen — inconsistent
|
||||
- MainScreen uses `@Immutable` data class for ProfileSheetState (good practice)
|
||||
- Drag gesture threshold: 60f px for swipe-open/close channel list
|
||||
- LazyListState for channel list is owned by ViewModel (correct — survives recomposition)
|
||||
40
.claude/agent-memory/ui-ux-reviewer/patterns.md
Normal file
40
.claude/agent-memory/ui-ux-reviewer/patterns.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# Fluffytrix UI Patterns
|
||||
|
||||
## Layout Structure
|
||||
- MainScreen: Scaffold (no topBar) → Box → Row[SpaceList | MessageTimeline | MemberList?]
|
||||
- Channel list overlays via AnimatedVisibility + zIndex(1f), slides from left
|
||||
- SpaceList: 64dp wide, surfaceVariant background, icons 48dp
|
||||
- ChannelList: fills width, surface background, max ~280dp visually
|
||||
- MemberList: 240dp wide, surface background
|
||||
- SettingsScreen: Scaffold + TopAppBar + Column + verticalScroll
|
||||
|
||||
## Spacing Rhythm
|
||||
- Standard horizontal content padding: 16dp (settings, channel list header)
|
||||
- Channel list items: horizontal 12dp, vertical 10dp
|
||||
- Thread sub-items: start indent 24dp, horizontal 10dp, vertical 6dp
|
||||
- Member list items: horizontal 8dp, vertical 4dp
|
||||
- Settings rows: vertical 6dp (info/toggle), vertical 12dp (nav)
|
||||
- Section dividers: padding(vertical = 16.dp)
|
||||
|
||||
## Color Token Usage
|
||||
- Surface backgrounds: `colorScheme.surface` or `colorScheme.surfaceVariant`
|
||||
- Selected item bg: `colorScheme.primaryContainer`; text: `colorScheme.onPrimaryContainer`
|
||||
- Unread dot in ChannelList: error (mention) / primary (unread) — correct
|
||||
- Unread dot in SpaceList: hardcoded `Color.Red` / `Color.Gray` — BUG, inconsistent
|
||||
- Section text: `colorScheme.onSurface.copy(alpha = 0.7f)` uppercase labelMedium
|
||||
- Disabled/subtle text: `colorScheme.onSurfaceVariant` or with `.copy(alpha = 0.6f)`
|
||||
|
||||
## Icon Conventions
|
||||
- All icons: Icons.Default.* (filled style)
|
||||
- Directional icons: Icons.AutoMirrored.Filled.*
|
||||
- Icon size in list rows: 20dp
|
||||
- All icons in touch targets: wrapped in IconButton (48dp auto-sizing) or clickable with min 48dp
|
||||
|
||||
## Notification (push/) — no Compose UI
|
||||
- NotificationHelper: uses `R.mipmap.ic_launcher` as small icon (should be `R.drawable` monochrome)
|
||||
- Channel: "messages" / IMPORTANCE_DEFAULT
|
||||
- Tap → deep link via Intent extra "roomId" → DeepLinkState.set()
|
||||
|
||||
## State Collection
|
||||
- MainScreen: collectAsStateWithLifecycle (correct, lifecycle-aware)
|
||||
- SettingsScreen: collectAsState (should be collectAsStateWithLifecycle for consistency)
|
||||
Reference in New Issue
Block a user