From 7b115e8202cf34a51416cb8137f24a5b639f70af Mon Sep 17 00:00:00 2001 From: Mike Karl Date: Sat, 7 Feb 2026 13:42:12 +0100 Subject: [PATCH] Take 2: background --- app/components/badge.tsx | 32 ----- app/components/button.tsx | 37 ------ app/components/card.tsx | 64 ---------- app/components/index.ts | 4 - app/components/section.tsx | 51 -------- app/favicon.ico | Bin 15406 -> 0 bytes app/footbar.tsx | 91 --------------- app/globals.css | 56 ++++----- app/layout.tsx | 15 +-- app/navbar.tsx | 85 -------------- app/page.tsx | 234 +------------------------------------ 11 files changed, 35 insertions(+), 634 deletions(-) delete mode 100644 app/components/badge.tsx delete mode 100644 app/components/button.tsx delete mode 100644 app/components/card.tsx delete mode 100644 app/components/index.ts delete mode 100644 app/components/section.tsx delete mode 100644 app/favicon.ico delete mode 100644 app/footbar.tsx delete mode 100644 app/navbar.tsx diff --git a/app/components/badge.tsx b/app/components/badge.tsx deleted file mode 100644 index 3b241c0..0000000 --- a/app/components/badge.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { ReactNode } from 'react'; - -interface BadgeProps { - children: ReactNode; - variant?: 'gray' | 'green' | 'yellow' | 'red' | 'blue' | 'glass'; - border?: boolean; -} - -export default function Badge({ - children, - variant = 'gray', - border = false, -}: BadgeProps) { - const baseClasses = "rounded-full px-2 py-0.5 text-sm"; - - const variantClasses = { - gray: "bg-gray-700/50 text-gray-300 border-gray-600/50", - green: "bg-green-500/20 text-green-400 border-green-500/30", - yellow: "bg-yellow-500/20 text-yellow-400 border-yellow-500/30", - red: "bg-red-500/20 text-red-400 border-red-500/30", - blue: "bg-blue-500/20 text-blue-400 border-blue-500/30", - glass: "bg-white/10 text-white border-white/20 backdrop-blur-sm" - }; - - return ( - - {children} - - ); -} diff --git a/app/components/button.tsx b/app/components/button.tsx deleted file mode 100644 index 98a2a95..0000000 --- a/app/components/button.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { ReactNode, ButtonHTMLAttributes } from 'react'; - -interface ButtonProps extends ButtonHTMLAttributes { - children: ReactNode; - variant?: 'primary' | 'secondary' | 'ghost' | 'outline' | 'glass'; - size?: 'sm' | 'md' | 'lg'; -} - -export default function Button({ - children, - variant = 'primary', - size = 'md', -}: ButtonProps) { - const baseClasses = "cursor-pointer font-medium rounded-lg transition-all duration-300 ease-out disabled:opacity-50 disabled:cursor-not-allowed"; - - const sizeClasses = { - sm: "px-3 py-1.5 text-sm", - md: "px-4 py-2 text-base", - lg: "px-6 py-3 text-lg" - }; - - const variantClasses = { - primary: "bg-blue-600 hover:bg-blue-700 text-white shadow-lg hover:shadow-xl hover:shadow-blue-500/25 hover:scale-105 focus:ring-blue-500", - secondary: "bg-gray-700 hover:bg-gray-600 text-white shadow-lg hover:shadow-xl hover:shadow-gray-500/25 hover:scale-105 focus:ring-gray-500", - ghost: "bg-transparent hover:bg-gray-800/50 text-gray-300 hover:text-white hover:scale-105 focus:ring-gray-500", - outline: "border-2 border-gray-600 hover:border-blue-500 bg-transparent text-gray-300 hover:text-white hover:bg-blue-500/10 hover:scale-105 focus:ring-blue-500", - glass: "bg-white/10 hover:bg-white/20 text-white border border-white/20 hover:border-white/30 backdrop-blur-sm hover:scale-105 focus:ring-white/50" - }; - - return ( - - ); -} diff --git a/app/components/card.tsx b/app/components/card.tsx deleted file mode 100644 index 9b0986f..0000000 --- a/app/components/card.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { ReactNode } from 'react'; - -interface CardProps { - children: ReactNode; - variant?: 'default' | 'glass' | 'outlined'; - hoverable?: boolean; -} - -export default function Card({ - children, - variant = 'default', -}: CardProps) { - const baseClasses = "relative overflow-hidden rounded-xl transition-all duration-300 ease-out"; - - const variantClasses = { - default: "bg-gradient-to-br bg-gradient-to-br from-stone-800 via-stone-900 to-stone-800 border border-stone-700", - glass: "bg-gradient-to-br bg-gradient-to-br from-white/5 via-white/10 to-white/5 border border-white/10 backdrop-blur-sm", - outlined: "bg-transparent border-2 border-stone-700/50" - }; - - return ( -
- {children} -
- ); -} - -interface CardHeaderProps { - children: ReactNode; -} - -export function CardHeader({ children }: CardHeaderProps) { - return ( -
- {children} -
- ); -} - -interface CardContentProps { - children: ReactNode; -} - -export function CardContent({ children }: CardContentProps) { - return ( -
- {children} -
- ); -} - -interface CardFooterProps { - children: ReactNode; -} - -export function CardFooter({ children }: CardFooterProps) { - return ( -
- {children} -
- ); -} diff --git a/app/components/index.ts b/app/components/index.ts deleted file mode 100644 index 5c2f5b2..0000000 --- a/app/components/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { default as Card, CardHeader, CardContent, CardFooter } from './card'; -export { default as Button } from './button'; -export { default as Badge } from './badge'; -export { default as Section } from './section'; diff --git a/app/components/section.tsx b/app/components/section.tsx deleted file mode 100644 index 45e512d..0000000 --- a/app/components/section.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { ReactNode } from 'react'; - -interface SectionProps { - children?: ReactNode; - title?: string; - subtitle?: string; - className?: string; - variant?: 'default' | 'hero' | 'minimal'; -} - -export default function Section({ - children, - title, - subtitle, - className = '', - variant = 'default' -}: SectionProps) { - const baseClasses = "relative py-16 lg:py-24"; - - const variantClasses = { - default: "bg-stone-900", - hero: "polka pt-32 lg:pt-40", - minimal: "bg-transparent" - }; - - return ( -
-
- {(title || subtitle) && ( -
- {title && ( -

- {title} -

- )} - {subtitle && ( -

- {subtitle} -

- )} -
- )} -
- {children} -
-
-
- ); -} diff --git a/app/favicon.ico b/app/favicon.ico deleted file mode 100644 index 8675a30e07da048b572bb8734807e24e62934f5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 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 -
- {/* Brand Section */} -
-
-
- MK -
-
-

Mike Karl

-

Web und Systementwickler

-
-
-

- Leidenschaftlicher Entwickler, stets auf der Suche nach neuen Möglichkeiten. -

-

- Always learning, always building. -

-
- - {/* Quick Links */} -
-

Quick Links

-
    - {quickLinks.map((link) => ( -
  • - - {link.name} - -
  • - ))} -
-
- - {/* Social Links */} -
-

Kontakt

-
- {socialLinks.map((social) => ( - -
- { /* Icon */ } -
- {social.name} -
- ))} -
-
-
- - {/* Bottom Section */} -
-

© {currentYear} Mike Karl. All rights reserved.

-

Built with Next.js and Tailwind CSS

-
- - ); -} diff --git a/app/globals.css b/app/globals.css index 1a02737..2ec666d 100644 --- a/app/globals.css +++ b/app/globals.css @@ -5,6 +5,13 @@ box-sizing: border-box; } +:root{ + --primary-col: #fff; + --secondary-col: #000; + --tertiary-col-1: #c50022; + --tertiary-col-2: #6d001a; +} + html { scroll-behavior: smooth; } @@ -12,37 +19,32 @@ html { body { min-height: 100vh; font-family: "Space Grotesk", sans-serif; - background-color: #292524; } -.polka{ - overflow: hidden; - will-change: transform; +.bg{ + background: var(--tertiary-col-2); } -.polka::before{ - content: ""; - position: absolute; - width: 200%; - height: 200%; - top: -50%; - left: -50%; - z-index: -1; - background-image: radial-gradient(#0c0a09b5 20%, #292524 22%); - background-size: 80px 80px; - animation-name: background_keyframes; - animation-duration: 10s; - animation-iteration-count: infinite; - animation-timing-function: linear; - transform: rotate(35deg) scale(2); - contain: paint; +.bg1{ + background: #000; + background: linear-gradient(45deg, rgba(0, 0, 0, 1) 0%, rgba(245, 0, 41, 1) 100%); + width: 1000; + height: 1000; + position: fixed; + top:-500; + right: 50vw; + border-radius: 50%; + z-index: -999; } -@keyframes background_keyframes { - 0%{ - background-position: 0px 0px; - } - 100%{ - background-position: 160px 80px; - } +.bg2{ + background: #6D001A; + background: linear-gradient(-45deg, rgba(0, 0, 0, 1) 0%, rgba(245, 0, 41, 1) 100%); + width: 1000; + height: 1000; + position: fixed; + bottom: -500; + left: 50vw; + border-radius: 50%; + z-index: -999; } \ No newline at end of file diff --git a/app/layout.tsx b/app/layout.tsx index 211df92..44e877f 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,11 +1,8 @@ import type { Metadata } from "next"; import "./globals.css"; -import Navbar from "./navbar"; -import FootBar from "./footbar"; export const metadata: Metadata = { - title: "Welcome - Mike Karl", - description: "Personal website of Mike Karl", + title: "Portfolio - Mike Karl", }; export default function RootLayout({ @@ -14,13 +11,11 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - - - + + +
+
{children} - ); diff --git a/app/navbar.tsx b/app/navbar.tsx deleted file mode 100644 index bc52312..0000000 --- a/app/navbar.tsx +++ /dev/null @@ -1,85 +0,0 @@ -'use client'; - -import Link from "next/link"; -import { useState } from "react"; -import { Button } from "./components"; - -export default function Navbar() { - const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); - - const navItems = [ - { href: "/cv", label: "Lebenslauf" }, - { href: "/portfolio", label: "Portfolio" }, - { href: "/contact", label: "Kontakt" } - ]; - - return ( - - ); -} \ No newline at end of file diff --git a/app/page.tsx b/app/page.tsx index 1042a1b..bf2c07e 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,238 +1,6 @@ -import { Section, Card, CardHeader, CardContent, CardFooter, Button, Badge } from "./components"; - export default function Home() { return ( -
- {/* Hero Section */} -
-
- - -

Über mich

-
- -

- Lorem ipsum dolor sit amet consectetur adipisicing elit. Ut ex, labore deleniti fuga repellendus maiores rerum, voluptates dicta accusamus nihil quibusdam dolorum dolor illo et corrupti doloremque velit itaque repudiandae! -

-
-
- - - -

Aktuelle Beschäftigung

-
- -

- Lorem ipsum dolor sit amet consectetur adipisicing elit. Facere similique iusto beatae minima ea. Explicabo voluptatem itaque unde sequi, aperiam, dicta nulla nobis maiores, debitis aliquam corrupti quam earum dolor! -

-
- - - -

Erfahrung

-
- -

- Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi distinctio neque natus quibusdam? Corrupti reprehenderit nisi repellendus facere, reiciendis, rerum, error iusto doloribus asperiores sapiente alias repellat autem? Earum, possimus? -

-
-
-
- - {/* Education Section */} -
-
- - -

Gymnasium Zwiesel

-

Weiterführende Schule

-
- -

- Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatum amet porro cumque dolores eveniet sunt labore, vitae ipsam consectetur nisi alias odio temporibus! Mollitia nisi, similique eos quam saepe deleniti! -

-
-
- - - -

Universität Passau

-

Universität

-
- -

- Lorem ipsum dolor sit amet consectetur adipisicing elit. Magnam, cumque excepturi voluptates qui repellendus omnis animi ab placeat ullam soluta error aspernatur repellat. Repellat, omnis facilis sequi perferendis aliquam expedita? -

-
-
-
-
- - {/* Skills Section */} -
-
- - -

Anwendungsentwicklung

-
- -
-
- JavaScript - Rust - Java - C# -
-

- Webentwicklung und Systementwicklung -

-
-
-
- - - -

Sytemintegration

-
- -
-
- Hardware - Virtualisierung - Networking -
-

- Self-Hosting -

-
-
-
- - - -

Soft Skills

-
- -
-
- Projektmanagement - Layer 8 ^^ -
-

- Erfahrung im professionellen Umgang mit internen und externen Kunden -

-
-
-
-
-
- - {/* Portfolio Section */} -
-
- - -

Raytracing in a Weekend

-

Graphics Programming

-
- -

- Ein Nachbau des Raytracers aus der Buchserie "Raytracing in a Weekend". Portiert von C++ auf Rust. -

-
- Rust - Graphics - Math -
-
- - - -
- - - -

6502 Emulator

-

System Programming

-
- -

- Vollständiger Emulator des 6502 Mikroprozessors geschrieben in Rust. - Alle Instruktionen und Addressierungsmodi auf einzelne Taktzyklen genau simuliert. -

-
- Emulation - Low-level - Hardware -
-
- - - -
-
-
- - {/* Personal Section */} -
-
- - -

Hobbies

-
- -
-
-
- Motorradfahren -
-
-
- Astrofotografie -
-
-
- Elektrotechnik -
-
-
-
- - - -

Persönlicher Status

-
- -
-
-
- Glücklich Vergeben ❤️ -
-
-
-
-
-
- - {/* Contact Section */} -
+
); }