diff --git a/.env b/.env
new file mode 100644
index 00000000..3d6431d5
--- /dev/null
+++ b/.env
@@ -0,0 +1 @@
+VITE_API_KEY=25269b1222c2d59b0848b099daeb7d9b
\ No newline at end of file
diff --git a/README.md b/README.md
index f768e33f..151fce6a 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,67 @@
-# React + Vite
+Submitted by: Marvin Howell-Aguirre
-This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
+Estimated time spent: 23.5 hours spent in total
-Currently, two official plugins are available:
+Deployed Application (optional): [Flixster Deployed Site](https://flixster-project.onrender.com/)
-- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
-- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
+### Application Features
+
+#### CORE FEATURES
+
+- [x] **Display Movies**
+ - [x] Users can view a list of current movies from The Movie Database API.
+ - [x] For each movie displayed, users can see its title, poster image, and votes.
+ - [x] Users can load more current movies by clicking a button at the bottom of the list (page should not be reloaded).
+- [x] **Search Functionality**
+ - [x] Users can search for movies and view the results in a grid.
+ - [x] Users can clear results and view previous current movies displayed.
+- [x] **Accessibility Features**
+ - [x] Website implements accessibility features (semantic HTML, color contrast, font sizing, alt text for images).
+- [x] **Responsive Design**
+ - [x] Website implements responsive web design.
+- [x] **Movie Details**
+ - [x] Users can view more details about a movie in a popup, such as runtime in minutes, backdrop poster, release date, genres, and/or an overview.
+- [x] **Sorting Options**
+ - [x] Users can click on a filter by drop down to sort product by type (alphabetic, release date, rating).
+- [x] **Layout**
+ - [x] Website displays header, banner, search, movie grid, about, contact, and footer section.
+
+#### STRETCH FEATURES
+
+- [x] **Deployment**
+ - [x] Website is deployed via Render.
+- [x] **Embedded Movie Trailers**
+ - [x] Within the popup displaying a movie's details, users can play the movie trailer.
+- [x] **Watched Checkbox**
+ - [x] For each movie displayed, users can mark the movie as watched.
+- [x] **Favorite Button**
+ - [x] For each movie displayed, users can favorite the movie.
+- [] **Sidebar**
+ - [ ] Users can open a sidebar
+ - [ ] The sidebar displays the user's favorited and watched movies
+
+### Walkthrough Video
+
+
+https://github.com/Mar1789/flixster-starter/assets/116681148/254312c2-9aff-453e-922d-ba618c04d158
+
+### Reflection
+* Did the topics discussed in your labs prepare you to complete the assignment? Be specific, which features in your weekly assignment did you feel unprepared to complete?
+
+The topics discussed in my labs did prepare me to complete the assignment, but it only prepared me with useState and useEffect. I wish the labs went over passing variables to sibling components.
+
+* If you had more time, what would you have done differently? Would you have added additional features? Changed the way your project responded to a particular event, etc.
+
+I think I would not have change my code differently since my project runs well and completes the core features and almost all of the stretch features. I configured it so anything to modify the movie cards would reuse the same useEffect property.
+
+* Reflect on your project demo, what went well? Were there things that maybe didn't go as planned? Did you notice something that your peer did that you would like to try next time?
+
+I believe what went well was showing the movie cards and adding a footer and header. What did not go as planned was setting up the modal since I originally thought it would be the same process as the week 1 project, but I had to learn about passing variables between sibling components to fix the issue.
+
+### Open-source libraries used
+
+N/A
+
+### Shout out
+
+I would like to give a shout out to George for helping me debug my code and taught me how I can improve my skills on fixing my errors. I also would like to shout out Theo for helping me fix my like button stretch feature error I had when I imported my project into render.
diff --git a/package.json b/package.json
index eded5715..668c0ff5 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"version": "0.0.0",
"type": "module",
"scripts": {
- "dev": "vite",
+ "start": "vite",
"build": "vite build",
"lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
"preview": "vite preview"
diff --git a/public/heart1.png b/public/heart1.png
new file mode 100644
index 00000000..c4a739f8
Binary files /dev/null and b/public/heart1.png differ
diff --git a/public/heart2.png b/public/heart2.png
new file mode 100644
index 00000000..b4e8b64e
Binary files /dev/null and b/public/heart2.png differ
diff --git a/src/assets/react.svg b/public/react.svg
similarity index 100%
rename from src/assets/react.svg
rename to public/react.svg
diff --git a/src/App.css b/src/App.css
index 0bf65669..52ed34e2 100644
--- a/src/App.css
+++ b/src/App.css
@@ -1,9 +1,11 @@
.App {
text-align: center;
+ background-color: #282c34;
}
+
.App-header {
- background-color: #282c34;
+ background-color: black;
display: flex;
flex-direction: row;
align-items: center;
@@ -12,17 +14,246 @@
padding: 20px;
}
-@media (max-width: 600px) {
- .movie-card {
- width: 100%;
- }
+.image{
+ width: 265px;
+}
+.img{
+ position: relative;
+ top: -280px;
+ right: -300px;
+ width: 200px;
+}
+
+.movie-container{
+ display: flex;
+ justify-content: center;
+ flex-wrap: wrap;
+ gap: 30px;
+ width: 100%;
+ flex-direction:row;
+}
+
+form{
+ height: 200px;
+ margin-bottom: -100px;
+}
+.load{
+ border-radius: 30px;
+ width: 600px;
+ height: 300px;
+ margin-top: 30px;
+ margin-bottom: 30px;
+ border-radius: 30px;
+ width: 326px;
+ height: 46px;
+}
+
+input{
+ border-radius: 20px;
+ position: relative;
+ margin-left: 0px;
+ width: 190px;
+ height: 11% ;
+}
+h2{
+ font-size: 60px;
+ margin: 0;
+ margin-bottom: 28px;
+ color: white;
+ height: 100%;
+}
+.search{
+ position: relative;
+ margin-left: 14px;
+ border-radius: 20px;
+ width: 190px;
+ height: 19%;
+}
+.reset{
+ position: relative;
+ margin-left: 14px;
+ top: -100px;
+ right: -400px;
+ border-radius: 20px;
+ width: 170px;
+ height: 38px;
+}
+.title{
+ position: relative;
+ top: -301px;
+ right: -300px;
+ font-size: 30px;
+}
+.overview{
+ position: relative;
+ top: -270px;
+ right: -650px;
+ width: 700px;
+}
+.genre{
+ position: absolute;
+ top: 500px;
+ left:50px;
+ width: 550px;
+}
+.release-date{
+ position: absolute;
+ top: 460px;
+ left: 150px ;
+}
+#modal {
+ display: block; /* Hidden by default */
+ position: fixed; /* Stay in place */
+ z-index: 1; /* Sit on top */
+ left: 0;
+ top: 0;
+ width: 100%; /* Full width */
+ height: 100%; /* Full height */
+}
+.modal-content {
+ top: -97px;
+ grid-auto-flow: column;
+ position: relative;
+ background-color: #404753;
+ text-transform: capitalize;
+ color: #fff;
+ font-size: 20px;
+ margin: 15% auto; /* 15% from the top and centered */
+ padding: 2px;
+ height: 69%;
+ border-radius: 20.7px;
+ border: 2px solid white;
+ width: 80%; /* Could be more or less, depending on screen size */
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+.runtime{
+ position: absolute;
+ top: 420px;
+ left: 160px;
+}
+.close {
+ top: -862px;
+ color: #aaa;
+ float: right;
+ font-size: 28px;
+ font-weight: bold;
+}
+.close:hover,
+.close:focus {
+ color: black;
+ text-decoration: none;
+ cursor: pointer;
+}
+.dropbtn {
+ transition: transform 250ms;
+ background-color: #3498DB;
+ color: white;
+ padding: 16px;
+ font-size: 16px;
+ border: none;
+ cursor: pointer;
+
+}
+.dropbtn:hover, .dropbtn:focus {
+ background-color: #2980B9;
+}
+
+.dropbtn:hover {
+ transform: translateY(-10px);
+ background-color: #01DF8E;
+}
- .search-bar {
- flex-direction: column;
- gap: 10px;
- }
+.dropdown {
+ text-align: center;
+ transition: transform 250ms;
+ font-size: 16px;
+ height: 28px;
+ width: 120px;
+ color: white;
+ background-color: #04AA6D;
+ border-radius: 20px;
+ position: relative;
+ display: inline-block;
+ left: -365px;
+ top: -95px;
+}
+.dropdown:hover {
+ transform: translateY(-10px);
+ background-color: #01DF8E;
+}
+
+footer {
+ color: white;
+ background-color: #2C2C2C;
+ position: relative;
+ height: 80px;
+}
+footer p{
+ position: relative;
+ top: 30px;
+ right: -620px;
+}
- .search-bar form {
- flex-direction: column;
- }
+.dropdown-right {
+ text-align: center;
+ transition: transform 250ms;
+ font-size: 16px;
+ height: 28px;
+ width: 120px;
+ color: white;
+ background-color: #04AA6D;
+ border-radius: 20px;
+ position: relative;
+ display: inline-block;
+ left: 365px;
+ top: -97px;
+}
+
+.dropdown-right:hover {
+ transform: translateY(-10px);
+ background-color: #01DF8E;
+}
+
+header{
+ margin-bottom: 22px;
+ max-height: 153px;
+ top: 0px;
+ background-color: #2C2C2C;
+}
+
+.dropdown-content-right a{
+ color: black;
+ padding: 12px 16px;
+ text-decoration: none;
+ display: block;
+}
+.dropdown-content-right a:active {background-color: #f1f1f1;}
+.dropdown-right:hover .dropdown-content-right {display: block;}
+.dropdown-right:focus .dropbtn {background-color: #3e8e41;}
+
+.heart {
+ right: 21px;
+ position: absolute;
+ top: 0px;
+ width: 300px;
+ height: 50px;
+}
+.heart-image{
+ position: relative;
+ width: 20px;
+ top: 419px;
+ left: 118px;
+}
+#scales{
+ right: -122px;
+ height: 32%;
+ position: relative;
+ top: 417px;
+ width: 17px;
}
+iframe{
+ position: relative;
+ top: 90px;
+ left: -400px;
+}
\ No newline at end of file
diff --git a/src/App.jsx b/src/App.jsx
index 48215b3f..6a08c8e3 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -1,10 +1,19 @@
import { useState } from 'react'
import './App.css'
+import React from 'react'
+import MovieCard from './MovieCard'
+import MovieList from './MovieList'
+import Modal from './Modal'
+
const App = () => {
+ let search;
+
+ return(