Netflix UI Clone with Expo

November 8, 2024 ยท View on GitHub

A high-fidelity Netflix mobile UI clone built with React Native and Expo, featuring advanced animations and gesture interactions.

Demo

Key Features

Profile Management

  • ๐Ÿ‘ฅ Animated profile selection screen with staggered loading
  • ๐Ÿ”„ Smooth profile switching transitions
  • ๐ŸŽต Sound effects and haptic feedback
  • ๐Ÿ”„ Custom tab navigation with sliding animations
  • ๐Ÿ’ซ Gesture-based content interactions
  • ๐ŸŒŸ Shared element transitions between screens
  • ๐Ÿ“ฑ iOS-style modal presentations
  • ๐ŸŽจ Dynamic blur effects and scaling
  • ๐Ÿ”„ Tilt animations for featured content

Content Screens

  • ๐Ÿ  Animated home screen with featured content
  • ๐Ÿ”ฅ "New & Hot" section with Netflix-style layout
  • ๐ŸŽฎ Mobile games showcase
  • ๐Ÿ” Dynamic search with instant results
  • โฌ‡๏ธ Downloads management
  • ๐Ÿ“บ Teaser Video player
  • ๐Ÿ“‹ Expandable categories list
  • ๐Ÿ”ค Custom font

Performance

  • โšก Optimized animations using Reanimated
  • ๐Ÿ“Š Efficient list rendering [wip]
  • ๐ŸŽฏ Native gesture handling
  • ๐Ÿ”„ Smart transition management

Tech Stack

Implementation Details

Animation System

  • Custom tab screen wrapper for consistent transitions
  • Worklet-based animations for optimal performance
  • Shared element transitions for content previews
  • Gesture-based modal interactions

State Management

  • Context-based profile management
  • Animation state coordination
  • Tab navigation state handling

UI Components

  • Reusable animated components
  • Custom Netflix-style icons and layouts

Project Structure

project-root/
โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ (tabs)/
โ”‚   โ”‚   โ”œโ”€โ”€ (profile)/        # Profile section
โ”‚   โ”‚   โ”œโ”€โ”€ index.tsx         # Home screen
โ”‚   โ”‚   โ””โ”€โ”€ new.tsx          # New & Hot screen
โ”‚   โ”œโ”€โ”€ movie/
โ”‚   โ”œโ”€โ”€ _layout.tsx          # Root layout
โ”‚   โ””โ”€โ”€ search.tsx           # Search functionality
โ”œโ”€โ”€ components/
โ”‚   โ”œโ”€โ”€ MovieList/           # Movie listings
โ”‚   โ”œโ”€โ”€ GameList/            # Games section
โ”‚   โ”œโ”€โ”€ FeaturedContent/     # Featured content
โ”‚   โ”œโ”€โ”€ BottomSheet/         # Bottom sheets
โ”‚   โ”œโ”€โ”€ navigation/          # Navigation components
โ”‚   โ””โ”€โ”€ WhoIsWatching/       # Profile selection
โ”œโ”€โ”€ hooks/
โ”‚   โ”œโ”€โ”€ useCachedResources.ts
โ”‚   โ”œโ”€โ”€ useColorScheme.ts
โ”‚   โ”œโ”€โ”€ useDeviceMotion.ts
โ”‚   โ””โ”€โ”€ useOverlayView.ts
โ”œโ”€โ”€ data/
โ”‚   โ”œโ”€โ”€ movies.json          # Movie data
โ”‚   โ”œโ”€โ”€ new.json            # New content data
โ”‚   โ””โ”€โ”€ users.json          # User profiles
โ””โ”€โ”€ contexts/               # App-wide state management

TODO

  • Shared transition on modal navigation
  • Bug: Disable shift animation on back (fixed on branch router-4 (React Navigation 7))
  • X-Ray style content details
  • Full screen video player
  • Color extraction from images for dynamic theming

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Submit a pull request

License

MIT License