From 40f266f8da809f12eaa4a68302a2a387e7ee5684 Mon Sep 17 00:00:00 2001 From: Thatsaphorn Atchariyaphap Date: Sun, 13 Apr 2025 20:12:11 +0000 Subject: [PATCH] Merge branch 'dev' into 'production' Merge dev into production See merge request rheinsw/website!27 --- .gitlab-ci.yml | 4 +- Dockerfile | 6 +- app/{ => (root)}/favicon.ico | Bin app/(root)/layout.tsx | 35 + app/(root)/page.tsx | 12 + app/contact/layout.tsx | 35 + app/contact/page.tsx | 12 + app/globals.css | 58 +- app/layout.tsx | 34 - app/legal/imprint/page.tsx | 12 + app/legal/layout.tsx | 35 + app/legal/page.tsx | 10 + app/legal/privacy/page.tsx | 12 + app/legal/revocation/page.tsx | 12 + app/legal/terms-of-use/page.tsx | 12 + app/page.tsx | 103 -- app/services/layout.tsx | 35 + app/services/page.tsx | 12 + components/Contact/Contact.tsx | 100 ++ components/Footer/Footer.tsx | 97 ++ components/Helper/SectionDivider.tsx | 24 + components/Helper/SmallHero.tsx | 40 + components/Helper/Theme.ts | 18 + components/Helper/ThemeColors.ts | 28 + components/Home/About/About.tsx | 82 ++ components/Home/Contact/ContactCTA.tsx | 57 + components/Home/Hero/Hero.tsx | 100 ++ components/Home/Home.tsx | 27 + components/Home/HomeServices.tsx | 115 ++ components/Home/Offer/FullStack.tsx | 75 ++ components/Home/Offer/ManagedServices.tsx | 57 + components/Home/Offer/Offer.tsx | 28 + components/Home/TechStack.tsx | 150 +++ components/Legal/ImprintComp.tsx | 99 ++ components/Legal/PrivacyComp.tsx | 99 ++ components/Legal/RevocationComp.tsx | 98 ++ components/Legal/TermsOfUseComp.tsx | 99 ++ components/Navbar/DesktopNav.tsx | 114 ++ components/Navbar/MobileNav.tsx | 62 + components/Navbar/Nav.tsx | 24 + components/provider/ThemeProvider.tsx | 54 + constant/Constant.ts | 17 + package-lock.json | 1478 +++++++++++++++++++-- package.json | 23 +- postcss.config.mjs | 5 +- public/file.svg | 1 - public/globe.svg | 1 - public/images/About_Picture.png | Bin 0 -> 1918715 bytes public/images/contact.png | Bin 0 -> 2321721 bytes public/images/dart_logo.png | Bin 0 -> 16252 bytes public/images/flutter_logo.png | Bin 0 -> 3333 bytes public/images/hero.png | Bin 0 -> 1027469 bytes public/images/home_hero.jpg | Bin 0 -> 1806666 bytes public/images/java_logo.png | Bin 0 -> 144520 bytes public/images/nextjs_logo.png | Bin 0 -> 11079 bytes public/images/software_dev.jpg | Bin 0 -> 226534 bytes public/images/svg/bootstrap.svg | 10 + public/images/svg/css.svg | 6 + public/images/svg/dart.svg | 18 + public/images/svg/debian.svg | 4 + public/images/svg/docker.svg | 2 + public/images/svg/flutter.svg | 24 + public/images/svg/gitlab-ci.svg | 20 + public/images/svg/gitlab.svg | 2 + public/images/svg/html.svg | 6 + public/images/svg/java.svg | 11 + public/images/svg/kotlin.svg | 2 + public/images/svg/macos.svg | 8 + public/images/svg/nextjs.svg | 4 + public/images/svg/outline.svg | 1 + public/images/svg/proxmox.svg | 5 + public/images/svg/spring.svg | 8 + public/images/svg/typescript.svg | 2 + public/images/svg/ubuntu.svg | 5 + public/next.svg | 1 - public/vercel.svg | 1 - public/window.svg | 1 - tailwind.config.ts | 11 + tsconfig.json | 2 + 79 files changed, 3477 insertions(+), 288 deletions(-) rename app/{ => (root)}/favicon.ico (100%) create mode 100644 app/(root)/layout.tsx create mode 100644 app/(root)/page.tsx create mode 100644 app/contact/layout.tsx create mode 100644 app/contact/page.tsx delete mode 100644 app/layout.tsx create mode 100644 app/legal/imprint/page.tsx create mode 100644 app/legal/layout.tsx create mode 100644 app/legal/page.tsx create mode 100644 app/legal/privacy/page.tsx create mode 100644 app/legal/revocation/page.tsx create mode 100644 app/legal/terms-of-use/page.tsx delete mode 100644 app/page.tsx create mode 100644 app/services/layout.tsx create mode 100644 app/services/page.tsx create mode 100644 components/Contact/Contact.tsx create mode 100644 components/Footer/Footer.tsx create mode 100644 components/Helper/SectionDivider.tsx create mode 100644 components/Helper/SmallHero.tsx create mode 100644 components/Helper/Theme.ts create mode 100644 components/Helper/ThemeColors.ts create mode 100644 components/Home/About/About.tsx create mode 100644 components/Home/Contact/ContactCTA.tsx create mode 100644 components/Home/Hero/Hero.tsx create mode 100644 components/Home/Home.tsx create mode 100644 components/Home/HomeServices.tsx create mode 100644 components/Home/Offer/FullStack.tsx create mode 100644 components/Home/Offer/ManagedServices.tsx create mode 100644 components/Home/Offer/Offer.tsx create mode 100644 components/Home/TechStack.tsx create mode 100644 components/Legal/ImprintComp.tsx create mode 100644 components/Legal/PrivacyComp.tsx create mode 100644 components/Legal/RevocationComp.tsx create mode 100644 components/Legal/TermsOfUseComp.tsx create mode 100644 components/Navbar/DesktopNav.tsx create mode 100644 components/Navbar/MobileNav.tsx create mode 100644 components/Navbar/Nav.tsx create mode 100644 components/provider/ThemeProvider.tsx create mode 100644 constant/Constant.ts delete mode 100644 public/file.svg delete mode 100644 public/globe.svg create mode 100644 public/images/About_Picture.png create mode 100644 public/images/contact.png create mode 100644 public/images/dart_logo.png create mode 100644 public/images/flutter_logo.png create mode 100644 public/images/hero.png create mode 100644 public/images/home_hero.jpg create mode 100644 public/images/java_logo.png create mode 100644 public/images/nextjs_logo.png create mode 100644 public/images/software_dev.jpg create mode 100644 public/images/svg/bootstrap.svg create mode 100644 public/images/svg/css.svg create mode 100644 public/images/svg/dart.svg create mode 100644 public/images/svg/debian.svg create mode 100644 public/images/svg/docker.svg create mode 100644 public/images/svg/flutter.svg create mode 100644 public/images/svg/gitlab-ci.svg create mode 100644 public/images/svg/gitlab.svg create mode 100644 public/images/svg/html.svg create mode 100644 public/images/svg/java.svg create mode 100644 public/images/svg/kotlin.svg create mode 100644 public/images/svg/macos.svg create mode 100644 public/images/svg/nextjs.svg create mode 100644 public/images/svg/outline.svg create mode 100644 public/images/svg/proxmox.svg create mode 100644 public/images/svg/spring.svg create mode 100644 public/images/svg/typescript.svg create mode 100644 public/images/svg/ubuntu.svg delete mode 100644 public/next.svg delete mode 100644 public/vercel.svg delete mode 100644 public/window.svg create mode 100644 tailwind.config.ts diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d1c277d..589e155 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: node:20@sha256:735b1ba7e4550c415f98568efbf527e3f75828ac4f10692e490ca78e11d89f6e +image: node:22@sha256:f6b9c31ace05502dd98ef777aaa20464362435dcc5e312b0e213121dcf7d8b95 workflow: rules: @@ -17,7 +17,7 @@ cache: key: ${CI_COMMIT_REF_SLUG} paths: - node_modules/ - policy: pull + - .next/cache/ variables: NEXT_PUBLIC_ENV: "production" diff --git a/Dockerfile b/Dockerfile index 9c017d9..f89869b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Use lightweight Node.js 20 base image -FROM node:20-alpine as builder +FROM node:20-alpine@sha256:9bef0ef1e268f60627da9ba7d7605e8831d5b56ad07487d24d1aa386336d1944 as builder # Set working directory WORKDIR /app @@ -8,7 +8,7 @@ WORKDIR /app COPY package.json package-lock.json ./ # Install dependencies -RUN npm install +RUN npm ci # Copy entire project COPY . . @@ -17,7 +17,7 @@ COPY . . RUN npm run build # Use a minimal base image for running the app -FROM node:20-alpine +FROM node:20-alpine@sha256:9bef0ef1e268f60627da9ba7d7605e8831d5b56ad07487d24d1aa386336d1944 WORKDIR /app diff --git a/app/favicon.ico b/app/(root)/favicon.ico similarity index 100% rename from app/favicon.ico rename to app/(root)/favicon.ico diff --git a/app/(root)/layout.tsx b/app/(root)/layout.tsx new file mode 100644 index 0000000..4a3ccb9 --- /dev/null +++ b/app/(root)/layout.tsx @@ -0,0 +1,35 @@ +import type {Metadata} from "next"; +import "../globals.css"; + +import Nav from "@/components/Navbar/Nav"; +import Footer from "@/components/Footer/Footer"; +import {ThemeProvider} from "@/components/provider/ThemeProvider"; +import React from "react"; +import {cookies} from "next/headers"; + +export const metadata: Metadata = { + title: "Rhein Software", + description: "Rhein Software Development", +}; + +export default async function RootLayout({ + children, + }: Readonly<{ + children: React.ReactNode; +}>) { + const cookieStore = await cookies(); + const theme = cookieStore.get("theme")?.value === "dark" ? "dark" : "light"; + + return ( + + + + +