Start interactive tutorial

← Back to Projects

Movie Catalogue with Expo Router

Difficulty

  • intermediate

Average duration

2 hrs

Technologies

Difficulty

  • intermediate

Average duration

2 hrs

Technologies

🗂️ Project Structure

RN Movies Preview

Create a mobile app to explore a movie catalog, view details, and navigate between categories, practicing navigation with Expo Router using Tabs and Stack. The project uses local data to focus on navigation and parameter typing.

🌱 How to start this project

  1. Clone the following template to your computer
1https://github.com/4GeeksAcademy/react-native-hello
  1. Install dependencies
1npm install
  1. Start the project with Expo
1npm run start
  • iOS Simulator (macOS): press i or use npm run ios
  • Android Emulator: press a or use npm run android
  • Web: press w or use npm run web
  • If your phone can't connect via LAN: npx expo start --tunnel

🗂️ Project Structure

rn-movies/
├─ app/
│  ├─ _layout.tsx                 # Root layout → delegates to (tabs)
│  ├─ (tabs)/
│  │  ├─ _layout.tsx              # Tabs definition
│  │  ├─ home/
│  │  │  ├─ _layout.tsx           # Home tab stack
│  │  │  ├─ index.tsx             # Movie list
│  │  │  └─ [id].tsx              # Detail (dynamic route)
│  │  ├─ categories/
│  │  │  ├─ _layout.tsx           # Categories stack
│  │  │  ├─ index.tsx             # Category list
│  │  │  └─ [category].tsx        # Movies by category
│  │  └─ favorites/
│  │     ├─ _layout.tsx           # Favorites stack
│  │     └─ index.tsx             # Placeholder (no global state)
│  └─ +not-found.tsx              # Optional 404
├─ components/
│  ├─ MovieCard.tsx
│  └─ Grid.tsx
├─ data/
│  └─ movies.ts                   # Local mock (no API)
├─ types/
│  └─ index.ts                    # Shared types
├─ app.json
├─ package.json
└─ tsconfig.json

📝 Instructions

  • Implement Tabs + Stack with Expo Router.
  • Use dynamic routes for details ([id].tsx).
  • Pass typed parameters with useLocalSearchParams.
  • You must create the file data/movies.ts in your project and define a local list of movies (an array of objects). Each movie should include properties like: id, title, year, categories, and rating.
  • Do not use fetch or external APIs.

💡 Tips

  • Params arrive as strings: convert to number when needed.
  • Customize Stack options for dynamic headers.
  • Keep components small and reusable (MovieCard, Grid).

Signup and get access to this project for free

We will use it to give you access to your account.
Already have an account? Login here.

By signing up, you agree to the Terms and conditions and Privacy policy.

Difficulty

  • intermediate

Average duration

2 hrs

Technologies

Difficulty

  • intermediate

Average duration

2 hrs

Technologies

Difficulty

  • intermediate

Average duration

2 hrs

Technologies

Difficulty

  • intermediate

Average duration

2 hrs

Technologies

Signup and get access to this project for free

We will use it to give you access to your account.
Already have an account? Login here.

By signing up, you agree to the Terms and conditions and Privacy policy.

Difficulty

  • intermediate

Average duration

2 hrs

Technologies

Difficulty

  • intermediate

Average duration

2 hrs

Technologies