CritiCast is a modern, cross-platform movie and series review application built with React Native and Expo. It provides a rich user experience for browsing, searching, and rating films, powered by The Movie Database (TMDB) API and a custom backend.
- Dynamic Movie Browsing: Explore lists of popular, top-rated, now playing, and upcoming movies, with data fetched in real-time.
- Full User Authentication: Secure user registration and login flow.
- Community Reviews & Ratings: Users can create, read, update, and delete their own movie reviews and ratings.
- Advanced Filtering & Searching: A powerful search and filter system to find movies by name, genre, rating, and more.
- Detailed Movie Information: View comprehensive details for each movie, including synopsis, cast, budget, genres, and both TMDB and user ratings.
- Personalized User Profiles: Users can manage their profile, including updating their username.
- Modern & Animated UI: A smooth, beautifully designed user interface with animations and a custom dark theme.
| Home Screen | Profile Drawer |
|---|---|
![]() |
![]() |
| Movie Details (Main) | Movie Details (Reviews) |
|---|---|
![]() |
![]() |
The application is built with a modern and robust stack, separating concerns between the frontend and backend.
- Framework: React Native with Expo
- Language: TypeScript
- Routing: Expo Router (File-based)
- State Management: Zustand
- Data Fetching & Caching: TanStack Query (React Query)
- Styling: NativeWind (Tailwind CSS for React Native)
- UI Components: React Native Paper
- Framework: Node.js with Express.js
- Database: PostgreSQL (hosted on Neon)
- ORM: Prisma
- Authentication: JWT (JSON Web Tokens)
Follow these instructions to get the project up and running on your local machine for development and testing purposes.
- Node.js (LTS version recommended)
- npm or yarn
- Git
- An Android Emulator or a physical device with the Expo Go app.
-
Clone the repository:
git clone https://github.com/JeJaMel/CritiCast-app.git cd CritiCast-app -
Install dependencies:
npm install
-
Set up Environment Variables: Create a
.envfile in the root of the project by copying the example file:cp .env.example .env
Now, open the
.envfile and fill in your own credentials and local backend URL..env.example:
# The Movie Database (TMDB) API Key EXPO_PUBLIC_MOVIE_DB_KEY="YOUR_TMDB_API_KEY_HERE" # Stage can be 'dev' or 'prod' EXPO_PUBLIC_STAGE=dev # Your backend's local URL. Change the IP if needed. EXPO_PUBLIC_API_URL=http://localhost:4000 EXPO_PUBLIC_API_URL_IOS=http://localhost:4000 EXPO_PUBLIC_API_URL_ANDROID=http://192.168.1.100:4000 #<-- Change this to your PC's local IP
⚠️ Important: Never commit your.envfile to version control. -
Start the development server:
npx expo start
This will open the Expo development server. You can now open the app in an emulator, on a physical device via the Expo Go app, or in a development build.
The project follows a feature-sliced design approach to keep the code organized and scalable.
├── app/ # Expo Router file-based routing.
├── core/ # Core business logic (actions, mappers, interfaces)
├── presentation/ # All UI-related code (components, hooks, screens, store)
├── assets/ # Static assets like fonts and images
├── helpers/ # Helper functions and adapters
└── ... # Configuration files (eas.json, app.json, etc.)




