fix: move about assets into src
All checks were successful
Docker / build-and-push-image (push) Successful in 1m0s
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
BIN
src/assets/gradient.avif
Normal file
After Width: | Height: | Size: 570 B |
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 107 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
@ -55,16 +55,16 @@ if (article.data.extraAuthors && article.data.extraAuthors.length !== 0) {
|
|||
<Icon name="mdi:calendar" />
|
||||
{
|
||||
!article.data.updated ? (
|
||||
<p title="Date">
|
||||
<p>
|
||||
<FormattedDate date={article.data.date} />
|
||||
</p>
|
||||
) : (
|
||||
<>
|
||||
<p title="Date">
|
||||
<p>
|
||||
<FormattedDate date={article.data.date} />
|
||||
</p>
|
||||
<Icon name="mdi:trending-up" />
|
||||
<p title="Updated">
|
||||
<p>
|
||||
<FormattedDate date={article.data.updated} />
|
||||
</p>
|
||||
</>
|
||||
|
@ -75,7 +75,7 @@ if (article.data.extraAuthors && article.data.extraAuthors.length !== 0) {
|
|||
isPost ? (
|
||||
<div class="flex items-center gap-2">
|
||||
<Icon name="mdi:timer" />
|
||||
<p title="Word count">{readingTime(article.body)}</p>
|
||||
<p>{readingTime(article.body)}</p>
|
||||
</div>
|
||||
) : null
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ if (article.data.extraAuthors && article.data.extraAuthors.length !== 0) {
|
|||
article.data.extraAuthors ? (
|
||||
<div class="flex items-center gap-2">
|
||||
<Icon name="mdi:account-plus" />
|
||||
<p title="Collaborators" set:html={formattedList} />
|
||||
<p set:html={formattedList} />
|
||||
</div>
|
||||
) : null
|
||||
}
|
||||
|
|
|
@ -14,10 +14,9 @@ import { Icon } from "astro-icon/components";
|
|||
<div class="text-tertiary flex flex-row items-center gap-4">
|
||||
{
|
||||
SITE.LINKS.map((i) => (
|
||||
<Link href={i.href}>
|
||||
<Link href={i.href} aria-label={i.name}>
|
||||
<Icon
|
||||
name={i.icon}
|
||||
title={i.name}
|
||||
class="hover:text-secondary h-4 w-auto transition-colors duration-300"
|
||||
/>
|
||||
</Link>
|
||||
|
|
|
@ -22,7 +22,6 @@ const { items } = Astro.props as Props;
|
|||
<Image
|
||||
src={item.src}
|
||||
alt={item.alt}
|
||||
title={item.alt}
|
||||
loading="eager"
|
||||
class="mt-0 mb-0 h-full max-h-[90svh] w-full object-cover"
|
||||
/>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
import { SITE } from "@consts";
|
||||
import gradient from "../../public/assets/gradient.avif";
|
||||
import gradient from "@assets/gradient.avif";
|
||||
import { Font } from "astro:assets";
|
||||
|
||||
interface Props {
|
||||
|
|
|
@ -9,10 +9,9 @@ const currentPath = pathname.replace(/\/$/, "");
|
|||
|
||||
<header class="mx-auto w-full">
|
||||
<nav class="flex w-full justify-between">
|
||||
<a href="/" aria-label={SITE.TITLE} title={SITE.TITLE}>
|
||||
<a href="/" aria-label={SITE.TITLE}>
|
||||
<Icon
|
||||
name="icon"
|
||||
title={SITE.TITLE}
|
||||
class="hover:text-tertiary h-8 w-auto transition-colors duration-500 ease-in-out"
|
||||
/>
|
||||
</a>
|
||||
|
|
|
@ -16,7 +16,6 @@ const { collection } = Astro.props;
|
|||
<Image
|
||||
src={collection.data.image.url}
|
||||
alt={collection.data.image.alt}
|
||||
title={collection.data.title}
|
||||
loading="eager"
|
||||
class="aspect-[2/1] object-cover transition-all duration-300 ease-in-out group-hover:brightness-50"
|
||||
fit="cover"
|
||||
|
|
|
@ -27,7 +27,6 @@ const { interval = 3000, images } = Astro.props;
|
|||
<Image
|
||||
src={image.data.image.url}
|
||||
alt={`Slide ${index + 1}`}
|
||||
title={image.data.title}
|
||||
class="h-full w-full rounded-sm object-cover transition-all duration-300 group-hover:brightness-50"
|
||||
loading="eager"
|
||||
/>
|
||||
|
|
|
@ -40,6 +40,7 @@ Many will try to stop you as you race out in search of the final piece of your m
|
|||
The game is not yet available but can be wishlisted on [Steam](https://store.steampowered.com/app/3012740/MUST_FIND_BEANS/) in preparation for when it releases. I was inspired to make this game after testing out Godot within a module in University for which I produced a small prototype [horror experience](https://troylusty.itch.io/kikimora).
|
||||
|
||||

|
||||
|
||||
> Brute enemy model from current development not yet in the playtest.
|
||||
|
||||
## Screenshots
|
||||
|
|
|
@ -6,16 +6,16 @@ import { Icon } from "astro-icon/components";
|
|||
import Link from "@components/Link.astro";
|
||||
import { createSlug } from "@lib/utils";
|
||||
|
||||
import me from "./me.jpg";
|
||||
import camoicon from "./camouflage-store.png";
|
||||
import nisaicon from "./nisa.png";
|
||||
import pphicon from "./paigntonpicturehouse.png";
|
||||
import webbossicon from "./webboss.png";
|
||||
import me from "@assets/me.jpg";
|
||||
import camoicon from "@assets/camouflage-store.png";
|
||||
import nisaicon from "@assets/nisa.png";
|
||||
import pphicon from "@assets/paigntonpicturehouse.png";
|
||||
import webbossicon from "@assets/webboss.png";
|
||||
|
||||
import uopicon from "./uop.png";
|
||||
import ucsdicon from "./ucsd.png";
|
||||
import sdcicon from "./sdc.png";
|
||||
import keviccicon from "./kevicc.png";
|
||||
import uopicon from "@assets/uop.png";
|
||||
import ucsdicon from "@assets/ucsd.png";
|
||||
import sdcicon from "@assets/sdc.png";
|
||||
import keviccicon from "@assets/kevicc.png";
|
||||
|
||||
const projects = [
|
||||
{
|
||||
|
@ -24,7 +24,7 @@ const projects = [
|
|||
description:
|
||||
"A fast-paced first person shooter set following the realization that you’re all out of beans. The problem is, you’re nearing the end of cooking all the other items and you can’t just not have them. Without beans, the day just won’t be started off right.",
|
||||
tags: ["Godot", "Blender", "GIMP", "Steamworks"],
|
||||
link: "/projects/must-find-beans",
|
||||
link: "https://troylusty.com/projects/must-find-beans",
|
||||
done: false,
|
||||
},
|
||||
{
|
||||
|
@ -48,7 +48,7 @@ const projects = [
|
|||
description:
|
||||
"A collection of digital artwork created with a variety of tools.",
|
||||
tags: ["Blender", "Cinema 4D", "DaVinci Resolve"],
|
||||
link: "/projects",
|
||||
link: "https://troylusty.com/projects",
|
||||
done: true,
|
||||
},
|
||||
{
|
||||
|
@ -57,7 +57,7 @@ const projects = [
|
|||
description:
|
||||
"Packard is a simple terminal based RSS aggregator meant to allow you to take a quick glance at what’s occurring in topics you care about.",
|
||||
tags: ["Rust", "Tokio", "Clap", "NixOS Flake"],
|
||||
link: "/projects/packard",
|
||||
link: "https://troylusty.com/projects/packard",
|
||||
done: true,
|
||||
},
|
||||
];
|
||||
|
@ -102,7 +102,7 @@ const education = [
|
|||
name: "University of Plymouth",
|
||||
image: uopicon,
|
||||
course: "BA (Hons) Game Arts and Design",
|
||||
date: "2024 - Now",
|
||||
date: "2024 - 2025",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
|
@ -124,7 +124,7 @@ const education = [
|
|||
name: "King Edward VI Community College",
|
||||
image: keviccicon,
|
||||
course:
|
||||
"Art & Design BTEC, Comp Sci A-level, 10 GCSEs, Creative iMedia Level 2",
|
||||
"Art & Design BTEC, Computer Science A-level, 10 GCSEs, Creative iMedia Level 2",
|
||||
date: "2014 - 2020",
|
||||
},
|
||||
];
|
||||
|
@ -152,31 +152,35 @@ const sortedEducation = [...education].sort((a, b) => a.id - b.id);
|
|||
</p><div class="text-secondary/70 flex gap-x-1 pt-1 text-sm print:hidden">
|
||||
<Link
|
||||
href="/"
|
||||
aria-label="Website"
|
||||
class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full p-2 text-center text-sm text-nowrap capitalize transition-colors duration-300"
|
||||
>
|
||||
<Icon name="mdi:link-variant" title="Website" class="h-4 w-4" />
|
||||
<Icon name="mdi:link-variant" class="h-4 w-4" />
|
||||
</Link>
|
||||
<Link
|
||||
href={`mailto:${SITE.EMAIL}`}
|
||||
aria-label="Email"
|
||||
class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full p-2 text-center text-sm text-nowrap capitalize transition-colors duration-300"
|
||||
>
|
||||
<Icon name="mdi:email" title="Email" class="h-4 w-4" />
|
||||
<Icon name="mdi:email" class="h-4 w-4" />
|
||||
</Link>
|
||||
<Link
|
||||
href="https://code.threepop.com"
|
||||
aria-label="Git"
|
||||
class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full p-2 text-center text-sm text-nowrap capitalize transition-colors duration-300"
|
||||
>
|
||||
<Icon name="mdi:git" title="Git" class="h-4 w-4" />
|
||||
<Icon name="mdi:git" class="h-4 w-4" />
|
||||
</Link>
|
||||
<Link
|
||||
href="https://store.steampowered.com/developer/troy"
|
||||
aria-label="Steam"
|
||||
class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full p-2 text-center text-sm text-nowrap capitalize transition-colors duration-300"
|
||||
>
|
||||
<Icon name="mdi:steam" title="Steamworks" class="h-4 w-4" />
|
||||
<Icon name="mdi:steam" class="h-4 w-4" />
|
||||
</Link>
|
||||
</div>
|
||||
<p
|
||||
class="text-secondary/70 hidden max-w-md items-center text-sm text-pretty print:flex"
|
||||
class="text-secondary/70 hidden max-w-md items-center text-pretty print:flex"
|
||||
>
|
||||
<Link
|
||||
class="inline-flex gap-x-1.5 align-baseline leading-none hover:underline"
|
||||
|
@ -218,7 +222,7 @@ const sortedEducation = [...education].sort((a, b) => a.id - b.id);
|
|||
</p>
|
||||
</section>
|
||||
|
||||
<section class="animate-reveal opacity-0 [animation-delay:0.2s]">
|
||||
<section class="animate-reveal opacity-0 [animation-delay:0.2s] print:hidden">
|
||||
<div
|
||||
class="flex flex-col-reverse justify-between gap-5 rounded-sm bg-yellow-200/20 p-6 transition-transform duration-300 hover:scale-102 md:flex-row dark:bg-yellow-900/20"
|
||||
>
|
||||
|
@ -352,14 +356,17 @@ const sortedEducation = [...education].sort((a, b) => a.id - b.id);
|
|||
class="inline-flex items-center gap-1 font-medium underline hover:no-underline"
|
||||
>
|
||||
{project.done ? (
|
||||
<span class="mr-1 h-1 w-1 rounded-full bg-green-500" />
|
||||
<span class="mr-1 h-1.5 w-1.5 rounded-full bg-green-600 dark:bg-green-400" />
|
||||
) : (
|
||||
<span class="mr-1 h-1 w-1 rounded-full bg-amber-500" />
|
||||
<span class="mr-1 h-1.5 w-1.5 rounded-full bg-amber-600 dark:bg-amber-400" />
|
||||
)}
|
||||
{project.name}
|
||||
</Link>
|
||||
</h3>
|
||||
<p class="text-secondary/70 text-sm">{project.description}</p>
|
||||
<p class="text-secondary/40 hidden text-xs print:block">
|
||||
Available at {project.link}.
|
||||
</p>
|
||||
</>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -59,3 +59,9 @@
|
|||
@apply underline decoration-2 underline-offset-2;
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
|