Compare commits

..

2 Commits

20 changed files with 83 additions and 36 deletions

View File

@@ -23,6 +23,14 @@
link: "/art/music", link: "/art/music",
}, },
]; ];
function getBannerSrc(p: Project): string {
if (p.banner.startsWith("/")) {
return p.banner;
} else {
return `${p.category}/${p.id}/${p.banner}`;
}
}
</script> </script>
<svelte:head> <svelte:head>
@@ -65,11 +73,21 @@
{#snippet projectContent(p: Project)} {#snippet projectContent(p: Project)}
<div class="project-content-container"> <div class="project-content-container">
<img class="project-banner" src={p.banner} alt={p.bannerAlt}> <img class="project-banner" src={getBannerSrc(p)} alt={p.bannerAlt}>
<div class="project-text-container"> <div class="project-text-container">
<p class="project-title">{p.title}</p> <div class="project-text-left">
<p class="project-subtitle">{p.subtitle}</p> <p class="project-title">
<p class="project-date">{p.date}</p> {#if p.isHighlight}
&#10047;
{/if}
{p.title}
</p>
<p class="project-subtitle">{p.subtitle}</p>
<p class="project-date">{p.date}</p>
</div>
<div class="project-text-right">
<p class="project-category">{p.category}</p>
</div>
</div> </div>
</div> </div>
{/snippet} {/snippet}
@@ -107,20 +125,23 @@
<style> <style>
.project-container { .project-container {
display: grid; display: flex;
/* grid-template-columns: 1fr 1fr; */ /* grid-template-columns: 1fr 1fr; */
grid-template-columns: 1fr; /* grid-template-columns: 1fr; */
gap: 4px; gap: 4px;
margin: 0 auto;
flex-direction: column;
justify-content: stretch;
} }
.project-wrapper { .project-wrapper {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin: 0; margin: 0;
/* border-radius: var(--border-radius); */
/* gap: 4px; */ /* gap: 4px; */
overflow: hidden; overflow: hidden;
text-decoration: none; text-decoration: none;
transition: border-radius var(--duration-animation) var(--anim-curve);
} }
.project-content-container { .project-content-container {
@@ -136,7 +157,7 @@
width: 100%; width: 100%;
height: 100%; height: 100%;
z-index: -1; z-index: -1;
filter: brightness(60%) saturate(40%) blur(4px); filter: brightness(40%) saturate(40%) blur(1px);
transition: filter var(--duration-animation) var(--anim-curve); transition: filter var(--duration-animation) var(--anim-curve);
} }
@@ -144,8 +165,16 @@
filter: brightness(60%) saturate(100%) blur(0); filter: brightness(60%) saturate(100%) blur(0);
} }
.project-wrapper:hover {
border-radius: var(--border-radius);
}
.project-text-container { .project-text-container {
padding: 8px 16px; padding: 16px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: end;
} }
.project-text-container p { .project-text-container p {
@@ -153,9 +182,14 @@
margin: 0; margin: 0;
} }
.project-highlight-marker {
color: aqua;
}
.project-title { .project-title {
font-family: var(--font-mono); font-family: var(--font-mono);
font-size: 1.4rem; font-size: 1.5rem;
line-height: 1.8rem;
font-weight: 700; font-weight: 700;
} }
@@ -168,6 +202,24 @@
font-weight: 600; font-weight: 600;
} }
.project-category {
font-family: var(--font-mono);
font-weight: 600;
font-size: 1.0rem;
}
@media screen and (max-width: 800px) {
.project-title {
font-size: 1.3rem;
line-height: 1.5rem;
}
.project-subtitle, .project-date, .project-category {
font-size: 1.0rem;
line-height: 1.4rem;
}
}
/* .project-subtitle { /* .project-subtitle {
font-family: var(--font-mono); font-family: var(--font-mono);

View File

@@ -49,6 +49,7 @@
color: var(--color-text); color: var(--color-text);
padding: 4px 12px; padding: 4px 12px;
margin: 0; margin: 0;
font-weight: 600;
border-top: var(--border-style) var(--border-dash-size) var(--color-highlight-alt); border-top: var(--border-style) var(--border-dash-size) var(--color-highlight-alt);
border-bottom: var(--border-style) var(--border-dash-size) var(--color-highlight-alt); border-bottom: var(--border-style) var(--border-dash-size) var(--color-highlight-alt);

View File

@@ -3,17 +3,8 @@ import { projects, type Project } from '../../projects2';
export async function load({ params }) { export async function load({ params }) {
const post = await import(`../../${params.category}/${params.id}.md`); const post = await import(`../../${params.category}/${params.id}.md`);
// const tag: string = `${params.year}/${params.date}`; // link to the page. not to be confused with tags. i know it's confusing naming const projectDetails: Project = projects.find((p: Project) => p.category.toString() == params.category.toString() && p.id == params.id)!;
const projectDetails = projects.find((p: Project) => p.category.toString() == params.category.toString() && p.id == params.id);
const content = post.default; const content = post.default;
// const title: string = postValues?.title ?? "";
// const subtitle: string = postValues?.subtitle ?? "";
// const date: string = postValues?.date ?? "";
// const dateUpdated: string = postValues?.dateUpdated ?? "";
// const time: string = postValues?.time ?? "";
// const banner: string = postValues?.banner ?? "";
// const description: string = postValues?.description ?? "";
// const tags: BlogPostTag[] = postValues?.tags ?? []; // blog post tags. should be renamed 'keywords'
return { return {
content, content,

View File

@@ -9,8 +9,10 @@ export interface Project {
description: string; description: string;
isOngoing: boolean; // whether the project is currently active (true) or a past project (false) isOngoing: boolean; // whether the project is currently active (true) or a past project (false)
date: string; date: string;
dateUpdated?: string;
status: ProjectStatus; status: ProjectStatus;
links: Link[]; // may pass an empty array links: Link[]; // may pass an empty array
isHighlight?: boolean;
}; };
export interface Link { export interface Link {
@@ -63,7 +65,7 @@ export const projects: Project[] = [
banner: "/projects/projectn5/banner2.webp", banner: "/projects/projectn5/banner2.webp",
bannerAlt: "", bannerAlt: "",
title: "Homesick", title: "Homesick",
subtitle: "", subtitle: "my main video game project",
description: "", description: "",
isOngoing: true, isOngoing: true,
date: "September 2023 now", date: "September 2023 now",
@@ -82,6 +84,7 @@ export const projects: Project[] = [
// link: "https://files.natconf.dev/public/projectn5", // link: "https://files.natconf.dev/public/projectn5",
// }, // },
], ],
isHighlight: true,
}, },
// 2026 // 2026
@@ -126,7 +129,7 @@ export const projects: Project[] = [
{ {
category: ProjectCategory.GAMES, category: ProjectCategory.GAMES,
id: "magician", id: "magician",
banner: "/projects/magician/banner.webp", banner: "banner.webp",
bannerAlt: "", bannerAlt: "",
title: "Magician", title: "Magician",
subtitle: "Online Multiplayer Card Game", subtitle: "Online Multiplayer Card Game",
@@ -144,10 +147,10 @@ export const projects: Project[] = [
{ {
category: ProjectCategory.GAMES, category: ProjectCategory.GAMES,
id: "projektike", id: "projektike",
banner: "/projects/projektike/banner.webp", banner: "banner.webp",
bannerAlt: "", bannerAlt: "",
title: "Projektike", title: "Projektike",
subtitle: "PvP Game", subtitle: "Local PvP Game",
description: "", description: "",
isOngoing: false, isOngoing: false,
date: "August 2024 May 2025", date: "August 2024 May 2025",
@@ -160,7 +163,7 @@ export const projects: Project[] = [
{ {
category: ProjectCategory.ELECTRONICS, category: ProjectCategory.ELECTRONICS,
id: "3ds-usb-c", id: "3ds-usb-c",
banner: "", banner: "finished.webp",
bannerAlt: "", bannerAlt: "",
title: "3DS USB-C mod", title: "3DS USB-C mod",
subtitle: "DIY charging port mod", subtitle: "DIY charging port mod",
@@ -196,7 +199,7 @@ export const projects: Project[] = [
{ {
category: ProjectCategory.ELECTRONICS, category: ProjectCategory.ELECTRONICS,
id: "deej0461", id: "deej0461",
banner: "", banner: "finished.webp",
bannerAlt: "", bannerAlt: "",
title: "deej0461", title: "deej0461",
subtitle: "PC companion audio source controller", subtitle: "PC companion audio source controller",
@@ -210,7 +213,7 @@ export const projects: Project[] = [
{ {
category: ProjectCategory.APPS, category: ProjectCategory.APPS,
id: "weserplaner", id: "weserplaner",
banner: "/projects/weserplaner/banner.webp", banner: "banner.webp",
bannerAlt: "", bannerAlt: "",
title: "WeserPlaner", title: "WeserPlaner",
subtitle: "University Timetable & Canteen Info App", subtitle: "University Timetable & Canteen Info App",
@@ -234,7 +237,7 @@ export const projects: Project[] = [
{ {
category: ProjectCategory.APPS, category: ProjectCategory.APPS,
id: "textbasic", id: "textbasic",
banner: "", banner: "icon.webp",
bannerAlt: "", bannerAlt: "",
title: "Text Basic", title: "Text Basic",
subtitle: "Extremely Basic Text Widget App", subtitle: "Extremely Basic Text Widget App",
@@ -256,7 +259,7 @@ export const projects: Project[] = [
{ {
category: ProjectCategory.GAMES, category: ProjectCategory.GAMES,
id: "swordsnstuff", id: "swordsnstuff",
banner: "/projects/swordsnstuff/banner.webp", banner: "banner.webp",
bannerAlt: "", bannerAlt: "",
title: "Swords & Stuff", title: "Swords & Stuff",
subtitle: "Unity 2D RPG", subtitle: "Unity 2D RPG",
@@ -274,7 +277,7 @@ export const projects: Project[] = [
{ {
category: ProjectCategory.GAMES, category: ProjectCategory.GAMES,
id: "tads", id: "tads",
banner: "/projects/tads/banner.webp", banner: "banner.webp",
bannerAlt: "", bannerAlt: "",
title: "Totally Accurate Dating Simulator", title: "Totally Accurate Dating Simulator",
subtitle: "HTML Text Adventure", subtitle: "HTML Text Adventure",
@@ -298,7 +301,7 @@ export const projects: Project[] = [
{ {
category: ProjectCategory.MUSIC, category: ProjectCategory.MUSIC,
id: "dreamworld", id: "dreamworld",
banner: "/projects/dreamworld/banner.webp", banner: "banner.webp",
bannerAlt: "", bannerAlt: "",
title: "Dreamworld", title: "Dreamworld",
subtitle: "My First Album", subtitle: "My First Album",
@@ -318,7 +321,7 @@ export const projects: Project[] = [
{ {
category: ProjectCategory.APPS, category: ProjectCategory.APPS,
id: "qwark", id: "qwark",
banner: "", banner: "icon.webp",
bannerAlt: "", bannerAlt: "",
title: "Qwark Grade Log", title: "Qwark Grade Log",
subtitle: "Grade Logging App", subtitle: "Grade Logging App",
@@ -336,7 +339,7 @@ export const projects: Project[] = [
{ {
category: ProjectCategory.APPS, category: ProjectCategory.APPS,
id: "avhplan", id: "avhplan",
banner: "", banner: "icon.webp",
bannerAlt: "", bannerAlt: "",
title: "AvH-Vertretungsplan", title: "AvH-Vertretungsplan",
subtitle: "Substitution Plan App", subtitle: "Substitution Plan App",
@@ -360,10 +363,10 @@ export const projects: Project[] = [
{ {
category: ProjectCategory.MUSIC, category: ProjectCategory.MUSIC,
id: "anewbeginning", id: "anewbeginning",
banner: "", banner: "cover.webp",
bannerAlt: "", bannerAlt: "",
title: "A New Beginning", title: "A New Beginning",
subtitle: "", subtitle: "Coming-of-age EP",
description: "", description: "",
isOngoing: false, isOngoing: false,
date: "May August 2018", date: "May August 2018",
@@ -380,7 +383,7 @@ export const projects: Project[] = [
{ {
category: ProjectCategory.MUSIC, category: ProjectCategory.MUSIC,
id: "soundcloud", id: "soundcloud",
banner: "", banner: "icon2.webp",
bannerAlt: "", bannerAlt: "",
title: "Soundcloud", title: "Soundcloud",
subtitle: "Demo Dump & Archive", subtitle: "Demo Dump & Archive",

View File

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 102 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 180 KiB

After

Width:  |  Height:  |  Size: 180 KiB

View File

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

View File

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 135 KiB

View File

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB