diff --git a/package-lock.json b/package-lock.json index deeee0b..5b69aaa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,12 +13,15 @@ "react-dom": "^19.1.0", "react-icons": "^5.5.0", "react-router-dom": "^7.6.3", + "react-slick": "^0.30.3", + "slick-carousel": "^1.8.1", "tailwindcss": "^4.1.11" }, "devDependencies": { "@eslint/js": "^9.29.0", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", + "@types/react-slick": "^0.23.13", "@vitejs/plugin-react": "^4.5.2", "eslint": "^9.29.0", "eslint-plugin-react-hooks": "^5.2.0", @@ -1662,6 +1665,16 @@ "@types/react": "^19.0.0" } }, + "node_modules/@types/react-slick": { + "version": "0.23.13", + "resolved": "https://registry.npmjs.org/@types/react-slick/-/react-slick-0.23.13.tgz", + "integrity": "sha512-bNZfDhe/L8t5OQzIyhrRhBr/61pfBcWaYJoq6UDqFtv5LMwfg4NsVDD2J8N01JqdAdxLjOt66OZEp6PX+dGs/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.35.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.0.tgz", @@ -2137,6 +2150,12 @@ "node": ">=18" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2256,6 +2275,12 @@ "node": ">=10.13.0" } }, + "node_modules/enquire.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz", + "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==", + "license": "MIT" + }, "node_modules/esbuild": { "version": "0.25.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", @@ -2781,6 +2806,13 @@ "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "license": "MIT", + "peer": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2835,6 +2867,15 @@ "dev": true, "license": "MIT" }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "license": "MIT", + "dependencies": { + "string-convert": "^0.2.0" + } + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -3116,6 +3157,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -3503,6 +3550,29 @@ "react-dom": ">=18" } }, + "node_modules/react-slick": { + "version": "0.30.3", + "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.30.3.tgz", + "integrity": "sha512-B4x0L9GhkEWUMApeHxr/Ezp2NncpGc+5174R02j+zFiWuYboaq98vmxwlpafZfMjZic1bjdIqqmwLDcQY0QaFA==", + "license": "MIT", + "dependencies": { + "classnames": "^2.2.5", + "enquire.js": "^2.1.6", + "json2mq": "^0.2.0", + "lodash.debounce": "^4.0.8", + "resize-observer-polyfill": "^1.5.0" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "license": "MIT" + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3632,6 +3702,15 @@ "node": ">=8" } }, + "node_modules/slick-carousel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz", + "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==", + "license": "MIT", + "peerDependencies": { + "jquery": ">=1.8.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -3641,6 +3720,12 @@ "node": ">=0.10.0" } }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==", + "license": "MIT" + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", diff --git a/package.json b/package.json index 10982bd..9125b44 100644 --- a/package.json +++ b/package.json @@ -15,12 +15,15 @@ "react-dom": "^19.1.0", "react-icons": "^5.5.0", "react-router-dom": "^7.6.3", + "react-slick": "^0.30.3", + "slick-carousel": "^1.8.1", "tailwindcss": "^4.1.11" }, "devDependencies": { "@eslint/js": "^9.29.0", "@types/react": "^19.1.8", "@types/react-dom": "^19.1.6", + "@types/react-slick": "^0.23.13", "@vitejs/plugin-react": "^4.5.2", "eslint": "^9.29.0", "eslint-plugin-react-hooks": "^5.2.0", diff --git a/src/App.tsx b/src/App.tsx index 39ade64..b07fd68 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -7,32 +7,7 @@ import {BrowserRouter, Route, Routes} from 'react-router-dom'; import Feed from "./pages/Feed.tsx"; import DreamPage from "./pages/DreamPage.tsx"; import ProfilePage from "./pages/ProfilePage.tsx"; - -function Home() { - return ( -
-

Welcome to REMind

-

Your dreamy journey to better sleep and dream tracking

- -
-

Track Your Dreams

-

Record and analyze your dreams with our intuitive interface

- -
- -
-
-

Dream Journal

-

Keep track of all your dreams in one place

-
-
-

Sleep Analysis

-

Understand your sleep patterns better

-
-
-
- ); -} +import Home from "./pages/Home.tsx"; function Record() { return ( @@ -141,7 +116,12 @@ function Archive() { export default function App() { const [isLoading, setIsLoading] = useState(true); + const [isLoggedIn, setIsLoggedIn] = useState(localStorage.getItem('loggedIn') === 'true' || false); + const handleLogin = () => { + setIsLoggedIn(true); + localStorage.setItem('loggedIn', 'true'); + } const handleSplashFinished = () => { setIsLoading(false); }; @@ -156,10 +136,10 @@ export default function App() {
- +
- }/> + }/> }/> }/> }/> diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 8c78c60..2800934 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -1,30 +1,37 @@ import {NavLink} from 'react-router-dom'; import {FaArchive, FaHome, FaList, FaMicrophone, FaUser} from "react-icons/fa"; -export default function Navbar() { +interface NavbarProps { + isLoggedIn: boolean; +} + +export default function Navbar({isLoggedIn}: NavbarProps) { + if (!isLoggedIn && localStorage.getItem('loggedIn') !== 'true') return ( + <> + ) return (<> diff --git a/src/components/SplashScreen.tsx b/src/components/SplashScreen.tsx index 15cfc1c..ba9355e 100644 --- a/src/components/SplashScreen.tsx +++ b/src/components/SplashScreen.tsx @@ -1,31 +1,33 @@ -import { useEffect } from 'react'; +import {useEffect} from 'react'; import logo from '../assets/logo.svg'; import text from '../assets/text.svg'; interface SplashScreenProps { - onFinished: () => void; + onFinished: () => void; } -export default function SplashScreen({ onFinished }: SplashScreenProps) { - useEffect(() => { - // Simulate loading time with a timeout - const timer = setTimeout(() => { - onFinished(); - }, 2000); // Show splash screen for 2 seconds +export default function SplashScreen({onFinished}: SplashScreenProps) { + useEffect(() => { + // Simulate loading time with a timeout + const timer = setTimeout(() => { + onFinished(); + localStorage.setItem('loggedIn', 'false'); + }, 2000); // Show splash screen for 2 seconds - return () => clearTimeout(timer); - }, [onFinished]); + return () => clearTimeout(timer); + }, [onFinished]); - return ( -
-
- REMind Logo - REMind Text -
-
-
-

Loading your dreams...

-
-
- ); + return (
+
+ REMind Logo + REMind Text +

Träume analysieren, Gesellschaft verstehen

+
+
+
+

Loading your dreams...

+
+
); } \ No newline at end of file diff --git a/src/data/MockDreams.ts b/src/data/MockDreams.ts index 14542ea..42d42f3 100644 --- a/src/data/MockDreams.ts +++ b/src/data/MockDreams.ts @@ -63,7 +63,7 @@ export const mockDreams: Dream[] = [ ai: { interpretation: 'Der Spiegelgarten repräsentiert Selbsterkenntnis und Rückblick auf die eigene Vergangenheit. Jeder Spiegel steht für ein Fragment der Erinnerung, das entfernte Lachen deutet auf positive Prägungen und emotionale Verankerung hin.', image: '05.png', - audio: '05_1.mp3' + audio: '05.mp3' } }), ]; diff --git a/src/pages/DreamPage.tsx b/src/pages/DreamPage.tsx index 24e4798..c1db759 100644 --- a/src/pages/DreamPage.tsx +++ b/src/pages/DreamPage.tsx @@ -1,10 +1,13 @@ -// src/pages/DreamPage.tsx - import {type NavigateFunction, useNavigate, useParams} from 'react-router-dom'; import {mockDreams} from '../data/MockDreams'; import MockUsers from '../data/MockUsers'; import User from '../types/User'; import type Dream from "../types/Dream.ts"; +import {FaArrowLeft} from "react-icons/fa"; +import Slider from "react-slick"; + +import "slick-carousel/slick/slick.css"; +import "slick-carousel/slick/slick-theme.css"; export default function DreamPage() { const {id} = useParams<{ id: string }>(); @@ -18,23 +21,23 @@ export default function DreamPage() { -

Traum nicht gefunden.

+

Traum nicht gefunden.

); } return (
{/* Header */} -
+
{user && (
- Traum-Beschreibung + Traum-Beschreibung

{dream.input} @@ -74,35 +77,51 @@ export default function DreamPage() { {dream.ai?.interpretation && dream.ai.interpretation !== '' && (

- KI-Interpretation + KI-Interpretation

{dream.ai.interpretation}

)} - {dream.ai?.image && dream.ai.image !== '' && (
-
- KI-Bild -
-
- KI-generiertes Traumbild -
-
)} + + {dream.ai?.image && dream.ai.image !== '' && (
+
+ KI-Bild +
+
+ KI-generiertes Traumbild +
+
)} + + {dream.ai?.video && dream.ai.video !== '' && (
+
+ KI-Video +
+
+ +
+
)} +
{dream.ai?.audio && dream.ai.audio !== '' && (
- KI-Audio + KI-Audio
-
)} - {dream.ai?.video && dream.ai.video !== '' && (
-
- KI-Video -
-
- -
-
)} -

Details

-
+
Eingabetyp {dream.inputType} diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx new file mode 100644 index 0000000..a22f9f1 --- /dev/null +++ b/src/pages/Home.tsx @@ -0,0 +1,37 @@ +interface HomeProps { + isLoggedIn: boolean; + handleLogin: () => void; +} + +export default function Home({isLoggedIn, handleLogin}: HomeProps) { + + if (isLoggedIn) { + return (
+

Hallo Neo!

+
) + } + return (
+

Welcome to REMind

+

Your dreamy journey to better sleep and dream tracking

+ +
+

Track Your Dreams

+

Record and analyze your dreams with our intuitive interface

+ +
+ +
+
+

Dream Journal +

+

Keep track of all your dreams in one place

+
+
+

Sleep Analysis

+

Understand your sleep patterns better

+
+
+
); +} \ No newline at end of file diff --git a/src/pages/ProfilePage.tsx b/src/pages/ProfilePage.tsx index 110ec1f..3cd9ff4 100644 --- a/src/pages/ProfilePage.tsx +++ b/src/pages/ProfilePage.tsx @@ -12,7 +12,7 @@ const ProfilePage: React.FC = () => { const defaultStreakDays = 0; return ( -
+
{/* Profile Picture */}