diff --git a/client/src/assets/images/github-logo.svg b/client/src/assets/images/github-logo.svg new file mode 100644 index 00000000..be76cff9 --- /dev/null +++ b/client/src/assets/images/github-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/client/src/assets/styles/components/Button.scss b/client/src/assets/styles/components/Button.scss new file mode 100644 index 00000000..b21570cb --- /dev/null +++ b/client/src/assets/styles/components/Button.scss @@ -0,0 +1,24 @@ +.Button { + outline: none; + border: none; + padding: 12px 20px; + border-radius: 6px; + + a { + color: inherit; + font-size: 19px; + font-weight: 500; + } + + &--primary { + background-color: var(--primary-100); + color: var(--grey-900); + } + + &--dark { + background-color: var(--primary-900); + color: var(--grey-50); + } + + // TODO: Add more button styles and maybe sizes +} diff --git a/client/src/assets/styles/components/FancyBlobs.scss b/client/src/assets/styles/components/FancyBlobs.scss new file mode 100644 index 00000000..7d2054bc --- /dev/null +++ b/client/src/assets/styles/components/FancyBlobs.scss @@ -0,0 +1,113 @@ +.FancyBlobs { + width: 100vw; + height: 120vh; + overflow-x: clip; + position: absolute; + top: 20vh; + left: 0; + z-index: -1; + + > * { + position: absolute; + bottom: 0; + transition: all 0.5s ease-in-out; + } + + .Blob-1 { + transform: rotate(11.588deg); + fill: linear-gradient(82deg, #8900c9 38.7%, #fcf 76.51%); + filter: blur(150px); + top: -167px; + animation: BlobMove1 10s ease-in-out infinite forwards; + } + + .Blob-2 { + fill: #ff29a8; + filter: blur(125px); + top: 66px; + left: -71px; + animation: BlobMove2 10s ease-in-out infinite forwards; + } + + .Blob-3 { + width: 292.12px; + height: 286.919px; + border-radius: 292.12px; + background: #ff4473; + filter: blur(150px); + top: 460px; + left: 0; + animation: BlobMove3 10s ease-in-out infinite forwards; + } + + .Blob-4 { + width: 420.837px; + height: 293.732px; + border-radius: 420.837px; + background: #fb0; + filter: blur(150px); + top: 503px; + left: 150px; + animation: BlobMove4 10s ease-in-out infinite forwards; + } +} + +@keyframes BlobMove1 { + 0% { + transform: translate(0, 0); + } + 50% { + transform: translate(0, 50px); + } + 75% { + transform: translate(100px, 0); + } + 100% { + transform: translate(0, 0); + } +} + +@keyframes BlobMove2 { + 0% { + transform: translate(0, 0); + } + 50% { + transform: translate(0, 50px); + } + 75% { + transform: translate(-100px, 0); + } + 100% { + transform: translate(0, 0); + } +} + +@keyframes BlobMove3 { + 0% { + transform: translate(0, 0); + } + 50% { + transform: translate(0, 50px); + } + 75% { + transform: translate(100px, 0); + } + 100% { + transform: translate(0, 0); + } +} + +@keyframes BlobMove4 { + 0% { + transform: translate(0, 0); + } + 50% { + transform: translate(0, 50px); + } + 75% { + transform: translate(-100px, 0); + } + 100% { + transform: translate(0, 0); + } +} diff --git a/client/src/assets/styles/components/Footer.scss b/client/src/assets/styles/components/Footer.scss new file mode 100644 index 00000000..824625cf --- /dev/null +++ b/client/src/assets/styles/components/Footer.scss @@ -0,0 +1,35 @@ +.Footer { + padding: 2rem 20px; + text-align: center; + position: relative; + box-sizing: content-box; + + &::before { + content: ""; + display: block; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #150a25; + z-index: -1; + filter: blur(100px); + } + + p { + color: var(--grey-400, #9ca3af); + line-height: normal; + } + + a { + padding: 5px; + background-color: var(--primary-50); + color: var(--grey-900); + font-size: 13.33px; + font-weight: 700; + display: inline-flex; + gap: 5px; + align-items: center; + } +} diff --git a/client/src/components/common/Button.jsx b/client/src/components/common/Button.jsx new file mode 100644 index 00000000..0d501194 --- /dev/null +++ b/client/src/components/common/Button.jsx @@ -0,0 +1,21 @@ +import { Link } from "react-router-dom"; +import { PropTypes } from "prop-types"; + +// Styles +import "../../assets/styles/components/Button.scss"; + +export default function Button(props) { + const { children, className, linkTo, ...rest } = props; + + return ( + + ); +} + +Button.propTypes = { + children: PropTypes.node.isRequired, + className: PropTypes.string, + linkTo: PropTypes.string, +}; diff --git a/client/src/components/common/Footer.jsx b/client/src/components/common/Footer.jsx new file mode 100644 index 00000000..704001a2 --- /dev/null +++ b/client/src/components/common/Footer.jsx @@ -0,0 +1,25 @@ +// style +import "../../assets/styles/components/Footer.scss"; + +// GitHub icon +import GitHubLogo from "../../assets/images/github-logo.svg"; + +export default function Footer() { + return ( + + ); +} diff --git a/client/src/components/landingpage/FancyBlobs.jsx b/client/src/components/landingpage/FancyBlobs.jsx new file mode 100644 index 00000000..1d1e54da --- /dev/null +++ b/client/src/components/landingpage/FancyBlobs.jsx @@ -0,0 +1,100 @@ +import "./../../assets/styles/components/FancyBlobs.scss"; + +export default function FancyBlobs() { + return ( +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ ); +} diff --git a/client/src/components/landingpage/LandingPage.jsx b/client/src/components/landingpage/LandingPage.jsx index f0c006e6..478f5f19 100644 --- a/client/src/components/landingpage/LandingPage.jsx +++ b/client/src/components/landingpage/LandingPage.jsx @@ -1,9 +1,21 @@ import Nav from "../common/nav"; +import Button from "../common/Button"; +import Footer from "../common/Footer"; + +import FancyBlobs from "./FancyBlobs"; export default function LandingPage() { return ( <>