2025-03-31 23:07:29 +02:00
< script lang = "ts" >
2025-08-25 11:35:00 +02:00
import { onMount } from "svelte";
2025-04-18 11:30:21 +02:00
import Content from "$lib/content.svelte";
2025-04-03 17:31:24 +02:00
import GamedevWebring from "$lib/webrings/gamedev.svelte";
2025-04-03 20:01:00 +02:00
import Gallery from "$lib/lists/gallery-entry.svelte";
import LinkList from "$lib/link-list.svelte";
2025-08-25 11:35:00 +02:00
import { quotes , type Quote } from "./quotes";
2025-04-03 10:15:04 +02:00
2025-08-26 18:21:05 +02:00
import { posts } from "./projects/projectn5/devlog/devlog-posts";
2025-07-14 12:12:30 +02:00
2025-04-03 10:15:04 +02:00
var lastIndex = -1;
2025-08-25 11:35:00 +02:00
let meImg: string = $state("common/me/a.webp");
let marqueeQuote: Quote = $state({
author: "",
content: "",
source: "",
});
2025-04-03 10:15:04 +02:00
2025-08-25 11:35:00 +02:00
onMount(() => {
setPicture();
setMarqueeText();
});
2025-07-14 12:12:30 +02:00
2025-08-25 11:35:00 +02:00
function getRandom(max: number): number {
return Math.floor(Math.random() * max);
2025-04-03 10:15:04 +02:00
}
2025-08-25 11:35:00 +02:00
2025-04-03 10:15:04 +02:00
let setPicture = function() {
2025-08-16 16:42:16 +02:00
var pictures = ["a", "b", "c", "e"];
2025-04-03 10:15:04 +02:00
var selectedPicture = pictures[getRandom(pictures.length)];
meImg = "common/me/" + selectedPicture + ".webp";
};
2025-07-14 14:36:05 +02:00
2025-08-25 11:35:00 +02:00
let setMarqueeText = function() {
marqueeQuote = quotes[getRandom(quotes.length)];
};
2025-07-14 14:36:05 +02:00
let latestDevlogDate = posts[0].date.substring(0, 7).replace("/", "-") + "-" + posts[0].date.substring(7);
2025-03-31 23:07:29 +02:00
< / script >
2025-04-04 10:37:25 +02:00
< svelte:head >
< title > denizk0461's website< / title >
< / svelte:head >
2025-04-18 11:30:21 +02:00
< Content >
< h1 class = "gradient-title" > < i > Moin!< / i > ~ welcome to my website :)< / h1 >
2025-04-03 10:15:04 +02:00
2025-04-18 11:30:21 +02:00
< div class = "container" >
< div class = "subcontainer" >
< Gallery entries = {[
{
title: "Project N5 – devlog",
2025-07-14 14:36:05 +02:00
subtitle: "my active Godot game project about finding yourself in an unfamiliar future.\n< i > latest update: " + latestDevlogDate + "< / i > ",
2025-04-18 11:30:21 +02:00
fullWidth: true,
2025-07-14 12:12:30 +02:00
img: "projects/projectn5/devlog/2025/0523/birds_eye.webp",
2025-08-18 20:13:07 +02:00
imgAlt: "Project N5 screenshot of Laura looking down at two cuboids",
2025-04-18 11:30:21 +02:00
link: "projects/projectn5/devlog",
},
{
title: "Projects",
2025-07-14 12:12:30 +02:00
subtitle: "an overview of what I do and have done",
2025-04-18 11:30:21 +02:00
fullWidth: false,
img: "projects/project-mix.webp",
2025-08-18 20:13:07 +02:00
imgAlt: "A collage of multiple projects: the Unity default third-person character and CJ from GTA San Andreas in the top left; purple protagonist from Project N5 holding a massive rocket launcher in the top right; two wizards in the bottom left; a breadboard with a microcontroller and input components in the bottom right",
2025-04-18 11:30:21 +02:00
link: "projects",
},
2025-08-16 16:42:16 +02:00
{
title: "Files",
subtitle: "find things I've put for download on my < a href = 'https://github.com/9001/copyparty' > copyparty< / a > instance",
fullWidth: false,
img: "common/hypertext.webp",
2025-08-18 20:13:07 +02:00
imgAlt: "Screenshot of Hypertext Unity level. Crates are strewn across the floor, Waluigi is flying in front of the camera, and text such as 'COME AND TRY OUR ALL-NEW BLENDER' and 'omg! it's the brandenburg er tor!' is displayed",
2025-08-16 16:42:16 +02:00
link: "//files.denizk0461.dev/",
},
2025-04-18 11:30:21 +02:00
]}/>
< / div >
< div class = "subcontainer" >
2025-08-25 11:35:00 +02:00
< div class = "quote-marquee-container" >
{ @render marqueeContent ({ quote : marqueeQuote , ignoreA11y : false })}
{ @render marqueeContent ({ quote : marqueeQuote , ignoreA11y : true })}
2025-09-07 16:00:21 +02:00
{ @render marqueeContent ({ quote : marqueeQuote , ignoreA11y : true })}
2025-08-25 11:35:00 +02:00
< / div >
2025-08-18 20:13:07 +02:00
< h3 > about ↬< img id = "me-img" class = "me-img" title = "hi there" src = { meImg } alt="Deniz, the website developer , small and pixelated " > ↫ me </ h3 >
2025-04-03 10:15:04 +02:00
2025-04-18 11:30:21 +02:00
< p > Hi! I'm Deniz. I'm a programmer, sometimes a music producer, and rarely a hard-working student in Northern Germany. Welcome to my webpage!< / p >
2025-04-03 10:15:04 +02:00
2025-08-16 16:42:16 +02:00
< p > Here you can find information on things I like sharing. Check out my projects, especially the devlog of the game I'm working on!< / p >
2025-04-03 10:15:04 +02:00
2025-04-18 11:30:21 +02:00
< h3 > where to find me< / h3 >
2025-04-03 10:15:04 +02:00
2025-04-18 11:30:21 +02:00
< LinkList entries = {[
{
icon: "icons/bluesky.svg",
text: "Bluesky",
2025-08-10 17:06:03 +02:00
link: "https://bsky.app/profile/denizk0461.dev",
2025-04-18 11:30:21 +02:00
},
{
icon: "icons/codeberg.svg",
text: "Codeberg",
link: "https://codeberg.org/denizk0461",
},
{
icon: "icons/github.svg",
text: "GitHub",
link: "https://github.com/denizk0461",
},
]}/>
2025-04-03 10:15:04 +02:00
2025-04-18 11:30:21 +02:00
< GamedevWebring / >
< / div >
2025-04-03 10:15:04 +02:00
< / div >
2025-04-18 11:30:21 +02:00
< / Content >
2025-04-03 10:15:04 +02:00
2025-08-25 11:35:00 +02:00
{ # snippet marqueeContent ({ quote , ignoreA11y } : { quote : Quote , ignoreA11y : boolean })}
< span class = "quote-marquee" aria-hidden = " { ignoreA11y } " >< i > { quote . content } </ i > – { quote . author } [{ quote . source } ] ***</ span >
{ /snippet }
2025-04-03 10:15:04 +02:00
< style >
.container {
display: flex;
flex-direction: row;
justify-content: center;
}
.subcontainer {
max-width: 50%;
}
.subcontainer:last-child {
margin-left: 16px;
}
.me-img {
width: 32px;
display: inline-block;
}
2025-04-04 19:33:17 +02:00
.gradient-title {
background: -webkit-linear-gradient(0deg, #96C9DC, #9CE391, #E03E59);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
2025-08-15 20:30:20 +02:00
padding-bottom: 12px;
2025-04-04 19:33:17 +02:00
}
2025-08-25 11:35:00 +02:00
.quote-marquee-container {
width: 100%;
background-color: var(--color-background-highlight);
display: flex;
overflow: hidden;
white-space: nowrap;
}
.quote-marquee {
animation: marquee-content 10s linear infinite;
font-family: 'Space Mono';
font-size: 1rem;
font-weight: 600;
padding: 6px 6px;
}
.quote-marquee-container:hover .quote-marquee {
animation-play-state: paused;
}
@keyframes marquee-content {
/* Element one fully ON screen at left-edge of container. */
from {
transform: translateX( 0% );
}
/* Element one fully OFF screen (just beyond left-ledge of container). */
to {
transform: translateX( -100% );
}
}
2025-04-03 10:15:04 +02:00
< / style >