🎨 Complete Portfolio Redesign: Modern Dark Theme + Admin Dashboard + Enhanced Markdown Editor

 New Features:
- Complete dark theme redesign with glassmorphism effects
- Responsive admin dashboard with collapsible projects list
- Enhanced markdown editor with live preview
- Project image upload functionality
- Improved project management (create, edit, delete, publish/unpublish)
- Slug-based project URLs
- Legal pages (Impressum, Privacy Policy)
- Modern animations with Framer Motion

🔧 Improvements:
- Fixed hydration errors with mounted state
- Enhanced UI/UX with better spacing and proportions
- Improved markdown rendering with custom components
- Better project image placeholders with initials
- Conditional rendering for GitHub/Live Demo links
- Enhanced toolbar with categorized quick actions
- Responsive grid layout for admin dashboard

📱 Technical:
- Next.js 15 + TypeScript + Tailwind CSS
- Local storage for project persistence
- Optimized performance and responsive design
This commit is contained in:
Dennis Konkol
2025-09-01 23:29:58 +00:00
parent eab0b88f59
commit ded873e6b4
16 changed files with 4050 additions and 1248 deletions

View File

@@ -1,64 +1,58 @@
// app/layout.tsx
import "./globals.css";
import {Metadata} from "next";
import {Roboto} from "next/font/google";
import { Metadata } from "next";
import { Inter } from "next/font/google";
import React from "react";
//import ClientCookieConsentBanner from "./components/ClientCookieConsentBanner";
const roboto = Roboto({
variable: "--font-roboto",
weight: "400",
subsets: ["latin"],
const inter = Inter({
variable: "--font-inter",
subsets: ["latin"],
});
export default function RootLayout({
children,
}: {
children: React.ReactNode;
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<head>
<script
defer
src="https://umami.denshooter.de/script.js"
data-website-id="1f213877-deef-4238-8df1-71a5a3bcd142"
></script>
<meta charSet="utf-8"/>
<title>Dennis Konkol&#39;s Portfolio</title>
</head>
<body className={roboto.variable}>{children}</body>
</html>
);
return (
<html lang="en">
<head>
<script
defer
src="https://umami.denshooter.de/script.js"
data-website-id="1f213877-deef-4238-8df1-71a5a3bcd142"
></script>
<meta charSet="utf-8"/>
<title>Dennis Konkol&#39;s Portfolio</title>
</head>
<body className={inter.variable}>{children}</body>
</html>
);
}
export const metadata: Metadata = {
title: "Dennis Konkol | Portfolio",
description: "Portfolio of Dennis Konkol, a student and software engineer based in Osnabrück, Germany. Passionate about technology, coding, and solving real-world problems.",
keywords: ["Dennis Konkol", "Software Engineer", "Portfolio", "Student"],
authors: [{name: "Dennis Konkol", url: "https://dki.one"}],
openGraph: {
title: "Dennis Konkol | Portfolio",
description: "Portfolio of Dennis Konkol, a student and software engineer based in Osnabrück, Germany. Passionate about technology, coding, and solving real-world problems.",
keywords: ["Dennis Konkol", "Software Engineer", "Portfolio", "Student"],
authors: [{name: "Dennis Konkol", url: "https://dki.one"}],
openGraph: {
title: "Dennis Konkol | Portfolio",
description: "Explore my projects and get in touch!",
url: "https://dki.one",
siteName: "Dennis Konkol Portfolio",
images: [
{
url: "https://dki.one/api/og",
width: 1200,
height: 630,
alt: "Dennis Konkol Portfolio",
},
],
type: "website",
},
twitter: {
card: "summary_large_image",
title: "Dennis Konkol | Portfolio",
description: "Student & Software Engineer based in Osnabrück, Germany.",
images: ["https://dki.one/api/og"],
},
description: "Explore my projects and get in touch!",
url: "https://dki.one",
siteName: "Dennis Konkol Portfolio",
images: [
{
url: "https://dki.one/api/og",
width: 1200,
height: 630,
alt: "Dennis Konkol Portfolio",
},
],
type: "website",
},
twitter: {
card: "summary_large_image",
title: "Dennis Konkol | Portfolio",
description: "Student & Software Engineer based in Osnabrück, Germany.",
images: ["https://dki.one/api/og"],
},
};