From 0770ff499b790dddf6015bf5dabd4f04678c9db3 Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Wed, 11 Mar 2026 10:03:21 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20Add=20LEVIS=20Holzbau=20=E2=80=94=20Kin?= =?UTF-8?q?der-Holzwerk-Website=20(Port=203013)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neue statische Website fuer Kinder (6-12 Jahre) mit 8 Holzprojekten, SVG-Illustrationen, Sicherheitshinweisen und kindgerechtem Design. Next.js 15 + Tailwind + Framer Motion. Co-Authored-By: Claude Opus 4.6 --- docker-compose.yml | 17 + levis-holzbau/.dockerignore | 5 + levis-holzbau/Dockerfile | 26 + levis-holzbau/app/globals.css | 25 + levis-holzbau/app/layout.tsx | 21 + levis-holzbau/app/page.tsx | 71 + levis-holzbau/app/projekte/[slug]/page.tsx | 120 + levis-holzbau/app/projekte/page.tsx | 59 + levis-holzbau/app/sicherheit/page.tsx | 101 + levis-holzbau/app/ueber/page.tsx | 83 + levis-holzbau/components/AgeBadge.tsx | 7 + levis-holzbau/components/DifficultyBadge.tsx | 15 + levis-holzbau/components/Footer.tsx | 17 + levis-holzbau/components/HeroSection.tsx | 95 + levis-holzbau/components/Logo.tsx | 35 + levis-holzbau/components/Navbar.tsx | 44 + levis-holzbau/components/ProjectCard.tsx | 42 + .../components/ProjectIllustration.tsx | 132 ++ levis-holzbau/components/SafetyTip.tsx | 10 + levis-holzbau/components/StepCard.tsx | 15 + levis-holzbau/components/ToolIcon.tsx | 14 + levis-holzbau/lib/animations.ts | 15 + levis-holzbau/lib/projects.ts | 214 ++ levis-holzbau/lib/types.ts | 18 + levis-holzbau/next-env.d.ts | 6 + levis-holzbau/next.config.js | 6 + levis-holzbau/package-lock.json | 2017 +++++++++++++++++ levis-holzbau/package.json | 25 + levis-holzbau/postcss.config.mjs | 8 + levis-holzbau/tailwind.config.ts | 26 + levis-holzbau/tsconfig.json | 40 + 31 files changed, 3329 insertions(+) create mode 100644 levis-holzbau/.dockerignore create mode 100644 levis-holzbau/Dockerfile create mode 100644 levis-holzbau/app/globals.css create mode 100644 levis-holzbau/app/layout.tsx create mode 100644 levis-holzbau/app/page.tsx create mode 100644 levis-holzbau/app/projekte/[slug]/page.tsx create mode 100644 levis-holzbau/app/projekte/page.tsx create mode 100644 levis-holzbau/app/sicherheit/page.tsx create mode 100644 levis-holzbau/app/ueber/page.tsx create mode 100644 levis-holzbau/components/AgeBadge.tsx create mode 100644 levis-holzbau/components/DifficultyBadge.tsx create mode 100644 levis-holzbau/components/Footer.tsx create mode 100644 levis-holzbau/components/HeroSection.tsx create mode 100644 levis-holzbau/components/Logo.tsx create mode 100644 levis-holzbau/components/Navbar.tsx create mode 100644 levis-holzbau/components/ProjectCard.tsx create mode 100644 levis-holzbau/components/ProjectIllustration.tsx create mode 100644 levis-holzbau/components/SafetyTip.tsx create mode 100644 levis-holzbau/components/StepCard.tsx create mode 100644 levis-holzbau/components/ToolIcon.tsx create mode 100644 levis-holzbau/lib/animations.ts create mode 100644 levis-holzbau/lib/projects.ts create mode 100644 levis-holzbau/lib/types.ts create mode 100644 levis-holzbau/next-env.d.ts create mode 100644 levis-holzbau/next.config.js create mode 100644 levis-holzbau/package-lock.json create mode 100644 levis-holzbau/package.json create mode 100644 levis-holzbau/postcss.config.mjs create mode 100644 levis-holzbau/tailwind.config.ts create mode 100644 levis-holzbau/tsconfig.json diff --git a/docker-compose.yml b/docker-compose.yml index b78de2a..32e4866 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -843,3 +843,20 @@ services: restart: unless-stopped networks: - breakpilot-network + + # ========================================================= + # LEVIS HOLZBAU - Kinder-Holzwerk-Website + # ========================================================= + levis-holzbau: + build: + context: ./levis-holzbau + dockerfile: Dockerfile + container_name: bp-core-levis-holzbau + platform: linux/arm64 + ports: + - "3013:3000" + environment: + NODE_ENV: production + restart: unless-stopped + networks: + - breakpilot-network diff --git a/levis-holzbau/.dockerignore b/levis-holzbau/.dockerignore new file mode 100644 index 0000000..79a303d --- /dev/null +++ b/levis-holzbau/.dockerignore @@ -0,0 +1,5 @@ +node_modules +.next +.git +Dockerfile +.dockerignore diff --git a/levis-holzbau/Dockerfile b/levis-holzbau/Dockerfile new file mode 100644 index 0000000..7a7dce2 --- /dev/null +++ b/levis-holzbau/Dockerfile @@ -0,0 +1,26 @@ +FROM node:20-alpine AS base + +FROM base AS deps +WORKDIR /app +COPY package.json package-lock.json* ./ +RUN npm ci + +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . +RUN npm run build + +FROM base AS runner +WORKDIR /app +ENV NODE_ENV=production +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs +COPY --from=builder /app/public ./public +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static +USER nextjs +EXPOSE 3000 +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" +CMD ["node", "server.js"] diff --git a/levis-holzbau/app/globals.css b/levis-holzbau/app/globals.css new file mode 100644 index 0000000..8942b39 --- /dev/null +++ b/levis-holzbau/app/globals.css @@ -0,0 +1,25 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@import url('https://fonts.googleapis.com/css2?family=Quicksand:wght@500;600;700&family=Nunito:wght@400;600;700&display=swap'); + +html { + scroll-behavior: smooth; +} + +body { + font-family: 'Nunito', sans-serif; + background-color: #FDF8F0; + color: #2C2C2C; +} + +h1, h2, h3, h4, h5, h6 { + font-family: 'Quicksand', sans-serif; +} + +@layer utilities { + .text-balance { + text-wrap: balance; + } +} diff --git a/levis-holzbau/app/layout.tsx b/levis-holzbau/app/layout.tsx new file mode 100644 index 0000000..6049bf2 --- /dev/null +++ b/levis-holzbau/app/layout.tsx @@ -0,0 +1,21 @@ +import type { Metadata } from 'next' +import './globals.css' +import { Navbar } from '@/components/Navbar' +import { Footer } from '@/components/Footer' + +export const metadata: Metadata = { + title: 'LEVIS Holzbau — Kinder-Holzwerkstatt', + description: 'Lerne Holzfiguren schnitzen und kleine Holzprojekte bauen! Kindgerechte Anleitungen fuer junge Holzwerker.', +} + +export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + + + +
{children}
+