A modern, responsive movie discovery application built with Angular 19, featuring movie browsing, TV shows, search functionality, user authentication, and wishlist management.
- Features
- Project Structure
- Installation
- Development
- API Integration
- Architecture
- Components
- Services
- State Management
- Styling
- Authentication
- Directives
- Interfaces
- Movie Discovery: Browse movies by popularity, now playing, and upcoming releases
- TV Shows: Explore trending TV shows with detailed information
- Search Functionality: Search for movies and TV shows with real-time results
- User Authentication: Google OAuth integration and traditional login/register
- Wishlist Management: Save favorite movies and TV shows
- Responsive Design: Mobile-first approach with modern UI/UX
- Dark/Light Theme: Customizable theme with PrimeNG theming
- Lazy Loading: Optimized performance with route-based code splitting
- Form Validation: Custom password matching directive and form guards
- Loading States: Smooth loading experiences with skeleton screens
- Angular 19.2.0 - Latest Angular framework with standalone components
- TypeScript 5.7.2 - Type-safe JavaScript development
- RxJS 7.8.0 - Reactive programming library
- PrimeNG 19.1.3 - Rich UI component library
- PrimeFlex 4.0.0 - CSS utility library
- PrimeIcons 7.0.0 - Icon library
- SCSS - Advanced CSS preprocessing
- @primeng/themes 19.1.3 - Custom theming system
- @ngrx/signals 19.2.1 - Modern state management with signals
- Google OAuth - Social authentication integration
- @types/gapi.auth2 - Google Auth2 type definitions
- @types/google.accounts - Google Accounts type definitions
- Angular CLI 19.2.15 - Angular development tools
- Zone.js 0.15.0 - Async task coordination
src/
βββ app/
β βββ components/ # Reusable UI components
β β βββ detail-similar-slider/
β β βββ detail-similar-tv-slider/
β β βββ easy-login/
β β βββ filter-card/
β β βββ filter-tv-card/
β β βββ footer/
β β βββ hero/
β β βββ home-cards/
β β βββ home-cards-slider/
β β βββ home-movie-card/
β β βββ home-movie-slider/
β β βββ home-popular-slider/
β β βββ home-tv-card/
β β βββ home-tvshows-slider/
β β βββ home-upcoming-slider/
β β βββ hr-nav/
β β βββ movies-header-page/
β β βββ search-card/
β β βββ ver-nav/
β β βββ wish-card-movie/
β β βββ wish-card-shows/
β βββ directive/ # Custom directives
β β βββ password-match-directive.ts
β βββ environments/ # Environment configurations
β βββ guards/ # Route guards
β β βββ form-deactivation.guard.ts
β β βββ wish.guard.ts
β βββ interfaces/ # TypeScript interfaces
β βββ pages/ # Route components
β β βββ details/
β β βββ details-tv/
β β βββ home/
β β βββ home-container/
β β βββ login/
β β βββ movies-coming/
β β βββ movies-playing/
β β βββ movies-popular/
β β βββ notfound/
β β βββ register/
β β βββ search/
β β βββ tv-trend/
β β βββ wish-list/
β βββ services/ # API and utility services
β βββ store/ # State management
β βββ app.component.ts
β βββ app.config.ts
β βββ app.routes.ts
β βββ mypresets.ts
βββ assets/ # Static assets
β βββ imgs/
βββ styles.scss
- Node.js (v18 or higher)
- npm or yarn package manager
-
Clone the repository
git clone <repository-url> cd MovieCO
-
Install dependencies
npm install
-
Environment Setup
- Create a
.envfile in the root directory - Add your Google OAuth credentials and TMDB API key
- Create a
-
Start development server
npm start
-
Open the application Navigate to
http://localhost:4200
# Start development server
npm start
# Build the application
npm run build
# Build with watch mode
npm run watch
# Run tests
npm testnpm run buildThe build output is configured to be in the docs/ directory for GitHub Pages deployment.
- Output Path:
docs/ - Optimization: Enabled for production
- Source Maps: Disabled for production
- Bundle Analysis: Available in development mode
npm test- Framework: Karma + Jasmine
- Coverage: Enabled
- Browser: Chrome (headless)
- Reports: HTML coverage reports
The application integrates with TMDB API for:
- Movie data (popular, now playing, upcoming)
- TV show data (trending)
- Search functionality
- Movie/TV show details
- Similar content recommendations
api.service.ts- Base API serviceapi-details.service.ts- Movie details APIapi-details-tv.service.ts- TV show details APIapi-search.service.ts- Search functionality
- Hero Component: Landing page hero section
- Navigation Components: Horizontal and vertical navigation
- Card Components: Movie and TV show display cards
- Slider Components: Carousel implementations
- Filter Components: Search and filtering functionality
- Home: Main landing page with featured content
- Details: Movie details with similar recommendations
- Details TV: TV show details
- Search: Global search functionality
- Authentication: Login and register pages
- Wishlist: User's saved content
- Base API Service: HTTP client configuration
- Details Services: Movie and TV show details
- Search Service: Global search functionality
- Google Auth Service: OAuth authentication
- Loader Service: Loading state management
- Nav Toggle Service: Navigation state management
- Filter Services: Data filtering utilities
- API Stores: Movie, TV, and search data management
- Auth Stores: Login and registration state
- Notification Store: User feedback management
- Register Store: Form state management
// Example store pattern
export class MovieStore {
private movies = signal<Movie[]>([]);
private loading = signal<boolean>(false);
public readonly movies = this.movies.asReadonly();
public readonly loading = this.loading.asReadonly();
}All feature modules use lazy loading for optimal performance:
- Route-based code splitting
- Standalone component loading
- Guard-protected routes
Custom PrimeNG theme with:
- Light/dark mode support
- Custom color palette
- Responsive design
- SCSS preprocessing
- PrimeFlex: Utility-first CSS framework
- SCSS: Advanced styling with variables and mixins
- Component-scoped styles: Encapsulated component styling
- Global styles: Shared design tokens
- Social login with Google
- JWT token management
- User session persistence
- Secure authentication flow
- Email/password registration
- Form validation
- Password strength requirements
- Session management
- Wish Guard: Protects wishlist routes
- Form Deactivation Guard: Prevents accidental form submission loss
- Password Match Directive: Form validation for password confirmation
- environment.ts: Development configuration
- environment.prod.ts: Production configuration
- API endpoints
- Google OAuth credentials
- Feature flags
- Debug settings
npm run build- GitHub Pages: Configured for
docs/output - Netlify: Static site hosting
- Vercel: Serverless deployment
- Firebase Hosting: Google Cloud hosting
- Mobile: 320px - 768px
- Tablet: 768px - 1024px
- Desktop: 1024px+
- Lazy Loading: Route-based code splitting
- Standalone Components: Reduced bundle size
- Signal-Based Updates: Efficient change detection
- Image Optimization: Responsive images
- Caching: API response caching
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
- TypeScript strict mode
- ESLint configuration
- Prettier formatting
- Angular style guide compliance
This project is licensed under the MIT License - see the LICENSE file for details.
- The Movie Database (TMDB) for providing the movie and TV show data API
- PrimeNG for the excellent UI component library
- Angular Team for the amazing framework
- Google for OAuth authentication services
MovieCO - Your ultimate movie discovery experience! π¬β¨