diff --git a/SerpentRace_Frontend/package-lock.json b/SerpentRace_Frontend/package-lock.json
index caa2c59d..81a25a59 100644
--- a/SerpentRace_Frontend/package-lock.json
+++ b/SerpentRace_Frontend/package-lock.json
@@ -9,9 +9,10 @@
"version": "0.0.0",
"dependencies": {
"@tailwindcss/vite": "^4.1.7",
- "framer-motion": "^12.12.1",
+ "framer-motion": "^12.19.1",
"react": "^19.1.0",
"react-dom": "^19.1.0",
+ "react-icons": "^5.5.0",
"react-router-dom": "^7.6.0",
"tailwindcss": "^4.1.7"
},
@@ -2587,13 +2588,13 @@
}
},
"node_modules/framer-motion": {
- "version": "12.12.1",
- "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.12.1.tgz",
- "integrity": "sha512-PFw4/GCREHI2suK/NlPSUxd+x6Rkp80uQsfCRFSOQNrm5pZif7eGtmG1VaD/UF1fW9tRBy5AaS77StatB3OJDg==",
+ "version": "12.19.1",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.19.1.tgz",
+ "integrity": "sha512-nq9hwWAEKf4gzprbOZzKugLV5OVKF7zrNDY6UOVu+4D3ZgIkg8L9Jy6AMrpBM06fhbKJ6LEG6UY5+t7Eq6wNlg==",
"license": "MIT",
"dependencies": {
- "motion-dom": "^12.12.1",
- "motion-utils": "^12.12.1",
+ "motion-dom": "^12.19.0",
+ "motion-utils": "^12.19.0",
"tslib": "^2.4.0"
},
"peerDependencies": {
@@ -3374,18 +3375,18 @@
}
},
"node_modules/motion-dom": {
- "version": "12.12.1",
- "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.12.1.tgz",
- "integrity": "sha512-GXq/uUbZBEiFFE+K1Z/sxdPdadMdfJ/jmBALDfIuHGi0NmtealLOfH9FqT+6aNPgVx8ilq0DtYmyQlo6Uj9LKQ==",
+ "version": "12.19.0",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.19.0.tgz",
+ "integrity": "sha512-m96uqq8VbwxFLU0mtmlsIVe8NGGSdpBvBSHbnnOJQxniPaabvVdGgxSamhuDwBsRhwX7xPxdICgVJlOpzn/5bw==",
"license": "MIT",
"dependencies": {
- "motion-utils": "^12.12.1"
+ "motion-utils": "^12.19.0"
}
},
"node_modules/motion-utils": {
- "version": "12.12.1",
- "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.12.1.tgz",
- "integrity": "sha512-f9qiqUHm7hWSLlNW8gS9pisnsN7CRFRD58vNjptKdsqFLpkVnX00TNeD6Q0d27V9KzT7ySFyK1TZ/DShfVOv6w==",
+ "version": "12.19.0",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.19.0.tgz",
+ "integrity": "sha512-BuFTHINYmV07pdWs6lj6aI63vr2N4dg0vR+td0rtrdpWOhBzIkEklZyLcvKBoEtwSqx8Jg06vUB5RS0xDiUybw==",
"license": "MIT"
},
"node_modules/ms": {
@@ -3739,6 +3740,15 @@
"react": "^19.1.0"
}
},
+ "node_modules/react-icons": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz",
+ "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
"node_modules/react-refresh": {
"version": "0.17.0",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
diff --git a/SerpentRace_Frontend/package.json b/SerpentRace_Frontend/package.json
index 913ca42c..9efa2b81 100644
--- a/SerpentRace_Frontend/package.json
+++ b/SerpentRace_Frontend/package.json
@@ -11,9 +11,10 @@
},
"dependencies": {
"@tailwindcss/vite": "^4.1.7",
- "framer-motion": "^12.12.1",
+ "framer-motion": "^12.19.1",
"react": "^19.1.0",
"react-dom": "^19.1.0",
+ "react-icons": "^5.5.0",
"react-router-dom": "^7.6.0",
"tailwindcss": "^4.1.7"
},
diff --git a/SerpentRace_Frontend/src/App.jsx b/SerpentRace_Frontend/src/App.jsx
index a09adb1f..5ff35f64 100644
--- a/SerpentRace_Frontend/src/App.jsx
+++ b/SerpentRace_Frontend/src/App.jsx
@@ -1,26 +1,27 @@
-import { useState, useEffect } from "react";
-import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
-import AuthRegister from "./pages/Auth/AuthRegister";
-import AuthLogin from "./pages/Auth/AuthLogin";
-import EmailVerification from "./pages/Auth/EmailVerification";
-import Test from "./pages/Testing/Test";
-import ForgotPassword from "./pages/Auth/ForgotPassword";
-import ResetPassword from "./pages/Auth/ResetPassword";
-
+import { useState, useEffect } from "react"
+import { BrowserRouter as Router, Route, Routes } from "react-router-dom"
+import AuthRegister from "./pages/Auth/AuthRegister"
+import AuthLogin from "./pages/Auth/AuthLogin"
+import EmailVerification from "./pages/Auth/EmailVerification"
+import Test from "./pages/Testing/Test"
+import ForgotPassword from "./pages/Auth/ForgotPassword"
+import ResetPassword from "./pages/Auth/ResetPassword"
+import Landingpage from "./pages/Landing/Landingpage"
+import Home from "./pages/Landing/Home"
function App() {
- const [isMobile, setIsMobile] = useState(false);
+ const [isMobile, setIsMobile] = useState(false)
useEffect(() => {
const handleResize = () => {
- setIsMobile(window.innerWidth <= 1280);
- };
+ setIsMobile(window.innerWidth <= 1280)
+ }
- handleResize();
- window.addEventListener("resize", handleResize);
+ handleResize()
+ window.addEventListener("resize", handleResize)
- return () => window.removeEventListener("resize", handleResize);
- }, []);
+ return () => window.removeEventListener("resize", handleResize)
+ }, [])
// if (isMobile) {
// return (
@@ -43,10 +44,12 @@ function App() {
} />
} />
} />
-
+ } />
+ } />
+ {/* Add more routes as needed */}
- );
+ )
}
-export default App;
\ No newline at end of file
+export default App
diff --git a/SerpentRace_Frontend/src/assets/backgrounds/Background.jsx b/SerpentRace_Frontend/src/assets/backgrounds/Background.jsx
index ef038df0..19eef3bb 100755
--- a/SerpentRace_Frontend/src/assets/backgrounds/Background.jsx
+++ b/SerpentRace_Frontend/src/assets/backgrounds/Background.jsx
@@ -1,65 +1,68 @@
// src/assets/backgrounds/Background.jsx
// Kockás háttér, ami a mousemovera reagál
-import React, { useEffect, useState } from "react";
-import { motion } from "framer-motion";
+import React, { useEffect, useState } from "react"
+import { motion } from "framer-motion"
const Background = () => {
- const [gridSize, setGridSize] = useState({ cols: 12, rows: 6 });
- const [mousePos, setMousePos] = useState({ x: 0, y: 0 });
- const [path, setPath] = useState([]);
+ const [gridSize, setGridSize] = useState({ cols: 12, rows: 6 })
+ const [mousePos, setMousePos] = useState({ x: 0, y: 0 })
+ const [path, setPath] = useState([])
useEffect(() => {
const updateGrid = () => {
- const width = window.innerWidth;
- const height = window.innerHeight;
- const cols = Math.max(8, Math.floor(width / 100)); // 100px-es cellák
- const rows = Math.max(5, Math.floor(height / 100)); // 100px-es cellák
- setGridSize({ cols, rows });
- };
+ const width = window.innerWidth
+ const height = window.innerHeight
+ const cols = Math.max(8, Math.floor(width / 100)) // 100px-es cellák
+ const rows = Math.max(5, Math.floor(height / 100)) // 100px-es cellák
+ setGridSize({ cols, rows })
+ }
const handleMouseMove = (e) => {
- setMousePos({ x: e.clientX, y: e.clientY });
- };
+ setMousePos({ x: e.clientX, y: e.clientY })
+ }
- updateGrid();
- window.addEventListener("resize", updateGrid);
- window.addEventListener("mousemove", handleMouseMove);
+ updateGrid()
+ window.addEventListener("resize", updateGrid)
+ window.addEventListener("mousemove", handleMouseMove)
return () => {
- window.removeEventListener("resize", updateGrid);
- window.removeEventListener("mousemove", handleMouseMove);
- };
- }, []);
+ window.removeEventListener("resize", updateGrid)
+ window.removeEventListener("mousemove", handleMouseMove)
+ }
+ }, [])
useEffect(() => {
const interval = setInterval(() => {
- const newCol = Math.floor(Math.random() * gridSize.cols);
- const newRow = Math.floor(Math.random() * gridSize.rows);
+ const newCol = Math.floor(Math.random() * gridSize.cols)
+ const newRow = Math.floor(Math.random() * gridSize.rows)
setPath((prevPath) => {
- const newPath = [...prevPath, { col: newCol, row: newRow, opacity: 1 }]; // Új pont hozzáadása
+ const newPath = [...prevPath, { col: newCol, row: newRow, opacity: 1 }] // Új pont hozzáadása
if (newPath.length > 10) {
- newPath.shift(); // Max 10 pont az útvonalon
+ newPath.shift() // Max 10 pont az útvonalon
}
- return newPath;
- });
- }, 500); // Új pont hozzáadása minden 500ms-ben
+ return newPath
+ })
+ }, 500) // Új pont hozzáadása minden 500ms-ben
// Az útvonal pontjainak fokozatos eltűnése
const fadeInterval = setInterval(() => {
- setPath((prevPath) =>
- prevPath.map((point) => ({
- ...point,
- opacity: Math.max(0, point.opacity - 0.05), // Fokozatosan csökkentjük az opacity-t
- })).filter((point) => point.opacity > 0) // Eltávolítjuk a teljesen eltűnt pontokat
- );
- }, 100); // Opacity frissítése minden 100ms-ben
+ setPath(
+ (prevPath) =>
+ prevPath
+ .map((point) => ({
+ ...point,
+ opacity: Math.max(0, point.opacity - 0.05), // Fokozatosan csökkentjük az opacity-t
+ }))
+ .filter((point) => point.opacity > 0) // Eltávolítjuk a teljesen eltűnt pontokat
+ )
+ }, 100) // Opacity frissítése minden 100ms-ben
return () => {
- clearInterval(interval);
- clearInterval(fadeInterval);
- };
- }, [gridSize]);
+ clearInterval(interval)
+ clearInterval(fadeInterval)
+ }
+ }, [gridSize])
return (
@@ -71,19 +74,19 @@ const Background = () => {
}}
>
{[...Array(gridSize.cols * gridSize.rows)].map((_, i) => {
- const col = i % gridSize.cols;
- const row = Math.floor(i / gridSize.cols);
- const cellX = (col + 0.5) * (window.innerWidth / gridSize.cols);
- const cellY = (row + 0.5) * (window.innerHeight / gridSize.rows);
+ const col = i % gridSize.cols
+ const row = Math.floor(i / gridSize.cols)
+ const cellX = (col + 0.5) * (window.innerWidth / gridSize.cols)
+ const cellY = (row + 0.5) * (window.innerHeight / gridSize.rows)
- const dx = cellX - mousePos.x;
- const dy = cellY - mousePos.y;
- const distance = Math.sqrt(dx * dx + dy * dy);
- const distanceFactor = Math.max(0, 1 - distance / 300); // Egér hatótávolsága
+ const dx = cellX - mousePos.x
+ const dy = cellY - mousePos.y
+ const distance = Math.sqrt(dx * dx + dy * dy)
+ const distanceFactor = Math.max(0, 1 - distance / 300) // Egér hatótávolsága
// Az útvonalban lévő pontok opacitása
- const pathPoint = path.find((p) => p.col === col && p.row === row);
- const pathOpacity = pathPoint ? pathPoint.opacity : 0;
+ const pathPoint = path.find((p) => p.col === col && p.row === row)
+ const pathOpacity = pathPoint ? pathPoint.opacity : 0
return (
{
}}
transition={{ duration: 0.5, ease: "easeOut" }} // Lassú és sima átmenet
/>
- );
+ )
})}
- );
-};
+ )
+}
-export default Background;
\ No newline at end of file
+export default Background
diff --git a/SerpentRace_Frontend/src/assets/pictures/LogoCard.jsx b/SerpentRace_Frontend/src/assets/pictures/LogoCard.jsx
new file mode 100644
index 00000000..a356f976
--- /dev/null
+++ b/SerpentRace_Frontend/src/assets/pictures/LogoCard.jsx
@@ -0,0 +1,134 @@
+import { useRef, useState } from "react"
+import { motion, useMotionValue, useSpring } from "framer-motion"
+
+const springValues = {
+ damping: 30,
+ stiffness: 100,
+ mass: 2,
+}
+
+export default function LogoCard({
+ imageSrc,
+ altText = "Tilted card image",
+ captionText = "",
+ containerHeight = "300px",
+ containerWidth = "100%",
+ imageHeight = "300px",
+ imageWidth = "300px",
+ scaleOnHover = 1.1,
+ rotateAmplitude = 14,
+ showMobileWarning = true,
+ showTooltip = true,
+ overlayContent = null,
+ displayOverlayContent = false,
+}) {
+ const ref = useRef(null)
+ const x = useMotionValue(0)
+ const y = useMotionValue(0)
+ const rotateX = useSpring(useMotionValue(0), springValues)
+ const rotateY = useSpring(useMotionValue(0), springValues)
+ const scale = useSpring(1, springValues)
+ const opacity = useSpring(0)
+ const rotateFigcaption = useSpring(0, {
+ stiffness: 350,
+ damping: 30,
+ mass: 1,
+ })
+
+ const [lastY, setLastY] = useState(0)
+
+ function handleMouse(e) {
+ if (!ref.current) return
+
+ const rect = ref.current.getBoundingClientRect()
+ const offsetX = e.clientX - rect.left - rect.width / 2
+ const offsetY = e.clientY - rect.top - rect.height / 2
+
+ const rotationX = (offsetY / (rect.height / 2)) * -rotateAmplitude
+ const rotationY = (offsetX / (rect.width / 2)) * rotateAmplitude
+
+ rotateX.set(rotationX)
+ rotateY.set(rotationY)
+
+ x.set(e.clientX - rect.left)
+ y.set(e.clientY - rect.top)
+
+ const velocityY = offsetY - lastY
+ rotateFigcaption.set(-velocityY * 0.6)
+ setLastY(offsetY)
+ }
+
+ function handleMouseEnter() {
+ scale.set(scaleOnHover)
+ opacity.set(1)
+ }
+
+ function handleMouseLeave() {
+ opacity.set(0)
+ scale.set(1)
+ rotateX.set(0)
+ rotateY.set(0)
+ rotateFigcaption.set(0)
+ }
+
+ return (
+
+ {showMobileWarning && (
+
+ This effect is not optimized for mobile. Check on desktop.
+
+ )}
+
+
+
+
+ {displayOverlayContent && overlayContent && (
+
+ {overlayContent}
+
+ )}
+
+
+ {showTooltip && (
+
+ {captionText}
+
+ )}
+
+ )
+}
diff --git a/SerpentRace_Frontend/src/components/Buttons/Button.jsx b/SerpentRace_Frontend/src/components/Buttons/Button.jsx
index 76fa3029..f5f98836 100755
--- a/SerpentRace_Frontend/src/components/Buttons/Button.jsx
+++ b/SerpentRace_Frontend/src/components/Buttons/Button.jsx
@@ -1,10 +1,10 @@
// src/components/Inputs/InputBox.jsx
// Gomb komponens
-import { motion } from "framer-motion";
+import { motion } from "framer-motion"
-export default function Button({ text, type, onClick, width }) {
- const widthClass = width ? width : "w-full";
+export default function Button({ text, type, onClick, width, className }) {
+ const widthClass = width ? width : "w-full"
return (
{text}
- );
+ )
}
diff --git a/SerpentRace_Frontend/src/components/Buttons/ButtonDark.jsx b/SerpentRace_Frontend/src/components/Buttons/ButtonDark.jsx
new file mode 100644
index 00000000..896e75d5
--- /dev/null
+++ b/SerpentRace_Frontend/src/components/Buttons/ButtonDark.jsx
@@ -0,0 +1,20 @@
+// src/components/Inputs/InputBox.jsx
+// Gomb komponens
+
+import { motion } from "framer-motion"
+
+export default function Button({ text, type, onClick, width }) {
+ const widthClass = width ? width : "w-full"
+
+ return (
+
+ {text}
+
+ )
+}
diff --git a/SerpentRace_Frontend/src/components/Buttons/ButtonGreen.jsx b/SerpentRace_Frontend/src/components/Buttons/ButtonGreen.jsx
new file mode 100644
index 00000000..459348c6
--- /dev/null
+++ b/SerpentRace_Frontend/src/components/Buttons/ButtonGreen.jsx
@@ -0,0 +1,20 @@
+// src/components/Buttons/ButtonGreen.jsx
+// Zöld gomb komponens (ButtonGreen)
+
+import { motion } from "framer-motion"
+
+export default function ButtonGreen({ text, type, onClick, width }) {
+ const widthClass = width ? width : "w-full"
+
+ return (
+
+ {text}
+
+ )
+}
diff --git a/SerpentRace_Frontend/src/components/Footer/Footer.jsx b/SerpentRace_Frontend/src/components/Footer/Footer.jsx
new file mode 100644
index 00000000..b4ae7533
--- /dev/null
+++ b/SerpentRace_Frontend/src/components/Footer/Footer.jsx
@@ -0,0 +1,54 @@
+import React from "react"
+import Logo from "../../assets/pictures/Logo"
+
+const Footer = () => (
+
+)
+
+export default Footer
diff --git a/SerpentRace_Frontend/src/components/Inputs/InputBoxDark.jsx b/SerpentRace_Frontend/src/components/Inputs/InputBoxDark.jsx
new file mode 100644
index 00000000..4aa564f3
--- /dev/null
+++ b/SerpentRace_Frontend/src/components/Inputs/InputBoxDark.jsx
@@ -0,0 +1,16 @@
+// src/components/Inputs/InputBox.jsx
+// InputBox komponens
+
+export default function InputBox({ type, placeholder, value, onChange, width }) {
+ const widthClass = width ? width : "w-full"
+
+ return (
+
+ )
+}
diff --git a/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx b/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx
new file mode 100644
index 00000000..5b42dcb2
--- /dev/null
+++ b/SerpentRace_Frontend/src/components/Landingpage/LandingPage.jsx
@@ -0,0 +1,178 @@
+import React from "react"
+import SerpentRaceAnimation from "../../assets/SerpentRace_Animation/SerpentRace_Animation.jsx"
+import LogoCard from "../../assets/pictures/LogoCard.jsx"
+import logoImg from "../../assets/pictures/Logo.png"
+import ButtonGreen from "../Buttons/ButtonGreen.jsx"
+import { FaUsers, FaPaintBrush, FaHeadset } from "react-icons/fa"
+import { motion } from "framer-motion"
+
+const LandingPage = ({ onNavigateToPlay, onNavigateToAuth }) => {
+ return (
+
+ {/* Hero Section */}
+
+
+ {/* Animált logo és cím */}
+
+
+
+
+
+ A társasjáték, ami összeköt
+
+
+
+ A SerpentRace egy társasjáték, ahol új barátokra lelhetsz, közösséget építhetsz és tanulhatsz –
+ mindezt szórakozva!
+
+
+ WE ARE READY, ARE YOU?
+
+
+
+
+
+
+
+
+
+ {/* Features Section */}
+
+
+
+ Miért a SerpentRace a legjobb választás?
+
+
+
+ {/* Feature 1 */}
+
+
+
+
+ Közösségi élmény
+
+ Ismerkedj, nevess, tanulj! A SerpentRace összehozza a társaságot, legyen szó baráti
+ összejövetelről vagy csapatépítésről.
+
+
+
+ {/* Feature 2 */}
+
+
+
+
+ Személyre szabható
+
+ Kérdéskártyák, szabályok, design – minden a te igényeidhez igazítható, akár céges brandinggel
+ is!
+
+
+
+ {/* Feature 3 */}
+
+
+
+
+ Folyamatos támogatás
+
+ Gyors, segítőkész ügyfélszolgálat – ha bármilyen kérdésed vagy problémád van, mindig
+ számíthatsz ránk!
+
+
+
+
+
+
+ {/* Call to Action Section */}
+
+
+
+
+ Próbáld ki te is a SerpentRace-t!
+
+
+
+ Legyél részese egy új közösségi élménynek, vagy rendeld meg saját, személyre szabott
+ társasjátékodat – mi mindenben segítünk!
+
+
+
+
+
+
+
+ )
+}
+
+export default LandingPage
diff --git a/SerpentRace_Frontend/src/components/Landingpage/PlayMenu.jsx b/SerpentRace_Frontend/src/components/Landingpage/PlayMenu.jsx
new file mode 100644
index 00000000..81e65632
--- /dev/null
+++ b/SerpentRace_Frontend/src/components/Landingpage/PlayMenu.jsx
@@ -0,0 +1,77 @@
+import React, { useState } from "react"
+import LogoCard from "../../assets/pictures/LogoCard.jsx"
+import logoImg from "../../assets/pictures/Logo.png" // <-- EZT ADD HOZZÁ
+import ButtonDark from "../Buttons/ButtonDark.jsx"
+import InputBoxDark from "../Inputs/InputBoxDark.jsx"
+
+const PlayMenu = ({ onJoinGame, onCreateGame, user }) => {
+ const [joinCode, setJoinCode] = useState("")
+ const [error, setError] = useState("")
+
+ const handleJoin = () => {
+ if (!joinCode.trim()) {
+ setError("Add meg a játék kódját!")
+ return
+ }
+ setError("")
+ onJoinGame(joinCode)
+ }
+
+ const handleCreate = () => {
+ onCreateGame()
+ }
+
+ return (
+
+ {/* Bal oldali animáció/kép */}
+
+
+
+ {/* Jobb oldali panel */}
+
+
+
+
Csatlakozás játékhoz
+
+ setJoinCode(e.target.value)}
+ width="w-full"
+ />
+
+ {error &&
{error}
}
+
+
+
+
+ {user && (
+
+
Új játék létrehozása
+
+
+ )}
+
+
+
+ )
+}
+
+export default PlayMenu
diff --git a/SerpentRace_Frontend/src/components/Navbar/Navbar.jsx b/SerpentRace_Frontend/src/components/Navbar/Navbar.jsx
new file mode 100644
index 00000000..8928e6b1
--- /dev/null
+++ b/SerpentRace_Frontend/src/components/Navbar/Navbar.jsx
@@ -0,0 +1,87 @@
+import React, { useState } from "react"
+import Logo from "../../assets/pictures/Logo"
+
+const navLinkClass = "px-3 py-2 rounded-lg text-white transition-all duration-200 hover:bg-white/10"
+
+const Navbar = () => {
+ const [menuOpen, setMenuOpen] = useState(false)
+
+ return (
+
+
+
+ {/* Logo */}
+
+
+
+
+
+ SerpentRace
+
+
+ {/* Desktop Menu */}
+
+ {/* Mobile Hamburger */}
+
+
setMenuOpen(!menuOpen)}
+ className="text-white focus:outline-none"
+ aria-label="Toggle menu"
+ >
+
+ {menuOpen ? (
+
+ ) : (
+
+ )}
+
+
+
+
+
+ {/* Mobile Menu */}
+ {menuOpen && (
+
+ )}
+
+ )
+}
+
+export default Navbar
diff --git a/SerpentRace_Frontend/src/index.css b/SerpentRace_Frontend/src/index.css
index fbef2090..39b0929a 100644
--- a/SerpentRace_Frontend/src/index.css
+++ b/SerpentRace_Frontend/src/index.css
@@ -13,13 +13,17 @@
/* Gombok */
--color-button-primary: #5fa985;
- --color-button-hover: #4b7e65;
+ --color-button-primary-hover: #529174;
+ --color-button-secondary: #181d23;
+ --color-button-secondary-hover: #0d0d0f;
+ --color-button-green: #178a5b;
+ --color-button-green-hover: #14784d;
/* Funkcionális színek */
--color-primary: #5fa985;
--color-secondary: #8d8e83;
--color-accent: #0d0d0f;
-
+
/* Háttérszínek */
--color-background: #181d23;
--color-surface: #222d2f;
diff --git a/SerpentRace_Frontend/src/pages/Cards/Cards.jsx b/SerpentRace_Frontend/src/pages/Cards/Cards.jsx
new file mode 100644
index 00000000..e69de29b
diff --git a/SerpentRace_Frontend/src/pages/Home/Home.jsx b/SerpentRace_Frontend/src/pages/Home/Home.jsx
new file mode 100644
index 00000000..b3e0f001
--- /dev/null
+++ b/SerpentRace_Frontend/src/pages/Home/Home.jsx
@@ -0,0 +1,35 @@
+// src/pages/Home/Home.jsx
+// Régi PlayMenu-s oldal, "Home" néven
+
+import { useState } from "react"
+import Navbar from "../../components/Navbar/Navbar"
+import Footer from "../../components/Footer/Footer.jsx"
+import Background from "../../assets/backgrounds/Background.jsx"
+import PlayMenu from "../../components/Landingpage/PlayMenu.jsx"
+
+export default function Home() {
+ // Dummy callbackok és user példa
+ const handleJoinGame = (code) => {
+ alert(`Csatlakozás játékhoz: ${code}`)
+ }
+ const handleCreateGame = () => {
+ alert("Új játék létrehozása")
+ }
+ const user = { name: "Teszt Elek" }
+
+ return (
+
+
+
+
+
+
+
+
+
+ {/* Ide jöhetnek további szekciók, ha szeretnél még tartalmat */}
+
+
+
+ )
+}
diff --git a/SerpentRace_Frontend/src/pages/Landing/Home.jsx b/SerpentRace_Frontend/src/pages/Landing/Home.jsx
new file mode 100644
index 00000000..10afcc02
--- /dev/null
+++ b/SerpentRace_Frontend/src/pages/Landing/Home.jsx
@@ -0,0 +1,35 @@
+// src/pages/Home/Home.jsx
+// Régi PlayMenu-s oldal, "Home" néven
+
+import { useState } from "react"
+import Navbar from "../../components/Navbar/Navbar.jsx"
+import Footer from "../../components/Footer/Footer.jsx"
+import Background from "../../assets/backgrounds/Background.jsx"
+import PlayMenu from "../../components/Landingpage/PlayMenu.jsx"
+
+export default function Home() {
+ // Dummy callbackok és user példa
+ const handleJoinGame = (code) => {
+ alert(`Csatlakozás játékhoz: ${code}`)
+ }
+ const handleCreateGame = () => {
+ alert("Új játék létrehozása")
+ }
+ const user = { name: "Teszt Elek" }
+
+ return (
+
+
+
+
+
+
+
+
+
+ {/* Ide jöhetnek további szekciók, ha szeretnél még tartalmat */}
+
+
+
+ )
+}
diff --git a/SerpentRace_Frontend/src/pages/Landing/Landingpage.jsx b/SerpentRace_Frontend/src/pages/Landing/Landingpage.jsx
new file mode 100644
index 00000000..8488dbc2
--- /dev/null
+++ b/SerpentRace_Frontend/src/pages/Landing/Landingpage.jsx
@@ -0,0 +1,36 @@
+// src/pages/Landing/Landingpage.jsx
+// Főoldal - Landing Page
+
+import { useState } from "react"
+import Navbar from "../../components/Navbar/Navbar"
+import Footer from "../../components/Footer/Footer.jsx"
+import Background from "../../assets/backgrounds/Background.jsx"
+import LandingPage from "../../components/Landingpage/LandingPage.jsx"
+
+export default function LandingPageMain() {
+ // Navigációs callbackok
+ const handleNavigateToPlay = () => {
+ // Itt lehet navigálni a játék oldalra
+ alert("Navigáció a játék oldalra")
+ }
+
+ const handleNavigateToAuth = () => {
+ // Itt lehet navigálni a bejelentkezés oldalra
+ alert("Navigáció a bejelentkezés oldalra")
+ }
+
+ return (
+
+ )
+}
diff --git a/SerpentRace_Frontend/src/pages/Testing/Test.jsx b/SerpentRace_Frontend/src/pages/Testing/Test.jsx
index 8c8312f0..6ee3b4d4 100644
--- a/SerpentRace_Frontend/src/pages/Testing/Test.jsx
+++ b/SerpentRace_Frontend/src/pages/Testing/Test.jsx
@@ -1,55 +1,50 @@
// src/pages/Testing/Test.jsx
// itt tesztelhetjük a komponenseket illetve bármit
-import { useState } from "react";
-import Button from "../../components/Buttons/Button";
-import InputBox from "../../components/Inputs/InputBox";
-import PopUp from "../../components/PopUp/PopUp";
-import Logo from "../../assets/pictures/Logo.jsx";
+import { useState } from "react"
+import Button from "../../components/Buttons/Button"
+import InputBox from "../../components/Inputs/InputBox"
+import PopUp from "../../components/PopUp/PopUp"
+import Logo from "../../assets/pictures/Logo.jsx"
+import Navbar from "../../components/Navbar/Navbar"
+import Footer from "../../components/Footer/Footer.jsx"
export default function Test() {
- const [showPopup, setShowPopup] = useState(false);
- const [inputValue, setInputValue] = useState(""); // input értékének tárolása
+ const [showPopup, setShowPopup] = useState(false)
+ const [inputValue, setInputValue] = useState("") // input értékének tárolása
return (
-
-
setInputValue(e.target.value)}
- />
- setShowPopup(true)}
- />
- {showPopup && (
- setShowPopup(false)}>
-
- {/*
*/}
-
- Sikeres regisztráció!
-
-
- Kérjük, erősítsd meg az e-mail címedet!
- Egy megerősítő linket küldtünk az általad megadott e-mail címre
- {inputValue} .
-
-
- Ha nem kaptad meg a levelet, ellenőrizd a spam mappádat is!
-
-
setShowPopup(false)}
- />
-
-
- )}
+
+
+
+
setInputValue(e.target.value)}
+ />
+ setShowPopup(true)} />
+ {showPopup && (
+ setShowPopup(false)}>
+
+ {/*
*/}
+
Sikeres regisztráció!
+
+ Kérjük, erősítsd meg az e-mail címedet!
+
+ Egy megerősítő linket küldtünk az általad megadott e-mail címre
+ {inputValue} .
+
+
+ Ha nem kaptad meg a levelet, ellenőrizd a spam mappádat is!
+
+
setShowPopup(false)} />
+
+
+ )}
+
+
- );
+ )
}