Skip to content

A production-ready React TypeScript application demonstrating advanced frontend development skills through real-world API integration, custom component architecture, and modern performance optimization techniques.

Notifications You must be signed in to change notification settings

omsrivastava512/FlickyPedia

Repository files navigation

🍿 FlickyPedia

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.

FlickyPedia Demo React TypeScript Vite X (Twitter)

πŸ› οΈ Technical Highlights

  • 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

✨ Features

πŸš€ Core Features Highlights

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

☁️Production-Ready Architecture

  • 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

πŸ” Smart Search

  • 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

🎬 Movie Details

  • 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

⭐ Personal Watchlist

  • 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

🎨 User Experience

  • 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

πŸŽͺ Portfolio Impact

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

πŸš€ Quick Start

Prerequisites

  • Node.js 16+
  • npm or yarn
  • OMDB API key (free at omdbapi.com)

Installation

  1. Clone the repository

    git clone https://github.com/yourusername/flickypedia.git
    cd flickypedia
  2. Install dependencies

    npm install
  3. Set up environment variables

    # Create .env file in project root
    echo "VITE_OMDB_API_KEY=your_api_key_here" > .env
  4. Start development server

    npm run dev
  5. Open in browser

    http://localhost:5173
    

πŸ”§ Environment Setup

Create a .env file in your project root:

VITE_OMDB_API_KEY=your_omdb_api_key_here

Note: Get your free API key from OMDB API. The free tier includes 1,000 requests per day.

πŸ“± Usage Guide

Searching Movies

  1. Type anywhere on the page to start searching
  2. Use the year picker πŸ“… to filter by release year
  3. Toggle word match πŸ” for exact vs. partial matching
  4. View results instantly as you type

Managing Your Watchlist

  1. Click any movie to view detailed information
  2. Rate with stars ⭐ to add to your watchlist
  3. Double-click watched movies to edit ratings
  4. Delete movies with the X button

Keyboard Shortcuts

  • Type anywhere: Focus search input
  • Escape: Close movie details
  • Tab: Navigate through interface
  • Shift + Arrow keys to navigate through pages

πŸ› οΈ Built With

Core Technologies

UI & Styling

Data & APIs

  • OMDB API - Movie database
  • LocalStorage - Persistent data storage

πŸ“ Project Structure

β”œβ”€β”€ 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)

πŸ”„ Component Architecture

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

🌐 Deployment

Netlify (Recommended)

  1. Connect to GitHub: Link your repository in Netlify dashboard
  2. Build Settings:
    • Build command: npm run build
    • Publish directory: dist
  3. Environment Variables: Add VITE_OMDB_API_KEY in site settings
  4. Deploy: Automatic deployment on every push

Manual Deployment

# Build for production
npm run build

# Preview build locally
npm run preview

πŸ” Environment Variables

Variable Description Required
VITE_OMDB_API_KEY OMDB API key for movie data Yes

πŸ› Troubleshooting

Common Issues

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 install to update dependencies
  • Check TypeScript errors with npm run type-check
  • Verify environment variables are set

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit changes (git commit -m 'Add amazing feature')
  4. Push to branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

πŸ“ž Support


Made with ❀️ and lots of πŸ•š

πŸš€ Live Demo β€’ ✨ Features β€’ πŸš€ Quick Start β€’ 🀝 Contributing

About

A production-ready React TypeScript application demonstrating advanced frontend development skills through real-world API integration, custom component architecture, and modern performance optimization techniques.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published