# Mobile Architecture Reviewer Memory

## Project Structure
- Features: `apps/mobile/packages/features/{client,staff}/<feature>/`
- Design System: `apps/mobile/packages/design_system/`
- Shimmer primitives: `design_system/lib/src/widgets/shimmer/` (UiShimmer, UiShimmerBox, UiShimmerCircle, UiShimmerLine, presets)
- UiConstants spacing: space0=0, space1=4, space2=8, space3=12, space4=16, space5=20, space6=24, space8=32, space10=40, space12=48

## Design System Conventions
- `UiConstants.radiusLg`, `radiusMd`, `radiusSm`, `radiusFull` are `static final` (not const) - cannot use `const` at call sites
- Shimmer placeholder dimensions (width/height of boxes/lines/circles) are visual content sizes, not spacing - the design system presets use UiConstants for these too
- `Divider(height: 1, thickness: 0.5)` is a common pattern in the codebase for thin dividers

## Common Pre-Existing Issues (Do Not Flag as New)
- Report detail pages use hardcoded `top: 60` for AppBar clearance (all 6 report pages)
- Payments page and billing page have hardcoded strings (pre-existing, not part of shimmer changes)
- `shift_details_page.dart` has hardcoded strings and Navigator.of usage (pre-existing)

## Review Patterns
- Skeleton files are pure presentation widgets (StatelessWidget) - no BLoC, no business logic, no navigation
- Skeleton files only import `design_system` and `flutter/material.dart` - clean dependency
- Barrel file `index.dart` in `reports_page/` widgets dir is an internal barrel, not public API
