Compare commits
4 Commits
b4b334609a
...
de51f5f409
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
de51f5f409 | ||
|
|
94b274b10d | ||
|
|
d6a92a79a3 | ||
|
|
f1860e0c8b |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -45,7 +45,6 @@ yarn-debug.log*
|
|||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
|
|
||||||
# Editor directories and files
|
# Editor directories and files
|
||||||
.vscode
|
|
||||||
.idea
|
.idea
|
||||||
*.suo
|
*.suo
|
||||||
*.ntvs*
|
*.ntvs*
|
||||||
|
|||||||
15
.vscode/launch.json
vendored
Normal file
15
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
// Launch configuration for starting the project in VSCode
|
||||||
|
// This will install dependencies before starting the dev server
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "node-terminal",
|
||||||
|
"name": "Start with API propxy to seedheads.de (Install Deps)",
|
||||||
|
"request": "launch",
|
||||||
|
"command": "npm run start:seedheads",
|
||||||
|
"preLaunchTask": "npm: install",
|
||||||
|
"cwd": "${workspaceFolder}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
14
LICENSE
Normal file
14
LICENSE
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
BSD Zero Clause License
|
||||||
|
|
||||||
|
Copyright (c) 2025 Growheads.de
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
PERFORMANCE OF THIS SOFTWARE.
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "0BSD",
|
||||||
"description": "",
|
"description": "",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emotion/react": "^11.14.0",
|
"@emotion/react": "^11.14.0",
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ const Batteriegesetzhinweise =
|
|||||||
const Widerrufsrecht = require("./src/pages/Widerrufsrecht.js").default;
|
const Widerrufsrecht = require("./src/pages/Widerrufsrecht.js").default;
|
||||||
const Sitemap = require("./src/pages/Sitemap.js").default;
|
const Sitemap = require("./src/pages/Sitemap.js").default;
|
||||||
const AGB = require("./src/pages/AGB.js").default;
|
const AGB = require("./src/pages/AGB.js").default;
|
||||||
|
const NotFound404 = require("./src/pages/NotFound404.js").default;
|
||||||
|
|
||||||
// Worker function for parallel product rendering
|
// Worker function for parallel product rendering
|
||||||
const renderProductWorker = async (productSeoNames, workerId, progressCallback) => {
|
const renderProductWorker = async (productSeoNames, workerId, progressCallback) => {
|
||||||
@@ -362,6 +363,7 @@ const renderApp = async (categoryData, socket) => {
|
|||||||
description: "Sitemap page",
|
description: "Sitemap page",
|
||||||
},
|
},
|
||||||
{ component: AGB, path: "/agb", filename: "agb", description: "AGB page" },
|
{ component: AGB, path: "/agb", filename: "agb", description: "AGB page" },
|
||||||
|
{ component: NotFound404, path: "/404", filename: "404", description: "404 Not Found page" },
|
||||||
{
|
{
|
||||||
component: PrerenderKonfigurator,
|
component: PrerenderKonfigurator,
|
||||||
path: "/Konfigurator",
|
path: "/Konfigurator",
|
||||||
|
|||||||
@@ -307,6 +307,7 @@ const generateXmlSitemap = (allCategories = [], allProducts = [], baseUrl) => {
|
|||||||
{ path: "/widerrufsrecht", changefreq: "monthly", priority: "0.3" },
|
{ path: "/widerrufsrecht", changefreq: "monthly", priority: "0.3" },
|
||||||
{ path: "/sitemap", changefreq: "weekly", priority: "0.5" },
|
{ path: "/sitemap", changefreq: "weekly", priority: "0.5" },
|
||||||
{ path: "/agb", changefreq: "monthly", priority: "0.3" },
|
{ path: "/agb", changefreq: "monthly", priority: "0.3" },
|
||||||
|
{ path: "/404", changefreq: "monthly", priority: "0.1" },
|
||||||
{ path: "/Konfigurator", changefreq: "weekly", priority: "0.8" },
|
{ path: "/Konfigurator", changefreq: "weekly", priority: "0.8" },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ const ServerLogsPage = lazy(() => import(/* webpackChunkName: "admin-logs" */ ".
|
|||||||
// Lazy load legal pages - rarely accessed
|
// Lazy load legal pages - rarely accessed
|
||||||
const Datenschutz = lazy(() => import(/* webpackChunkName: "legal" */ "./pages/Datenschutz.js"));
|
const Datenschutz = lazy(() => import(/* webpackChunkName: "legal" */ "./pages/Datenschutz.js"));
|
||||||
const AGB = lazy(() => import(/* webpackChunkName: "legal" */ "./pages/AGB.js"));
|
const AGB = lazy(() => import(/* webpackChunkName: "legal" */ "./pages/AGB.js"));
|
||||||
|
const NotFound404 = lazy(() => import(/* webpackChunkName: "legal" */ "./pages/NotFound404.js"));
|
||||||
const Sitemap = lazy(() => import(/* webpackChunkName: "sitemap" */ "./pages/Sitemap.js"));
|
const Sitemap = lazy(() => import(/* webpackChunkName: "sitemap" */ "./pages/Sitemap.js"));
|
||||||
const Impressum = lazy(() => import(/* webpackChunkName: "legal" */ "./pages/Impressum.js"));
|
const Impressum = lazy(() => import(/* webpackChunkName: "legal" */ "./pages/Impressum.js"));
|
||||||
const Batteriegesetzhinweise = lazy(() => import(/* webpackChunkName: "legal" */ "./pages/Batteriegesetzhinweise.js"));
|
const Batteriegesetzhinweise = lazy(() => import(/* webpackChunkName: "legal" */ "./pages/Batteriegesetzhinweise.js"));
|
||||||
@@ -232,6 +233,7 @@ const AppContent = ({ currentTheme, onThemeChange }) => {
|
|||||||
{/* Legal pages */}
|
{/* Legal pages */}
|
||||||
<Route path="/datenschutz" element={<Datenschutz />} />
|
<Route path="/datenschutz" element={<Datenschutz />} />
|
||||||
<Route path="/agb" element={<AGB />} />
|
<Route path="/agb" element={<AGB />} />
|
||||||
|
<Route path="/404" element={<NotFound404 />} />
|
||||||
<Route path="/sitemap" element={<Sitemap />} />
|
<Route path="/sitemap" element={<Sitemap />} />
|
||||||
<Route path="/impressum" element={<Impressum />} />
|
<Route path="/impressum" element={<Impressum />} />
|
||||||
<Route
|
<Route
|
||||||
|
|||||||
17
src/pages/NotFound404.js
Normal file
17
src/pages/NotFound404.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Typography } from '@mui/material';
|
||||||
|
import LegalPage from './LegalPage.js';
|
||||||
|
|
||||||
|
const NotFound404 = () => {
|
||||||
|
const content = (
|
||||||
|
<>
|
||||||
|
<Typography variant="body1" paragraph>
|
||||||
|
This page is no longer available.
|
||||||
|
</Typography>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
|
return <LegalPage title="Page Not Found" content={content} />;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default NotFound404;
|
||||||
Reference in New Issue
Block a user