Update to Eleventy v3 (#11)

* feat: upgrade to v3; install eleventy-upgrade-help

* feat: convert all files to esm

* feat: remove decapcms

* fix: remove unused filter

* feat: remove netlify packages

* feat: update image handling

- removes old image shortcode
- update to latest 11ty image transform plugin

* feat: update colophon

* fix: pill style; global style

Fixes an issue with <img> inside <figure> not being centered

* feat: remove linting packages

* feat: update package.json scripts

* feat: remove upgrade helper plugin

* feat: add new button style, update nav

* feat: simplify `pill` class usage

* feat: fix tag list in catalogue-item.html

* feat: move games into their own section

* feat: update node version to latest LTS

* feat: move books to their own section

* feat: move fun pages into pages dir

* feat: update index and book/game templates

* feat: add watching section

* fix: update scaling values for buttons

* feat: various css updates

* feat: update now page style

* feat: cleaning up newer posts using old shortcode

also adding markdown-it-attrs to add attrs to various markdown elements!

* fix: movie data structure

* feat: update colophon

* fix: remove text-skew from post excerpt text

* feat: add support for shows in /watching

* fix: update book tags

* feat: add complete implementation of books pages

other stuff happened too

* fix: image border-radius

* feat: update game layout and content

* feat: reorganize watching section

* feat: add contact page

* feat: small page changes

* feat: add podroll page

* feat: reorganize content directories

* feat: exclude podcasts from page output

* chore: delete guestbook page

* chore: remove bracket syntax for css classes in html

* feat: create macro for tag list

* fix: colophon update

* chore: remove last.fm data

* chore: clean up 11ty config

* fix: misc permalink fixes

* feat: add update post

* fix: media meta grid on mobile

* fix: tables on mobile

* fix: add titles to icon button links

* fix: add missing divider for movies/shows

* feat: add alternate feeds

* fix: tag cleanup

* feat: homepage content update

* fix: game meta data

* fix: update post dates

* feat: add missing link to changelog
This commit is contained in:
Devin Haska 2025-01-27 18:23:38 -08:00 committed by GitHub
parent e28e804e12
commit 5f8227a46b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
282 changed files with 4577 additions and 5016 deletions

View file

@ -4,7 +4,7 @@ title: 404 - Can't Find That Frog
youtube: true
---
<section class="[ flow ]">
<section class="flow">
<h1>404 🍞</h1>
<p>Couldn't find what you're looking for. But would you like some bread for your journey home? 🥖</p>
{% youtube "GQw-aEk05qY", "Call 1800 Tobë ( Bread Ad )" %}

View file

@ -5,6 +5,8 @@ description: All about me!
# About me
**See also**: [Stuff I use](/uses), my [contact info](/contact), or [what's happening now](/now).
Hello! Ahoj! Welcome to my site!
My name is **Devin Haska** and this is my little slice of the internet I call home.
@ -13,7 +15,7 @@ Here's a non-exhaustive list of topics you'll find here: web development, music,
I really like frogs, like a lot. So I made myself a mascot. They don't have a name yet, but perhaps you can think of one?
{% image "https://cdn.wonderfulfrog.com/images/logo.svg", "A pixel art version of a frog. They are currently unnamed.", "What should we call them?" %}
![A pixel art version of a frog. They are currently unnamed.](https://cdn.wonderfulfrog.com/images/logo.svg "What should we call them?")
## Professional

View file

@ -3,7 +3,7 @@ title: Blogroll
description: A collection of my favourite sites.
---
<section class="[ flow ]">
<section class="flow">
<h1>Blogroll</h1>
<p>A collection of my favourite sites, in no particular order.</p>
<p>

View file

@ -0,0 +1,15 @@
---
title: Favourite books
permalink: "books/favourites/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.book | filterFavourites | reverse %}
<a class="button" href="/books">
{% include "svgs/arrow-left.svg" %}
Back to books</a>
<section class="flow">
<h1>Favourite book</h1>
<p>A collection of my favourite books!</p>
{{ grid(data) }}
</section>

View file

@ -0,0 +1,33 @@
---
title: Books
permalink: "books/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.book | reverse | limit(5) %}
{% set faves = collections.book | filterFavourites | reverse | limit(5) %}
{% set tags = collections.book | allTagCounts(["book"]) | limit(5) %}
<section class="flow">
<h1>Books</h1>
<p>A collection of books I've read over the years. I hope one day its an exhaustive list.</p>
<h2>
<a href="tags">Tags</a>
</h2>
<ul class="categories cluster list-none p-0 line-height-m">
{% for tag in tags %}
<li>
<a class="button" href="tag/{{ tag.tag | slugify }}">
{% include "svgs/frame.svg" %}
{{ tag.tag }}</a>
</li>
{% endfor %}
</ul>
<h2>
<a href="recent">Recent books</a>
</h2>
{{ grid(data) }}
<h2>
<a href="favourites">Favourite books</a>
</h2>
{{ grid(faves) }}
</section>

View file

@ -0,0 +1,12 @@
---
title: Recent books
permalink: "books/recent/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.book | reverse %}
<section class="flow">
<h1>Recent books</h1>
<p>A collection of books I've read.</p>
{{ grid(data) }}
</section>

15
src/pages/books/tag.html Normal file
View file

@ -0,0 +1,15 @@
---
pagination:
data: collections.booksByTag
size: 1
alias: tag
permalink: "books/tag/{{ tag | slugify }}/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.booksByTag[tag] %}
<header class="flow flow-space-1">
<h1>Books</h1>
<p class="text-fadeText flow-space-0.25">Tagged with "{{ tag }}"</p>
</header>
{{ grid(data) }}

19
src/pages/books/tags.html Normal file
View file

@ -0,0 +1,19 @@
---
title: Tagged in Books
permalink: "books/tags/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set tags = collections.book | allTagCounts(["book"]) %}
<section class="flow">
<h1>Tagged in Books</h1>
<ul class="categories cluster list-none p-0 line-height-m">
{% for tag in tags %}
<li>
<a class="button" href="../tag/{{ tag.tag | slugify }}">
{% include "svgs/frame.svg" %}
{{ tag.tag }}</a>
</li>
{% endfor %}
</ul>
</section>

View file

@ -1,25 +0,0 @@
---
pagination:
data: collections.catalogueByType
size: 1
alias: type
filter:
- catalogue
eleventyExcludeFromCollections: true
permalink: /catalogue/{{ type | pluralize | slugify }}/index.html
eleventyComputed:
title: Catalogue - {{ type | pluralize | capitalize }}
description: My thoughts on various {{ type | pluralize }}.
---
{% from "macros/catalogue.njk" import yearList %}
<h1>Catalogue: {{ type | pluralize | capitalize }}</h1>
{% include "partials/catalogue-types.html" %}
{% set itemsByYear = collections.catalogueByType[type] | reverse | organizeByDate %}
{% set years = itemsByYear | keys | sort("desc") %}
<section class="[ flow ]">
{% for year in years %}
{% set itemsInYear = itemsByYear[year] %}
{{ yearList(itemsInYear, year, false) }}
{% endfor %}
</section>

View file

@ -1,17 +0,0 @@
---
title: Catalogue
description: A collection of media I've consumed in one way or another.
---
{% from "macros/catalogue.njk" import yearList %}
<h1>Catalogue</h1>
<p>A collection of my thoughts on various forms of media that I consume.</p>
{% include "partials/catalogue-types.html" %}
{% set itemsByYear = collections.catalogue | reverse | organizeByDate %}
{% set years = itemsByYear | keys | sort("desc") %}
<section class="[ flow ]">
{% for year in years %}
{% set itemsInYear = itemsByYear[year] %}
{{ yearList(itemsInYear, year) }}
{% endfor %}
</section>

View file

@ -10,6 +10,16 @@ All the changes that are fit to read!
If preferred, the [commit log is available here][commits].
## January 27th, 2025
- Upgraded to [Eleventy v3](https://www.11ty.dev/blog/eleventy-v3/)!
- A design refresh! The overall look-and-feel is the same, but I added some playful animations here and there.
- Restructured my catalogue by breaking sub-categories into their own sections.
- Removed the Podcasts and Comics catalogues. [Podcasts has its own respective page now](/podroll).
- Added [Games](/games)!
- Added [Movies](/watching/movies/recent)!
- Added [Shows](/watching/shows/recent)!
## September 29th 2024
- Switched to [Cloudflare Pages](https://pages.cloudflare.com/) for deployments and hosting.
@ -29,11 +39,15 @@ If preferred, the [commit log is available here][commits].
- Added style for `<table>` elements.
<div class="table-wrapper">
| Here is | A preview! |
| --------------- | ---------- |
| Super cool whoa | very rad |
| Super cool whoa | very bad |
</div>
## June 11th 2024
- Added a [webrings][webrings] page!

View file

@ -14,16 +14,19 @@ The site is powered by [11ty][11ty], using a mixture of [Nunjucks][nunjucks] and
A large part of this site was based on the principles established in the [eleventy-excellent][eleventyexcellent] starter.
Markdown is processed using [markdown-it][markdownit]. I am using a few plugins:
- [markdown-it-abbr][markdownitabbr] - Adds support for abbreviations.
- [markdown-it-anchor][markdownitanchor] - Automatically adds anchor ids to titles (h1, h2, etc).
- [markdown-it-attrs][markdownitattrs] - Adds support for adding attributes to Markdown elements.
- [markdown-it-footnote][markdownitfootnote] - Adds support for footnotes.
- [markdown-it-image-figures][markdownitimagefigures] - Converts Markdown images into `<figure>`s with optional `<caption>`s
- [markdown-it-prism][markdownitprism] - Adds syntax highlighting to code blocks.
A minimal amount of [PostCSS][postcss] is used as a developer convenience, othwise pure CSS is used. Any utility classes I've created myself.
Responsive images are generated by [eleventy-img][eleventyimg].
Media is hosted on [bunny.net][bunnynet].
Media is hosted on [Backblaze B2][backblaze].
RSS is generated by [eleventy-plugin-rss][eleventypluginrss].
@ -59,7 +62,7 @@ My site has changed URLs over the years, and was previously found at the followi
## Licensing
All text content inside of `src/posts` and `src/catalogue` is &copy; Devin Haska - you may not use it without permission.
All text content inside of `src/content` and `src/pages` is &copy; Devin Haska - you may not use it without permission.
Any code (excluding content, for example, code inside `.js`, `.css`, `.njk` files) is published under an [MIT][mit] license - you're free to use it how you see fit. If you feel like attributing me, that'd be swell.
@ -75,7 +78,7 @@ I've done my best to show where I found any code I did not write myself.
[markdownitprism]: https://github.com/jGleitz/markdown-it-prism
[postcss]: https://postcss.org
[eleventyimg]: https://www.11ty.dev/docs/plugins/image
[bunnynet]: https://bunny.net
[backblaze]: https://www.backblaze.com/cloud-storage
[eleventypluginrss]: https://www.11ty.dev/docs/plugins/rss
[dayjs]: https://day.js.org/en
[aneklatin]: https://fonts.google.com/specimen/Anek+Latin
@ -89,3 +92,5 @@ I've done my best to show where I found any code I did not write myself.
[prismjs]: https://prismjs.com
[tokyonight]: https://github.com/folke/tokyonight.nvim
[ibmplexmono]: https://fonts.google.com/specimen/IBM+Plex+Mono
[markdownitimagefigures]: https://github.com/Antonio-Laguna/markdown-it-image-figures
[markdownitattrs]: https://www.npmjs.com/package/markdown-it-attrs

107
src/pages/contact.html Normal file
View file

@ -0,0 +1,107 @@
---
title: Contact
description: Various ways to get in touch.
permalink: "/contact/index.html"
---
<header class="flow flow-space-1">
<h1>Contact</h1>
<p class="text-fadeText flow-space-0.25">Various ways to get in touch with me on the internet.</p>
</header>
<section class="flow">
<p>Below are my primary methods of contact. They are the ones I monitor most and likely to respond!</p>
<div class="table-wrapper">
<table>
<thead>
<tr>
<td>
<strong>Platform</strong>
</td>
<td>
<strong>Link</strong>
</td>
</tr>
</thead>
<tbody>
<tr>
<td>Email</td>
<td>
<a href="mailto:devin@wonderfulfrog.com">devin@wonderfulfrog.com</a>
</td>
</tr>
<tr>
<td>Signal</td>
<td>
<a href="https://signal.me/#eu/1Gqnr33MvuJX6QvcvgEjgaFBO7nMW5sdEyFsqHrj0ajEx3HglsVC7ZiesDrO_bXQ"
target="_blank">wonderfulfrog.64</a>
</td>
</tr>
</tbody>
</table>
</div>
<p>
The following list covers various accounts on the internet that are mine. While you can probably contact me there, I'd prefer using one of the methods above.
</p>
<div class="table-wrapper">
<table>
<thead>
<tr>
<td>
<strong>Platform</strong>
</td>
<td>
<strong>Link</strong>
</td>
</tr>
</thead>
<tbody>
<tr>
<td>Mastodon</td>
<td>
<a href="https://mastodon.social/@wonderfulfrog" target="_blank">@wonderfulfrog.mastodon.social</a>
</td>
</tr>
<tr>
<td>GitHub</td>
<td>
<a href="https://github.com/wonderfulfrog" target="_blank">@wonderfulfrog</a>
</td>
</tr>
<tr>
<td>Bluesky</td>
<td>
<a href="https://bsky.app/profile/wonderfulfrog.com" target="_blank">wonderfulfrog.com</a>
</td>
</tr>
<tr>
<td>Discord</td>
<td>
<a href="https://discord.com/users/wonderfulfrog" target="_blank">wonderfulfrog</a>
</td>
</tr>
<tr>
<td>ListenBrainz</td>
<td>
<a href="https://listenbrainz.org/user/wonderfulfrog/" target="_blank">wonderfulfrog</a>
</td>
</tr>
<tr>
<td>Battle.net</td>
<td>Armitage#1801</td>
</tr>
<tr>
<td>Apple Music</td>
<td>
<a href="https://music.apple.com/profile/wonderfulfrog" target="_blank">wonderfulfrog</a>
</td>
</tr>
<tr>
<td>Backloggd</td>
<td>
<a href="https://www.backloggd.com/u/wonderfulfrog" target="_blank">wonderfulfrog</a>
</td>
</tr>
</tbody>
</table>
</div>
</section>

View file

@ -5,9 +5,23 @@ description: Feed yourself a veritable bevy of feeds.
<h1>Feeds</h1>
<p>Here is my collection of feeds for your perusal. They come in RSS varieties.</p>
<ul>
<ul class="flow list-none pl-0">
<li>
<a href="/feeds/posts.xml">Posts</a>
<p>Just the posts.</p>
</li>
<li>
<a href="/feeds/books.xml">Books</a>
<p>Only book content.</p>
</li>
<li>
<a href="/feeds/games.xml">Games</a>
<p>Gives only games.</p>
</li>
<li>
<a href="/feeds/watching.xml">Watching</a>
<p>
Feeding all watching content. Also available in <a href="/feeds/movies.xml">movies</a> and <a href="/feeds/shows.xml">shows</a> varieties.
</p>
</li>
</ul>

26
src/pages/feeds/books.njk Normal file
View file

@ -0,0 +1,26 @@
---
permalink: /feeds/books.xml
layout: null
eleventyExcludeFromCollections: true
excludeFromSitemap: true
---<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Books • {{ meta.siteName }}</title>
<subtitle>{{ meta.siteDescription }}</subtitle>
<link href="{{ meta.url }}/feeds/books.xml" rel="self" />
<link href="{{ meta.url }}/" rel="alternate" type="text/html" />
<id>{{ meta.url }}/</id>
<author>
<name>{{ meta.author }}</name>
</author>
{% for item in collections.book %}
<entry>
<id>{{ meta.url }}{{ item.url }}</id>
<title>{{ item.data.title | escape }}</title>
<link href="{{ item.url }}{{ post.url }}" />
<pubDate>{{ item.date }}</pubDate>
{%- for tag in item.data.tags | filter("book") %}<category term="{{ tag }}" />{%- endfor %}
<content type="html">{{ item.content | escape }}</content>
</entry>
{% endfor %}
</feed>

26
src/pages/feeds/games.njk Normal file
View file

@ -0,0 +1,26 @@
---
permalink: /feeds/games.xml
layout: null
eleventyExcludeFromCollections: true
excludeFromSitemap: true
---<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Games • {{ meta.siteName }}</title>
<subtitle>{{ meta.siteDescription }}</subtitle>
<link href="{{ meta.url }}/feeds/games.xml" rel="self" />
<link href="{{ meta.url }}/" rel="alternate" type="text/html" />
<id>{{ meta.url }}/</id>
<author>
<name>{{ meta.author }}</name>
</author>
{% for item in collections.game %}
<entry>
<id>{{ meta.url }}{{ item.url }}</id>
<title>{{ item.data.title | escape }}</title>
<link href="{{ item.url }}{{ post.url }}" />
<pubDate>{{ item.date }}</pubDate>
{%- for tag in item.data.tags | filter("game") %}<category term="{{ tag }}" />{%- endfor %}
<content type="html">{{ item.content | escape }}</content>
</entry>
{% endfor %}
</feed>

View file

@ -0,0 +1,26 @@
---
permalink: /feeds/movies.xml
layout: null
eleventyExcludeFromCollections: true
excludeFromSitemap: true
---<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Movies • {{ meta.siteName }}</title>
<subtitle>{{ meta.siteDescription }}</subtitle>
<link href="{{ meta.url }}/feeds/movies.xml" rel="self" />
<link href="{{ meta.url }}/" rel="alternate" type="text/html" />
<id>{{ meta.url }}/</id>
<author>
<name>{{ meta.author }}</name>
</author>
{% for item in collections.movie %}
<entry>
<id>{{ meta.url }}{{ item.url }}</id>
<title>{{ item.data.title | escape }}</title>
<link href="{{ item.url }}{{ post.url }}" />
<pubDate>{{ item.date }}</pubDate>
{%- for tag in item.data.tags | filter("movie") %}<category term="{{ tag }}" />{%- endfor %}
<content type="html">{{ item.content | escape }}</content>
</entry>
{% endfor %}
</feed>

26
src/pages/feeds/posts.njk Normal file
View file

@ -0,0 +1,26 @@
---
permalink: /feeds/posts.xml
layout: null
eleventyExcludeFromCollections: true
excludeFromSitemap: true
---<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>{{ meta.siteName }}</title>
<subtitle>{{ meta.siteDescription }}</subtitle>
<link href="{{ meta.url }}/feeds/posts.xml" rel="self" />
<link href="{{ meta.url }}/" rel="alternate" type="text/html" />
<id>{{ meta.url }}/</id>
<author>
<name>{{ meta.author }}</name>
</author>
{% for post in collections.post %}
<entry>
<id>{{ meta.url }}{{ post.url }}</id>
<title>{{ post.data.title | escape }}</title>
<link href="{{ meta.url }}{{ post.url }}" />
<pubDate>{{ post.date }}</pubDate>
{%- for tag in post.data.tags %}<category term="{{ tag }}" />{%- endfor %}
<content type="html">{{ post.content | escape }}</content>
</entry>
{% endfor %}
</feed>

26
src/pages/feeds/shows.njk Normal file
View file

@ -0,0 +1,26 @@
---
permalink: /feeds/shows.xml
layout: null
eleventyExcludeFromCollections: true
excludeFromSitemap: true
---<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Shows • {{ meta.siteName }}</title>
<subtitle>{{ meta.siteDescription }}</subtitle>
<link href="{{ meta.url }}/feeds/shows.xml" rel="self" />
<link href="{{ meta.url }}/" rel="alternate" type="text/html" />
<id>{{ meta.url }}/</id>
<author>
<name>{{ meta.author }}</name>
</author>
{% for item in collections.tv %}
<entry>
<id>{{ meta.url }}{{ item.url }}</id>
<title>{{ item.data.title | escape }}</title>
<link href="{{ item.url }}{{ post.url }}" />
<pubDate>{{ item.date }}</pubDate>
{%- for tag in item.data.tags | filter("tv") %}<category term="{{ tag }}" />{%- endfor %}
<content type="html">{{ item.content | escape }}</content>
</entry>
{% endfor %}
</feed>

View file

@ -0,0 +1,29 @@
---
permalink: /feeds/watching.xml
layout: null
eleventyExcludeFromCollections: true
excludeFromSitemap: true
---<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Watching • {{ meta.siteName }}</title>
<subtitle>{{ meta.siteDescription }}</subtitle>
<link href="{{ meta.url }}/feeds/watching.xml" rel="self" />
<link href="{{ meta.url }}/" rel="alternate" type="text/html" />
<id>{{ meta.url }}/</id>
<author>
<name>{{ meta.author }}</name>
</author>
{% set movies = collections.movie %}
{% set tv = collections.tv %}
{% set data = movies.concat(tv) %}
{% for item in data %}
<entry>
<id>{{ meta.url }}{{ item.url }}</id>
<title>{{ item.data.title | escape }}</title>
<link href="{{ item.url }}{{ post.url }}" />
<pubDate>{{ item.date }}</pubDate>
{%- for tag in item.data.tags | filter(["tv", "movie"]) %}<category term="{{ tag }}" />{%- endfor %}
<content type="html">{{ item.content | escape }}</content>
</entry>
{% endfor %}
</feed>

View file

@ -0,0 +1,9 @@
---
layout: "layouts/base"
permalink: /baconkind/index.html
title: 🐕
description: What was in there?
youtube: true
---
{% youtube "nGeKSiCQkPw", "Ultimate Dog Tease" %}

View file

@ -0,0 +1,9 @@
---
layout: "layouts/base"
permalink: /flyflyfly/index.html
title: REAPER UNLOADS HIS BIG SHOTGUN!!! YOU WONT BELIEVE WHAT HAPPENS NEXT (NOT CLICKBAIT) (REAL) (GONE WILD)
description: MUST SEE (PART 2 COMING SOON)
youtube: true
---
{% youtube "8L8cqQOtCv0", "FLY FLY FLY" %}

3
src/pages/fun/fun.json Normal file
View file

@ -0,0 +1,3 @@
{
"excludeFromSitemap": true
}

View file

@ -0,0 +1,9 @@
---
layout: "layouts/base"
permalink: /mfsimpson/index.html
title: MF SIMPSON
description: all caps when you eat the mans shorts
youtube: true
---
{% youtube "e2mmCaI4LJ0", "MF SIMPSON" %}

View file

@ -0,0 +1,9 @@
---
layout: "layouts/base"
permalink: /morsecat/index.html
title: DOT DOT DOT
description: DOT DOT DOT
youtube: true
---
{% youtube "8dVQ0813KVM", "−•−• •− " %}

12
src/pages/fun/ray.html Normal file
View file

@ -0,0 +1,12 @@
---
permalink: /ray/index.html
layout: null
---
Welcome to your space Ray. The content will never change.
<br />
<br />
I endeavoured to put as little style on this page, just for you.
<br />
<br />
Hope you like it.

9
src/pages/fun/smash.html Normal file
View file

@ -0,0 +1,9 @@
---
layout: "layouts/base"
permalink: /smash/index.html
title: S H E D O E S N ' T W A N T Y E L L O W
description: B L U E A N D Y E L L O W ?
youtube: true
---
{% youtube "-TcLxlkc2pA", "Lemme Smash 1 (Original)" %}

View file

@ -0,0 +1,12 @@
---
title: Favourite games
permalink: "games/favourites/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.game | filterFavourites | reverse %}
<section class="flow">
<h1>Favourite games</h1>
<p>A collection of my favourite games!</p>
{{ grid(data) }}
</section>

View file

@ -0,0 +1,35 @@
---
title: Games
permalink: "games/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.game | reverse | limit(5) %}
{% set faves = collections.game | filterFavourites | reverse | limit(5) %}
{% set tags = collections.game | allTagCounts(["game"]) | limit(5) %}
<section class="flow">
<h1>Games</h1>
<p>
A collection of games I played over the years. Ideally this would include every game I've every played, but realistically it's an approximation. I try to include my own thoughts with each.
</p>
<h2>
<a href="tags">Tags</a>
</h2>
<ul class="categories cluster list-none p-0 line-height-m">
{% for tag in tags %}
<li>
<a class="button" href="tag/{{ tag.tag | slugify }}">
{% include "svgs/frame.svg" %}
{{ tag.tag }}</a>
</li>
{% endfor %}
</ul>
<h2>
<a href="recent">Latest games</a>
</h2>
{{ grid(data) }}
<h2>
<a href="favourites">Favourite games</a>
</h2>
{{ grid(faves) }}
</section>

View file

@ -0,0 +1,12 @@
---
title: Recent games
permalink: "games/recent/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.game | reverse %}
<section class="flow">
<h1>Latest games</h1>
<p>A collection of games I've played.</p>
{{ grid(data) }}
</section>

15
src/pages/games/tag.html Normal file
View file

@ -0,0 +1,15 @@
---
pagination:
data: collections.gamesByTag
size: 1
alias: tag
permalink: "games/tag/{{ tag | slugify }}/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.gamesByTag[tag] %}
<header class="flow flow-space-1">
<h1>Games</h1>
<p class="text-fadeText flow-space-0.25">Tagged with "{{ tag }}"</p>
</header>
{{ grid(data) }}

19
src/pages/games/tags.html Normal file
View file

@ -0,0 +1,19 @@
---
title: Tagged in Games
permalink: "games/tags/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set tags = collections.game | allTagCounts(["game"]) %}
<section class="flow">
<h1>Tagged in Games</h1>
<ul class="categories cluster list-none p-0 line-height-m">
{% for tag in tags %}
<li>
<a class="button" href="../tag/{{ tag.tag | slugify }}">
{% include "svgs/frame.svg" %}
{{ tag.tag }}</a>
</li>
{% endfor %}
</ul>
</section>

View file

@ -1,39 +0,0 @@
---
title: Guestbook
description: Remember guestbooks? They're back! In the same form!
---
Hello and welcome to my guestbook.
<aside>
All entries are manually verified for spam and such.
</aside>
<aside>
<strong>Heads up</strong>! This page is not fully working yet. If you sign now, your submission might be deleted.
</aside>
<form name="guestbook" netlify netlify-honeypot="bot-field">
<label>
Name
<input type="text" name="name" required />
</label>
<p>
<label>
Website or email
<input type="text" name="website_or_email" />
</label>
</p>
<p>
<label>
Message
<textarea name="message" required></textarea>
</label>
</p>
<p class="visually-hidden">
<label>
Dont fill this out if youre human:
<input name="bot-field" />
</label>
</p>
<p>
<button type="submit">Send</button>
</p>
</form>

View file

@ -1,28 +0,0 @@
---
title: Links
---
# Find me online
Other places I have an online presence.
## Socials
- [Mastodon][mastodon]
- [Last.fm][lastfm]
- [GitHub][github]
- [Apple Music][applemusic]
- [LinkedIn][linkedin]
- [Backloggd][backloggd]
[mastodon]: {{ meta.social.mastodon }}
[lastfm]: {{ meta.social.lastfm }}
[github]: {{ meta.social.github }}
[applemusic]: https://music.apple.com/profile/wonderfulfrog
[linkedin]: https://www.linkedin.com/in/devin-haska-bb90a7253
[backloggd]: https://www.backloggd.com/u/wonderfulfrog

View file

@ -6,49 +6,28 @@ description: What's going on now and all the latest with myself.
{% set recentTrack = lastfm.recentTracks[0] %}
<h1>/now</h1>
<p>What am I doing right now? Everything on here is automatically generated from various data sources.</p>
{% if recentTrack %}
<p>
🎶 <a href="{{ recentTrack.url }}"
target="_blank"
rel="external noreferrer noopener">{{ recentTrack.artist }} - {{ recentTrack.track }}</a>
</p>
{% endif %}
{% if lastfm.recentAlbums.length > 0 %}
<h2>💿 Albums</h2>
<ul class="[ media-grid square ][ p-0 ]" role="list">
{% for album in lastfm.recentAlbums %}
<li>
<a href="{{ album.url }}"
target="_blank"
rel="external noreferrer noopener">
{% set textContent %}
{{ album.artist }} - {{ album.album }}
{% endset %}
<p class="[ visually-hidden ]">{{ textContent }}</p>
{% image album.imageUrl, "", "", "", textContent %}
</a>
</li>
{% endfor %}
</ul>
{% endif %}
{% if letterboxd.length > 0 %}
<h2>🍿 Movies</h2>
<ul class="[ media-grid poster ][ p-0 ]" role="list">
<ul class="media-grid p-0" role="list">
{% for movie in letterboxd %}
<li>
<li class="radius-0.5">
<a href="{{ movie.url }}"
target="_blank"
rel="external noreferrer noopener">
{% set textContent %}
{{ movie.title }}
{% endset %}
<p class="[ visually-hidden ]">{{ movie.title }}</p>
{% image movie.imgSrc, "", "", "" , textContent %}
<p class="visually-hidden">{{ movie.title }}</p>
{% if movie.imgSrc %}
<img src="{{ movie.imgSrc }}" alt="" />
{% else %}
<div>{{ textContent }}</div>
{% endif %}
</a>
</li>
{% endfor %}
</ul>
{% endif %}
<p class="[ font-size-s mt-2 ]">
<p class="font-size-s mt-2">
What is a `/now` page? Check out <a href="https://nownownow.com/about">nownownow.com</a>.
</p>

38
src/pages/podroll.html Normal file
View file

@ -0,0 +1,38 @@
---
title: Podroll
description: Some podcasts that I enjoy!
permalink: "podroll/index.html"
---
{% set data = collections.podcast | reverse %}
<header class="flow flow-space-1">
<h1>Podroll</h1>
<p class="text-fadeText flow-space-0.25">Some podcasts that I enjoy!</p>
</header>
<section class="flow">
{% for item in data %}
<div class="card flow">
<div class="flex items-center gap-0.5">
<h2>{{ item.data.title }}</h2>
{% if item.data.isCompleted %}<span class="pill">Completed</span>{% endif %}
</div>
<p class="flow-space-0.5">{{ item.data.description }}</p>
<div class="flex gap-0.5">
{% if item.data.url %}<a href="{{ item.data.url }}" target="_blank">Website</a>{% endif %}
{% if item.data.rss %}<a href="{{ item.data.rss }}" target="_blank">RSS</a>{% endif %}
</div>
{% if item.content %}
<details>
<summary>
{% if item.data.moreText %}
{{ item.data.moreText }}
{% else %}
More info
{% endif %}
</summary>
<div class="flow">{{ item.content | safe }}</div>
</details>
{% endif %}
</div>
{% endfor %}
</section>

View file

@ -10,7 +10,7 @@ description: Read all of my posts.
</p>
{% set itemsByYear = collections.post | reverse | organizeByDate %}
{% set years = itemsByYear | keys | sort("desc") %}
<section class="[ flow ]">
<section class="flow">
{% for year in years %}
{% set itemsInYear = itemsByYear[year] %}
{{ yearList(itemsInYear, year) }}

View file

@ -23,15 +23,24 @@ description: A demo of the site's theme.
An abbreviation: <abbr title="Hypertext Markup Language">HTML</abbr>
</p>
<hr />
<div class="[ flex ]">
<div class="[ size-2 ]" style="background-color: var(--color-primary)"></div>
<div class="[ size-2 ]" style="background-color: var(--color-secondary)"></div>
<div class="[ size-2 ]" style="background-color: var(--color-background)"></div>
<div class="[ size-2 ]" style="background-color: var(--color-surface)"></div>
<div class="[ size-2 ]" style="background-color: var(--color-border)"></div>
<div class="[ size-2 ]" style="background-color: var(--color-text)"></div>
<div class="[ size-2 ]" style="background-color: var(--color-fadeText)"></div>
<div class="[ size-2 ]" style="background-color: var(--color-shadow)"></div>
<div class="flex">
<div class="size-2" style="background-color: var(--color-primary)"></div>
<div class="size-2" style="background-color: var(--color-secondary)"></div>
<div class="size-2" style="background-color: var(--color-background)"></div>
<div class="size-2" style="background-color: var(--color-surface)"></div>
<div class="size-2" style="background-color: var(--color-border)"></div>
<div class="size-2" style="background-color: var(--color-text)"></div>
<div class="size-2" style="background-color: var(--color-fadeText)"></div>
<div class="size-2" style="background-color: var(--color-shadow)"></div>
</div>
<hr />
<div class="flex gap-1">
<a href="#" class="button">A button</a>
<a href="#" class="button">A button with count <span class="button__count">4</span></a>
</div>
<div class="flex flex-wrap gap-1">
<p class="pill">A pill</p>
<p class="pill">99+</p>
</div>
<hr />
<a href="#">A link</a>
@ -62,7 +71,7 @@ description: A demo of the site's theme.
</aside>
<hr />
<figure>
<img src="/assets/images/logo.svg" alt="" />
<img eleventy:ignore src="/assets/images/logo.svg" alt="" />
<figcaption>A fig caption.</figcaption>
</figure>
<hr />

View file

@ -17,7 +17,7 @@ eleventyComputed:
</p>
{% set itemsByYear = collections.postsByTag[tag] | reverse | organizeByDate %}
{% set years = itemsByYear | keys | sort("desc") %}
<section class="[ flow ]">
<section class="flow">
{% for year in years %}
{% set itemsInYear = itemsByYear[year] %}
{{ yearList(itemsInYear, year) }}

View file

@ -4,12 +4,12 @@ description: Browse posts by all tags.
---
{% set tags = collections.post | allTagCounts %}
<section class="[ flow ]">
<section class="flow">
<h1>{{ title }}</h1>
<ol class="[ cluster p-0 gap-0.5 ]" role="list">
<ol class="cluster p-0 gap-0.5" role="list">
{% for tag in tags %}
<li>
<a href="/tags/{{ tag.tag | slugify }}" class="[ pill ]">{{ tag.tag }} <span class="[ pill-count ]">{{ tag.count }}</span></a>
<a href="/tags/{{ tag.tag | slugify }}" class="button">{{ tag.tag }} <span class="button__count">{{ tag.count }}</span></a>
</li>
{% endfor %}
</ol>

View file

@ -0,0 +1,30 @@
---
title: Watching
permalink: "watching/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set movies = collections.movie | reverse | limit(5) %}
{% set shows = collections.tv | reverse | limit(5) %}
{% set favouriteMovies = collections.movie | filterFavourites | reverse | limit(5) %}
{% set favouriteShows = collections.tv | filterFavourites | reverse | limit(5) %}
<section class="flow">
<h1>Watching</h1>
<p>A collection of movies and shows I've seen. I tend to watch more movies than shows these days.</p>
<h2>
<a href="movies/recent">Recent movies</a>
</h2>
{{ grid(movies) }}
<h2>
<a href="shows/recent">Recent shows</a>
</h2>
{{ grid(shows) }}
<h2>
<a href="movies/favourites">Favourite movies</a>
</h2>
{{ grid(favouriteMovies) }}
<h2>
<a href="shows/favourites">Favourite shows</a>
</h2>
{{ grid(favouriteShows) }}
</section>

View file

@ -0,0 +1,12 @@
---
title: Favourite movies
permalink: "watching/movies/favourites/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.movie | filterFavourites | reverse %}
<section class="flow">
<h1>Favourite movies</h1>
<p>A collection of my favourite movies!</p>
{{ grid(data) }}
</section>

View file

@ -0,0 +1,25 @@
---
title: Recent movies
permalink: "watching/movies/recent/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.movie | reverse %}
{% set tags = collections.movie | allTagCounts(["movie"]) | limit(5) %}
<section class="flow">
<h1>Recent movies</h1>
<p>A collection of movies I've seen recently.</p>
<h2>
<a href="../tags">Tags</a>
</h2>
<ul class="categories cluster list-none p-0 line-height-m">
{% for tag in tags %}
<li>
<a class="button" href="../tag/{{ tag.tag | slugify }}">
{% include "svgs/frame.svg" %}
{{ tag.tag }}</a>
</li>
{% endfor %}
</ul>
{{ grid(data) }}
</section>

View file

@ -0,0 +1,15 @@
---
pagination:
data: collections.moviesByTag
size: 1
alias: tag
permalink: "watching/movies/tag/{{ tag | slugify }}/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.moviesByTag[tag] %}
<header class="flow flow-space-1">
<h1>Movies</h1>
<p class="text-fadeText flow-space-0.25">Tagged with "{{ tag }}"</p>
</header>
{{ grid(data) }}

View file

@ -0,0 +1,19 @@
---
title: Tagged in Movies
permalink: "watching/movies/tags/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set tags = collections.movie | allTagCounts(["movie"]) %}
<section class="flow">
<h1>Tagged in Movies</h1>
<ul class="categories cluster list-none p-0 line-height-m">
{% for tag in tags %}
<li>
<a class="button" href="../tag/{{ tag.tag | slugify }}">
{% include "svgs/frame.svg" %}
{{ tag.tag }}</a>
</li>
{% endfor %}
</ul>
</section>

View file

@ -0,0 +1,12 @@
---
title: Favourite shows
permalink: "watching/shows/favourites/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.tv | filterFavourites | reverse %}
<section class="flow">
<h1>Favourite shows</h1>
<p>A collection of my favourite shows!</p>
{{ grid(data) }}
</section>

View file

@ -0,0 +1,25 @@
---
title: Recent shows
permalink: "watching/shows/recent/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.tv | reverse %}
{% set tags = collections.tv | allTagCounts(["tv"]) | limit(5) %}
<section class="flow">
<h1>Recent shows</h1>
<p>A collection of shows I've seen recently.</p>
<h2>
<a href="../tags">Tags</a>
</h2>
<ul class="categories cluster list-none p-0 line-height-m">
{% for tag in tags %}
<li>
<a class="button" href="../tag/{{ tag.tag | slugify }}">
{% include "svgs/frame.svg" %}
{{ tag.tag }}</a>
</li>
{% endfor %}
</ul>
{{ grid(data) }}
</section>

View file

@ -0,0 +1,15 @@
---
pagination:
data: collections.showsByTag
size: 1
alias: tag
permalink: "watching/shows/tag/{{ tag | slugify }}/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set data = collections.showsByTag[tag] %}
<header class="flow flow-space-1">
<h1>Shows</h1>
<p class="text-fadeText flow-space-0.25">Tagged with "{{ tag }}"</p>
</header>
{{ grid(data) }}

View file

@ -0,0 +1,19 @@
---
title: Tagged in Shows
permalink: "watching/shows/tags/index.html"
---
{% from "macros/media-grid.njk" import grid %}
{% set tags = collections.tv | allTagCounts(["tv"]) %}
<section class="flow">
<h1>Tagged in Shows</h1>
<ul class="categories cluster list-none p-0 line-height-m">
{% for tag in tags %}
<li>
<a class="button" href="../tag/{{ tag.tag | slugify }}">
{% include "svgs/frame.svg" %}
{{ tag.tag }}</a>
</li>
{% endfor %}
</ul>
</section>

View file

@ -12,23 +12,23 @@ description: What's a webring?
<a href="https://cs.sjoy.lol/" target="_blank">CSS JOY Webring</a>
</h2>
<p>For those of us who take joy in messing around with CSS :)</p>
<ul class="[ cluster ][ list-none p-0 ]">
<ul class="cluster list-none p-0">
<li>
<a class="[ button ]"
<a class="button"
href="https://webri.ng/webring/cssjoy/previous?via=https://wonderfulfrog.com/">
{% include "svgs/arrow-left.svg" %}
<span class="visually-hidden">Previous website</span>
</a>
</li>
<li>
<a class="[ button ]"
<a class="button"
href="https://webri.ng/webring/cssjoy/random?via=https://wonderfulfrog.com/">
{% include "svgs/dice.svg" %}
<span class="visually-hidden">Random website</span>
</a>
</li>
<li>
<a class="[ button ]"
<a class="button"
href="https://webri.ng/webring/cssjoy/next?via=https://wonderfulfrog.com/">
{% include "svgs/arrow-right.svg" %}
<span class="visually-hidden">Next website</span>