* Revise portfolio: warm brown theme, elegant typography, optimized analytics tracking (#55) * Initial plan * Update color theme to warm brown and off-white, add elegant fonts, fix analytics tracking Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Fix 404 page integration with warm theme, update admin console colors, fix font loading Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Address code review feedback: fix navigation, add utils, improve tracking Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Fix accessibility and memory leak issues from code review Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * chore: Code cleanup, add Sentry.io monitoring, and documentation (#56) * Initial plan * Remove unused code and clean up console statements Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Remove unused components and fix type issues Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Wrap console.warn in development check Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Integrate Sentry.io monitoring and add text editing documentation Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * Initial plan * feat: Add Sentry configuration files and example pages - Add sentry.server.config.ts and sentry.edge.config.ts - Update instrumentation.ts with onRequestError export - Update instrumentation-client.ts with onRouterTransitionStart export - Update global-error.tsx to capture exceptions with Sentry - Create Sentry example page at app/sentry-example-page/page.tsx - Create Sentry example API route at app/api/sentry-example-api/route.ts Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * feat: Update middleware to allow Sentry example page and fix deprecated API - Update middleware to exclude /sentry-example-page from locale routing - Remove deprecated startTransaction API from Sentry example page - Use consistent DSN configuration with fallback values Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> * refactor: Improve Sentry configuration with environment-based sampling - Add comments explaining DSN fallback values - Use environment-based tracesSampleRate (10% in production, 100% in dev) - Address code review feedback for production-safe configuration Co-authored-by: denshooter <44590296+denshooter@users.noreply.github.com> --------- Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
108 lines
2.7 KiB
TypeScript
108 lines
2.7 KiB
TypeScript
import "./globals.css";
|
|
import { Metadata } from "next";
|
|
import { Inter, Playfair_Display } from "next/font/google";
|
|
import React from "react";
|
|
import ClientProviders from "./components/ClientProviders";
|
|
import { cookies } from "next/headers";
|
|
import { getBaseUrl } from "@/lib/seo";
|
|
|
|
const inter = Inter({
|
|
variable: "--font-inter",
|
|
subsets: ["latin"],
|
|
display: "swap",
|
|
adjustFontFallback: true,
|
|
});
|
|
|
|
const playfair = Playfair_Display({
|
|
variable: "--font-playfair",
|
|
subsets: ["latin"],
|
|
display: "swap",
|
|
adjustFontFallback: true,
|
|
});
|
|
|
|
export default async function RootLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
const cookieStore = await cookies();
|
|
const locale = cookieStore.get("NEXT_LOCALE")?.value || "en";
|
|
return (
|
|
<html lang={locale}>
|
|
<head>
|
|
<meta charSet="utf-8" />
|
|
</head>
|
|
<body className={`${inter.variable} ${playfair.variable}`} suppressHydrationWarning>
|
|
<ClientProviders>{children}</ClientProviders>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|
|
|
|
export const metadata: Metadata = {
|
|
metadataBase: new URL(getBaseUrl()),
|
|
title: {
|
|
default: "Dennis Konkol | Portfolio",
|
|
template: "%s | Dennis Konkol",
|
|
},
|
|
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",
|
|
"Web Development",
|
|
"Full Stack Developer",
|
|
"Osnabrück",
|
|
"Germany",
|
|
"React",
|
|
"Next.js",
|
|
"TypeScript",
|
|
],
|
|
authors: [{ name: "Dennis Konkol", url: "https://dk0.dev" }],
|
|
creator: "Dennis Konkol",
|
|
publisher: "Dennis Konkol",
|
|
robots: {
|
|
index: true,
|
|
follow: true,
|
|
googleBot: {
|
|
index: true,
|
|
follow: true,
|
|
"max-video-preview": -1,
|
|
"max-image-preview": "large",
|
|
"max-snippet": -1,
|
|
},
|
|
},
|
|
openGraph: {
|
|
title: "Dennis Konkol | Portfolio",
|
|
description:
|
|
"Explore my projects and contact me for collaboration opportunities!",
|
|
url: "https://dk0.dev",
|
|
siteName: "Dennis Konkol Portfolio",
|
|
images: [
|
|
{
|
|
url: "https://dk0.dev/api/og",
|
|
width: 1200,
|
|
height: 630,
|
|
alt: "Dennis Konkol Portfolio",
|
|
},
|
|
],
|
|
locale: "en_US",
|
|
type: "website",
|
|
},
|
|
twitter: {
|
|
card: "summary_large_image",
|
|
title: "Dennis Konkol | Portfolio",
|
|
description: "Student & Software Engineer based in Osnabrück, Germany.",
|
|
images: ["https://dk0.dev/api/og"],
|
|
creator: "@denshooter",
|
|
},
|
|
verification: {
|
|
google: process.env.NEXT_PUBLIC_GOOGLE_VERIFICATION,
|
|
},
|
|
alternates: {
|
|
canonical: "https://dk0.dev",
|
|
},
|
|
};
|