diff --git a/src/components/Header.jsx b/src/components/Header.jsx index deb40e6..eb0f21f 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -1,5 +1,6 @@ import { Link } from "react-router-dom"; const Header = () => { +<<<<<<< HEAD return (

@@ -22,5 +23,14 @@ const Header = () => {

); }; +======= + + return ( +
+

+
+ ); +} +>>>>>>> homepage export default Header; diff --git a/src/components/Hero.jsx b/src/components/Hero.jsx new file mode 100644 index 0000000..8d237d3 --- /dev/null +++ b/src/components/Hero.jsx @@ -0,0 +1,28 @@ +import React from 'react'; +import '../scss/components/Hero.scss'; + +function Hero() { + return ( +
+
+

Welcome to BattleSnake!!!

+

Play for Fun!

+

+ A competitive game where your code is the controller. All you need is a web server that responds to the Battlesnake API. +

+ +
+
+
+ battle snake game +
+ {/*
Battle
+
📈
+
👁️
+
Available for Freelance
*/} +
+
+ ); +} + +export default Hero; diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx new file mode 100644 index 0000000..a705b7e --- /dev/null +++ b/src/components/Navbar.jsx @@ -0,0 +1,19 @@ +import React from 'react' +import '../scss/styles.scss' +import '../scss/components/_navbar.scss' + +const Navbar = () => { + return ( + + ) +} + +export default Navbar \ No newline at end of file diff --git a/src/components/Services.jsx b/src/components/Services.jsx new file mode 100644 index 0000000..c4e59ce --- /dev/null +++ b/src/components/Services.jsx @@ -0,0 +1,33 @@ +import React from 'react'; +import '../scss/components/Services.scss'; +import ServiceCard from '../components/ServicesCard.jsx'; + +function Services() { + return ( +
+

Develop your own algorithm to find food, stay alive, and eliminate others. Battlesnakes are controlled by a web server you deploy, running the code you write.

+
+ + + +
+
+ ); +} + +export default Services; diff --git a/src/components/ServicesCard.jsx b/src/components/ServicesCard.jsx new file mode 100644 index 0000000..473dee7 --- /dev/null +++ b/src/components/ServicesCard.jsx @@ -0,0 +1,15 @@ +import React from 'react'; +import '../scss/components/ServicesCard.scss'; + +function ServiceCard({ icon, title, desc, cta }) { + return ( +
+
{icon}
+

{title}

+

{desc}

+ {cta} → +
+ ); +} + +export default ServiceCard; diff --git a/src/main.jsx b/src/main.jsx index 7ec9dde..eea7121 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -2,9 +2,16 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import AppRouter from "./routers/AppRouter"; import "./scss/styles.scss"; +import Navbar from "./components/Navbar"; +import Hero from "./components/Hero"; +import Services from "./components/Services"; createRoot(document.getElementById("root")).render( + + + + ); diff --git a/src/scss/components/Hero.scss b/src/scss/components/Hero.scss new file mode 100644 index 0000000..b1cec79 --- /dev/null +++ b/src/scss/components/Hero.scss @@ -0,0 +1,100 @@ +.hero { + display: flex; + justify-content: space-between; + align-items: center; + padding: 4rem 3rem; + background-color: #f9f5f2; + + .hero-text { + max-width: 50%; + // font-family: "Limelight", sans-serif; + + .intro { + font-size: 1rem; + } + + h1 { + font-size: 4rem; + font-weight: 900; + margin: 1rem 0; + } + + .desc { + font-size: 1.125rem; + margin-bottom: 2rem; + } + + .cta { + background-color: #ffcc3a; + border: none; + padding: 1rem 2rem; + font-size: 1rem; + font-weight: bold; + border-radius: 12px; + cursor: pointer; + box-shadow: 3px 3px 0 #000; + } + } + + .hero-image { + position: relative; + + // .hex-bg { + // width: 500px; + // height: auto; + // background-color: #2900F5; + // padding: 3rem; + // clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%); + // box-shadow: 6px 6px 0 #000; + + img { + width: 70%; + border-radius: 6px; + } + } + + .tag { + position: absolute; + top: -2rem; + right: 0; + background: #b1b9f9; + padding: 0.3rem 0.8rem; + border-radius: 999px; + font-weight: 700; + font-size: 0.9rem; + } + + .icon { + position: absolute; + font-size: 2rem; + + &.top-left { + top: -2rem; + left: -2rem; + background: #00c2a8; + padding: 0.5rem; + border-radius: 0.5rem; + } + + &.bottom-right { + bottom: -2rem; + right: -2rem; + background: #ffdf4f; + padding: 0.5rem; + border-radius: 50%; + } + } + + .freelance-tag { + position: absolute; + bottom: -1.5rem; + left: 0; + background: #00d18c; + padding: 0.5rem 1rem; + font-size: 0.9rem; + border-radius: 999px; + font-weight: 600; + } + } + + \ No newline at end of file diff --git a/src/scss/components/Services.scss b/src/scss/components/Services.scss new file mode 100644 index 0000000..9cc9695 --- /dev/null +++ b/src/scss/components/Services.scss @@ -0,0 +1,18 @@ +.services { + padding: 5rem 3rem; + background-color: #fdfaf6; + + h2 { + font-size: 2.5rem; + font-weight: 900; + text-align: center; + margin-bottom: 3rem; + } + + .cards { + display: flex; + justify-content: space-between; + gap: 2rem; + } + } + \ No newline at end of file diff --git a/src/scss/components/ServicesCard.scss b/src/scss/components/ServicesCard.scss new file mode 100644 index 0000000..f6a5848 --- /dev/null +++ b/src/scss/components/ServicesCard.scss @@ -0,0 +1,32 @@ +.service-card { + background-color: #fff; + border: 2px solid #000; + border-radius: 1rem; + padding: 2rem; + box-shadow: 6px 6px 0 #000; + flex: 1; + + .icon { + font-size: 2.5rem; + margin-bottom: 1rem; + } + + h3 { + font-size: 1.5rem; + font-weight: 700; + margin-bottom: 1rem; + } + + p { + font-size: 1rem; + line-height: 1.6; + margin-bottom: 1.5rem; + } + + .link { + font-weight: bold; + text-decoration: none; + color: #202020; + } + } + \ No newline at end of file diff --git a/src/scss/components/_header.scss b/src/scss/components/_header.scss index 58bb0f4..94d69af 100644 --- a/src/scss/components/_header.scss +++ b/src/scss/components/_header.scss @@ -3,43 +3,31 @@ @use "../base/settings" as *; @use "../utilities/mixins" as *; -header { - padding: $section-padding; - display: flex; - justify-content: space-between; - align-items: center; - border-bottom: 1px solid $grey; - - h1 { - @include flatten; - - a { - text-decoration: none; - color: $dark; - - &:hover { - color: $yellow; - } +.header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 2rem 3rem; + + .logo { + font-weight: bold; + font-size: 1.25rem; + color: #3a3a3a; } - } - - nav { - ul { - @include flatten(true); - display: flex; - gap: 1rem; - - li { - a { - text-decoration: none; - color: $dark; - font-weight: bold; - - &:hover { - color: $yellow; - } + + .nav { + a { + margin-left: 2rem; + text-decoration: none; + color: #202020; + font-weight: 500; + + &:last-child::before { + content: '● '; + color: #ce9a76; + margin-right: 0.4rem; } } } } -} + \ No newline at end of file diff --git a/src/scss/components/_navbar.scss b/src/scss/components/_navbar.scss new file mode 100644 index 0000000..b68ac54 --- /dev/null +++ b/src/scss/components/_navbar.scss @@ -0,0 +1,39 @@ +.navbar { + display: flex; + justify-content: space-between; + align-items: center; + background-color: #f9f5f2; + padding: 1rem 2rem; + color: white; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); + + &__logo { + font-size: 1.5rem; + font-weight: bold; + color: #91a8ed; + } + + &__links { + list-style: none; + display: flex; + gap: 2rem; + margin: 0; + + @media (max-width: 768px) { + flex-direction: column; + gap: 1rem; + } + } + + &__link { + text-decoration: none; + color: #91a8ed; + font-weight: 500; + transition: color 0.2s; + + &:hover { + color: #6888E9; + } + } + } + \ No newline at end of file