Compare commits
10 Commits
40d40a187a
...
83c8cdaa34
| Author | SHA1 | Date | |
|---|---|---|---|
| 83c8cdaa34 | |||
| 6ab1b392de | |||
| 6578c74b60 | |||
| 353a3a1846 | |||
| 7e78be19da | |||
| dc9907f264 | |||
| df1a4c8db4 | |||
| db236538a0 | |||
| f2476dbe8a | |||
| 97b29f8dce |
@@ -1,8 +1,9 @@
|
||||
<script lang="ts">
|
||||
export interface GalleryRowEntry {
|
||||
export interface LinkRowEntry {
|
||||
title: string;
|
||||
description: string;
|
||||
img: string;
|
||||
latestUpdate?: string;
|
||||
altText: string;
|
||||
link: string;
|
||||
}
|
||||
@@ -10,7 +11,7 @@
|
||||
let {
|
||||
entries,
|
||||
}: {
|
||||
entries: GalleryRowEntry[];
|
||||
entries: LinkRowEntry[];
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
@@ -23,6 +24,9 @@
|
||||
<div class="row-text-container">
|
||||
<p class="row-title">> {entry.title}</p>
|
||||
<p class="row-description">{@html entry.description}</p>
|
||||
{#if entry.latestUpdate}
|
||||
<p class="row-updated">updated: <span class="row-updated-date">{entry.latestUpdate}</span></p>
|
||||
{/if}
|
||||
</div>
|
||||
</a>
|
||||
{/each}
|
||||
@@ -78,6 +82,7 @@
|
||||
|
||||
.row-text-container {
|
||||
margin-top: 8px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.row-title {
|
||||
@@ -90,7 +95,38 @@
|
||||
.row-description {
|
||||
font-size: 1.0rem;
|
||||
line-height: 1.3rem;
|
||||
margin: 0 0 4px 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.row-updated, .row-updated-date {
|
||||
font-size: 0.9rem;
|
||||
line-height: 1.2rem;
|
||||
margin: 0;
|
||||
font-style: italic;
|
||||
width: fit-content;
|
||||
transition: color var(--duration-animation) var(--anim-curve),
|
||||
background-color var(--duration-animation) var(--anim-curve);
|
||||
}
|
||||
|
||||
.row-updated {
|
||||
margin-top: 2px;
|
||||
padding: 4px 8px;
|
||||
font-weight: 500;
|
||||
background-color: var(--color-background-highlight);
|
||||
border-radius: var(--border-radius);
|
||||
}
|
||||
|
||||
.row-entry:hover .row-updated {
|
||||
color: var(--color-text-dark);
|
||||
background-color: var(--color-highlight);
|
||||
}
|
||||
|
||||
.row-updated-date {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.row-entry:hover .row-updated-date {
|
||||
color: var(--color-text-dark);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 600px) {
|
||||
@@ -1,19 +1,34 @@
|
||||
<script lang="ts">
|
||||
import Content from "$lib/viewport/content.svelte";
|
||||
import GalleryRow, { type GalleryRowEntry } from "$lib/lists/gallery-row.svelte";
|
||||
import LinkRow, { type LinkRowEntry } from "$lib/lists/link-row.svelte";
|
||||
|
||||
import { posts as devlogPosts } from "./projects/projectn5/devlog/posts";
|
||||
import { posts as blogPosts } from "./blog/posts";
|
||||
import IndieButton from "$lib/components/indie-button.svelte";
|
||||
import { buttons } from "$lib/components/indie-button";
|
||||
import { onMount } from "svelte";
|
||||
import { getContext, onMount, setContext } from "svelte";
|
||||
import { getLatestFeedItem } from "./feed/feed";
|
||||
|
||||
let latestDevlogDate = devlogPosts[0].post.date;
|
||||
let latestBlogDate = blogPosts[0].post.date;
|
||||
let latestFeedDate = $state("a");
|
||||
|
||||
let latestStatusContent = $state("fetching status...");
|
||||
let latestStatusTimestamp = $state("?");
|
||||
|
||||
async function getLatestFeedDate() {
|
||||
await getLatestFeedItem(
|
||||
).then((response) => {
|
||||
// remove time, only keep date. thanks again sweden
|
||||
latestFeedDate = new Date(
|
||||
response.metadata.posted
|
||||
).toLocaleString("sv-SE").substring(
|
||||
0,
|
||||
response.metadata.posted.indexOf("T")
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
async function getLatestStatus() {
|
||||
await fetch(`https://back.natconf.dev/netstatus/latestStatus`, {
|
||||
method: "GET",
|
||||
@@ -31,49 +46,9 @@
|
||||
}
|
||||
|
||||
onMount(() => {
|
||||
getLatestFeedDate();
|
||||
getLatestStatus();
|
||||
})
|
||||
|
||||
const galleryTopRow: GalleryRowEntry[] = [
|
||||
{
|
||||
title: "Homesick – devlog",
|
||||
description: `my active Godot game project about finding yourself in an unfamiliar future. <i>latest update: ${latestDevlogDate}</i>`,
|
||||
img: "projects/projectn5/banner2.webp",
|
||||
altText: "The protagonist Laura standing on a floating platform in the purple test level. Ziplines are all around her and the text 'When this text is spinning, the game is not paused' is frozen in the sky.",
|
||||
link: "projects/projectn5",
|
||||
},
|
||||
{
|
||||
title: "Projects",
|
||||
description: "<b>[updated]</b> an overview of all my projects!",
|
||||
img: "projects/banner.webp",
|
||||
altText: "An upside-down New 3DS XL lying open on a desk with a small USB-C breakout board attached to it, and a USB-C cable plugged in. The 3DS is glowing to indicate that it is charging.",
|
||||
link: "projects",
|
||||
},
|
||||
];
|
||||
|
||||
const galleryBottomRow: GalleryRowEntry[] = [
|
||||
{
|
||||
title: "Creative Feed",
|
||||
description: `the small things I make find a home here.`,
|
||||
img: "feed/banner.webp",
|
||||
altText: "A blue screen with the text 'how do you do art ? 1. face your fears 2. become your heroes'. The 'art' looks to have been edited in. The music artist Porter Robinson is standing in the bottom right corner.",
|
||||
link: "feed",
|
||||
},
|
||||
{
|
||||
title: "Blog",
|
||||
description: `a place where I write about random things. <i>latest post: ${latestBlogDate}</i>`,
|
||||
img: "blog/robert.webp",
|
||||
altText: "View at a tram bridge rising and then curving to the left.",
|
||||
link: "blog",
|
||||
},
|
||||
{
|
||||
title: "Files",
|
||||
description: "find things I've put for download on my copyparty instance.",
|
||||
img: "main/hypertext.webp",
|
||||
altText: "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 brandenbur ger tor!' is displayed.",
|
||||
link: "https://files.natconf.dev/public/",
|
||||
},
|
||||
];
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
@@ -124,8 +99,51 @@
|
||||
|
||||
<hr>
|
||||
|
||||
<GalleryRow entries={galleryTopRow} />
|
||||
<GalleryRow entries={galleryBottomRow} />
|
||||
<LinkRow entries={
|
||||
[
|
||||
{
|
||||
title: "Homesick – devlog",
|
||||
description: `my active Godot game project about finding yourself in an unfamiliar future.`,
|
||||
latestUpdate: latestDevlogDate,
|
||||
img: "projects/projectn5/banner2.webp",
|
||||
altText: "The protagonist Laura standing on a floating platform in the purple test level. Ziplines are all around her and the text 'When this text is spinning, the game is not paused' is frozen in the sky.",
|
||||
link: "projects/projectn5",
|
||||
},
|
||||
{
|
||||
title: "Projects",
|
||||
description: "<b>[updated]</b> an overview of all my projects!",
|
||||
img: "projects/banner.webp",
|
||||
altText: "An upside-down New 3DS XL lying open on a desk with a small USB-C breakout board attached to it, and a USB-C cable plugged in. The 3DS is glowing to indicate that it is charging.",
|
||||
link: "projects",
|
||||
},
|
||||
]} />
|
||||
|
||||
<LinkRow entries={
|
||||
[
|
||||
{
|
||||
title: "Creative Feed",
|
||||
description: `the small things I make find a home here.`,
|
||||
latestUpdate: latestFeedDate,
|
||||
img: "feed/banner.webp",
|
||||
altText: "A blue screen with the text 'how do you do art ? 1. face your fears 2. become your heroes'. The 'art' looks to have been edited in. The music artist Porter Robinson is standing in the bottom right corner.",
|
||||
link: "feed",
|
||||
},
|
||||
{
|
||||
title: "Blog",
|
||||
description: `a place where I write about random things.`,
|
||||
latestUpdate: latestBlogDate,
|
||||
img: "blog/robert.webp",
|
||||
altText: "View at a tram bridge rising and then curving to the left.",
|
||||
link: "blog",
|
||||
},
|
||||
{
|
||||
title: "Files",
|
||||
description: "find things I've put for download on my copyparty instance.",
|
||||
img: "main/hypertext.webp",
|
||||
altText: "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 brandenbur ger tor!' is displayed.",
|
||||
link: "https://files.natconf.dev/public/",
|
||||
},
|
||||
]} />
|
||||
|
||||
<hr>
|
||||
|
||||
@@ -158,13 +176,13 @@
|
||||
<img class="webring-img" usemap="#w95widget" src="/webrings/noai/w95widget.webp" alt="a gray Windows 95 style dialog box titled 'The No AI Webring' with a little icon showing a computer chip in a rubbish bin. beside it are three clickable buttons, labeled Previous, Random... and Next">
|
||||
</div>
|
||||
|
||||
<div class="button-container">
|
||||
<!-- <div class="button-container">
|
||||
{#each buttons as button}
|
||||
<IndieButton button={button} />
|
||||
{/each}
|
||||
</div>
|
||||
<p>to be expanded!</p>
|
||||
<p class="small-supertext">currently trying to come up with ideas for my own 88x31 button</p>
|
||||
<p class="small-supertext">currently trying to come up with ideas for my own 88x31 button</p> -->
|
||||
</div>
|
||||
</Content>
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { redirect } from "@sveltejs/kit";
|
||||
|
||||
export function load() {
|
||||
redirect(308, '/feed');
|
||||
redirect(308, '/drawings');
|
||||
}
|
||||
128
src/routes/drawings/+page.svelte
Normal file
@@ -0,0 +1,128 @@
|
||||
<script lang="ts">
|
||||
import Content from "$lib/viewport/content.svelte";
|
||||
import Banner2 from "$lib/banner2.svelte";
|
||||
import { drawings } from "./drawings";
|
||||
|
||||
let selectedIndex: number = $state(0);
|
||||
|
||||
let drawingsRev = drawings.toReversed();
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
<title>Drawing Gallery | denizk0461</title>
|
||||
</svelte:head>
|
||||
|
||||
<Content>
|
||||
<Banner2
|
||||
title="Drawing Gallery"
|
||||
banner="banner.webp"
|
||||
bannerAlt="Several Faber-Castell Polychromos colour pencils lined up with markings next to them in the same colour on a sheet of paper."
|
||||
subtitle="???"
|
||||
/>
|
||||
|
||||
<div class="selected-container">
|
||||
<a class="selected-img-link" href={drawingsRev[selectedIndex].src}>
|
||||
<img
|
||||
class="selected-img"
|
||||
src={drawingsRev[selectedIndex].src}
|
||||
alt={drawingsRev[selectedIndex].alt}
|
||||
/>
|
||||
</a>
|
||||
|
||||
<div class="selected-text-container">
|
||||
<div class="selected-text-header">
|
||||
{#if drawingsRev[selectedIndex].title}
|
||||
<p class="selected-title">{drawingsRev[selectedIndex].title}</p>
|
||||
{/if}
|
||||
<p class="selected-date">from {drawingsRev[selectedIndex].date}</p>
|
||||
</div>
|
||||
{#each drawingsRev[selectedIndex].desc as d}
|
||||
<p>{@html d}</p>
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="img-button-container">
|
||||
{#each drawingsRev as d, index}
|
||||
<button class="img-button" onclick={() => selectedIndex = index}>
|
||||
<img src={d.src} alt={d.alt} loading="lazy" />
|
||||
</button>
|
||||
{/each}
|
||||
</div>
|
||||
|
||||
</Content>
|
||||
|
||||
<style>
|
||||
.selected-container {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.selected-img-link {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.selected-img {
|
||||
object-fit: contain;
|
||||
width: 100%;
|
||||
height: 400px;
|
||||
max-height: initial;
|
||||
}
|
||||
|
||||
.selected-text-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.selected-text-header p {
|
||||
font-weight: 600;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.selected-title {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.selected-date {
|
||||
font-size: 1.0rem;
|
||||
}
|
||||
|
||||
.selected-text-container * {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.img-button-container {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.img-button {
|
||||
cursor: pointer;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
border-radius: var(--border-radius);
|
||||
filter: brightness(70%) saturate(60%);
|
||||
transition: filter var(--duration-animation) var(--anim-curve);
|
||||
}
|
||||
.img-button:hover {
|
||||
filter: brightness(100%) saturate(100%);
|
||||
}
|
||||
|
||||
.img-button img {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
object-fit: cover;
|
||||
transition: scale var(--duration-animation) var(--anim-curve);
|
||||
}
|
||||
.img-button:hover img {
|
||||
scale: 1.12;
|
||||
}
|
||||
.img-button:active img {
|
||||
scale: 1.08;
|
||||
}
|
||||
</style>
|
||||
171
src/routes/drawings/drawings.ts
Normal file
@@ -0,0 +1,171 @@
|
||||
export interface Drawing {
|
||||
title?: string;
|
||||
date: string;
|
||||
src: string;
|
||||
alt: string;
|
||||
desc: string[];
|
||||
}
|
||||
|
||||
export let drawings: Drawing[] = [
|
||||
{
|
||||
date: "2026-01-29",
|
||||
src: "/blog/2026/0129/girl.webp",
|
||||
alt: "A small drawing of an anime-style girl's head. She has a ponytail and is looking towards the left with a concentrated gaze.",
|
||||
desc: [
|
||||
"A small sketch (only like 4cm wide) that I drew with a ballpoint pen on pink paper. The fact that I was able to sketch this, without any prior practice, plus an intrinsic want to be able to draw made me seriously consider learning to draw.",
|
||||
"Having learned just a little bit about drawing, I can say now (a month and a half later) that this isn't great, but it served its purpose of making me start to draw!",
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Bread Girl",
|
||||
date: "2026-01-30",
|
||||
src: "2026/breadgirl.webp",
|
||||
alt: "An anime-style girl chewing on a piece of bread. She wears a ponytail and a sleeveless top.",
|
||||
desc: [
|
||||
"I drew her during a game of Wizard. I initially wanted to make her chew on a whole loaf but I didn't know how to draw that.",
|
||||
"Wasn't really sure how to convey that her mouth is full either, but in retrospect, I could have exaggerated the bow in her lower eyelids to do so.",
|
||||
"I like her eyes. Her head could be taller, actually.",
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Elizabeth",
|
||||
date: "2026-02-18",
|
||||
src: "/blog/2026/0205/13-2.webp",
|
||||
alt: "A pencil drawing of a girl looking to the left. She is wearing a cropped loose tee and jeans, while her right hand is hinted to rest on her hip.",
|
||||
desc: [
|
||||
"She's the product of me trying to re-draw the character I drew on day 1 of my drawing challenge, and I was really glad to see that I had actually improved!",
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Emilia",
|
||||
date: "2026-02-23",
|
||||
src: "/blog/2026/0205/18.webp",
|
||||
alt: "A pencil sketch of a girl holding up a V sign with her left arm. She is wearing a long-sleeve shirt, jeans, and her hair is tied up in a ponytail. She is winking, the other eye is coloured green. Her body is tilted towards the right side of the paper. In the top right corner is a lightly-drawn sketch of the girl's pose.",
|
||||
desc: [
|
||||
"My first character with the new style of drawing eyes I picked up from a manga drawing book!",
|
||||
"I named her Emilia because she looked like a more nice and caring character.",
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Porter Robinson fanart",
|
||||
date: "2026-02-26",
|
||||
src: "/blog/2026/0205/21.webp",
|
||||
alt: "Two pencil sketches traced over with a black fineliner. The left one is of a hand with a cube in its palm, sketched after the hand on the cover of Porter Robinson's album Worlds. Beneath it is an emoticon used on the same cover. To the right is a manga-style head with green eyes and wavy hair, meant to resemble Porter Robinson's Vocaloid mascot Po-Uta.",
|
||||
desc: [
|
||||
"I drew the Worlds hand for practice and then decided to draw Po-Uta's head as well. I realised then that learning to draw gave me the ability to draw fanart.",
|
||||
"I had never considered that possibility before.",
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Cyborg Arm",
|
||||
date: "2026-02-27",
|
||||
src: "/blog/2026/0205/22.webp",
|
||||
alt: "A pencil sketch of a girl with a ponytail, crop top, and track pants with a slightly shocked look on her face. She is looking at her right arm, which is a cyborg part.",
|
||||
desc: [
|
||||
"Possibly my favourite sketch from the drawing challenge, because she looks cool, but also because her design deviates from the other characters a bit.",
|
||||
],
|
||||
},
|
||||
{
|
||||
date: "2026-03-04",
|
||||
src: "/blog/2026/0205/27-1.webp",
|
||||
alt: "A drawing of a girl with her head tilted towards her right shoulder. She is smiling with her eyes closed and is holding up a victory sign with her left hand. She has her hair in a ponytail and is wearing jeans with shoulder straps, and there is a scrunchie on her left wrist as well.",
|
||||
desc: [
|
||||
"This is actually the construction sketch of a drawing I later went over with a fineliner and coloured pencils. However, I kind of prefer the pencil sketch.",
|
||||
"This was my first attempt at a head-on perspective. I had fun drawing details like the scrunchie, the jeans, and the smile!",
|
||||
],
|
||||
},
|
||||
{
|
||||
date: "2026-03-10",
|
||||
src: "2026/0310.webp",
|
||||
alt: "A digital drawing of a girl with long brown hair in a ponytail. She has green eyes and is wearing a cropped shirt with stripes, an orange spaghetti top underneath, and dark trousers. She is holding her hands behind her back.",
|
||||
desc: [
|
||||
"ok i changed my mind on digital art. it's awesome.",
|
||||
"My first drawing using Krita! I went with my usual methods but tried refining some things and adding (hopefully not overly misplaced) shadows too. I ended up really liking the ability to use layers, and colour in digital art just pops so nicely.",
|
||||
"Initially, I drew the left arm in front of her body but later changed this to avoid drawing the hand.",
|
||||
],
|
||||
},
|
||||
{
|
||||
date: "2026-03-18",
|
||||
src: "2026/0318.webp",
|
||||
alt: "A smiling character with a ponytail and bangs. Their eyes are closed.",
|
||||
desc: [
|
||||
"I drew this character while testing brushes in Krita. It's why the coloured spaces all use a crayon-like brush whereas the shadows are dotted. It doesn't fit together, but hey, I had to learn that at some point, right?",
|
||||
"I like her expression, it's cute.",
|
||||
],
|
||||
},
|
||||
{
|
||||
date: "2026-03-28",
|
||||
src: "2026/0328.webp",
|
||||
alt: "Different eyes in different colours. The eye in the centre has a four-pronged star for a pupil.",
|
||||
desc: [
|
||||
"Some eye drawing practice while I was staying at a friends' house. Wanted to try some shading and overall just making the eyes look more interesting.",
|
||||
"In retrospect, the eyebrows don't look good, and the eyelashes (on the bottom eye) are way off. I do like the star for the pupil on the middle one though!",
|
||||
],
|
||||
},
|
||||
{
|
||||
date: "2026-03-29",
|
||||
src: "2026/0329.webp",
|
||||
alt: "Different eyes in different colours.",
|
||||
desc: [
|
||||
"More eye drawing practice. Note the eyeshadow as well as the shape of the eye in the top left. Eyelashes on the top one are still way off; I think it's both their size as well as their quantity (way too many individual hairs!).",
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Lecturer Confused About Gender",
|
||||
date: "2026-04-10",
|
||||
src: "2026/0410.webp",
|
||||
alt: "A sketch of my lecturer. He has short hair, blue eyes, and is wearing glasses. Next to him is a thinking cloud with gender markers and question marks inside.",
|
||||
desc: [
|
||||
"This drawing was inspired by my statistics lecturer saying (in good faith): \"there's male and female, but there's also diverse, which is a lot of genders, well I actually don't know how many\".",
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Dyed Hair",
|
||||
date: "2026-04-17",
|
||||
src: "2026/0417.webp",
|
||||
alt: "The head of a character facing away. Their hair is black and red.",
|
||||
desc: [
|
||||
"I played around with brushes during my statistics class and made this. There are a few things I like about it. I like that I drew it without outlines and it actually looks decent. I also love the hair colour gradient.",
|
||||
"It doesn't really make sense for the hair to transition from red at the roots to black and then back to red, but it doesn't matter either. It looks cool.",
|
||||
],
|
||||
},
|
||||
{
|
||||
date: "2026-04-20",
|
||||
src: "2026/0420.webp",
|
||||
alt: "Several pencil sketches including Plankton and Patrick from SpongeBob Squarepants as well as other faces. There's also a close-up of a semi-realistic green eye and a box with a plate and a single sphere on it, with the text 'One Pea 5€'.",
|
||||
desc: [
|
||||
"I've not given up on drawing using physical paper and pencils! And I've learned to draw Patrick('s head), for better or for worse.",
|
||||
"This was drawn during a meeting a student group of mine had at university. I had fun drawing Patrick with different expressions! Plankton ended up not so good.",
|
||||
"I quite like the more realistic-looking eye, especially the front view. The 'website girl' is me deciding on the head to use for sketches I want to put on this website for some text callouts. Haven't gotten around to drawing these sketches yet, but they'll be cool once I do.",
|
||||
"The 'One Pea 5€' was me anticipating Tomodachi Life: Living the Dream.",
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "patrick doing not so good",
|
||||
date: "2026-04-21",
|
||||
src: "2026/0421.webp",
|
||||
alt: "Two drawings of Patrick Star's head. The left is neutral, the right looks exhausted.",
|
||||
desc: [
|
||||
"Had some more fun drawing Patrick during my shift. The right one is me at work (I work in IT support).",
|
||||
],
|
||||
},
|
||||
{
|
||||
date: "2026-04-24",
|
||||
src: "2026/0424_hand.webp",
|
||||
alt: "A hand with its fingers spread out. The nails are painted green.",
|
||||
desc: [
|
||||
"Another statistics class sketch! I'm bad at hands so I wanted to practice. I was a bit worried doing this, as other people in my class could see what's on my tablet, but I want to get over that feeling of people judging my drawings.",
|
||||
"I played with shading in this one. It went okay. I didn't really know how to shade. The thumb also ended up too thin.",
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Blinn-Phong",
|
||||
date: "2026-04-24",
|
||||
src: "2026/0424_ball.webp",
|
||||
alt: "An orange sphere shaded to look three-dimensional.",
|
||||
desc: [
|
||||
"This is the dot from a '!' symbol I wrote in my statistics notes. I decided to try and shade it similarly to how I've seen it in game engines and 3D modelling software -- even with a specular highlight!",
|
||||
"I like how this turned out! From a distance, it really looks kind of 3D, especially compared to all the other notes on the page.",
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: Lecturer Confused About Gender
|
||||
subtitle: uni doodles
|
||||
date: 2026-04-10
|
||||
images:
|
||||
- drawing
|
||||
- hinge
|
||||
imageAlts:
|
||||
-
|
||||
-
|
||||
---
|
||||
|
||||
I had my first day of uni in quite a while. For my class in descriptive statistics, I used my drawing tablet to take notes in Krita, which also proved excellent for doodling. This drawing was inspired by my lecturer, in good faith, saying: "there's male and female, but there's also diverse, which is a lot of genders, well I actually don't know how many".
|
||||
|
||||
I also noticed that my drawing tablet's hinge broke!! It's very frustrating, though I can fortunately still use it, just without the ability to adjust it (it's just stuck on the max angle).
|
||||
34
src/routes/feed/electronics/nintendo-repairs.md
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: Nintendo Handheld Repairs
|
||||
subtitle: it's been 8 years...
|
||||
date: 2026-04-16 – 2026-04-23
|
||||
posted: 2026-04-24
|
||||
images:
|
||||
- cardboard
|
||||
- knifetoswitch
|
||||
- 3dsopen
|
||||
- thread
|
||||
- threadsuccess
|
||||
- 3dsfunctional
|
||||
imageAlts:
|
||||
- A Nintendo Switch with its back removed. The SD card reader connector is obstructed by a pink piece of cardboard.
|
||||
- The SD card reader connector of a Nintendo Switch currently being stabbed with a knife in an attempt at repair.
|
||||
- A 2011 Nintendo 3DS with its back covers removed on both the top and the bottom half.
|
||||
- The hinge of a 3DS with some ribbon cables halfway pulled through.
|
||||
- The hinge of a 3DS with three ribbon cables successfully pulled through.
|
||||
- A functional 2011 Nintendo 3DS on the home screen, displaying the game "Zelda Four Swords Anniversary Edition"
|
||||
# - The back of a Samsung Galaxy S20 FE lying face-down on a deskmat. Toothpicks, cotton pads, and a metal spudger are lying nearby.
|
||||
# - A white phone back that's half-scratched off to reveal the clear plastic.
|
||||
# - An entirely clear phone back.
|
||||
# - A Samsung Galaxy S20 FE with a clear back inside a clear phone case. The phone has a sticker in the middle of the back that shows a lantern with leaves around it.
|
||||
---
|
||||
|
||||
I disassembled my Switch because I wanted to check whether the battery was swollen inside. It's had some battery issues (although they seem to have gone away lately). During reassembly, I put too much force on the SD card reader and broke it. Ordered a new part, replaced it, but turns out I broke the board-side connector too. It doesn't grip the ribbon cable like it should. Squishing some cardboard in there to keep the cable connected and level with the board helped. I was worried it would fail, but it's been a couple of days now and it still works flawlessly. Just in time, too; I started playing the new Tomodachi Life and need the storage for all the screenshots and videos I'm capturing.
|
||||
|
||||
I also decided to tackle my 2011 3DS again. It broke in 2018: I was playing Super Mario Maker on the couch when it suddenly made a pop sound and turned off. When I disassembled it, I found that not only have I left the 3DS in a dismal state the last time I opened it -- most of the cables weren't even connected, not to mention the missing Y button, the removed battery due to swelling and the broken shoulder buttons --, but the ribbon cable connecting the speakers and top screen backlight had a *tear!* Finally, I knew what the problem may be!
|
||||
|
||||
I ordered a replacement cable and tackled the most challenging task imaginable when repairing a 3DS -- threading a cable through the hinge. It's a miracle I didn't destroy another cable in the process. I also replaced the Y button with a 3D printed one I quickly designed in FreeCAD. It works fine enough.
|
||||
|
||||
The 3DS works again!! It's been 8 years since it last booted!! I unfortunately don't have its SD card anymore, so the data is gone, but the system works! Truly a miracle.
|
||||
|
||||
Only thing left to do now is to fix the [USB-C port on my New 3DS](/projects/electronics/3ds-usb-c/)... it stopped accepting C-to-C connections, although A-to-C still works. Probably just need to resolder or replace the 5.1kΩ resistor.
|
||||
@@ -2,6 +2,7 @@
|
||||
title: Transparent Phone Back
|
||||
subtitle: nowhere to hide!
|
||||
date: 2026-04-11 – 2026-04-12
|
||||
posted: 2026-04-12
|
||||
images:
|
||||
- scratching
|
||||
- halfway
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
export let entries: string[] = [
|
||||
"electronics/nintendo-repairs",
|
||||
"electronics/trans-phone",
|
||||
"drawings/lecturer-gender",
|
||||
];
|
||||
|
||||
export function getLatestFeedItem(): Promise<any> {
|
||||
return import(`./${entries[0]}.md`);
|
||||
}
|
||||
@@ -1,84 +0,0 @@
|
||||
<script lang="ts">
|
||||
import ImageGallery from "$lib/lists/image-gallery.svelte";
|
||||
</script>
|
||||
|
||||
Back in January, I was thinking to myself that I'd really like to learn to draw. It would have some practical benefits like potentially being able to draw concept art for my game, but ultimately I just liked the idea of drawing as a hobby. I doodled a few small things before deciding that I should challenge myself to draw something every single day for an entire month (4 weeks); I documented the entire thing, but spoiler alert: I think I succeeded in learning to draw and I am now able to sketch things I was never able to before!
|
||||
|
||||
Here are some of my favourite drawings from around that time, in chronological order:
|
||||
|
||||
<ImageGallery
|
||||
images={[
|
||||
{
|
||||
src: "/blog/2026/0129/girl.webp",
|
||||
alt: "A small drawing of an anime-style girl's head. She has a ponytail and is looking towards the left with a concentrated gaze.",
|
||||
desc: [
|
||||
"<b>2026-01-29</b> (before the challenge)",
|
||||
"A small sketch (only like 4cm wide) that I drew with a ballpoint pen on pink paper. The fact that I was able to sketch this, without any prior practice, plus an intrinsic want to be able to draw made me seriously consider learning to draw.",
|
||||
"Having learned just a little bit about drawing, I can say now (a month and a half later) that this isn't great, but it served its purpose of making me start to draw!",
|
||||
],
|
||||
},
|
||||
{
|
||||
src: "breadgirl.webp",
|
||||
alt: "An anime-style girl chewing on a piece of bread. She wears a ponytail and a sleeveless top.",
|
||||
desc: [
|
||||
"<b>2026-01-30</b> (before the challenge)",
|
||||
"I drew her during a game of Wizard. I initially wanted to make her chew on a whole loaf but I didn't know how to draw that.",
|
||||
"Wasn't really sure how to convey that her mouth is full either, but in retrospect, I could have exaggerated the bow in her lower eyelids to do so.",
|
||||
"I like her eyes. Her head could be taller, actually.",
|
||||
],
|
||||
},
|
||||
{
|
||||
src: "/blog/2026/0205/13-2.webp",
|
||||
alt: "A pencil drawing of a girl looking to the left. She is wearing a cropped loose tee and jeans, while her right hand is hinted to rest on her hip.",
|
||||
desc: [
|
||||
"<b>2026-02-18</b>",
|
||||
"She's the product of me trying to re-draw the character I drew on day 1 of my drawing challenge, and I was really glad to see that I had actually improved!",
|
||||
],
|
||||
},
|
||||
{
|
||||
src: "/blog/2026/0205/18.webp",
|
||||
alt: "A pencil sketch of a girl holding up a V sign with her left arm. She is wearing a long-sleeve shirt, jeans, and her hair is tied up in a ponytail. She is winking, the other eye is coloured green. Her body is tilted towards the right side of the paper. In the top right corner is a lightly-drawn sketch of the girl's pose.",
|
||||
desc: [
|
||||
"<b>2026-02-23</b>",
|
||||
"My first character with the new style of drawing eyes I picked up from a manga drawing book!",
|
||||
"I named her Emilia because she looked like a more nice and caring character.",
|
||||
],
|
||||
},
|
||||
{
|
||||
src: "/blog/2026/0205/21.webp",
|
||||
alt: "Two pencil sketches traced over with a black fineliner. The left one is of a hand with a cube in its palm, sketched after the hand on the cover of Porter Robinson's album Worlds. Beneath it is an emoticon used on the same cover. To the right is a manga-style head with green eyes and wavy hair, meant to resemble Porter Robinson's Vocaloid mascot Po-Uta.",
|
||||
desc: [
|
||||
"<b>2026-02-26</b>",
|
||||
"I drew the Worlds hand for practice and then decided to draw Po-Uta's head as well. I realised then that learning to draw gave me the ability to draw fanart.",
|
||||
"I had never considered that possibility before.",
|
||||
],
|
||||
},
|
||||
{
|
||||
src: "/blog/2026/0205/22.webp",
|
||||
alt: "A pencil sketch of a girl with a ponytail, crop top, and track pants with a slightly shocked look on her face. She is looking at her right arm, which is a cyborg part.",
|
||||
desc: [
|
||||
"<b>2026-02-27</b>",
|
||||
"Possibly my favourite sketch from the drawing challenge, because she looks cool, but also because her design deviates from the other characters a bit.",
|
||||
],
|
||||
},
|
||||
{
|
||||
src: "/blog/2026/0205/27-1.webp",
|
||||
alt: "A drawing of a girl with her head tilted towards her right shoulder. She is smiling with her eyes closed and is holding up a victory sign with her left hand. She has her hair in a ponytail and is wearing jeans with shoulder straps, and there is a scrunchie on her left wrist as well.",
|
||||
desc: [
|
||||
"<b>2026-03-04</b>",
|
||||
"This is actually the construction sketch of a drawing I later went over with a fineliner and coloured pencils. However, I kind of prefer the pencil sketch.",
|
||||
"This was my first attempt at a head-on perspective. I had fun drawing details like the scrunchie, the jeans, and the smile!",
|
||||
],
|
||||
},
|
||||
{
|
||||
src: "0310.webp",
|
||||
alt: "A digital drawing of a girl with long brown hair in a ponytail. She has green eyes and is wearing a cropped shirt with stripes, an orange spaghetti top underneath, and dark trousers. She is holding her hands behind her back.",
|
||||
desc: [
|
||||
"<b>2026-03-10</b> (after the challenge)",
|
||||
"ok i changed my mind on digital art. it's awesome.",
|
||||
"My first drawing using Krita! I went with my usual methods but tried refining some things and adding (hopefully not overly misplaced) shadows too. I ended up really liking the ability to use layers, and colour in digital art just pops so nicely.",
|
||||
"Initially, I drew the left arm in front of her body but later changed this to avoid drawing the hand.",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
@@ -24,22 +24,32 @@ Software-wise, I set this up with the original deej software to control main vol
|
||||
{
|
||||
src: "prototype.webp",
|
||||
alt: "An Arduino Pro Micro with a white LED attached to it. The LED is glowing.",
|
||||
desc: ["initial prototype to test LED functionality"],
|
||||
desc: [
|
||||
"I initially tested whether I could get the Arduino to light up an LED. I wanted to include LEDs because I thought I could later integrate them in a cool way, but the device ended up being so simple, there wasn't really a need for much visual feedback.",
|
||||
],
|
||||
},
|
||||
{
|
||||
src: "soldering.webp",
|
||||
alt: "An Arduino with keyboard switches, LEDs, and a slider wired into it. The components are connected with relatively long cables.",
|
||||
desc: ["it may look like a prototype, but these are the production-ready innards of the machine!"],
|
||||
desc: [
|
||||
"It may look like a prototype, but these are the production-ready innards of the machine! Trying to put this into the 3D printed shell without breaking any of the frail soldering joints was a pain, especially as the key switches really weren't meant for soldering and thus barely hold on to the wires.",
|
||||
],
|
||||
},
|
||||
{
|
||||
src: "printing.webp",
|
||||
alt: "A Bambu Lab A1 mini 3D printer in the middle of printing casing parts using a golden filament. The printer head has two googly eyes attached.",
|
||||
desc: ["googly-eyed printer hard at work"],
|
||||
desc: [
|
||||
"googly-eyed printer hard at work.",
|
||||
"I'm using Bambu Lab PLA Metal 'Iridium Gold Metallic (13400)' for the body here.",
|
||||
],
|
||||
},
|
||||
{
|
||||
src: "assembly.webp",
|
||||
alt: "An Arduino set into a 3D printed case with a slider, two LEDs, and four key switches soldered to it using wires. The components are spread out and hanging out the top of the case.",
|
||||
desc: ["no PCB? no problem"],
|
||||
desc: [
|
||||
"A visual guide to the (mental) pain I had to endure assembling this thing. Creating a simple PCB would have been MUCH better, but it would have meant designing one in KiCad, paying for at least 5 of them at a supplier, waiting for them to ship, etc. ...",
|
||||
"Safe to say, I wasn't willing to do any of that. Quick and cheap was my preferred method here.",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
@@ -22,7 +22,6 @@ export interface Link {
|
||||
|
||||
export enum ProjectCategory {
|
||||
NULL = "all",
|
||||
DRAWINGS = "drawings",
|
||||
GAMES = "games",
|
||||
ELECTRONICS = "electronics",
|
||||
MUSIC = "music",
|
||||
@@ -107,24 +106,6 @@ export const projects: Project[] = [
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
category: ProjectCategory.DRAWINGS,
|
||||
id: "firstmonth",
|
||||
banner: "banner.webp",
|
||||
bannerAlt: "Several Faber-Castell Polychromos colour pencils lined up with markings next to them in the same colour on a sheet of paper.",
|
||||
title: "My First Month Drawing",
|
||||
subtitle: "self-imposed drawing challenge",
|
||||
description: "",
|
||||
isOngoing: false,
|
||||
date: "February – March 2026",
|
||||
status: ProjectStatus.FINISHED,
|
||||
links: [
|
||||
{
|
||||
text: "accompanying blog post",
|
||||
link: "/blog/2026/0205",
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
// 2025
|
||||
{
|
||||
|
||||
|
Before Width: | Height: | Size: 932 KiB After Width: | Height: | Size: 932 KiB |
BIN
static/drawings/2026/0318.webp
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
static/drawings/2026/0328.webp
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
static/drawings/2026/0329.webp
Normal file
|
After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 131 KiB |
BIN
static/drawings/2026/0417.webp
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
static/drawings/2026/0420.webp
Normal file
|
After Width: | Height: | Size: 348 KiB |
BIN
static/drawings/2026/0421.webp
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
static/drawings/2026/0424_ball.webp
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
static/drawings/2026/0424_hand.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 254 KiB |
BIN
static/feed/electronics/nintendo-repairs/3dsfunctional.webp
Normal file
|
After Width: | Height: | Size: 213 KiB |
BIN
static/feed/electronics/nintendo-repairs/3dsopen.webp
Normal file
|
After Width: | Height: | Size: 418 KiB |
BIN
static/feed/electronics/nintendo-repairs/cardboard.webp
Normal file
|
After Width: | Height: | Size: 238 KiB |
BIN
static/feed/electronics/nintendo-repairs/knifetoswitch.webp
Normal file
|
After Width: | Height: | Size: 143 KiB |
BIN
static/feed/electronics/nintendo-repairs/thread.webp
Normal file
|
After Width: | Height: | Size: 372 KiB |
BIN
static/feed/electronics/nintendo-repairs/threadsuccess.webp
Normal file
|
After Width: | Height: | Size: 199 KiB |