A feature-rich movie discovery and tracking application showcasing advanced React development skills, including TypeScript integration, API handling, custom component development, and modern UI/UX patterns.
- React Hooks: useState, useEffect, useRef, useMemo, custom hooks
- TypeScript: Full type safety with custom interfaces
- API Integration: RESTful API calls with error handling
- Performance: Debounced search, memoization
- UX: Keyboard shortcuts, auto-focus, loading states
| Feature | Technical Implementation | Business Value |
|---|---|---|
| Smart Search | Debounced input, regex validation, dual search modes | Real-time user experience without performance loss |
| Year Filtering | Material-UI DatePicker integration with custom theming | Advanced filtering demonstrates complex component integration |
| Watchlist Management | LocalStorage API with CRUD operations | Data persistence shows full-stack thinking |
| Rating System | Custom StarRating component with event handling | Interactive UI components, highly customizable |
- Full TypeScript Integration with custom interfaces, type guards, and strict typing
- Component Composition following React best practices and separation of concerns
- Error Boundary Implementation with graceful fallbacks and user-friendly error states
- Environment Variable Management for secure API key handling across environments
- Instant Search: Real-time movie search with 700ms debounce
- Auto-focus: Start typing anywhere on the page to search
- Dual Search Modes:
- Partial match for broader results
- Exact match for precise searches
- Year Filtering: Filter movies by release year (1900-current)
- Input Validation: Minimum 3 characters for partial search
- Complete Information: Plot, cast, director, runtime, ratings
- IMDb Integration: Real-time data from OMDB API
- Expandable Text: Click to read full movie plots
- High-Quality Posters: Crisp movie artwork display
- Custom Ratings: Rate movies with interactive star component
- Edit Ratings: Double-click to modify your ratings
- Smart Statistics: Average ratings and runtime calculations
- Persistent Storage: Your data saves automatically
- Quick Actions: Double-click to reopen movie details
- Responsive Design: Works perfectly on desktops and tabs
- Dark Theme: Easy on the eyes along with Material-UI theming
- Keyboard Navigation: Full keyboard support including Escape to close and hotkeys to switch result pages
- Loading States: Smooth loading indicators
- Error Handling: Graceful error messages and recovery
- Tooltips: Helpful hints throughout the interface
Demonstrates Ability To:
- β Build complex, interactive web applications from scratch
- β Integrate third-party APIs and handle real-world data
- β Implement modern React patterns and TypeScript best practices
- β Create responsive, accessible user interfaces
- β Deploy and maintain production applications
- β Write clean, maintainable, and well-documented code
Solves Real Development Challenges:
- API rate limiting and request optimization
- Complex state management across components
- User experience design for data-heavy applications
- Cross-browser compatibility and responsive design
- Production deployment with environment security
- Node.js 16+
- npm or yarn
- OMDB API key (free at omdbapi.com)
-
Clone the repository
git clone https://github.com/yourusername/flickypedia.git cd flickypedia -
Install dependencies
npm install
-
Set up environment variables
# Create .env file in project root echo "VITE_OMDB_API_KEY=your_api_key_here" > .env
-
Start development server
npm run dev
-
Open in browser
http://localhost:5173
Create a .env file in your project root:
VITE_OMDB_API_KEY=your_omdb_api_key_hereNote: Get your free API key from OMDB API. The free tier includes 1,000 requests per day.
- Type anywhere on the page to start searching
- Use the year picker π to filter by release year
- Toggle word match π for exact vs. partial matching
- View results instantly as you type
- Click any movie to view detailed information
- Rate with stars β to add to your watchlist
- Double-click watched movies to edit ratings
- Delete movies with the X button
- Type anywhere: Focus search input
- Escape: Close movie details
- Tab: Navigate through interface
- Shift + Arrow keys to navigate through pages
- React 18 - UI framework
- TypeScript - Type safety
- Vite - Build tool and dev server
- Material-UI - Component library
- Material-UI Date Pickers - Date selection
- Day.js - Date manipulation
- Custom CSS - Responsive design and animations
- OMDB API - Movie database
- LocalStorage - Persistent data storage
βββ App.tsx # Main application component
βββ index.css # Global styles
βββ main.tsx # Application entry point
βββ types.tsx # TypeScript types and interfaces
βββ vite-env.d.ts # TypeScript environment types
βββ assets/ # Static assets (icons, images)
β βββ react.svg
β βββ w2.png
β βββ w3.png
βββ components/ # All UI components
β βββ Box.tsx
β βββ ErrorMessage.tsx
β βββ index.tsx
β βββ Loader.tsx
β βββ Logo.tsx
β βββ MovieDetails.tsx
β βββ MovieList.tsx
β βββ NavBar.tsx
β βββ StarRating.tsx
β βββ TextExpander.tsx
β βββ WatchedMoviesList.tsx
β βββ WatchedSummary.tsx
β βββ ... (other components)
βββ hooks/ # Custom React hooks
β βββ useLocalStorage.tsx
β βββ ... (other hooks)
public/
βββ logo.png # Application logo
βββ favicon files # Browser icons (e.g., favicon.ico)
App
βββ NavBar
β βββ Logo
β βββ Search (with DatePicker)
β βββ NumResults
βββ Main
βββ Box (Movie List)
β βββ MovieList
β βββ Movie Items
βββ Box (Watchlist/Details)
βββ MovieDetails (when selected)
β βββ StarRating
βββ WatchedMovies (default)
βββ WatchedSummary
βββ WatchedMoviesList
βββ Movie Items
- Connect to GitHub: Link your repository in Netlify dashboard
- Build Settings:
- Build command:
npm run build - Publish directory:
dist
- Build command:
- Environment Variables: Add
VITE_OMDB_API_KEYin site settings - Deploy: Automatic deployment on every push
# Build for production
npm run build
# Preview build locally
npm run preview| Variable | Description | Required |
|---|---|---|
VITE_OMDB_API_KEY |
OMDB API key for movie data | Yes |
Movies not loading?
- Check your OMDB API key in
.env - Verify internet connection
- Check browser console for errors
Search not working?
- Ensure minimum 3 characters for partial search
- Try exact match mode for specific titles
- Check year filter isn't too restrictive
Build failing?
- Run
npm installto update dependencies - Check TypeScript errors with
npm run type-check - Verify environment variables are set
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- OMDB API for providing movie data
- Jonas Schmedtmann for providing with most of the CSS and inspiring to build this app
- Material-UI for beautiful components
- React Community for excellent documentation
- π Bug Reports: Create an issue
- π‘ Feature Requests: Start a discussion
- π§ Contact: [email protected]
Made with β€οΈ and lots of π
π Live Demo β’ β¨ Features β’ π Quick Start β’ π€ Contributing