From 47b89056b52780f300bd6e4a2911b1017bbac815 Mon Sep 17 00:00:00 2001 From: Chneemann Date: Mon, 3 Aug 2026 11:34:43 +0200 Subject: [PATCH] feat(layout): setup core layout structure with sidebar, header, navbar, brand, and theme tokens --- app/components/layout/Brand.tsx | 21 ++ app/components/layout/Header.tsx | 28 +++ app/components/layout/Navbar.tsx | 15 ++ app/components/layout/Sidebar.tsx | 13 ++ app/globals.css | 35 ++- app/layout.tsx | 57 ++--- app/page.tsx | 2 +- package-lock.json | 341 ++++++++++++++++-------------- package.json | 5 + public/logo.png | Bin 0 -> 8685 bytes 10 files changed, 310 insertions(+), 207 deletions(-) create mode 100644 app/components/layout/Brand.tsx create mode 100644 app/components/layout/Header.tsx create mode 100644 app/components/layout/Navbar.tsx create mode 100644 app/components/layout/Sidebar.tsx create mode 100644 public/logo.png diff --git a/app/components/layout/Brand.tsx b/app/components/layout/Brand.tsx new file mode 100644 index 0000000..0beedb2 --- /dev/null +++ b/app/components/layout/Brand.tsx @@ -0,0 +1,21 @@ +export default function BrandLogo() { + return ( +
+
+ Flowstate Logo +
+
+

+ Flowstate +

+

+ Workspace Edition +

+
+
+ ); +} diff --git a/app/components/layout/Header.tsx b/app/components/layout/Header.tsx new file mode 100644 index 0000000..0967ac1 --- /dev/null +++ b/app/components/layout/Header.tsx @@ -0,0 +1,28 @@ +import Brand from "./Brand"; +import Image from "next/image"; + +export default function Header() { + return ( +
+ {/* Brand Element */} +
+ +
+ {/* User Profil */} +
+
+ User Avatar +
+
+

Charlotte W.

+

Online

+
+
+
+ ); +} diff --git a/app/components/layout/Navbar.tsx b/app/components/layout/Navbar.tsx new file mode 100644 index 0000000..cdef0d3 --- /dev/null +++ b/app/components/layout/Navbar.tsx @@ -0,0 +1,15 @@ +export default function Navbar() { + return ( + <> + {/* Desktop Navigation */} + + + {/* Mobile Navigation */} + + + ); +} diff --git a/app/components/layout/Sidebar.tsx b/app/components/layout/Sidebar.tsx new file mode 100644 index 0000000..d1232e9 --- /dev/null +++ b/app/components/layout/Sidebar.tsx @@ -0,0 +1,13 @@ +import Brand from "./Brand"; +import Navbar from "./Navbar"; + +export default function Sidebar() { + return ( + + ); +} diff --git a/app/globals.css b/app/globals.css index a2dc41e..03d4ab5 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,26 +1,21 @@ @import "tailwindcss"; -:root { - --background: #ffffff; - --foreground: #171717; +@theme { + --color-background: hsl(0 0% 5%); + --color-foreground: hsl(0 0% 100%); + --color-muted: hsl(0 0% 63%); + --color-border: hsl(0 0% 15%); + + --font-sans: + system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, + Arial, sans-serif; } -@theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; +@layer base { + body { + @apply bg-background text-foreground font-sans antialiased; + font-size: 1rem; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } } - -body { - background: var(--background); - color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; -} diff --git a/app/layout.tsx b/app/layout.tsx index f9340e3..0d4d88b 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,41 +1,46 @@ import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; import "./globals.css"; - -// Load Google Fonts as CSS custom variables -const geistSans = Geist({ - variable: "--font-geist-sans", - subsets: ["latin"], - display: "swap", - preload: false, -}); - -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", - subsets: ["latin"], - display: "swap", - preload: false, -}); +import Sidebar from "./components/layout/Sidebar"; +import Header from "./components/layout/Header"; +import Navbar from "./components/layout/Navbar"; /** - * Global page metadata and branding icons + * Global page metadata */ export const metadata: Metadata = { - title: "Flowstate", - description: "Boost your productivity and enter the flow.", + title: "Flowstate - Modern Kanban", + description: "Dein High-Performance Workflow Dashboard", }; +/** + * Root application layout providing global shell UI + */ export default function RootLayout({ children, -}: Readonly<{ +}: { children: React.ReactNode; -}>) { +}) { return ( - - {children} + + + {/* Sidebar (Desktop only) */} +
+ +
+ + {/* Main Content Area */} +
+
+
+ {children} +
+ + {/* Mobile Navbar (Mobile only) */} +
+ +
+
+ ); } diff --git a/app/page.tsx b/app/page.tsx index 9a8ad0a..9d82a68 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -2,5 +2,5 @@ * Landing page */ export default function Home() { - return
; + return
Home
; } diff --git a/package-lock.json b/package-lock.json index 73a4997..619e575 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "flowstate", "version": "0.1.0", "dependencies": { + "lucide-react": "^1.28.0", "next": "16.2.12", "react": "19.2.4", "react-dom": "19.2.4" @@ -530,9 +531,9 @@ } }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", - "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.3.tgz", + "integrity": "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==", "cpu": [ "arm64" ], @@ -542,19 +543,19 @@ "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.4" + "@img/sharp-libvips-darwin-arm64": "1.3.2" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", - "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.3.tgz", + "integrity": "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==", "cpu": [ "x64" ], @@ -564,19 +565,38 @@ "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.4" + "@img/sharp-libvips-darwin-x64": "1.3.2" + } + }, + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.3.tgz", + "integrity": "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==", + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "dependencies": { + "@img/sharp-wasm32": "0.35.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", - "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.2.tgz", + "integrity": "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==", "cpu": [ "arm64" ], @@ -590,9 +610,9 @@ } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", - "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.2.tgz", + "integrity": "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==", "cpu": [ "x64" ], @@ -606,9 +626,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", - "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.2.tgz", + "integrity": "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==", "cpu": [ "arm" ], @@ -625,9 +645,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", - "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.2.tgz", + "integrity": "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==", "cpu": [ "arm64" ], @@ -644,9 +664,9 @@ } }, "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", - "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.2.tgz", + "integrity": "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==", "cpu": [ "ppc64" ], @@ -663,9 +683,9 @@ } }, "node_modules/@img/sharp-libvips-linux-riscv64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", - "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.2.tgz", + "integrity": "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==", "cpu": [ "riscv64" ], @@ -682,9 +702,9 @@ } }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", - "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.2.tgz", + "integrity": "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==", "cpu": [ "s390x" ], @@ -701,9 +721,9 @@ } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", - "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.2.tgz", + "integrity": "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==", "cpu": [ "x64" ], @@ -720,9 +740,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", - "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.2.tgz", + "integrity": "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==", "cpu": [ "arm64" ], @@ -739,9 +759,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", - "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.2.tgz", + "integrity": "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==", "cpu": [ "x64" ], @@ -758,9 +778,9 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", - "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.3.tgz", + "integrity": "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==", "cpu": [ "arm" ], @@ -773,19 +793,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.4" + "@img/sharp-libvips-linux-arm": "1.3.2" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", - "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.3.tgz", + "integrity": "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==", "cpu": [ "arm64" ], @@ -798,19 +818,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.4" + "@img/sharp-libvips-linux-arm64": "1.3.2" } }, "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", - "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.3.tgz", + "integrity": "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==", "cpu": [ "ppc64" ], @@ -823,19 +843,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.4" + "@img/sharp-libvips-linux-ppc64": "1.3.2" } }, "node_modules/@img/sharp-linux-riscv64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", - "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.3.tgz", + "integrity": "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==", "cpu": [ "riscv64" ], @@ -848,19 +868,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-riscv64": "1.2.4" + "@img/sharp-libvips-linux-riscv64": "1.3.2" } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", - "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.3.tgz", + "integrity": "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==", "cpu": [ "s390x" ], @@ -873,19 +893,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.4" + "@img/sharp-libvips-linux-s390x": "1.3.2" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", - "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.3.tgz", + "integrity": "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==", "cpu": [ "x64" ], @@ -898,19 +918,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.4" + "@img/sharp-libvips-linux-x64": "1.3.2" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", - "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.3.tgz", + "integrity": "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==", "cpu": [ "arm64" ], @@ -923,19 +943,19 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + "@img/sharp-libvips-linuxmusl-arm64": "1.3.2" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", - "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.3.tgz", + "integrity": "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==", "cpu": [ "x64" ], @@ -948,38 +968,54 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + "@img/sharp-libvips-linuxmusl-x64": "1.3.2" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", - "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", - "cpu": [ - "wasm32" - ], + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz", + "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==", "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.7.0" + "@emnapi/runtime": "^1.11.1" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.3.tgz", + "integrity": "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/sharp-wasm32": "0.35.3" + }, + "engines": { + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", - "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.3.tgz", + "integrity": "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==", "cpu": [ "arm64" ], @@ -989,16 +1025,16 @@ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", - "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.3.tgz", + "integrity": "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==", "cpu": [ "ia32" ], @@ -1008,16 +1044,16 @@ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", - "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.3.tgz", + "integrity": "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==", "cpu": [ "x64" ], @@ -1027,7 +1063,7 @@ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -5087,6 +5123,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.28.0.tgz", + "integrity": "sha512-fARAFJULsGuDDydjp6+6blekG/sBIM29TerzLjc9bQUKAcEfrSc4ZQKb25KRz4OMKd87cZTb5dgq0w/T6KufVg==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -5255,34 +5300,6 @@ } } }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, "node_modules/node-exports-info": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.2.tgz", @@ -5577,7 +5594,6 @@ "version": "8.5.25", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", - "dev": true, "funding": [ { "type": "opencollective", @@ -5927,48 +5943,53 @@ } }, "node_modules/sharp": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", - "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", - "hasInstallScript": true, + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.3.tgz", + "integrity": "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@img/colour": "^1.0.0", + "@img/colour": "^1.1.0", "detect-libc": "^2.1.2", - "semver": "^7.7.3" + "semver": "^7.8.5" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": ">=20.9.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.5", - "@img/sharp-darwin-x64": "0.34.5", - "@img/sharp-libvips-darwin-arm64": "1.2.4", - "@img/sharp-libvips-darwin-x64": "1.2.4", - "@img/sharp-libvips-linux-arm": "1.2.4", - "@img/sharp-libvips-linux-arm64": "1.2.4", - "@img/sharp-libvips-linux-ppc64": "1.2.4", - "@img/sharp-libvips-linux-riscv64": "1.2.4", - "@img/sharp-libvips-linux-s390x": "1.2.4", - "@img/sharp-libvips-linux-x64": "1.2.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", - "@img/sharp-libvips-linuxmusl-x64": "1.2.4", - "@img/sharp-linux-arm": "0.34.5", - "@img/sharp-linux-arm64": "0.34.5", - "@img/sharp-linux-ppc64": "0.34.5", - "@img/sharp-linux-riscv64": "0.34.5", - "@img/sharp-linux-s390x": "0.34.5", - "@img/sharp-linux-x64": "0.34.5", - "@img/sharp-linuxmusl-arm64": "0.34.5", - "@img/sharp-linuxmusl-x64": "0.34.5", - "@img/sharp-wasm32": "0.34.5", - "@img/sharp-win32-arm64": "0.34.5", - "@img/sharp-win32-ia32": "0.34.5", - "@img/sharp-win32-x64": "0.34.5" + "@img/sharp-darwin-arm64": "0.35.3", + "@img/sharp-darwin-x64": "0.35.3", + "@img/sharp-freebsd-wasm32": "0.35.3", + "@img/sharp-libvips-darwin-arm64": "1.3.2", + "@img/sharp-libvips-darwin-x64": "1.3.2", + "@img/sharp-libvips-linux-arm": "1.3.2", + "@img/sharp-libvips-linux-arm64": "1.3.2", + "@img/sharp-libvips-linux-ppc64": "1.3.2", + "@img/sharp-libvips-linux-riscv64": "1.3.2", + "@img/sharp-libvips-linux-s390x": "1.3.2", + "@img/sharp-libvips-linux-x64": "1.3.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.2", + "@img/sharp-libvips-linuxmusl-x64": "1.3.2", + "@img/sharp-linux-arm": "0.35.3", + "@img/sharp-linux-arm64": "0.35.3", + "@img/sharp-linux-ppc64": "0.35.3", + "@img/sharp-linux-riscv64": "0.35.3", + "@img/sharp-linux-s390x": "0.35.3", + "@img/sharp-linux-x64": "0.35.3", + "@img/sharp-linuxmusl-arm64": "0.35.3", + "@img/sharp-linuxmusl-x64": "0.35.3", + "@img/sharp-webcontainers-wasm32": "0.35.3", + "@img/sharp-win32-arm64": "0.35.3", + "@img/sharp-win32-ia32": "0.35.3", + "@img/sharp-win32-x64": "0.35.3" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/sharp/node_modules/semver": { diff --git a/package.json b/package.json index aabe8b2..a28e00f 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "lint": "eslint" }, "dependencies": { + "lucide-react": "^1.28.0", "next": "16.2.12", "react": "19.2.4", "react-dom": "19.2.4" @@ -22,5 +23,9 @@ "eslint-config-next": "16.2.12", "tailwindcss": "^4", "typescript": "^5" + }, + "overrides": { + "postcss": "^8.5.18", + "sharp": "^0.35.0" } } diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a0f1f557b4e5aa001f3ba13c7812e3ced52e0229 GIT binary patch literal 8685 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 Lq^VdXZyEkSX_sQu literal 0 HcmV?d00001