diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..03d9549 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..7dec97e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/portfolio.iml b/.idea/portfolio.iml new file mode 100644 index 0000000..24643cc --- /dev/null +++ b/.idea/portfolio.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/debug.log b/debug.log new file mode 100644 index 0000000..943af8a --- /dev/null +++ b/debug.log @@ -0,0 +1,5 @@ +[0620/155937.082:ERROR:(-1)] Check failed: false. +[0620/174810.676:ERROR:(-1)] Check failed: false. +[0620/174851.866:ERROR:(-1)] Check failed: false. +[0620/213757.116:ERROR:(-1)] Check failed: false. +[0621/002553.054:ERROR:(-1)] Check failed: false. diff --git a/package-lock.json b/package-lock.json index 9e24ee6..aa32d88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,9 +11,15 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "bulma": "^0.9.4", + "localforage": "^1.10.0", + "match-sorter": "^6.3.1", + "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-router-dom": "^6.13.0", "react-scripts": "5.0.1", + "sort-by": "^1.2.0", "web-vitals": "^2.1.4" } }, @@ -3263,6 +3269,14 @@ } } }, + "node_modules/@remix-run/router": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.3.tgz", + "integrity": "sha512-EXJysQ7J3veRECd0kZFQwYYd5sJMcq2O/m60zu1W2l3oVQ9xtub8jTOtYRE0+M2iomyG/W3Ps7+vp2kna0C27Q==", + "engines": { + "node": ">=14" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -5735,6 +5749,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bulma": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.4.tgz", + "integrity": "sha512-86FlT5+1GrsgKbPLRRY7cGDg8fsJiP/jzTqXXVqiUZZ2aZT8uemEOHlU1CDU+TxklPEZ11HZNNWclRBBecP4CQ==" + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -9162,6 +9181,11 @@ "node": ">= 4" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, "node_modules/immer": { "version": "9.0.21", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", @@ -11928,6 +11952,14 @@ "node": ">= 0.8.0" } }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -11962,6 +11994,14 @@ "node": ">=8.9.0" } }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dependencies": { + "lie": "3.1.1" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -12079,6 +12119,15 @@ "tmpl": "1.0.5" } }, + "node_modules/match-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", + "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "remove-accents": "0.4.2" + } + }, "node_modules/mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -12484,6 +12533,14 @@ "node": ">= 0.4" } }, + "node_modules/object-path": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.6.0.tgz", + "integrity": "sha512-fxrwsCFi3/p+LeLOAwo/wyRMODZxdGBtUlWRzsEpsUVrisZbEfZ21arxLGfaWfcnqb8oHPNihIb4XPE8CQPN5A==", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -14548,6 +14605,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.13.0.tgz", + "integrity": "sha512-Si6KnfEnJw7gUQkNa70dlpI1bul46FuSxX5t5WwlUBxE25DAz2BjVkwaK8Y2s242bQrZPXCpmwLPtIO5pv4tXg==", + "dependencies": { + "@remix-run/router": "1.6.3" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.13.0.tgz", + "integrity": "sha512-6Nqoqd7fgwxxVGdbiMHTpDHCYPq62d7Wk1Of7B82vH7ZPwwsRaIa22zRZKPPg413R5REVNiyuQPKDG1bubcOFA==", + "dependencies": { + "@remix-run/router": "1.6.3", + "react-router": "6.13.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -14768,6 +14855,11 @@ "node": ">= 0.10" } }, + "node_modules/remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + }, "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", @@ -15411,6 +15503,14 @@ "websocket-driver": "^0.7.4" } }, + "node_modules/sort-by": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sort-by/-/sort-by-1.2.0.tgz", + "integrity": "sha512-aRyW65r3xMnf4nxJRluCg0H/woJpksU1dQxRtXYzau30sNBOmf5HACpDd9MZDhKh7ALQ5FgSOfMPwZEtUmMqcg==", + "dependencies": { + "object-path": "0.6.0" + } + }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", diff --git a/package.json b/package.json index cc1da87..a0305aa 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,15 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "bulma": "^0.9.4", + "localforage": "^1.10.0", + "match-sorter": "^6.3.1", + "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-router-dom": "^6.13.0", "react-scripts": "5.0.1", + "sort-by": "^1.2.0", "web-vitals": "^2.1.4" }, "scripts": { diff --git a/public/index.html b/public/index.html index aa069f2..3db0b39 100644 --- a/public/index.html +++ b/public/index.html @@ -10,34 +10,11 @@ content="Web site created using create-react-app" /> - - - React App + Ewen Horville | Portfolio
- diff --git a/src/App.css b/src/App.css index 74b5e05..9dc7c54 100644 --- a/src/App.css +++ b/src/App.css @@ -1,38 +1,27 @@ -.App { - text-align: center; +.blurred { + width: inherit; + height: inherit; + filter: blur(7px) grayscale(50%); + object-fit: cover; + transform: scale(1.04); + overflow: hidden; + display: block; } -.App-logo { - height: 40vmin; - pointer-events: none; +.soft-shadow { + box-shadow: 0 0.5em .25em -0.125em rgba(10,10,10,.1), 0 0 0 1px rgba(10,10,10,.1);; } -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } +.rounded { + border-radius: 1em; } -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; +.is-carousel-focused { + max-height: .8em; + transition: max-height .15s; } -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} +.is-carousel { + max-height: .5em; + transition: max-height .15s; +} \ No newline at end of file diff --git a/src/App.js b/src/App.js index 3784575..dbc3ddb 100644 --- a/src/App.js +++ b/src/App.js @@ -1,23 +1,30 @@ -import logo from './logo.svg'; import './App.css'; +import Homepage from "./Pages/Homepage/Homepage"; +import Project, {projectLoader} from "./Pages/Project/Project"; +import {createBrowserRouter, Navigate, RouterProvider} from "react-router-dom"; +import React from "react"; +import Navbar from "./Components/Navbar"; +import Footer from "./Components/Footer"; + +const router = createBrowserRouter([ + { + path: "/", + element: , + errorElement: + }, + { + path: "projects/:projectId", + loader: projectLoader, + element: + } +]); function App() { return ( -
-
- logo -

- Edit src/App.js and save to reload. -

- - Learn React - -
+
+ + +
); } diff --git a/src/Components/Carousel.js b/src/Components/Carousel.js new file mode 100644 index 0000000..6db997f --- /dev/null +++ b/src/Components/Carousel.js @@ -0,0 +1,81 @@ +import {Component} from "react"; +import PropTypes from "prop-types"; + +class Carousel extends Component { + + constructor(props) { + super(props); + + this.state = { + currentImage: 0 + } + } + + static propTypes = { + images: PropTypes.array.isRequired + } + + handleNextImage = () => { + this.setState({ + currentImage: (this.state.currentImage + 1) % this.props.images.length + }) + } + + handlePreviousImage = () => { + if (this.state.currentImage === 0) { + this.setState({ + currentImage: this.props.images.length - 1 + }) + } else { + this.setState({ + currentImage: (this.state.currentImage - 1) % this.props.images.length + }) + } + } + + getMediaHTML(media) { + switch (media.type) { + case "youtube": { + return
+ +
+ } + case "picture": { + return Showcase media + } + default: { + return
+ } + } + } + + render() { + return
+ {this.getMediaHTML(this.props.images[this.state.currentImage])} +
+
+ < + {this.props.images.map((image, index) => { + let focused = this.state.currentImage === index ? "is-carousel-focused" : "is-carousel"; + return ; + })} + > +
+
+
+ } +} + + + +export default Carousel; \ No newline at end of file diff --git a/src/Components/Footer.js b/src/Components/Footer.js new file mode 100644 index 0000000..5d5b567 --- /dev/null +++ b/src/Components/Footer.js @@ -0,0 +1,34 @@ +import {Component} from "react"; + +class Footer extends Component { + + render() { + return + } +} + +export default Footer; \ No newline at end of file diff --git a/src/Components/Navbar.js b/src/Components/Navbar.js new file mode 100644 index 0000000..a441e5c --- /dev/null +++ b/src/Components/Navbar.js @@ -0,0 +1,20 @@ +import {Component} from "react"; + +class Navbar extends Component { + + render() { + return ( + + ) + } +} + +export default Navbar; \ No newline at end of file diff --git a/src/Pages/Homepage/Homepage.js b/src/Pages/Homepage/Homepage.js new file mode 100644 index 0000000..fab6f6b --- /dev/null +++ b/src/Pages/Homepage/Homepage.js @@ -0,0 +1,61 @@ +import video from "../../media/main_vid.mp4"; +import ProjectCard from "./ProjectCard"; +import projects from "../../Projects/manifest"; + +export default function Homepage() { + return
+
+
+ +
+
+

Ewen Horville

+

+ Étudiant et passionné en Informatique +

+
+
+
+

A Propos de moi

+
+
+
+
+ placeholder +
+
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer cursus mi lectus. Curabitur congue consectetur orci non consectetur. Donec at purus sodales, mollis dui ac, volutpat tellus. Nullam non pulvinar nisl. Maecenas fringilla auctor sem, vitae posuere turpis ultricies vitae. Nullam urna neque, accumsan nec ex eget, aliquet ultrices nulla. Aenean id nisl eu erat iaculis venenatis. Nullam semper sapien leo, vitae mollis augue auctor in. Donec at dui in orci varius placerat aliquet id neque.

+
+
+
+
+
+ placeholder +
+
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer cursus mi lectus. Curabitur congue consectetur orci non consectetur. Donec at purus sodales, mollis dui ac, volutpat tellus. Nullam non pulvinar nisl. Maecenas fringilla auctor sem, vitae posuere turpis ultricies vitae. Nullam urna neque, accumsan nec ex eget, aliquet ultrices nulla. Aenean id nisl eu erat iaculis venenatis. Nullam semper sapien leo, vitae mollis augue auctor in. Donec at dui in orci varius placerat aliquet id neque.

+
+
+
+
+
+
+

Mes Projets

+
+
+
+
+
+
+
+
+
+
+
+
+
+} \ No newline at end of file diff --git a/src/Pages/Homepage/ProjectCard.js b/src/Pages/Homepage/ProjectCard.js new file mode 100644 index 0000000..b3f54a9 --- /dev/null +++ b/src/Pages/Homepage/ProjectCard.js @@ -0,0 +1,36 @@ +import {Component} from "react"; +import PropTypes from "prop-types"; +import {NavLink} from "react-router-dom"; + +class ProjectCard extends Component { + + static propTypes = { + project: PropTypes.object.isRequired, + index: PropTypes.number.isRequired + } + + render() { + return
+
+
+ {this.props.project.title} +
+
+
+
+
+ {this.props.project.title} +
+
+ +
+ {this.props.project.shortDesc} +
+ +
+
+
+ } +} + +export default ProjectCard; \ No newline at end of file diff --git a/src/Pages/Project/Project.js b/src/Pages/Project/Project.js new file mode 100644 index 0000000..52de7d2 --- /dev/null +++ b/src/Pages/Project/Project.js @@ -0,0 +1,58 @@ +import Carousel from "../../Components/Carousel"; +import {useLoaderData} from "react-router-dom"; +import projects from "../../Projects/manifest"; + +export async function projectLoader(request) { + return projects[request.params.projectId]; +} + +export default function Project() { + + const project = useLoaderData(); + + function getMediaHTML(media) { + switch (media.type) { + case "youtube": { + return
+ +
+ } + case "picture": { + return Showcase media + } + default: { + return
+ } + } + } + + return ( +
+
+
+
+ {getMediaHTML(project.mainMedia)} +
+
+

{project.title}

+

{project.longDesc}

+
+
+
+
+

Plus d'images

+ +
+
+ ); +} \ No newline at end of file diff --git a/src/Projects/manifest.js b/src/Projects/manifest.js new file mode 100644 index 0000000..e0a768f --- /dev/null +++ b/src/Projects/manifest.js @@ -0,0 +1,76 @@ +const projectData = [ + { + title: "AquaticWeb v1", + shortDesc: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.", + longDesc: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.", + thumbnail: "https://bulma.io/images/placeholders/1280x960.png", + mainMedia: {type: "youtube", value: "https://youtube.com/embed/3Okx0T5vpFc"}, + secondaryMedia: [ + {type: "youtube", value: "https://youtube.com/embed/3Okx0T5vpFc"}, + {type: "picture", value: "https://www.jacksonsquareshopping.co.uk/wp-content/uploads/2016/12/placeholder-1920x1080-copy.png"} + ], + date: new Date(Date.UTC(2023, 5, 29)) + }, + { + title: "AquaticWeb v2", + shortDesc: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.", + longDesc: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.", + thumbnail: "https://bulma.io/images/placeholders/1280x960.png", + mainMedia: {type: "youtube", value: "https://youtube.com/embed/3Okx0T5vpFc"}, + secondaryMedia: [ + {type: "youtube", value: "https://youtube.com/embed/3Okx0T5vpFc"}, + {type: "picture", value: "https://www.jacksonsquareshopping.co.uk/wp-content/uploads/2016/12/placeholder-1920x1080-copy.png"} + ], + date: new Date(Date.UTC(2023, 5, 29)) + }, + { + title: "AquaticWeb v3", + shortDesc: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.", + longDesc: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.", + thumbnail: "https://bulma.io/images/placeholders/1280x960.png", + mainMedia: {type: "youtube", value: "https://youtube.com/embed/3Okx0T5vpFc"}, + secondaryMedia: [ + {type: "youtube", value: "https://youtube.com/embed/3Okx0T5vpFc"}, + {type: "picture", value: "https://www.jacksonsquareshopping.co.uk/wp-content/uploads/2016/12/placeholder-1920x1080-copy.png"} + ], + date: new Date(Date.UTC(2023, 5, 29)) + }, + { + title: "AquaticWeb v4", + shortDesc: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.", + longDesc: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.", + thumbnail: "https://bulma.io/images/placeholders/1280x960.png", + mainMedia: {type: "picture", value: "https://www.jacksonsquareshopping.co.uk/wp-content/uploads/2016/12/placeholder-1920x1080-copy.png"}, + secondaryMedia: [ + {type: "youtube", value: "https://youtube.com/embed/3Okx0T5vpFc"}, + {type: "picture", value: "https://www.jacksonsquareshopping.co.uk/wp-content/uploads/2016/12/placeholder-1920x1080-copy.png"} + ], + date: new Date(Date.UTC(2023, 5, 29)) + }, + { + title: "AquaticWeb v5", + shortDesc: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.", + longDesc: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.", + thumbnail: "https://www.jacksonsquareshopping.co.uk/wp-content/uploads/2016/12/placeholder-1920x1080-copy.png", + mainMedia: {type: "picture", value: "https://www.jacksonsquareshopping.co.uk/wp-content/uploads/2016/12/placeholder-1920x1080-copy.png"}, + secondaryMedia: [ + {type: "youtube", value: "https://youtube.com/embed/3Okx0T5vpFc"}, + {type: "picture", value: "https://www.jacksonsquareshopping.co.uk/wp-content/uploads/2016/12/placeholder-1920x1080-copy.png"} + ], + date: new Date(Date.UTC(2023, 5, 29)) + }, + { + title: "AquaticWeb v6", + shortDesc: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.", + longDesc: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nec iaculis mauris.", + thumbnail: "https://bulma.io/images/placeholders/1280x960.png", + mainMedia: {type: "picture", value: "https://www.jacksonsquareshopping.co.uk/wp-content/uploads/2016/12/placeholder-1920x1080-copy.png"}, + secondaryMedia: [ + {type: "youtube", value: "https://youtube.com/embed/3Okx0T5vpFc"}, + {type: "picture", value: "https://www.jacksonsquareshopping.co.uk/wp-content/uploads/2016/12/placeholder-1920x1080-copy.png"} + ], + date: new Date(Date.UTC(2023, 5, 29)) + } +] + +export default projectData; \ No newline at end of file diff --git a/src/index.css b/src/index.css index ec2585e..da687ae 100644 --- a/src/index.css +++ b/src/index.css @@ -1,13 +1 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} +@import "https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css"; \ No newline at end of file diff --git a/src/index.js b/src/index.js index d563c0f..e51965b 100644 --- a/src/index.js +++ b/src/index.js @@ -1,13 +1,15 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; -import App from './App'; +import './App.css'; import reportWebVitals from './reportWebVitals'; +import App from "./App"; + const root = ReactDOM.createRoot(document.getElementById('root')); root.render( - + ); diff --git a/src/media/main_vid.mp4 b/src/media/main_vid.mp4 new file mode 100644 index 0000000..ceb42f1 Binary files /dev/null and b/src/media/main_vid.mp4 differ