Giter Club home page Giter Club logo

popcorn's Introduction

Popcorn!

Movie and Show Suggestions for You!

Table of Contents

Description

Popcorn! is a mobile-friendly application that helps users connect with new content based on personalized keyword searches, genres selected, and trending shows / movies according to two open source APIs: Online Movie Database and The Movie DB.

When a user clicks on a poster image, they can read the synopses of any movie or show. By clicking "Save" users can store movies and shows in a customized "Watchlist" and can later remove items from their Watchlist after viewing.

Process

We wanted our application to provide a solution to a problem we feel is relevant to people of all ages in our society who grapple with indecision when it comes to at-home entertainment. Having spent the last two years at home during a global pandemic, streaming services have become a top form of entertainment when going out is less of a possibility. However, the more time we spend at home, the less we might feel we have options, or that we've "seen everything." Streaming services frequently only promote content within their own platform, keeping users insulated and perhaps leading to what feels like boredom or lack of options. While algorithms can sometimes be useful, sometimes letting a consumer choose a show or movie based on mood, selecting a genre or typing a keyword, giving users a sense of autonomy and choice. We hope our application's simple design and interface is intuitive for all.

USER STORY: AS AN indecisive media consumer I WANT TO select options based on preferences such as genre or popularity SO THAT I am presented with new media content to enjoy.

Challenges

Each member of the group expressed concerns about contributing to the project based on their strengths and weaknesses. We found that daily Zoom meetings weren't an issue, nor were the git pull requests as daunting as we thought. Frequent communication through Slack helped us feel more confident as we created new features and functions, and we worked together to solve bugs as they arose.

Having diverse schedules sometimes made progress a little slower than we would have liked, but we are quite proud of how the project turned out overall in our two-week time frame.

Implementation

After creating a User Story, we created a group repository and a Project (Kanban) board. We spoke about the areas we felt strongest about, and delegated tasks as needed. As new issues arose we assigned them in the Issues page of the repository and pinned / moved the issues around the Project board on GitHub.

By the end of Week 1 we had our app functioning as desired, so we moved on to improving UI/UX and cleaning up the visual appearance of the application. We prepared and delivered our presentation, and submitted our project ahead of schedule. We did discuss the possibility of future enhancements to the project and agreed we would be open to making changes together in the future.

Who Did What

Claire acted as SCRUM master, lead communicator. She created the initial repository and files in VSC for the main branch and created the develop branch. She created the wireframe images for Desktop, Tablet, and Mobile as listed in the images folder using Draw.io. Claire assisted with JavaScript by creating the loadGenres() function and the searchByGenres() function. She created the modal.js file, designed the dummyposter.png for missing poster results, wrote the about.html content, and took the lead on creating the presentation using docs.google.com/presentation. Created favicon and implemented initial CSS (color changes) as placeholder for CSS from teammates in preparation for presentation. Shared idea of "how-to" remove single item from watchlist, which was then designed by Colin.

Colin mostly worked on the JavaScript file, handling DOM manipulation, fetch requests, and localStorage. He set up localStorage to handle saving/loading items in the user's Watchlist. He used a variety of endpoints from TMDB API, including Configuration for creating poster urls, Trending for the Top 10, Search for tv shows/movies based on user input, and Watch Providers for where to stream TV Shows. He handled fetch requests from OMDB API to get further information on movies by IMDB ID. He also spent time finding edge cases and fixing bugs,refactoring the functions to handle different kinds of data returned from different endpoints, and adding behavior to account for missing/bad data from the API.

Omar took the initiative to choose the BULMA CSS library after examine the reviews of several libraries. He worked mostly on styling the application using BULMA css library and vanilla css. He implement the design of the application after discussing with the team choosing the color, theme and the whole look. He initiate the modal through BULMA and style it and tied it to javascript. He created the media query for the mobile view and style it to be in proper look.

Jake helped brainstorm and design the program. He also helped write the CSS and media queries for use on smaller and mobile displays.

View The Project

Screenshot of Project

Link to Deployed Project

Future Enhancements

  • Rating Content ๐Ÿ‘๐Ÿ‘Ž || โญโญโญ/โญโญโญโญโญ

  • User Notes Section โœ

  • UI/UX enhancements for swipe rather than click ๐Ÿ‘†

  • Ability to share or export user watchlists ๐Ÿ’ฌ

  • List of where the content can be streamed or rented. Currently this does not populate for each API fetched item. ๐Ÿ“บ

Installation and Use

To use the app, simply visit the deployed site.

If you would like to play with the app, please use the fork option or use the button on GitHub, copy the SSH or HTTPS key and then use the command line prompt within Git Bash $ git clone [email protected]:crosenfrisk/Popcorn.git [and hit enter], this should save the file locally to your device.

After downloading the project from GitHub to your local device, open the Popcorn repository in a code editor such as Visual Studio Code, then view index.html in your web browser or Live Server.

Any questions, feedback, or ideas for future development, please comment @crosenfrisk, @soundproofboot, @osamarli, @jakeradermacher ๐Ÿ’Œ

Technologies Used

  • Bulma Used for styling our CSS

  • Canva Used for the creation of dummy movie poster for "missing" posters.

  • Draw.io Used for creation of wireframes

  • Font Awesome for fork icon in README, with possible future use in application.

  • GitHub for our repository and project/Kanban board.

  • Google Docs for project proposal and presentation.

  • Slack for ongoing communication between group members.

  • Zoom for group meetings.

Server-Side APIs:

USED:

  • The Movie DB -- for the movie posters, genres, descriptions. Allows more comprehensive ways to search for recommendations. Endpoints used - Configuration, Genres, Search, Trending, Watch Providers

  • OMDB -- for in depth details for movies. Endpoints used - Search by IMDB ID

CONSULTED:

Credits

๐ŸŽ‰ @nightmarefails for hosting office hours and sharing feedback. Gratitude to our classmates for their enthusiasm and support for our project.

MIT License

Copyright ยฉ2022 Omar Asamari, Colin Bares, Jake Radermacher, and Claire Rosenfrisk.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

popcorn's People

Contributors

crosenfrisk avatar soundproofboot avatar osamarli avatar jakeradermacher avatar

Stargazers

 avatar  avatar

Watchers

Harrison Armstrong avatar  avatar  avatar

Forkers

soundproofboot

popcorn's Issues

Set up top ten to display on page load

Current behavior -
Page loads with an empty results area

Expected behavior -
When the user first loads the page, the results area will be filled with the posters for the top ten trending movies/shows for that day. From there all the other behavior will work the same.

Work on ABOUT section

Yet to be decided if it will be a modal or an html page, but will create explanation of project for user and basic instructions.

Project Milestone 3: CSS Color Scheme Decided

We all agree that wireframe idea of pale yellow, red, and white/off-white for background, buttons, and jumbotron. Still need to decide on font, and also which 3rd party libraries we want to use that are not Bootstrap.

Troubleshooting -- Genre 37 Id

Why genre id 37 is the only one coming up in console.log even when other genre ids / buttons with different ids are clicked. #37 is "Western" -- wondering if it has to do with appendChild() method. Will research.

Presentation Requirements:

  • 10 minutes total (7 min to present, 3 min for Q&A)

  • Elevator Pitch (1 min)

  • Concept/user story

  • Process / tech used

  • Tasks/roles broken down

  • challenges we faced

  • successes

  • demo: show app at work

  • directions for use

  • links to deployed page for application

  • links to GitHub Repositories

  • ideas for future development

  • use PowerPoint or similar

  • Every group member presents!

  • follow template (as provided in Module 7)

Handle missing data

There are rare cases where the API will return results with missing data, rarely with almost no information. In this case it might be better to skip them entirely. I'm going to try testing a bunch of keywords to find worst case scenarios and game plan the best way to handle that situation.

Pull posters for tv shows and movies

Expected behavior -
When results are retrieved, the poster for each result is displayed on the page.

Current behavior -
Results are shown for movies but links are broken for tv shows. Need to change url based on media type.

Pull specific movie data from OMDB

Expected behavior -
When a user clicks a movie poster they are shown more specific data for that movie from OMDB API.

Current behavior -
Nothing happens on click.

Tv show modal in watchlist

I managed to break the modal opening when tv shows are clicked from watchlist. It happened after I added the watch provider info. I'll fix it tonight.

Fix how text search results are displayed

Expected behavior -
Search results will display in the main area of the page but remove whatever is currently in that area.

Current behavior -
Search results populate after whatever is displayed, genre buttons, previous searches, top ten, etc.

Store all options for poster sizes

Expected behavior -
configData from TMDB API will include multiple poster sizes, to allow us to pull from different URLs depending on the size of poster we want to use.

Current behavior -
Just one poster size is stored and is used to pull every poster.

New bug -- Genre Selector Buttons

When I click the Genre Selector button more than once, the dynamic buttons generate again, and again. I need to limit it to one load, or find a way to remove additional click loads.

Created searchByGenre() function

This function will be activated from an event listener within loadGenres() -- when a user clicks a genre, the html will load 10 movie choices from the Discover API on TMDB using ? to select with_genre query string.

The id of the genre button will match the genre id as it was assigned from the initial API fetch on TMDB using /genre/movie/list?

Style ABOUT section

Currently exists in develop branch as about.html. Either append to modal with button, or leave as about.html and link to a button in nav bar or footer. CSS can be completed by Jake or Omar.

Reimagine and define hex codes for html

Our wireframe was not specific and our design can be improved for UI/UX, so new mockup uses hex: F85D5D for jumbotron background color and hex: fcf4e0 for Popcorn! text.

Additional styling for buttons (genre, save to watchlist, and clear watchlist) can be defined by group.

Mobile responsiveness

Please adjust application so its contents render well in a mobile format as well as desktop. Please let me know if you need any help with the breakpoints for media queries. Thanks!

Dynamically generate html for results

Expected behavior -
Data pull from TMDB API is placed in dynamically generated elements for display to the user.

Current behavior -
HTML elements are hard coded.

Fix jumbotron

Something happened with CSS, I'm going to try to fix it to restore subtitle beneath title (Bulma terms).

Set up watch list to store items for future reference

Use local storage to store the data for movies/shows the user would like to pull up again. Need to store the either the whole object for the item in an array or just to id number to pull the relevant information again from the api.

Project Milestone 5: User Interface Created

I believe this means create the JavaScript that will interact with the API, creating elements to display on the html. Colin, did you want to take the lead on this? I'm happy to help here too. -Claire

Project Milestone 8: Creating documentation (README)

Created README template. Added outline for:

  • Description
  • Process
  • Challenges
  • Implementation
  • Who-Did-What Section
  • View the Project Section
  • Technologies Used
  • Server-Side APIs List
  • Credits Section
  • License Section

As we go along, all group members can add to the document.

Clearing `resultsArea` on new button click

Clearing resultsArea on new button click; so page refreshes and leftover results from previous function aren't displayed. I.E. Top10 results when Genres are loaded, or vice versa.

Allow users to remove individual items from watchlist

Expected behavior -
Each item in watch list has a button to click that will remove it from their watchlist/local storage

Current behavior -
Just one button exists at bottom of watchlist to clear entire watchlist/local storage

Handle broken image links

Expected behavior -
App will load a placeholder image, let the user know there is no poster for the entry, and display the title instead.

Current behavior -
Items retrieved with no poster url show up as a broken img link with alt text displayed.

Remove excess data from watchlist and replace with modal

Set up watchlist page to only show poster and title, then on click it will open the modal again for extra information. Also since these items are already in storage the save button won't display, and instead there is text in the modal telling the user it is saved.

Save button behavior

Change behavior of the save to watchlist button - when clicked, the button is replaced with text telling the user the item was saved.

Created favicon

Designed with google keep scribbles and edited with pixl editor for transparent background, then created circle to put it on.

Get more results

Set up a button when results are delivered to allow the user to click and receive the next page of results, if there are any.

Project Milestone 4: Site Structure Outlined

After creating a wireframe based on Omar's drawing, I created a bare bones outline of html5 which included a jumbotron and divs to hold buttons.

The vision being that JavaScript will dynamically alter html displayed on site based on user input.

Save button removed if already in watch list

Change behavior to display a save button if the item being viewed is NOT in the watch list, and a message stating that the item is already saved if the item IS in the watch list.

Project Requirements

  • Use CSS framework (other than Bootstrap)

  • Be deployed to GitHub Pages

  • Be interactive (accept/respond to user input)

  • Use at least 2 server-side APIs

  • Do not use alerts, confirms, or prompts

  • Use client-side storage

  • Be responsive

  • Have a polished UI

  • Clean repo (standards: file structure, naming conventions, class/id naming, indentation, quality commits)

  • Quality README (Unique name, description, technologies used, screenshot, link to deployed application)

  • Add project to portfolio from Module 2.

User Story

On our first day, Jake outlined the User Story for our group and created the Doc which was submitted for our project propsal.

#User Story:
AS AN indecisive media consumer
I WANT TO select options such as genre, format, runtime, etc.
SO THAT a program can randomly choose something for me to watch within those parameters.

Redefined image path

Changed dummyposterupgrade.png to dummyposterupgrade.jpg for 4 references in script.js file to give correct image in html when null is returned in API fetches.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.