From a6c74f5c4f961602864a140d4de96a0bb9224c5c Mon Sep 17 00:00:00 2001 From: Victor Westerlund Date: Sat, 29 Mar 2025 07:34:54 +0000 Subject: [PATCH] feat: add web highlights section to work page (#34) This PR adds a "web highlights" section to the work page. Reviewed-on: https://codeberg.org/vlw/vlw.se/pulls/34 --- public/assets/css/pages/work.css | 21 +++++-- public/assets/css/pages/work/archive.css | 16 +++++ public/assets/js/pages/work/archive.js | 4 ++ public/assets/media/img/preview-deltaco.avif | Bin 0 -> 12708 bytes public/assets/media/img/preview-genemate.avif | Bin 0 -> 11425 bytes public/assets/media/img/preview-icellate.avif | Bin 0 -> 8392 bytes public/work.php | 59 +++++++++++------- public/work/archive.php | 12 ++++ src/Database/Models/Work/Work.php | 6 +- 9 files changed, 89 insertions(+), 29 deletions(-) create mode 100644 public/assets/css/pages/work/archive.css create mode 100644 public/assets/js/pages/work/archive.js create mode 100644 public/assets/media/img/preview-deltaco.avif create mode 100644 public/assets/media/img/preview-genemate.avif create mode 100644 public/assets/media/img/preview-icellate.avif create mode 100644 public/work/archive.php diff --git a/public/assets/css/pages/work.css b/public/assets/css/pages/work.css index 0cb02c4..d634bfb 100644 --- a/public/assets/css/pages/work.css +++ b/public/assets/css/pages/work.css @@ -128,19 +128,28 @@ section.featured featured-item .title svg { fill: var(--color-accent); } -/* ### Languages */ - -/* ### Actions */ +section.featured featured-item img { + width: 100%; + border-radius: 4px; +} section.featured featured-item .actions { - gap: 5px; + gap: var(--padding); + width: 100%; display: flex; + flex-direction: column; padding-top: var(--padding); margin-top: auto; } /* # Size queries */ +@media (min-width: 400px) { + section.featured featured-item .actions { + flex-direction: row; + } +} + @media (min-width: 600px) { section.hero { grid-template-columns: repeat(2, 1fr); @@ -151,4 +160,8 @@ section.featured featured-item .actions { section.featured { grid-template-columns: repeat(3, 1fr); } + + section.featured featured-item .actions button.collapse p { + display: none; + } } \ No newline at end of file diff --git a/public/assets/css/pages/work/archive.css b/public/assets/css/pages/work/archive.css new file mode 100644 index 0000000..1e71dc1 --- /dev/null +++ b/public/assets/css/pages/work/archive.css @@ -0,0 +1,16 @@ +/* # Overrides */ + +:root { + --primer-color-accent: 3, 255, 219; + --color-accent: rgb(var(--primer-color-accent)); + --hue-accent: 90deg; +} + +vv-shell { + display: flex; + flex-direction: column; + gap: var(--padding); + width: 100%; + max-width: 1200px; + overflow-x: initial; +} \ No newline at end of file diff --git a/public/assets/js/pages/work/archive.js b/public/assets/js/pages/work/archive.js new file mode 100644 index 0000000..12bc846 --- /dev/null +++ b/public/assets/js/pages/work/archive.js @@ -0,0 +1,4 @@ +// Redirect to work page if no href is defined +if (!new URLSearchParams(window.location.search).has("href")) { + new vv.Navigation("/work").navigate(); +} \ No newline at end of file diff --git a/public/assets/media/img/preview-deltaco.avif b/public/assets/media/img/preview-deltaco.avif new file mode 100644 index 0000000000000000000000000000000000000000..85a0e33fd5e8ffaf2aa748523d4c6f82aa71b8a3 GIT binary patch literal 12708 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 QA9(y>`$m{l_^$H%f9M-zssI20 literal 0 HcmV?d00001 diff --git a/public/assets/media/img/preview-genemate.avif b/public/assets/media/img/preview-genemate.avif new file mode 100644 index 0000000000000000000000000000000000000000..ad2eb348c50b9f0ed27254a582a08e29240d9565 GIT binary patch literal 11425 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 literal 0 HcmV?d00001 diff --git a/public/assets/media/img/preview-icellate.avif b/public/assets/media/img/preview-icellate.avif new file mode 100644 index 0000000000000000000000000000000000000000..67b403f7e867581b7d3d667f6ff0c2ba35f8ee8e GIT binary patch literal 8392 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 I put my own website here, is that cheating? Maybe, but I think this site counts as the most important thing I've personally created. I've only used my own libraries and frameworks to create this website, so it kind of works as a live demonstration of many of my web projects bundled together.

- - -
- -
-

Silly dabbles

-

I create silly things for fun to challenge myself sometimes, and putting them all on the timeline is not right. So I made an appropriately-themed and named page to highlight most of my "what if I could" projects.

- @@ -83,35 +71,60 @@
- +

🍰

+
+

Still Alive

+

I recreated the end credits from the video game Portal using pure JavaScript and browser windows. It was created using my old [abandoned] animation library and some patience. It's not perfect, it notably has a few time-drifting issues.

+ +
+ +
+

web highligts

+
+ + \ No newline at end of file diff --git a/src/Database/Models/Work/Work.php b/src/Database/Models/Work/Work.php index c94f643..f591789 100644 --- a/src/Database/Models/Work/Work.php +++ b/src/Database/Models/Work/Work.php @@ -16,6 +16,8 @@ require_once VV::root("src/Database/Models/Work/Action.php"); class Work extends Model { + public const DATE_FORMAT = "Y-m-d"; + public function __construct(public readonly string $id) { parent::__construct(Endpoints::WORK, [ WorkTable::ID->value => $this->id @@ -34,8 +36,8 @@ return $this->get(WorkTable::SUMMARY->value); } - public function created(): DateTimeImmutable { - return new DateTimeImmutable($this->get(WorkTable::CREATED->value)); + public function created(): \DateTimeImmutable { + return new \DateTimeImmutable($this->get(WorkTable::CREATED->value)); } public function tags(): array {