Initial commit

This commit is contained in:
Janpeter Visser 2026-04-14 21:39:50 +02:00
commit dc66b66d94
22 changed files with 7556 additions and 0 deletions

79
app/globals.css Normal file
View file

@ -0,0 +1,79 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--accent: #c2339b;
--bg: #0f0f14;
--text: #e8e4df;
--text-muted: rgba(255, 255, 255, 0.5);
--text-dim: rgba(255, 255, 255, 0.35);
--surface: rgba(255, 255, 255, 0.03);
--border: rgba(255, 255, 255, 0.06);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
background: var(--bg);
color: var(--text);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
::selection {
background: rgba(194, 51, 155, 0.35);
color: #fff;
}
::-webkit-scrollbar {
width: 6px;
}
::-webkit-scrollbar-track {
background: var(--bg);
}
::-webkit-scrollbar-thumb {
background: rgba(194, 51, 155, 0.3);
border-radius: 3px;
}
a {
transition: opacity 0.2s;
}
a:hover {
opacity: 0.85;
}
/* Fade-in animation */
@keyframes fadeUp {
from {
opacity: 0;
transform: translateY(28px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.fade-in {
opacity: 0;
transform: translateY(28px);
transition: opacity 0.7s ease, transform 0.7s ease;
}
.fade-in.visible {
opacity: 1;
transform: translateY(0);
}

49
app/layout.tsx Normal file
View file

@ -0,0 +1,49 @@
import type { Metadata } from "next";
import { DM_Sans } from "next/font/google";
import "./globals.css";
const dmSans = DM_Sans({
subsets: ["latin"],
variable: "--font-sans",
display: "swap",
});
export const metadata: Metadata = {
title: "Janpeter Visser — Software Engineer",
description:
"Persoonlijke website van Janpeter Visser. Allround software engineer met 30 jaar ervaring in full-stack development, van C++ tot Angular en .NET.",
metadataBase: new URL("https://jp-visser.nl"),
openGraph: {
title: "Janpeter Visser — Software Engineer",
description:
"Allround software engineer met 30 jaar ervaring in full-stack development.",
url: "https://jp-visser.nl",
siteName: "Janpeter Visser",
locale: "nl_NL",
type: "website",
},
};
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="nl" className={dmSans.variable}>
<head>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link
rel="preconnect"
href="https://fonts.gstatic.com"
crossOrigin="anonymous"
/>
<link
href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&display=swap"
rel="stylesheet"
/>
</head>
<body className="font-sans">{children}</body>
</html>
);
}

21
app/page.tsx Normal file
View file

@ -0,0 +1,21 @@
import { Nav } from "@/components/nav";
import { Hero } from "@/components/hero";
import { ExperienceSection } from "@/components/experience";
import { SkillsSection } from "@/components/skills";
import { AppsSection } from "@/components/apps";
import { ContactSection } from "@/components/contact";
import { Footer } from "@/components/footer";
export default function Home() {
return (
<>
<Nav />
<Hero />
<ExperienceSection />
<SkillsSection />
<AppsSection />
<ContactSection />
<Footer />
</>
);
}