diff --git a/pagex.config.js b/pagex.config.js
index 30dbc8c..3437539 100644
--- a/pagex.config.js
+++ b/pagex.config.js
@@ -1,7 +1,7 @@
import {PagexTemplateType} from "pagex";
export default {
- id: "voidcannon",
+ id: "blognutty",
site_config: {
title: "voidcannon-dev"
},
diff --git a/src/content/articles/labscore-deprecation-notice/assets/header/background.webp b/src/content/articles/labscore-deprecation-notice/assets/header/background.webp
new file mode 100644
index 0000000..56a8622
Binary files /dev/null and b/src/content/articles/labscore-deprecation-notice/assets/header/background.webp differ
diff --git a/src/content/articles/labscore-deprecation-notice/content.md b/src/content/articles/labscore-deprecation-notice/content.md
new file mode 100644
index 0000000..eaeb437
--- /dev/null
+++ b/src/content/articles/labscore-deprecation-notice/content.md
@@ -0,0 +1,34 @@
+## What's happening?
+
+The labsCore Discord Bot will be ceasing operation starting on the **1st of January 2026**.
+
+## What's next?
+
+labsCore will continue operating throughout 2025. From 2026 onward the public instance (`labsCore#5969`) will no longer
+be available.
+
+> If you're looking for replacements, I can personally vouch for [Assyst](https://discord.com/oauth2/authorize?client_id=571661221854707713)
+> and [NotSoBot](https://discord.com/oauth2/authorize?client_id=439205512425504771).
+
+The frontend (bot) source-code will be preserved in a read-only state on [GitLab](https://gitlab.com/bignutty/labscore),
+the first-party backend (labscore-api) cannot not be trivially made available due to it relying on a plethora of private
+and undocumented services.
+
+## Why now?
+
+The bot has always been a hobby project that I work on in my free time. In the recent months I've gradually felt
+less and less motivation to dedicate any significant time towards contributing to the project. I don't feel comfortable
+handing this project over to new maintainers, nor do I want to keep it running on "autopilot" until it eventually breaks
+down and I disappear from the internet.
+
+labsCore is one of my oldest JavaScript-based projects, two and a half rewrites later it still exhibits many poor
+conventions and bad decisions that I'd no longer make today. The entire codebase (both frontend and backend) are still
+using CommonJS imports and exports as well as a giant mess of half-baked helper functions and utilities. I believe
+another full rewrite of both the frontend and backend would be necessary to get it into a somewhat manageable state,
+which is something I simply don't want to invest the time into.
+
+
+ help
+ For any further questions, feel free to reach out.
+ labsCore Discord
+
\ No newline at end of file
diff --git a/src/content/articles/labscore-deprecation-notice/labscore-deprecation-notice.pagex.js b/src/content/articles/labscore-deprecation-notice/labscore-deprecation-notice.pagex.js
new file mode 100644
index 0000000..44182dd
--- /dev/null
+++ b/src/content/articles/labscore-deprecation-notice/labscore-deprecation-notice.pagex.js
@@ -0,0 +1,40 @@
+import {VoidcannonHeaderLayoutType, VoidcannonHeaderType, VoidcannonContentType} from "voidcannon";
+
+import bignutty from "../../authors/bignutty.pagex.js";
+
+import videogamesCollection from "../../collections/videogames.pagex.js";
+import testCollection from "../../collections/test.pagex.js";
+import featuredCollection from "../../collections/_featured.pagex.js";
+
+import {PagexResourceTransformer} from "pagex";
+import {ThemeVariants} from "pagex_commons";
+import labsCoreMaintainersPagex from "../../authors/labsCoreMaintainers.pagex.js";
+
+export default {
+ type: VoidcannonContentType.ARTICLE,
+ content: {
+ _transform: PagexResourceTransformer.MARKDOWN,
+ path: "./content.md"
+ },
+ id: "labscore-deprecation-notice",
+ title: "labsCore End of Service Notice",
+ slug: "labscore-eos-notice",
+ abstract: "labsCore will be ceasing operations after 2025.",
+ created_at: 1757861297516,
+ theme: {
+ partial: true,
+ colors: {
+ light: "#00F562",
+ dark: "#00F562",
+ }
+ },
+ header: {
+ type: VoidcannonHeaderType.IMAGE,
+ base: {
+ _transform: PagexResourceTransformer.MEDIA,
+ path: "./assets/header/background.webp"
+ },
+ color: "#0eb1f4"
+ },
+ authors: [labsCoreMaintainersPagex]
+}
\ No newline at end of file
diff --git a/src/content/articles/playground-empty/playground-empty.pagex.js b/src/content/articles/playground-empty/playground-empty.pagex.js
index c6fa976..8eb2e7c 100644
--- a/src/content/articles/playground-empty/playground-empty.pagex.js
+++ b/src/content/articles/playground-empty/playground-empty.pagex.js
@@ -1,4 +1,4 @@
-import {VoidcannonContentType} from "voidcannon";
+import {VoidcannonContentType, VoidcannonVisibilityLevel} from "voidcannon";
import placeholder from "../../authors/placeholder.pagex.js";
@@ -13,5 +13,6 @@ export default {
id: "playground-empty",
title: "Playground Empty Article",
created_at: 1762267626610,
+ visibility_level: VoidcannonVisibilityLevel.HIDDEN,
authors: [placeholder]
}
\ No newline at end of file
diff --git a/src/content/articles/playground-full/playground-full.pagex.js b/src/content/articles/playground-full/playground-full.pagex.js
index 644b9e7..909ca4c 100644
--- a/src/content/articles/playground-full/playground-full.pagex.js
+++ b/src/content/articles/playground-full/playground-full.pagex.js
@@ -2,7 +2,7 @@ import {
VoidcannonHeaderLayoutType,
VoidcannonHeaderType,
VoidcannonContentType,
- VoidcannonEmojiStyle
+ VoidcannonEmojiStyle, VoidcannonVisibilityLevel
} from "voidcannon";
import bignutty from "../../authors/bignutty.pagex.js";
@@ -21,6 +21,7 @@ export default {
id: "playground-full",
title: "Playground Test Article (full theme)",
created_at: 0,
+ visibility_level: VoidcannonVisibilityLevel.HIDDEN,
theme: {
emoji_style: VoidcannonEmojiStyle.FLUENT_FLAT,
partial: false,
diff --git a/src/content/articles/playground-gm3/playground-gm3.pagex.js b/src/content/articles/playground-gm3/playground-gm3.pagex.js
index 5fc8a3b..69477a3 100644
--- a/src/content/articles/playground-gm3/playground-gm3.pagex.js
+++ b/src/content/articles/playground-gm3/playground-gm3.pagex.js
@@ -2,7 +2,7 @@ import {
VoidcannonHeaderLayoutType,
VoidcannonHeaderType,
VoidcannonContentType,
- VoidcannonEmojiStyle
+ VoidcannonEmojiStyle, VoidcannonVisibilityLevel
} from "voidcannon";
import bignutty from "../../authors/bignutty.pagex.js";
@@ -21,6 +21,7 @@ export default {
id: "playground-gm3",
title: "Playground Test Article (gm3 base theme)",
created_at: 1757861297516,
+ visibility_level: VoidcannonVisibilityLevel.HIDDEN,
theme: {
emoji_style: VoidcannonEmojiStyle.TWITTER
},
diff --git a/src/content/articles/playground-p3/playground-p3.pagex.js b/src/content/articles/playground-p3/playground-p3.pagex.js
index 7dbf77b..1f2dcf8 100644
--- a/src/content/articles/playground-p3/playground-p3.pagex.js
+++ b/src/content/articles/playground-p3/playground-p3.pagex.js
@@ -1,4 +1,9 @@
-import {VoidcannonHeaderLayoutType, VoidcannonHeaderType, VoidcannonContentType} from "voidcannon";
+import {
+ VoidcannonHeaderLayoutType,
+ VoidcannonHeaderType,
+ VoidcannonContentType,
+ VoidcannonVisibilityLevel
+} from "voidcannon";
import bignutty from "../../authors/bignutty.pagex.js";
@@ -19,6 +24,7 @@ export default {
title: "Playground P3 Test Article",
abstract: "An article about the 2024 video game 'Persona 3 Reload'.",
created_at: 1757861297516,
+ visibility_level: VoidcannonVisibilityLevel.HIDDEN,
theme: {
colors: {
light: "#0eb1f4",
diff --git a/src/content/articles/playground-totk/playground-totk.pagex.js b/src/content/articles/playground-totk/playground-totk.pagex.js
index af38a0a..c962f02 100644
--- a/src/content/articles/playground-totk/playground-totk.pagex.js
+++ b/src/content/articles/playground-totk/playground-totk.pagex.js
@@ -1,4 +1,9 @@
-import {VoidcannonHeaderLayoutType, VoidcannonHeaderType, VoidcannonContentType} from "voidcannon";
+import {
+ VoidcannonHeaderLayoutType,
+ VoidcannonHeaderType,
+ VoidcannonContentType,
+ VoidcannonVisibilityLevel
+} from "voidcannon";
import bignutty from "../../authors/bignutty.pagex.js";
@@ -18,6 +23,7 @@ export default {
title: "Playground Totk Test Article",
created_at: 1757861297516,
updated_at: 1757861297516,
+ visibility_level: VoidcannonVisibilityLevel.HIDDEN,
theme: {
// partial: true,
colors: {
diff --git a/src/content/articles/playground/playground.pagex.js b/src/content/articles/playground/playground.pagex.js
index fcd7a23..926128b 100644
--- a/src/content/articles/playground/playground.pagex.js
+++ b/src/content/articles/playground/playground.pagex.js
@@ -2,7 +2,7 @@ import {
VoidcannonHeaderLayoutType,
VoidcannonHeaderType,
VoidcannonContentType,
- VoidcannonEmojiStyle
+ VoidcannonEmojiStyle, VoidcannonVisibilityLevel
} from "voidcannon";
import bignutty from "../../authors/bignutty.pagex.js";
@@ -22,6 +22,7 @@ export default {
id: "playground",
title: "Playground Test Article",
created_at: Date.now(),
+ visibility_level: VoidcannonVisibilityLevel.HIDDEN,
abstract: "Article to quickly run tests for all pagex markdown features. Abstract has a lot of filler and padding to test if css limits work as intended across all surfaces.",
author_abstract: "i swear i only played this game for the plot",
cta: "View Test Article!",
diff --git a/src/content/authors/assets/labscore.webp b/src/content/authors/assets/labscore.webp
new file mode 100644
index 0000000..3559860
Binary files /dev/null and b/src/content/authors/assets/labscore.webp differ
diff --git a/src/content/authors/labsCoreMaintainers.pagex.js b/src/content/authors/labsCoreMaintainers.pagex.js
new file mode 100644
index 0000000..16f4a46
--- /dev/null
+++ b/src/content/authors/labsCoreMaintainers.pagex.js
@@ -0,0 +1,31 @@
+import {PagexResourceTransformer} from "pagex";
+import {VoidcannonContentType, VoidcannonEmojiStyle, VoidcannonLinksIconType} from "voidcannon";
+
+export default {
+ type: VoidcannonContentType.AUTHOR,
+ id: "labscore-maintainers",
+ name: "labsCore Maintainers",
+ avatar: {
+ _transform: PagexResourceTransformer.MEDIA,
+ path: "/content/authors/assets/labscore.webp"
+ },
+ theme: {
+ partial: true,
+ colors: {
+ light: "#00F562",
+ dark: "#00F562",
+ }
+ },
+ links: [
+ {
+ label: "Discord",
+ url: "https://discord.gg/fwU68KBH5d",
+ icon: VoidcannonLinksIconType.DISCORD
+ },
+ {
+ label: "GitLab",
+ url: "https://gitlab.com/bignutty/labscore",
+ icon: VoidcannonLinksIconType.GITLAB,
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/content/editorial/home-debug/content.md b/src/content/editorial/home-debug/content.md
new file mode 100644
index 0000000..fa69ee5
--- /dev/null
+++ b/src/content/editorial/home-debug/content.md
@@ -0,0 +1,13 @@
+
+ comic_bubble
+ The site (and content) are still heavily work-in-progress!
+
+
+# Voidcannon
+
+Voidcannon is a modern blogging frontend build on pagex, a static site generator.
+
+This site exists as both a functional example of what pagex can do, and my personal
+playground to write about topics that interest me.
+
+
\ No newline at end of file
diff --git a/src/content/editorial/home-debug/home-debug.pagex.js b/src/content/editorial/home-debug/home-debug.pagex.js
new file mode 100644
index 0000000..02a4b6f
--- /dev/null
+++ b/src/content/editorial/home-debug/home-debug.pagex.js
@@ -0,0 +1,89 @@
+import {
+ VoidcannonContentType,
+ VoidcannonSectionType
+} from "voidcannon";
+
+import {PagexResourceTransformer} from "pagex";
+import CollectionContentTransformer from "voidcannon/src/transformers/CollectionContent.transformer.js";
+import RecentContentTransformer from "voidcannon/src/transformers/RecentContent.transformer.js";
+import ContentByIdentifierTransformer from "voidcannon/src/transformers/ContentByIdentifier.transformer.js";
+
+import playground from "../../articles/playground/playground.pagex.js";
+import playgroundP3 from "../../articles/playground-p3/playground-p3.pagex.js";
+import playgroundEmpty from "../../articles/playground-empty/playground-empty.pagex.js";
+
+import recentArticles from "../recent-articles/recent-articles.pagex.js";
+
+export default {
+ type: VoidcannonContentType.EDITORIAL,
+ id: "voidcannon-index-debug",
+ slug: "home-debug",
+ name: "Voidcannon Home",
+ description: "Voidcannon Home",
+ color: null,
+ sections: [
+ {
+ type: VoidcannonSectionType.STORY_HERO,
+ content: {
+ _transform: ContentByIdentifierTransformer,
+ content_ids: [
+ playground.id,
+ playgroundEmpty.id,
+ playgroundP3.id,
+ ],
+ // TODO: implement this
+ content_types: [
+ VoidcannonContentType.ARTICLE
+ ]
+ }
+ },
+ {
+ type: VoidcannonSectionType.EDITORIAL,
+ content: {
+ _transform: PagexResourceTransformer.MARKDOWN,
+ path: "./content.md"
+ }
+ },
+ {
+ type: VoidcannonSectionType.CONTENT_GRID,
+ content: {
+ _transform: CollectionContentTransformer,
+ collection_id: "test"
+ },
+ label: "Testing Articles",
+ icon: "forklift"
+ },
+ {
+ type: VoidcannonSectionType.EDITORIAL,
+ content: {
+ _transform: PagexResourceTransformer.MARKDOWN,
+ content: ""
+ }
+ },
+ {
+ type: VoidcannonSectionType.CONTENT_GRID,
+ content: {
+ _transform: RecentContentTransformer,
+ amount: 15
+ },
+ label: "Recent Articles",
+ icon: "history",
+ cta: {
+ label: "View All",
+ target: {
+ type: VoidcannonContentType.EDITORIAL,
+ id: recentArticles.id
+ },
+ }
+ },
+ {
+ type: VoidcannonSectionType.CAROUSEL,
+ content: {
+ _transform: CollectionContentTransformer,
+ collection_id: "featured"
+ },
+ label: "Various Articles",
+ target: "collections/featured"
+ },
+ ]
+}
\ No newline at end of file
diff --git a/src/content/editorial/home/content.md b/src/content/editorial/home/content.md
index fa69ee5..60a5cd4 100644
--- a/src/content/editorial/home/content.md
+++ b/src/content/editorial/home/content.md
@@ -1,13 +1,6 @@
+# blognutty
+
comic_bubble
- The site (and content) are still heavily work-in-progress!
-
-
-# Voidcannon
-
-Voidcannon is a modern blogging frontend build on pagex, a static site generator.
-
-This site exists as both a functional example of what pagex can do, and my personal
-playground to write about topics that interest me.
-
-
\ No newline at end of file
+ This site is still work-in-progress!
+
\ No newline at end of file
diff --git a/src/content/editorial/home/home.pagex.js b/src/content/editorial/home/home.pagex.js
index 69482b4..6c77d58 100644
--- a/src/content/editorial/home/home.pagex.js
+++ b/src/content/editorial/home/home.pagex.js
@@ -16,27 +16,12 @@ import recentArticles from "../recent-articles/recent-articles.pagex.js";
export default {
type: VoidcannonContentType.EDITORIAL,
- id: "voidcannon-index",
+ id: "blognutty-index",
slug: "index",
- name: "Voidcannon Home",
- description: "Voidcannon Home",
+ name: "/home",
+ description: "blognutty home",
color: null,
sections: [
- {
- type: VoidcannonSectionType.STORY_HERO,
- content: {
- _transform: ContentByIdentifierTransformer,
- content_ids: [
- playground.id,
- playgroundEmpty.id,
- playgroundP3.id,
- ],
- // TODO: implement this
- content_types: [
- VoidcannonContentType.ARTICLE
- ]
- }
- },
{
type: VoidcannonSectionType.EDITORIAL,
content: {
@@ -44,27 +29,11 @@ export default {
path: "./content.md"
}
},
- {
- type: VoidcannonSectionType.CONTENT_GRID,
- content: {
- _transform: CollectionContentTransformer,
- collection_id: "test"
- },
- label: "Testing Articles",
- icon: "forklift"
- },
- {
- type: VoidcannonSectionType.EDITORIAL,
- content: {
- _transform: PagexResourceTransformer.MARKDOWN,
- content: ""
- }
- },
{
type: VoidcannonSectionType.CONTENT_GRID,
content: {
_transform: RecentContentTransformer,
- amount: 15
+ amount: 9
},
label: "Recent Articles",
icon: "history",
@@ -75,15 +44,6 @@ export default {
id: recentArticles.id
},
}
- },
- {
- type: VoidcannonSectionType.CAROUSEL,
- content: {
- _transform: CollectionContentTransformer,
- collection_id: "featured"
- },
- label: "Various Articles",
- target: "collections/featured"
- },
+ }
]
}
\ No newline at end of file
diff --git a/voidcannon b/voidcannon
index d3eb751..dd03da6 160000
--- a/voidcannon
+++ b/voidcannon
@@ -1 +1 @@
-Subproject commit d3eb75154aa245d7f2009effeac18f2f215c33e7
+Subproject commit dd03da61adf27636d7fc1ce49b0fd16481f5c1cc