diff --git a/LICENSE b/LICENSE
index 551c520..bff57ae 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2022 Beet Box. All rights reserved.
+Copyright (c) 2025 Beet Box. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
diff --git a/archetypes/default.md b/archetypes/default.md
new file mode 100644
index 0000000..c6f3fce
--- /dev/null
+++ b/archetypes/default.md
@@ -0,0 +1,5 @@
++++
+title = '{{ replace .File.ContentBaseName "-" " " | title }}'
+date = {{ .Date }}
+draft = true
++++
diff --git a/assets/css/main.css b/assets/css/main.css
new file mode 100644
index 0000000..1b20c5e
--- /dev/null
+++ b/assets/css/main.css
@@ -0,0 +1,203 @@
+:root {
+ --beetbox-red: #9e0008;
+ --beetbox-pink: #d93370;
+ --beetbox-purple: #ac65cb;
+ --beetbox-green: #003f56;
+ --beetbox-blue: #5fcfd0;
+ --light: #F8F8FF;
+ --background: #1f2835;
+ --text: var(--light);
+ --links: var(--beetbox-blue);
+ --link-hover: var(--beetbox-pink);
+ --header: #F8F8FFCC;
+ --header-link: #5C2673; /* darker beetbox-purple */
+}
+
+body {
+ background-color: var(--background);
+ color: var(--text);
+ font-family: sans-serif;
+ line-height: 1.5;
+ padding: 0;
+ margin: 0;
+}
+
+a {
+ color: var(--links);
+ text-decoration: none;
+}
+
+a:visited, a:hover {
+ color: var(--link-hover);
+ text-decoration: underline;
+}
+
+p {
+ margin-bottom: 1.5rem;
+}
+
+header div, main, footer {
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 1rem;
+}
+
+/* Header */
+header {
+ background-color: var(--header);
+ box-shadow: 0 5px 10px black;
+}
+
+header div {
+ display: flex;
+ align-items: baseline;
+ justify-content: space-between;
+}
+
+header ul, footer ul {
+ margin: 0;
+}
+
+header a {
+ color: var(--header-link);
+}
+
+header li, footer li {
+ display: inline;
+ font-weight: 600;
+ margin-right: 8px;
+}
+
+/* Responsive */
+@media (max-width: 700px) {
+ aside.index-articles {
+ display: none;
+ }
+}
+
+main img {
+ max-width: 100%;
+}
+
+/* Article Lists */
+.article-group {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ gap: 20px;
+}
+
+.index-articles {
+ justify-content: flex-end;
+}
+
+.author-articles {
+ justify-content: flex-start;
+}
+
+.index-articles aside {
+ flex-shrink: 4;
+}
+
+section.index {
+ display: flex;
+ flex-direction: row;
+}
+
+section.index aside {
+ flex-shrink: 4;
+}
+
+/* Article Cards */
+article {
+ background-color: #111;
+ border-radius: 10px;
+ padding: 1rem;
+}
+
+article.index {
+ width: 300px;
+ height: 485px;
+}
+
+article.index img {
+ height: 50%;
+ width: 100%;
+ border-radius: 10px;
+ object-fit: cover;
+}
+
+article.index h3 {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+article.alt {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+ justify-content: space-evenly;
+ align-items: center;
+}
+
+article.alt img {
+ border-radius: 50%;
+ height: 256px;
+ width: 256px;
+}
+
+/* Images */
+img.featured, img.author {
+ display: block;
+ border-radius: 8px;
+ margin: 12px 0;
+ object-fit: cover;
+ max-height: 500px;
+}
+
+/* Code Blocks */
+code {
+ white-space: nowrap;
+}
+
+pre {
+ border-radius: .4rem;
+ max-width: 100%;
+}
+
+pre code {
+ display: block;
+ tab-size: 4;
+ padding: 1rem 1.5rem;
+ font-size: 1.05rem;
+ white-space: pre;
+ max-width: 100%;
+ overflow-x: auto;
+ border-left: .3rem solid var(--beetbox-purple);
+ border-radius: .4rem;
+ box-shadow: 0 4px 8px black;
+}
+
+/* Effects */
+.float-on-hover {
+ transition: all .25s cubic-bezier(.2,.1,.47,1);
+}
+
+.float-on-hover:hover {
+ transform: translateY(-10px);
+}
+
+.shadow{
+ box-shadow: 0 4px 8px black;
+}
+
+/* Footer */
+footer {
+ border-top: 1px solid var(--light);
+}
+
+footer ul {
+ padding: 0px;
+}
+
diff --git a/assets/sass/cards.scss b/assets/sass/cards.scss
deleted file mode 100644
index 5795f91..0000000
--- a/assets/sass/cards.scss
+++ /dev/null
@@ -1,42 +0,0 @@
-@mixin shadow {
- box-shadow: 0px 4px 8px black;
-}
-
-.shadow {
- @include shadow
-}
-
-.float-on-hover {
- transition: (all 0.25s cubic-bezier(0.2,0.1,0.47,1));
- &:hover {
- transform: (translateY(-10px));
- }
-}
-
-.small-circle {
- border-radius: 50%;
- width: 250px;
- height: 250px;
-}
-
-article {
- background-color: $dark;
- border-radius: 10px;
- height: 420px;
- flex: 1 1 305px;
- overflow: hidden;
-
- img {
- height: 50%;
- width: 100%;
- object-fit: cover;
- }
-
- div {
- margin: 25px;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- }
-
-}
diff --git a/assets/sass/code.scss b/assets/sass/code.scss
deleted file mode 100644
index dd4a795..0000000
--- a/assets/sass/code.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-code { white-space: nowrap; }
-
-pre {
- background-color: $background-color !important;
- max-width: 100%;
-
- & > code {
- @include shadow;
- display: block;
- padding: 1rem 1.5rem;
- font-size: 1.05rem;
- white-space: pre;
- max-width: 100%;
- overflow-x: auto;
- border-left: .3rem solid $code-edge;
- border-radius: .4rem;
- }
-}
diff --git a/assets/sass/colors.scss b/assets/sass/colors.scss
deleted file mode 100644
index 9384057..0000000
--- a/assets/sass/colors.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-$beetbox-red: #9e0008;
-$beetbox-pink: #d93370;
-$beetbox-purple: #ac65cb;
-$beetbox-green: #003f56;
-$beetbox-blue: #5fcfd0;
-
-$background-color: #1f2835;
-$font-color: #f8f8ff;
-$font-color-alternate: #1f2835;
-$top-bar: #f8f8ffcc;
-$dark: #111;
-$link-color: $beetbox-blue;
-$link-color-visited: #e4cdef;
-$code-edge: $beetbox-purple;
diff --git a/assets/sass/main.scss b/assets/sass/main.scss
deleted file mode 100644
index a625247..0000000
--- a/assets/sass/main.scss
+++ /dev/null
@@ -1,86 +0,0 @@
-@import 'colors.scss';
-@import 'cards.scss';
-@import 'code.scss';
-
-@mixin screen-max($max) {
- @media (max-width: $max - 1) {
- @content
- }
-}
-
-body {
- background-color: $background-color;
- color: $font-color;
- margin: 0px;
- overflow-y: scroll;
- font-family: 'Helvetica';
- font-size: 1.1rem;
-}
-
-h2 {font-size: 1.2rem;}
-
-header {
- background-color: $top-bar;
- box-shadow: 0px 5px 10px black;
- nav {
- @include screen-max(500px){text-align: center;}
-
- div {display: inline-block;}
-
- img { max-width: 300px; }
-
- a {
- margin-right: 12px;
- font-weight: bold;
- text-decoration: none;
- &, &:visited, &:hover {color: $font-color-alternate;}
- }
- }
-}
-
-header, main, section {padding: 0 16px;}
-
-nav, main, section {max-width: 1200px; margin: auto;}
-main img {max-width: 100%}
-
-footer {text-align: center;}
-
-
-a {
- color: $link-color;
- &:visited, &:hover { color: $link-color-visited; }
-}
-
-img.featured{aspect-ratio: 4/3;}
-img.featured, img.author {
- display: block;
- border-radius: 8px;
- margin: 12px 0;
- object-fit: cover;
- max-height: 500px;
-}
-
-.left-to-right {
- display: flex;
- flex-wrap: wrap;
- gap: 8px;
- justify-content: space-evenly;
- align-items: end;
-}
-
-.align-center {
- align-items: center;
-}
-
-section.article-list {
- margin: 8px 0px;
- display: flex;
- flex-wrap: wrap;
- justify-content: center;
- gap: 40px;
-}
-
-.fill-wh {
- width: 100%;
- height: 100%
-}
diff --git a/hugo.toml b/hugo.toml
new file mode 100644
index 0000000..7b1e4e0
--- /dev/null
+++ b/hugo.toml
@@ -0,0 +1,29 @@
+# Example site configuration
+baseURL = 'https://beetbox.io'
+languageCode = 'en-US'
+title = 'Beet Box'
+
+[[menus.main]]
+name = 'Home'
+pageRef = '/'
+weight = 10
+
+[[menus.main]]
+name = 'Gitea'
+url = 'https://gitea.beetbox.io/BeetBox'
+weight = 20
+
+[[menus.main]]
+name = 'Games'
+pageRef = '/games'
+weight = 30
+
+[[menus.footer]]
+name = 'Authors'
+pageRef = '/authors'
+weight = 10
+
+[module]
+ [module.hugoVersion]
+ extended = false
+ min = "0.116.0"
diff --git a/layouts/404.html b/layouts/404.html
index f369e15..037a70f 100644
--- a/layouts/404.html
+++ b/layouts/404.html
@@ -1,7 +1,5 @@
{{ define "main" }}
-
- 404
- This page doesn't exist. Let's go home
-
+
404 Page not found
+
{{ end }}
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index d172e6e..39dcbec 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -1,40 +1,17 @@
-
-
-
-
-
- {{- with .OutputFormats.Get "rss" }}
- {{- printf `` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML -}}
- {{ end }}
-
-
-
-
- {{ with (default .Site.Params.description .Params.description) -}}
-
- {{- end -}}
-
- {{ with .Params.keywords -}}
-
- {{- end }}
-
- {{ $style := resources.Get "/sass/main.scss" | css.Sass | minify -}}
-
-
-
- {{- block "title" . }}{{ .Site.Title }}{{ end -}}
-
-
-
-
-
-{{ partial "header.html" . }}
-
-{{ block "main" . }}
-{{ end }}
-
-{{ partial "footer.html" . }}
-
-
+
+
+ {{ partial "head.html" . }}
+
+
+
+ {{ partial "header.html" . }}
+
+
+ {{ block "main" . }}{{ end }}
+
+
+
diff --git a/layouts/_default/home.html b/layouts/_default/home.html
new file mode 100644
index 0000000..23310be
--- /dev/null
+++ b/layouts/_default/home.html
@@ -0,0 +1,24 @@
+{{ define "main" }}
+{{ .Content }}
+
+
+
All Posts:
+ {{ range site.RegularPages.GroupByDate "2006" }}
+
{{ .Key }}
+
+ {{ end }}
+
+
+
+
+{{ end }}
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
index 510673f..a201d40 100644
--- a/layouts/_default/list.html
+++ b/layouts/_default/list.html
@@ -1,48 +1,31 @@
{{ define "main" }}
- {{ $pages := .Site.RegularPages }}
- {{if not .IsHome }} {{ $pages = .Pages }} {{ end }}
-
-
- {{ if not .IsHome }}
- {{ .Title | markdownify | lower }}
- {{ else }}
- Beet Box
- {{ end }}
-
- {{ if and .IsSection (not .IsHome) }} {{ partial "article-meta.html" . }} {{ end }}
-
- {{ with .Content }}
-
- {{- end }}
-
-
-
- {{ with $pages.Limit 4 }}
-
- Latest Posts:
-
- {{ range . }}
- {{ partial "article.html" . }}
- {{ end }}
-
-
- {{ end }}
-
- {{ with $pages }}
-
- All Posts:
- {{ range .GroupByDate "2006" }}
- {{ .Key }}
-
- {{ end }}
-
- {{ end }}
-
+ {{ .Title }}
+
+ {{- with .Params.authors }}
+ {{- $author := (index . 0) }}
+
+ {{- end }}
+
+ {{- if (not .Params.hideDate) }}
+ {{- $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
+ {{- $dateHuman := .Date | time.Format "Mon | Jan 2, 2006" }}
+ Posted:
+ {{- end }}
+
+ {{- range (.GetTerms "tags") }}
+ #{{ .LinkTitle }}
+ {{- end }}
+
+ {{- partial "image.html"
+ (dict
+ "image" (.Resources.GetMatch "featured")
+ "alt" .Params.featured.alt
+ "sizes" (slice 320 480 600 800)
+ "classes" (slice "shadow" "featured")) }}
+ {{ .Content }}
+
+ {{- range .Data.Pages }}
+ {{ partial "article.html" . }}
+ {{- end }}
+
{{ end }}
-
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
index c1132e3..27a1195 100644
--- a/layouts/_default/single.html
+++ b/layouts/_default/single.html
@@ -1,20 +1,28 @@
-{{ define "title" }}{{ .Title }}{{ end }}
-
{{ define "main" }}
-
- {{ partial "article-meta.html" . }}
+ {{ .Title }}
+
+ {{ with .Params.authors }}
+ {{ $author := (index . 0) }}
+
+ {{ end }}
- {{ .Content }}
-
+ {{- if (not .Params.hideDate) }}
+ {{- $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
+ {{- $dateHuman := .Date | time.Format "Mon | Jan 2, 2006" }}
+ Posted:
+ {{- end }}
-
+ {{- partial "image.html"
+ (dict
+ "image" (.Resources.GetMatch "featured")
+ "alt" .Params.featured.alt
+ "sizes" (slice 320 480 600 800)
+ "classes" (slice "shadow" "featured")) }}
+ {{ .Content }}
+ {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
{{ end }}
diff --git a/layouts/authors/list.html b/layouts/authors/list.html
index cdb2c19..9fe7924 100644
--- a/layouts/authors/list.html
+++ b/layouts/authors/list.html
@@ -1,33 +1,27 @@
{{ define "main" }}
-
+
- {{ with .Resources.GetMatch "avatar" }}
-
- {{ end }}
+ {{- with (.Resources.GetMatch "avatar") }}
+ {{- partial "image.html"
+ (dict
+ "image" .
+ "alt" .Params.alt
+ "sizes" (slice 320 500)
+ "classes" (slice "shadow" "author")) }}
+ {{- end }}
-
-
-
-
-
- {{ .Content }}
-
-
-
- Posts:
- {{ with .Data.Pages }}
-
- {{ range . }}
- {{ partial "article.html" . }}
- {{ end }}
-
- {{ end }}
-
+
+
+{{ .Content }}
+
+ {{- range .Data.Pages }}
+ {{ partial "article.html" . }}
+ {{- end }}
+
{{ end }}
-
diff --git a/layouts/authors/terms.html b/layouts/authors/terms.html
index 5a750d6..f4f81a9 100644
--- a/layouts/authors/terms.html
+++ b/layouts/authors/terms.html
@@ -1,9 +1,14 @@
{{ define "main" }}
-
Authors
- {{ range .Data.Pages }}
- {{ partial "article-alternate.html" . }}
- {{ end }}
+ {{- range .Data.Pages }}
+ {{- partial "article-alt.html"
+ (dict
+ "image" (.Resources.GetMatch "avatar")
+ "alt" .Params.alt
+ "title" .Params.name
+ "summary" .Params.bio
+ "url" (printf "/%s/%s" "authors" (.Params.name | urlize))) }}
+ {{- end }}
-{{ end }}
+{{ end }}
\ No newline at end of file
diff --git a/layouts/partials/article-alt.html b/layouts/partials/article-alt.html
new file mode 100644
index 0000000..a372560
--- /dev/null
+++ b/layouts/partials/article-alt.html
@@ -0,0 +1,25 @@
+{{- /*
+Renders an article card with a circle image, title, and summary.
+@context {image} the image resource.
+@context {alt} alt text for the image.
+@context {title} the title of the card.
+@context {summary} the summary text.
+@context {url} the url of the article.
+*/}}
+{{- $image := .image }}
+{{- $alt := .alt }}
+{{- $title := .title }}
+{{- $summary := .summary }}
+{{- $url := .url }}
+{{- $img := ($image.Resize "256x webp q90") }}
+
+
+
+

+
+
+
{{ $title }}
+
{{ $summary }}
+
+
+
diff --git a/layouts/partials/article-alternate.html b/layouts/partials/article-alternate.html
deleted file mode 100644
index 4904ec9..0000000
--- a/layouts/partials/article-alternate.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
- {{ with .Resources.GetMatch "avatar" }}
-

- {{ end }}
-
-
-
{{ .Params.name }}
-
{{ .Params.bio }}
-
-
-
-
diff --git a/layouts/partials/article-meta.html b/layouts/partials/article-meta.html
deleted file mode 100644
index 85b8c7d..0000000
--- a/layouts/partials/article-meta.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
- {{ with .Params.authors }}
- {{ $author := (index . 0) }}
-
- {{ end }}
-
- {{ with .Date }}
- Posted: {{ .Format "Mon | Jan 2, 2006" }}
- {{ end }}
-
- {{ range (.GetTerms "tags") }}
-
- {{ .LinkTitle }}
-
- {{ end }}
-
- {{ $image := (.Resources.GetMatch "featured") }}
- {{ partial "image.html" (dict "image" $image "alt" .Params.featured.alt "class" "shadow featured") }}
-
diff --git a/layouts/partials/article.html b/layouts/partials/article.html
index e6fa05d..4e290a7 100644
--- a/layouts/partials/article.html
+++ b/layouts/partials/article.html
@@ -1,22 +1,15 @@
-
-
-
- {{ $image := .Resources.GetMatch "featured" }}
- {{ partial "image-small.html" (dict "image" $image "alt" .Params.featured.alt) }}
+
+
+ {{- $image := (.Resources.GetMatch "featured").Resize "256x webp q90" }}
+
-
-
-
- {{ with index (.GetTerms "tags") 0 }}
-
{{ .LinkTitle }}
- {{ end }}
-
-
{{ .Title | markdownify }}
-
- {{ with .Date }}
-
{{ .Format "2006/01/02" }}
- {{ end }}
-
-
-
+ {{ .Title | markdownify }}
+ {{- if not (.Params.hideDate) }}
+ {{- with .Date }}
+ {{ .Format "2006/01/02" }}
+ {{- end }}
+ {{- end }}
+ {{- with index (.GetTerms "tags") 0 }}
+ #{{ .LinkTitle }}
+ {{- end }}
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html
index afd8cb9..675e7e5 100644
--- a/layouts/partials/footer.html
+++ b/layouts/partials/footer.html
@@ -1,5 +1,2 @@
-
+{{ partial "menu.html" (dict "menuID" "footer" "page" .) }}
+© 2020 – {{ now.Year }} Beet Box. All rights reserved.
diff --git a/layouts/partials/head.html b/layouts/partials/head.html
new file mode 100644
index 0000000..cba17f5
--- /dev/null
+++ b/layouts/partials/head.html
@@ -0,0 +1,9 @@
+
+
+{{ if .IsHome }}{{ site.Title }}{{ else }}{{ printf "%s | %s" .Title site.Title }}{{ end }}
+{{- partialCached "head/css.html" . }}
+
+
+{{ with .OutputFormats.Get "rss" }}
+ {{- printf `` .Rel .MediaType.Type .Permalink site.Title | safeHTML }}
+{{- end }}
\ No newline at end of file
diff --git a/layouts/partials/head/css.html b/layouts/partials/head/css.html
new file mode 100644
index 0000000..91b928d
--- /dev/null
+++ b/layouts/partials/head/css.html
@@ -0,0 +1,9 @@
+{{- with resources.Get "css/main.css" }}
+ {{- if eq hugo.Environment "development" }}
+
+ {{- else }}
+ {{- with . | minify | fingerprint }}
+
+ {{- end }}
+ {{- end }}
+{{- end }}
diff --git a/layouts/partials/head/js.html b/layouts/partials/head/js.html
new file mode 100644
index 0000000..18fe842
--- /dev/null
+++ b/layouts/partials/head/js.html
@@ -0,0 +1,12 @@
+{{- with resources.Get "js/main.js" }}
+ {{- if eq hugo.Environment "development" }}
+ {{- with . | js.Build }}
+
+ {{- end }}
+ {{- else }}
+ {{- $opts := dict "minify" true }}
+ {{- with . | js.Build $opts | fingerprint }}
+
+ {{- end }}
+ {{- end }}
+{{- end }}
diff --git a/layouts/partials/header.html b/layouts/partials/header.html
index da6f5b5..d27c5d8 100644
--- a/layouts/partials/header.html
+++ b/layouts/partials/header.html
@@ -1,11 +1,8 @@
-
-
-
+
+{{ with resources.Get site.Params.logo.src }}
+

+{{ else }}
+
{{ site.Title }}
+{{ end }}
+{{ partial "menu.html" (dict "menuID" "main" "page" .) }}
+
diff --git a/layouts/partials/image-small.html b/layouts/partials/image-small.html
deleted file mode 100644
index 9c4c468..0000000
--- a/layouts/partials/image-small.html
+++ /dev/null
@@ -1,28 +0,0 @@
-
diff --git a/layouts/partials/image.html b/layouts/partials/image.html
index 9c567e9..cfd8d7d 100644
--- a/layouts/partials/image.html
+++ b/layouts/partials/image.html
@@ -1,38 +1,43 @@
-
diff --git a/layouts/partials/menu.html b/layouts/partials/menu.html
new file mode 100644
index 0000000..7183180
--- /dev/null
+++ b/layouts/partials/menu.html
@@ -0,0 +1,51 @@
+{{- /*
+Renders a menu for the given menu ID.
+
+@context {page} page The current page.
+@context {string} menuID The menu ID.
+
+@example: {{ partial "menu.html" (dict "menuID" "main" "page" .) }}
+*/}}
+
+{{- $page := .page }}
+{{- $menuID := .menuID }}
+
+{{- with index site.Menus $menuID }}
+
+{{- end }}
+
+{{- define "partials/inline/menu/walk.html" }}
+ {{- $page := .page }}
+ {{- range .menuEntries }}
+ {{- $attrs := dict "href" .URL }}
+ {{- if $page.IsMenuCurrent .Menu . }}
+ {{- $attrs = merge $attrs (dict "class" "active" "aria-current" "page") }}
+ {{- else if $page.HasMenuCurrent .Menu .}}
+ {{- $attrs = merge $attrs (dict "class" "ancestor" "aria-current" "true") }}
+ {{- end }}
+ {{- $name := .Name }}
+ {{- with .Identifier }}
+ {{- with T . }}
+ {{- $name = . }}
+ {{- end }}
+ {{- end }}
+
+ {{ $name }}
+ {{- with .Children }}
+
+ {{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }}
+
+ {{- end }}
+
+ {{- end }}
+{{- end }}
diff --git a/layouts/partials/posts-artfully-enumerated.html b/layouts/partials/posts-artfully-enumerated.html
deleted file mode 100644
index 8b13789..0000000
--- a/layouts/partials/posts-artfully-enumerated.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/layouts/partials/posts-enumerated.html b/layouts/partials/posts-enumerated.html
deleted file mode 100644
index 38b1727..0000000
--- a/layouts/partials/posts-enumerated.html
+++ /dev/null
@@ -1,20 +0,0 @@
-{{ with . }}
-
- Latest Posts:
-
- {{ range .Limit 5 }}
- {{ partial "article.html" . }}
- {{ end }}
-
-
- All Posts:
- {{ range .GroupByDate "2006" }}
- {{ .Key}}
-
- {{ end }}
-
-{{ end }}
diff --git a/layouts/partials/terms.html b/layouts/partials/terms.html
new file mode 100644
index 0000000..8a6ebec
--- /dev/null
+++ b/layouts/partials/terms.html
@@ -0,0 +1,23 @@
+{{- /*
+For a given taxonomy, renders a list of terms assigned to the page.
+
+@context {page} page The current page.
+@context {string} taxonomy The taxonomy.
+
+@example: {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
+*/}}
+
+{{- $page := .page }}
+{{- $taxonomy := .taxonomy }}
+
+{{- with $page.GetTerms $taxonomy }}
+ {{- $label := (index . 0).Parent.LinkTitle }}
+
+{{- end }}
diff --git a/layouts/shortcodes/image.html b/layouts/shortcodes/image.html
index 8bb157d..b01a098 100644
--- a/layouts/shortcodes/image.html
+++ b/layouts/shortcodes/image.html
@@ -1,3 +1,7 @@
{{ $image := .Page.Resources.GetMatch (.Get "src") }}
-{{ partial "image.html" (dict "image" $image "alt" (.Get "alt") "class" "fill-wh") }}
-
+{{ partial "image.html"
+ (dict
+ "image" $image
+ "alt" (.Get "alt")
+ "sizes" (slice 320 480 600)
+ "classes" (slice "fill-wh")) }}
\ No newline at end of file
diff --git a/static/favicon.ico b/static/favicon.ico
new file mode 100644
index 0000000..67f8b77
Binary files /dev/null and b/static/favicon.ico differ
diff --git a/theme.toml b/theme.toml
new file mode 100644
index 0000000..fecded5
--- /dev/null
+++ b/theme.toml
@@ -0,0 +1,12 @@
+name = 'neon-harvest'
+license = 'BSD 3-Clause'
+licenselink = 'https://gitea.beetbox.io/BeetBox/neon-harvest/raw/branch/master/LICENSE'
+description = 'The current Hugo theme for beetbox.io'
+
+# The home page of the theme, where the source can be found
+homepage = 'https://gitea.beetbox.io/BeetBox/neon-harvest/'
+
+# If the theme has a single author
+[author]
+ name = 'Alexander Avery'
+ homepage = 'https://beetbox.io/authors/alexander-avery'