diff --git a/Garden b/Garden index 49fc0dbf..842bf5c6 160000 --- a/Garden +++ b/Garden @@ -1 +1 @@ -Subproject commit 49fc0dbf27573e378d7295b87936e324cb82b17b +Subproject commit 842bf5c6f540a6e7dc80d2bdab7ed4fee52262a3 diff --git a/build_garden.js b/build_garden.js index 098327c7..cedd4cf1 100644 --- a/build_garden.js +++ b/build_garden.js @@ -1,5 +1,6 @@ const fs = require("fs"); const path = require("path"); +const wordCounting = require("word-counting"); const util = require('node:util'); const exec = util.promisify(require('node:child_process').exec); @@ -22,6 +23,16 @@ function toSlug(string) { return string.toLowerCase().replaceAll(' ', '-'); } +function moveImportStatementUp(filePath, times = 1) { + let data = fs.readFileSync(filePath).toString(); + const fd = fs.openSync(filePath, "w+"); + for (let i = 0; i < times; i++) { + data = data.replace(/'\.\.\//g, '\''); + } + fs.writeSync(fd, data); + fs.closeSync(fd); +} + (async () => { const blockRefs = {}; const blockLinks = {}; @@ -93,10 +104,14 @@ function toSlug(string) { }); pageLinks["NOW"] = "/now/index"; - await walk("./garden-output/logseq-pages", (dir, file, resolve) => { + await walk("./garden-output/logseq-pages", async (dir, file, resolve) => { const filePath = path.resolve(dir, file); let data = fs.readFileSync(filePath).toString(); + // Count word counts with a special set of transformations that should make it more accurate + const strippedData = data.replace(/---\n[\S\s]*\n---/gm, '').replaceAll(/.*::.*/g, '').replaceAll(/\[([^\]]*)\]\(.*\)/g, '$1'); + const wc = wordCounting(strippedData).wordsCount; + // Replace youtube embeds data = data.replaceAll( /{{video https:\/\/(?:www\.)?youtube\.com\/watch\?v=(.*)}}/g, @@ -132,6 +147,10 @@ function toSlug(string) { data = data.replaceAll( /logseq:\/\/graph\/Garden\?page=([^\)]*)/g, (_, page) => `${pageLinks[page.replaceAll('%20', ' ')]})`); + // Wrap images + data = data.replaceAll( + /!\[([^\]]*)\]\(([^\)]*)\)/g, + (_, title, src) => `
`) // Add tags and references const title = path.basename(file, ".md"); if (title in tagged) { @@ -152,11 +171,11 @@ function toSlug(string) { } // Fix links to /now data = data.replace('NOW', '/now') - // Add title to the top - data = data.replaceAll('___', '/'); + // Add header to the top + const relPath = path.relative("./garden-output/logseq-pages", path.resolve(...filePath.split("___"))).replaceAll(/%3F/gi, '').replace('what-is-content-', 'what-is-content').replace('.md', '/index.md'); data = data.replaceAll( /---\n\n/gm, - `prev: false\nnext: false\n---\n# ${data.match(/title: "(.+)"/)[1]}\n\n`); + `prev: false\nnext: false\n---\n\n

${data.match(/title: "(.+)"/)[1]}

\n

${wc} words, ~${Math.round(wc / 183)} minute read.

\n
\n\n`); const fd = fs.openSync(filePath, "w+"); fs.writeSync(fd, data); @@ -183,6 +202,7 @@ function toSlug(string) { // Copy the guide-to-incrementals pages to the old locations so links don't break fs.mkdirSync('./site/guide-to-incrementals'); fs.copyFileSync('./site/garden/guide-to-incrementals/index.md', './site/guide-to-incrementals/index.md'); + moveImportStatementUp('./site/guide-to-incrementals/index.md'); fs.mkdirSync('./site/guide-to-incrementals/design'); fs.mkdirSync('./site/guide-to-incrementals/design/criticism'); fs.copyFileSync('./site/garden/guide-to-incrementals/navigating-criticism/index.md', './site/guide-to-incrementals/design/criticism/index.md'); @@ -201,6 +221,7 @@ function toSlug(string) { fs.mkdirSync('./site/now'); fs.renameSync('./site/garden/now/index.md', './site/now/index.md'); + moveImportStatementUp('./site/now/index.md'); // Build changelog fs.mkdirSync("./site/changelog"); diff --git a/site/.vitepress/config.ts b/site/.vitepress/config.ts index be2530d5..e7a1a511 100644 --- a/site/.vitepress/config.ts +++ b/site/.vitepress/config.ts @@ -6,9 +6,6 @@ import vueJsx from '@vitejs/plugin-vue-jsx' const fs = require("fs"); const path = require("path"); -const util = require('node:util'); -const exec = util.promisify(require('node:child_process').exec); - const filePath = path.resolve("./Garden/logseq/config.edn"); const data = fs.readFileSync(filePath).toString(); let favorites = []; @@ -16,13 +13,10 @@ for (const match of data.matchAll(/:favorites \["([^\]]+)"\]/g)) { favorites = match[1].split("\" \"").map(page => ({ text: page, link: `/garden/${page.toLowerCase().replaceAll(' ', '-')}` })); } -module.exports = { +export default { lang: "en-US", title: 'The Paper Pilot', description: 'The Paper Pilot\'s Digital Garden', - // Solves content sometimes not updating correctly when navigating between links, - // but at the cost of local search, the "on this page" section, etc. - // mpa: true, appearance: false, vite: { ssr: { @@ -47,18 +41,6 @@ module.exports = { ], lastUpdated: false, cleanUrls: 'with-subfolders', - async transformHtml(code, id, context) { - if (context.page.startsWith("garden") && fs.existsSync("site/" + context.page)) { - const wc = wordCounting(code, { isHtml: true }).wordsCount; - const pageStart = code.indexOf(""); - const firstCommit = (await exec(`git log -n 1 --diff-filter=A --format="" site/${context.page}`)).stdout; - const lastCommit = (await exec(`git log -n 1 --diff-filter=M --format="" site/${context.page}`)).stdout; - const header = code.slice(0, pageStart < 0 ? 0 : pageStart + 5).replace('

${wc} words, ~${Math.round(wc / 183)} minute read. Planted ${firstCommit}.${lastCommit ? ` Last tended to ${lastCommit}.` : ''}


` + code.slice(pageStart + 5).replace('', '
'); - code = code.replaceAll(/]*<\/img>|]*>(?!<\/img)/g, text => `
${text}
`); - } - return code; - }, themeConfig: { search: { provider: 'local', @@ -90,5 +72,10 @@ module.exports = { { text: "/now", link: "/now" }, { text: "Changelog", link: "/changelog" } ] + }, + contentProps: { + class: { + "h-entry": true + } } } diff --git a/site/.vitepress/theme/custom.css b/site/.vitepress/theme/custom.css index eb3c58c6..e245ff41 100644 --- a/site/.vitepress/theme/custom.css +++ b/site/.vitepress/theme/custom.css @@ -409,6 +409,7 @@ a.title { width: var(--vp-sidebar-width) !important; margin-left: max(-15px, calc((100% - (var(--vp-layout-max-width) - 60px)) / 2)) !important; max-height: 40vh; + transition-duration: 0s !important; } .VPLocalNavOutlineDropdown { @@ -427,6 +428,7 @@ a.title { padding: 0 !important; margin-left: max(-15px, calc((100% - (var(--vp-layout-max-width) - 60px)) / 2)) !important; max-height: 40vh; + overflow-y: auto; } .VPDoc .aside-container { @@ -560,8 +562,7 @@ hr { } table { - margin: 0 !important; - margin-top: 30px !important; + margin: 30px 0 !important; } #app .vp-doc tr { diff --git a/site/.vitepress/theme/index.ts b/site/.vitepress/theme/index.ts index a30a82f8..5df475d6 100644 --- a/site/.vitepress/theme/index.ts +++ b/site/.vitepress/theme/index.ts @@ -1,4 +1,4 @@ -import DefaultTheme from 'vitepress/theme'; +import DefaultTheme from 'vitepress/theme-without-fonts'; import Layout from './Layout.vue'; export default { diff --git a/site/garden/activitypub/index.md b/site/garden/activitypub/index.md index e108975c..33535369 100644 --- a/site/garden/activitypub/index.md +++ b/site/garden/activitypub/index.md @@ -6,7 +6,14 @@ title: "ActivityPub" prev: false next: false --- -# ActivityPub + +

ActivityPub

+

8 words, ~0 minute read.

+
> Referenced by: [Fediverse](/garden/fediverse/index.md) diff --git a/site/garden/advent-incremental/index.md b/site/garden/advent-incremental/index.md index 064407da..a3c1f03e 100644 --- a/site/garden/advent-incremental/index.md +++ b/site/garden/advent-incremental/index.md @@ -6,7 +6,14 @@ title: "Advent Incremental" prev: false next: false --- -# Advent Incremental + +

Advent Incremental

+

104 words, ~1 minute read.

+
> Tags: [My Projects](/garden/my-projects/index.md), [Profectus](/garden/profectus/index.md) diff --git a/site/garden/artificial-intelligence/index.md b/site/garden/artificial-intelligence/index.md index 55f5a798..3f02f118 100644 --- a/site/garden/artificial-intelligence/index.md +++ b/site/garden/artificial-intelligence/index.md @@ -5,7 +5,14 @@ title: "Artificial Intelligence" prev: false next: false --- -# Artificial Intelligence + +

Artificial Intelligence

+

101 words, ~1 minute read.

+
> Referenced by: [Command Palettes](/garden/command-palettes/index.md) diff --git a/site/garden/atproto/index.md b/site/garden/atproto/index.md index 5d5caf4f..31c52387 100644 --- a/site/garden/atproto/index.md +++ b/site/garden/atproto/index.md @@ -7,7 +7,14 @@ title: "ATProto" prev: false next: false --- -# ATProto + +

ATProto

+

31 words, ~0 minute read.

+
> Referenced by: [Fediverse](/garden/fediverse/index.md) diff --git a/site/garden/babble-buds/index.md b/site/garden/babble-buds/index.md index fddfab70..373ded4a 100644 --- a/site/garden/babble-buds/index.md +++ b/site/garden/babble-buds/index.md @@ -6,7 +6,14 @@ title: "Babble Buds" prev: false next: false --- -# Babble Buds + +

Babble Buds

+

113 words, ~1 minute read.

+
> Tags: [My Projects](/garden/my-projects/index.md) diff --git a/site/garden/capture-the-citadel/index.md b/site/garden/capture-the-citadel/index.md index bce55e18..d7db94fb 100644 --- a/site/garden/capture-the-citadel/index.md +++ b/site/garden/capture-the-citadel/index.md @@ -6,7 +6,14 @@ title: "Capture the Citadel" prev: false next: false --- -# Capture the Citadel + +

Capture the Citadel

+

39 words, ~0 minute read.

+
> Tags: [My Projects](/garden/my-projects/index.md) @@ -14,4 +21,4 @@ A 3D VR re-envisioning of a Slay the Spire-style game by Anthony Lawn and Grant For more details, visit [Grant's page on the game](https://grantcbarbee.github.io/conquer-the-citadel.html). -![screenshot.png](/garden/screenshot_1717381273245_0.png) \ No newline at end of file +
\ No newline at end of file diff --git a/site/garden/chat-glue/index.md b/site/garden/chat-glue/index.md index c3e910b0..11fa2828 100644 --- a/site/garden/chat-glue/index.md +++ b/site/garden/chat-glue/index.md @@ -5,7 +5,14 @@ title: "Chat Glue" prev: false next: false --- -# Chat Glue + +

Chat Glue

+

23 words, ~0 minute read.

+
> Referenced by: [Commune](/garden/commune/index.md), [The Small Web](/garden/the-small-web/index.md) diff --git a/site/garden/chronological/index.md b/site/garden/chronological/index.md index b9b91cbf..bf516846 100644 --- a/site/garden/chronological/index.md +++ b/site/garden/chronological/index.md @@ -5,7 +5,14 @@ title: "Chronological" prev: false next: false --- -# Chronological + +

Chronological

+

73 words, ~0 minute read.

+
> Referenced by: [Digital Gardens](/garden/digital-gardens/index.md), [Freeform vs Chronological Dichotomy](/garden/freeform-vs-chronological-dichotomy/index.md), [The Small Web](/garden/the-small-web/index.md) diff --git a/site/garden/cinny/index.md b/site/garden/cinny/index.md index 760394d9..266b0ba9 100644 --- a/site/garden/cinny/index.md +++ b/site/garden/cinny/index.md @@ -5,7 +5,14 @@ title: "Cinny" prev: false next: false --- -# Cinny + +

Cinny

+

3 words, ~0 minute read.

+
> Referenced by: [Incremental Social](/garden/incremental-social/index.md) diff --git a/site/garden/command-palettes/index.md b/site/garden/command-palettes/index.md index 762e79e9..7f096c95 100644 --- a/site/garden/command-palettes/index.md +++ b/site/garden/command-palettes/index.md @@ -5,7 +5,14 @@ title: "Command Palettes" prev: false next: false --- -# Command Palettes + +

Command Palettes

+

117 words, ~1 minute read.

+
Command palettes are a design pattern where apps expose functionality through a search bar diff --git a/site/garden/commune/index.md b/site/garden/commune/index.md index 87ba0ff6..87d10f54 100644 --- a/site/garden/commune/index.md +++ b/site/garden/commune/index.md @@ -5,7 +5,14 @@ title: "Commune" prev: false next: false --- -# Commune + +

Commune

+

144 words, ~1 minute read.

+
> Referenced by: [Federated Identity](/garden/federated-identity/index.md), [Fedi v2](/garden/fedi-v2/index.md), [/now](/now/index), [Webrings](/garden/webrings/index.md), [Weird](/garden/weird/index.md) diff --git a/site/garden/davey-wreden/index.md b/site/garden/davey-wreden/index.md index 4f5da3ea..8105121c 100644 --- a/site/garden/davey-wreden/index.md +++ b/site/garden/davey-wreden/index.md @@ -5,7 +5,14 @@ title: "Davey Wreden" prev: false next: false --- -# Davey Wreden + +

Davey Wreden

+

37 words, ~0 minute read.

+
> Referenced by: [Ivy Road](/garden/ivy-road/index.md), [The Beginner's Guide](/garden/the-beginner-s-guide/index.md) diff --git a/site/garden/decentralized/index.md b/site/garden/decentralized/index.md index 555d82d6..0fe8ccf1 100644 --- a/site/garden/decentralized/index.md +++ b/site/garden/decentralized/index.md @@ -6,7 +6,14 @@ title: "Decentralized" prev: false next: false --- -# Decentralized + +

Decentralized

+

80 words, ~0 minute read.

+
> Referenced by: [Commune](/garden/commune/index.md), [Fedi v2](/garden/fedi-v2/index.md), [Matrix](/garden/matrix/index.md), [Social Media](/garden/social-media/index.md) diff --git a/site/garden/dice-armor/index.md b/site/garden/dice-armor/index.md index 730d375c..3fc790fb 100644 --- a/site/garden/dice-armor/index.md +++ b/site/garden/dice-armor/index.md @@ -6,7 +6,14 @@ title: "Dice Armor" prev: false next: false --- -# Dice Armor + +

Dice Armor

+

963 words, ~5 minute read.

+
> Referenced by: [Babble Buds](/garden/babble-buds/index.md) @@ -18,39 +25,39 @@ Dice Armor is a game that started development as a semester-long project by a te The build available here was created for showing off at the end of the semester, and as such has some buttons present to make the game easier to skip parts of the game to see all the content: You start with all the dice in the game already in the shop, there's a button to give yourself free money to buy these dice with, and in the duel, there are buttons to force a win or a loss, which can be used to skip the tutorial (not recommended for first-time players). -![Tutorial](/garden/da2_1717378483173_0.png) +
Dice Armor is a dice dueling game. Players can use abilities, flip dice, and attack each other to win in a dice game that puts chance into the hands of the players. This is what the dueling scene looks like, with a tutorial cutscene happening on top to guide the player through the basics. Also, all the dice are constructed dynamically, using quaternion math to figure out the placement of each component relative to the face it is going on. The die in the middle has one of the player' and opponents' portraits on each of its sides. -![Editors](/garden/editors_1717378509527_0.png) +
For many of the objects I've created, I've made scriptable objects so that game designers can add and modify them easily. Additionally, I would create custom inspectors for the objects to help make them as easy to understand and edit as possible. The opponent's artificial intelligence is made up of many strategies, in a prioritized list. When it is the opponents' turn they go through each strategy and check if they can be run, and if so then the opponent performs the strategy and starts back over at the top of the list of strategies. The + sign under the list of strategies opens an organized dropdown of all the various strategies. -![Simulator](/garden/simulator_1717378525890_0.jpg) +
In addition to custom inspector code, I've created new tools for the editor for our game designers to use. This is a duel simulator that will take two opponents and simulate an arbitrary number of duels between them, and output the results and summarize them for you, much much quicker than manually going through the duels, even with an absurdly high timeScale. This will become incredibly useful in making balance changes and testing new dice against existing sets. This is a screenshot of it in edit mode, but in play mode it removes the "Dueling Managers" field and will use whatever the current duel balance settings are, allowing for the GDs to test freely in play mode without worrying about undoing all their changes afterward. -![da1.png](/garden/da1_1717378469912_0.png) +
I created the Babble Buds puppet editor and ported the rendering library I wrote for it to C# so it could be used in Unity. Dice Armor has a full campaign using cutscenes made using the Babble Buds cutscene editor, taking advantage of its support for custom commands and fields to control things like talking, giving the player dice and money, starting duels, and controlling player progression through the story. -![Action Wheel](/garden/da6_1717379962786_0.png) +
When a cutscene ends, its final command is to either start a duel or set the next cutscene in the story. In the latter case, there is an additional field for what to call the next cutscene, and what location it takes place. The cutscene is then added to the player's save file, and when they visit the city locations are greyed out until they have at least one action to do there. Each location has a dynamically populated action wheel with a custom range of acceptable angles. -![Shop](/garden/da7_1717379991458_0.png) +
The dice shop is dynamically populated by a list of dice available to the player, which can be changed during cutscenes, and is checked against the dice owned by the player to generate sold-out indicators. On the left, the player can choose to filter the options down to a single dice effect, which also updates the "Buy All" button to buy only all the dice in the current filter. -![Inventory](/garden/da8_1717380011914_0.png) +
The inventory works most the same as the shop, but for equipping dice. It also allows you to drag individual dice or entire sets to the equipped dice glyph. While dragging it will highlight all the slots the new dice will be equipped into. -![Dice Rolling](/garden/da3_1717380046653_0.png) +
The dice rolling uses the physics engine and detects once the dice have stopped moving, then determines which side is face up based on which of the normals is closest to straight up. It flags the die as cocked if that smallest angle is above a threshold. The dice sink into the table when not rolling to not interfere with any dice that are rolling. -![Missile Storm](/garden/da9_1717380177060_0.png) +
During certain events like winning the game or having the face of a die broken, the players' portraits will flash an emotion for a second. After winning, a random living die from the winning player is chosen to play their "finisher move", a flashy and dramatic effect to end the game. Shown is the arcane mechana's finisher, "Missile Storm". diff --git a/site/garden/digital-gardens/index.md b/site/garden/digital-gardens/index.md index 2971187d..f13e2eea 100644 --- a/site/garden/digital-gardens/index.md +++ b/site/garden/digital-gardens/index.md @@ -6,7 +6,14 @@ title: "Digital Gardens" prev: false next: false --- -# Digital Gardens + +

Digital Gardens

+

63 words, ~0 minute read.

+
> Referenced by: [Chronological](/garden/chronological/index.md), [Commune](/garden/commune/index.md), [Garden-RSS](/garden/garden-rss/index.md), [The Cozy Web](/garden/the-cozy-web/index.md), [The Small Web](/garden/the-small-web/index.md) diff --git a/site/garden/federated-identity/index.md b/site/garden/federated-identity/index.md index a79bbf50..5f9cc964 100644 --- a/site/garden/federated-identity/index.md +++ b/site/garden/federated-identity/index.md @@ -6,7 +6,14 @@ title: "Federated Identity" prev: false next: false --- -# Federated Identity + +

Federated Identity

+

68 words, ~0 minute read.

+
> Referenced by: [Commune](/garden/commune/index.md), [Fedi v2](/garden/fedi-v2/index.md), [Weird](/garden/weird/index.md) diff --git a/site/garden/fedi-v2/index.md b/site/garden/fedi-v2/index.md index 320f0672..2197789a 100644 --- a/site/garden/fedi-v2/index.md +++ b/site/garden/fedi-v2/index.md @@ -5,7 +5,14 @@ title: "Fedi v2" prev: false next: false --- -# Fedi v2 + +

Fedi v2

+

1274 words, ~7 minute read.

+
> Referenced by: [Social Media](/garden/social-media/index.md), [Weird](/garden/weird/index.md) diff --git a/site/garden/fediverse/index.md b/site/garden/fediverse/index.md index 927fcefe..4ebfcfcc 100644 --- a/site/garden/fediverse/index.md +++ b/site/garden/fediverse/index.md @@ -7,7 +7,14 @@ title: "Fediverse" prev: false next: false --- -# Fediverse + +

Fediverse

+

29 words, ~0 minute read.

+
> Referenced by: [ATProto](/garden/atproto/index.md), [Decentralized](/garden/decentralized/index.md), [Fedi v2](/garden/fedi-v2/index.md), [Incremental Social](/garden/incremental-social/index.md), [Mbin](/garden/mbin/index.md), [Weird](/garden/weird/index.md) diff --git a/site/garden/forgejo/index.md b/site/garden/forgejo/index.md index f3a3dea7..183024ad 100644 --- a/site/garden/forgejo/index.md +++ b/site/garden/forgejo/index.md @@ -5,7 +5,14 @@ title: "Forgejo" prev: false next: false --- -# Forgejo + +

Forgejo

+

5 words, ~0 minute read.

+
> Referenced by: [Incremental Social](/garden/incremental-social/index.md) diff --git a/site/garden/freeform-vs-chronological-dichotomy/index.md b/site/garden/freeform-vs-chronological-dichotomy/index.md index fb07668b..deb6c3b0 100644 --- a/site/garden/freeform-vs-chronological-dichotomy/index.md +++ b/site/garden/freeform-vs-chronological-dichotomy/index.md @@ -5,7 +5,14 @@ title: "Freeform vs Chronological Dichotomy" prev: false next: false --- -# Freeform vs Chronological Dichotomy + +

Freeform vs Chronological Dichotomy

+

10 words, ~0 minute read.

+
> Referenced by: [Chronological](/garden/chronological/index.md), [Freeform](/garden/freeform/index.md) diff --git a/site/garden/freeform/index.md b/site/garden/freeform/index.md index 40add8a2..a63ff198 100644 --- a/site/garden/freeform/index.md +++ b/site/garden/freeform/index.md @@ -5,7 +5,14 @@ title: "Freeform" prev: false next: false --- -# Freeform + +

Freeform

+

46 words, ~0 minute read.

+
> Referenced by: [Commune](/garden/commune/index.md), [Digital Gardens](/garden/digital-gardens/index.md), [Freeform vs Chronological Dichotomy](/garden/freeform-vs-chronological-dichotomy/index.md), [Garden-RSS](/garden/garden-rss/index.md), [The Small Web](/garden/the-small-web/index.md) diff --git a/site/garden/game-dev-tree/index.md b/site/garden/game-dev-tree/index.md index a0c29ea8..ea5c3df0 100644 --- a/site/garden/game-dev-tree/index.md +++ b/site/garden/game-dev-tree/index.md @@ -6,7 +6,14 @@ title: "Game Dev Tree" prev: false next: false --- -# Game Dev Tree + +

Game Dev Tree

+

34 words, ~0 minute read.

+
> Tags: [My Projects](/garden/my-projects/index.md) diff --git a/site/garden/garden-rss/index.md b/site/garden/garden-rss/index.md index 9048d95d..cc0b7f5d 100644 --- a/site/garden/garden-rss/index.md +++ b/site/garden/garden-rss/index.md @@ -5,7 +5,14 @@ title: "Garden-RSS" prev: false next: false --- -# Garden-RSS + +

Garden-RSS

+

59 words, ~0 minute read.

+
> Referenced by: [Freeform](/garden/freeform/index.md), [The Small Web](/garden/the-small-web/index.md), [This Knowledge Hub](/garden/this-knowledge-hub/index.md) diff --git a/site/garden/guide-to-incrementals/appeal-to-developers/index.md b/site/garden/guide-to-incrementals/appeal-to-developers/index.md index f37eb96c..7fc5865f 100644 --- a/site/garden/guide-to-incrementals/appeal-to-developers/index.md +++ b/site/garden/guide-to-incrementals/appeal-to-developers/index.md @@ -1,11 +1,18 @@ --- public: "true" -slug: "guide-to-incrementals/appeal-to-developers" -title: "Guide to Incrementals/Appeal to Developers" +slug: "guide-to-incrementals___appeal-to-developers" +title: "Guide to Incrementals___Appeal to Developers" prev: false next: false --- -# Guide to Incrementals/Appeal to Developers + +

Guide to Incrementals___Appeal to Developers

+

636 words, ~3 minute read.

+
There are a lot of developers in the incremental games community - the genre seems to draw them in, and convert a lot of players _into_ developers. Let's explore the reasons why this genre appeals to developers. diff --git a/site/garden/guide-to-incrementals/appeal-to-players/index.md b/site/garden/guide-to-incrementals/appeal-to-players/index.md index 65ae2df4..d5d42dae 100644 --- a/site/garden/guide-to-incrementals/appeal-to-players/index.md +++ b/site/garden/guide-to-incrementals/appeal-to-players/index.md @@ -1,11 +1,18 @@ --- public: "true" -slug: "guide-to-incrementals/appeal-to-players" -title: "Guide to Incrementals/Appeal to Players" +slug: "guide-to-incrementals___appeal-to-players" +title: "Guide to Incrementals___Appeal to Players" prev: false next: false --- -# Guide to Incrementals/Appeal to Players + +

Guide to Incrementals___Appeal to Players

+

2400 words, ~13 minute read.

+
This is something that has been discussed and analyzed by many people, and to some extent, I feel like everything that can be said on the topic already has. However, a lot of these analyses are from the perspective of those with not as much experience and involvement within the genre as I'd argue would be necessary for a fully contextualized answer. I recently watched a video about Vampire Survivors, which has since been taken down due to drawing negative attention, which made me think about some interesting arguments about what games _are_, and what makes them _good_. The video's argument that "Vampire Survivors is not a video game" mirrors a claim by the developer of Cookie Clicker that his games are ["non-games"](https://www.polygon.com/2013/9/30/4786780/the-cult-of-the-cookie-clicker-when-is-a-game-not-a-game). Using Vampire Survivors and the video made on it as a framework, I'll be answering why incremental games appeal to players. Since the video has been taken down, I'll do my best to contextualize and generalize the arguments of the video without requiring the reader to watch it. For what it's worth, while I disagreed with the video I actually liked a lot of the way it went about thinking about games, and I consider this a continuation of that discussion. diff --git a/site/garden/guide-to-incrementals/defining-the-genre/index.md b/site/garden/guide-to-incrementals/defining-the-genre/index.md index fb92f4cf..9229e803 100644 --- a/site/garden/guide-to-incrementals/defining-the-genre/index.md +++ b/site/garden/guide-to-incrementals/defining-the-genre/index.md @@ -1,11 +1,18 @@ --- public: "true" -slug: "guide-to-incrementals/defining-the-genre" -title: "Guide to Incrementals/Defining the Genre" +slug: "guide-to-incrementals___defining-the-genre" +title: "Guide to Incrementals___Defining the Genre" prev: false next: false --- -# Guide to Incrementals/Defining the Genre + +

Guide to Incrementals___Defining the Genre

+

3429 words, ~19 minute read.

+
Video games are placed into genres for a variety of reasons. They can give a mental shorthand to set the player's expectations up, they can help a game market itself by its similarities to other, already popular games, and honestly, people just love categorization for its own sake. For this guide, it's important to define the genre so it is clear what games it's even talking about. diff --git a/site/garden/guide-to-incrementals/index.md b/site/garden/guide-to-incrementals/index.md index a0fe55db..04690c34 100644 --- a/site/garden/guide-to-incrementals/index.md +++ b/site/garden/guide-to-incrementals/index.md @@ -5,7 +5,14 @@ title: "Guide to Incrementals" prev: false next: false --- -# Guide to Incrementals + +

Guide to Incrementals

+

251 words, ~1 minute read.

+
This is a comprehensive guide to Incremental Games, a genre of video games. It will explore defining the genre, why it's appealing, and how to design and build your own incremental game. Along the way will be ~~interactive examples~~, snippets from other creators, and relevant material to contextualize everything. diff --git a/site/garden/guide-to-incrementals/navigating-criticism/index.md b/site/garden/guide-to-incrementals/navigating-criticism/index.md index b99118d8..b310700e 100644 --- a/site/garden/guide-to-incrementals/navigating-criticism/index.md +++ b/site/garden/guide-to-incrementals/navigating-criticism/index.md @@ -1,11 +1,18 @@ --- public: "true" -slug: "guide-to-incrementals/navigating-criticism" -title: "Guide to Incrementals/Navigating Criticism" +slug: "guide-to-incrementals___navigating-criticism" +title: "Guide to Incrementals___Navigating Criticism" prev: false next: false --- -# Guide to Incrementals/Navigating Criticism + +

Guide to Incrementals___Navigating Criticism

+

747 words, ~4 minute read.

+
Developing games is fun and exciting and teaches a lot of wonderful skills - I enthusiastically encourage anyone with an interest in game development to try it out - and incremental games are a wonderful way to get started. However, there are many challenges young and inexperienced developers have to face, and I think the hardest one - harder than coding, debugging, balancing, etc. - is handling criticism. When you put your heart and soul into a game it is natural to feel very vulnerable. While I think there's a lot communities can do to ensure they're welcoming, positive and constructive with their criticisms, inevitably you will eventually read some, and potentially a lot, of comments that can deeply affect you. No one is immune to this, from young incremental game developers to the largest content creators you can think of. That's why it's important to be able to process and navigate criticism, because ultimately collecting feedback is essential to the journey to becoming a better developer. On this page, we'll explore how to embrace criticism, grow from it, and continue to post your games publicly with confidence. diff --git a/site/garden/guide-to-incrementals/what-is-content/index.md b/site/garden/guide-to-incrementals/what-is-content/index.md index c141cd8f..c4911083 100644 --- a/site/garden/guide-to-incrementals/what-is-content/index.md +++ b/site/garden/guide-to-incrementals/what-is-content/index.md @@ -1,11 +1,18 @@ --- public: "true" -slug: "guide-to-incrementals/what-is-content-" -title: "Guide to Incrementals/What is Content?" +slug: "guide-to-incrementals___what-is-content-" +title: "Guide to Incrementals___What is Content?" prev: false next: false --- -# Guide to Incrementals/What is Content? + +

Guide to Incrementals___What is Content?

+

2092 words, ~11 minute read.

+
If you've been in the incremental games community for any amount of time, you'll quickly find the number one thing players want is _content_. They want as much of it as possible! The most popular incremental games have tons of content, so they just keep stretching on and on and on, introducing mechanic after mechanic, and players love it. In fact, players seem to value the _amount_ of content over the quality of any _specific_ content. However, there's a bit of a lack of understanding concerning _what_ content is, and I'd like to explore what counts as content, and how we measure it. As a baseline definition, I think "content" can just be described as the parts of the game that engage the player, but to truly understand it we need to contextualize what that means and how it affects the gameplay experience. diff --git a/site/garden/incremental-social/index.md b/site/garden/incremental-social/index.md index a46bc314..15b66018 100644 --- a/site/garden/incremental-social/index.md +++ b/site/garden/incremental-social/index.md @@ -5,7 +5,14 @@ title: "Incremental Social" prev: false next: false --- -# Incremental Social + +

Incremental Social

+

20 words, ~0 minute read.

+
> Referenced by: [Federated Identity](/garden/federated-identity/index.md), [/now](/now/index), [Webrings](/garden/webrings/index.md) diff --git a/site/garden/ivy-road/index.md b/site/garden/ivy-road/index.md index 813ca500..e015218b 100644 --- a/site/garden/ivy-road/index.md +++ b/site/garden/ivy-road/index.md @@ -6,7 +6,14 @@ title: "Ivy Road" prev: false next: false --- -# Ivy Road + +

Ivy Road

+

6 words, ~0 minute read.

+
> Referenced by: [Davey Wreden](/garden/davey-wreden/index.md), [Wanderstop](/garden/wanderstop/index.md) diff --git a/site/garden/kronos/index.md b/site/garden/kronos/index.md index 3bd635cc..e1f68411 100644 --- a/site/garden/kronos/index.md +++ b/site/garden/kronos/index.md @@ -6,7 +6,14 @@ title: "Kronos" prev: false next: false --- -# Kronos + +

Kronos

+

60 words, ~0 minute read.

+
> Referenced by: [V-ecs](/garden/v-ecs/index.md) diff --git a/site/garden/life-is-strange/index.md b/site/garden/life-is-strange/index.md index d18f4c4f..04c37d86 100644 --- a/site/garden/life-is-strange/index.md +++ b/site/garden/life-is-strange/index.md @@ -5,7 +5,14 @@ title: "Life is Strange" prev: false next: false --- -# Life is Strange + +

Life is Strange

+

654 words, ~4 minute read.

+
A series of narrative driven video games with a focus on player choices @@ -17,8 +24,8 @@ Playthroughs I enjoyed: - [Laura Kate](https://www.youtube.com/playlist?list=PLD0NeEbRY7VR3Vl35qtQyexV9edtlkODU) - [Jesse and Dodger](https://www.youtube.com/playlist?list=PLFx-KViPXIkFWTwFCBku5KNgv_rsmPh-r) - I got a shirt they made for this series signed by Jesse at PAX South 2017 - - ![6346b024-885e-45e0-9df6-5ee0311133f7.png](/garden/6346b024-885e-45e0-9df6-5ee0311133f7_1718332409063_0.png) - - ![ce7b2612-2ddb-423e-82eb-95c2ed08c4da.png](/garden/ce7b2612-2ddb-423e-82eb-95c2ed08c4da_1718332277410_0.png) + -
+ -
- [LiS Voice Actors](https://www.youtube.com/watch?v=zvQmqdnFkZA) Around the start of Haley and I's relationship, we'd play through LiS1 on projectors in our's classrooms diff --git a/site/garden/logseq/index.md b/site/garden/logseq/index.md index 9d412014..8c7fcbba 100644 --- a/site/garden/logseq/index.md +++ b/site/garden/logseq/index.md @@ -5,7 +5,14 @@ title: "Logseq" prev: false next: false --- -# Logseq + +

Logseq

+

3 words, ~0 minute read.

+
> Referenced by: [Command Palettes](/garden/command-palettes/index.md), [This Knowledge Hub](/garden/this-knowledge-hub/index.md) diff --git a/site/garden/matrix/index.md b/site/garden/matrix/index.md index e2b805fc..25f2ceaa 100644 --- a/site/garden/matrix/index.md +++ b/site/garden/matrix/index.md @@ -5,7 +5,14 @@ title: "Matrix" prev: false next: false --- -# Matrix + +

Matrix

+

2 words, ~0 minute read.

+
> Referenced by: [Cinny](/garden/cinny/index.md), [Commune](/garden/commune/index.md), [Synapse](/garden/synapse/index.md) diff --git a/site/garden/mbin/index.md b/site/garden/mbin/index.md index 5a840929..fb0c24db 100644 --- a/site/garden/mbin/index.md +++ b/site/garden/mbin/index.md @@ -5,7 +5,14 @@ title: "Mbin" prev: false next: false --- -# Mbin + +

Mbin

+

12 words, ~0 minute read.

+
> Referenced by: [Incremental Social](/garden/incremental-social/index.md) diff --git a/site/garden/mtx/index.md b/site/garden/mtx/index.md index 82eb141f..f5e37fb2 100644 --- a/site/garden/mtx/index.md +++ b/site/garden/mtx/index.md @@ -6,7 +6,14 @@ title: "MTX" prev: false next: false --- -# MTX + +

MTX

+

10 words, ~0 minute read.

+
> Referenced by: [Premium Currency](/garden/premium-currency/index.md), [Video Game Monetization](/garden/video-game-monetization/index.md) diff --git a/site/garden/my-personal-website/index.md b/site/garden/my-personal-website/index.md index 91f3d0ba..8f179b0a 100644 --- a/site/garden/my-personal-website/index.md +++ b/site/garden/my-personal-website/index.md @@ -5,7 +5,14 @@ title: "My Personal Website" prev: false next: false --- -# My Personal Website + +

My Personal Website

+

10 words, ~0 minute read.

+
> Referenced by: [The Small Web](/garden/the-small-web/index.md) diff --git a/site/garden/my-projects/index.md b/site/garden/my-projects/index.md index eb0f4c1e..b11d858b 100644 --- a/site/garden/my-projects/index.md +++ b/site/garden/my-projects/index.md @@ -6,7 +6,14 @@ title: "My Projects" prev: false next: false --- -# My Projects + +

My Projects

+

72 words, ~0 minute read.

+
> Tagged by: [Advent Incremental](/garden/advent-incremental/index.md), [Babble Buds](/garden/babble-buds/index.md), [Capture the Citadel](/garden/capture-the-citadel/index.md), [Dice Armor](/garden/dice-armor/index.md), [Game Dev Tree](/garden/game-dev-tree/index.md), [Incremental Social](/garden/incremental-social/index.md), [Kronos](/garden/kronos/index.md), [Opti-Speech](/garden/opti-speech/index.md), [Planar Pioneers](/garden/planar-pioneers/index.md), [Profectus](/garden/profectus/index.md), [V-ecs](/garden/v-ecs/index.md) diff --git a/site/garden/nostr/index.md b/site/garden/nostr/index.md index adbb922f..47eea5a6 100644 --- a/site/garden/nostr/index.md +++ b/site/garden/nostr/index.md @@ -6,7 +6,14 @@ title: "Nostr" prev: false next: false --- -# Nostr + +

Nostr

+

8 words, ~0 minute read.

+
> Referenced by: [Fediverse](/garden/fediverse/index.md) diff --git a/site/garden/open-source/index.md b/site/garden/open-source/index.md index 5aa4acb8..4557a17b 100644 --- a/site/garden/open-source/index.md +++ b/site/garden/open-source/index.md @@ -5,7 +5,14 @@ title: "Open Source" prev: false next: false --- -# Open Source + +

Open Source

+

25 words, ~0 minute read.

+
> Referenced by: [Advent Incremental](/garden/advent-incremental/index.md), [Cinny](/garden/cinny/index.md), [Commune](/garden/commune/index.md), [Dice Armor](/garden/dice-armor/index.md), [Forgejo](/garden/forgejo/index.md), [Game Dev Tree](/garden/game-dev-tree/index.md), [Logseq](/garden/logseq/index.md), [Mbin](/garden/mbin/index.md), [Planar Pioneers](/garden/planar-pioneers/index.md), [Profectus](/garden/profectus/index.md), [Synapse](/garden/synapse/index.md), [Vitepress](/garden/vitepress/index.md), [Weird](/garden/weird/index.md) diff --git a/site/garden/opti-speech/index.md b/site/garden/opti-speech/index.md index 7ef4fd2f..81ada242 100644 --- a/site/garden/opti-speech/index.md +++ b/site/garden/opti-speech/index.md @@ -6,7 +6,14 @@ title: "Opti-Speech" prev: false next: false --- -# Opti-Speech + +

Opti-Speech

+

312 words, ~2 minute read.

+
> Tags: [My Projects](/garden/my-projects/index.md) @@ -16,7 +23,7 @@ In college I continued development on the Opti-Speech project, originally built The Optispeech project involves designing and testing a real-time tongue model that can be viewed in a transparent head while a subject talks — for the purposes of treating speech errors and teaching foreign language sounds. This work has been conducted in partnership with Vulintus and with support from the National Institutes of Health (NIH). -![system-architecture-600.jpg](/garden/system-architecture-600_1717384793933_0.jpg) +
@@ -30,10 +37,10 @@ This video shows an American talker learning a novel sound not found in English. As the sole programmer at UT Dallas Speech Production Lab at the time, my changes involved updating to a more modern version of Unity, improving the interface, in general cleaning up tech debt so it can more easily support new features, and added support for additional EMA systems, namely the Carstens AG501. -![new-interface.png](/garden/new-interface_1717384734845_0.png) +
In addition, the program now includes documentation and unit tests to improve program stability and maintainability going forward. -![documentation.png](/garden/documentation_1717384823218_0.png) +
-![unittests.png](/garden/unittests_1717384825666_0.png) \ No newline at end of file +
\ No newline at end of file diff --git a/site/garden/planar-pioneers/index.md b/site/garden/planar-pioneers/index.md index fb152914..12be7561 100644 --- a/site/garden/planar-pioneers/index.md +++ b/site/garden/planar-pioneers/index.md @@ -6,7 +6,14 @@ title: "Planar Pioneers" prev: false next: false --- -# Planar Pioneers + +

Planar Pioneers

+

25 words, ~0 minute read.

+
> Tags: [My Projects](/garden/my-projects/index.md), [Profectus](/garden/profectus/index.md) diff --git a/site/garden/pre-order-bonuses/index.md b/site/garden/pre-order-bonuses/index.md index 803c0df7..c31a4bdf 100644 --- a/site/garden/pre-order-bonuses/index.md +++ b/site/garden/pre-order-bonuses/index.md @@ -5,7 +5,14 @@ title: "Pre-Order Bonuses" prev: false next: false --- -# Pre-Order Bonuses + +

Pre-Order Bonuses

+

98 words, ~1 minute read.

+
> Referenced by: [Video Game Monetization](/garden/video-game-monetization/index.md) diff --git a/site/garden/premium-currency/index.md b/site/garden/premium-currency/index.md index 7c4652ad..8bda2553 100644 --- a/site/garden/premium-currency/index.md +++ b/site/garden/premium-currency/index.md @@ -5,7 +5,14 @@ title: "Premium Currency" prev: false next: false --- -# Premium Currency + +

Premium Currency

+

71 words, ~0 minute read.

+
> Referenced by: [Pre-Order Bonuses](/garden/pre-order-bonuses/index.md) diff --git a/site/garden/profectus/index.md b/site/garden/profectus/index.md index 972bc85b..a00d8397 100644 --- a/site/garden/profectus/index.md +++ b/site/garden/profectus/index.md @@ -6,7 +6,14 @@ title: "Profectus" prev: false next: false --- -# Profectus + +

Profectus

+

73 words, ~0 minute read.

+
> Referenced by: [Advent Incremental](/garden/advent-incremental/index.md), [Planar Pioneers](/garden/planar-pioneers/index.md) diff --git a/site/garden/social-media/index.md b/site/garden/social-media/index.md index 532bfac9..5f4bc522 100644 --- a/site/garden/social-media/index.md +++ b/site/garden/social-media/index.md @@ -6,7 +6,14 @@ title: "Social Media" prev: false next: false --- -# Social Media + +

Social Media

+

98 words, ~1 minute read.

+
> Referenced by: [Commune](/garden/commune/index.md), [Fediverse](/garden/fediverse/index.md) diff --git a/site/garden/synapse/index.md b/site/garden/synapse/index.md index 32a43620..88f1716d 100644 --- a/site/garden/synapse/index.md +++ b/site/garden/synapse/index.md @@ -5,7 +5,14 @@ title: "Synapse" prev: false next: false --- -# Synapse + +

Synapse

+

2 words, ~0 minute read.

+
> Referenced by: [Incremental Social](/garden/incremental-social/index.md) diff --git a/site/garden/the-beginner-s-guide/index.md b/site/garden/the-beginner-s-guide/index.md index 87b41e7b..ffed2285 100644 --- a/site/garden/the-beginner-s-guide/index.md +++ b/site/garden/the-beginner-s-guide/index.md @@ -6,7 +6,14 @@ title: "The Beginner's Guide" prev: false next: false --- -# The Beginner's Guide + +

The Beginner's Guide

+

70 words, ~0 minute read.

+
> Tags: [Davey Wreden](/garden/davey-wreden/index.md) diff --git a/site/garden/the-cozy-web/index.md b/site/garden/the-cozy-web/index.md index e9f788b5..424b0dfb 100644 --- a/site/garden/the-cozy-web/index.md +++ b/site/garden/the-cozy-web/index.md @@ -5,7 +5,14 @@ title: "The Cozy Web" prev: false next: false --- -# The Cozy Web + +

The Cozy Web

+

45 words, ~0 minute read.

+
> Referenced by: [Digital Gardens](/garden/digital-gardens/index.md), [The Small Web](/garden/the-small-web/index.md) diff --git a/site/garden/the-indieweb/amplification/index.md b/site/garden/the-indieweb/amplification/index.md index 01d302eb..7241e596 100644 --- a/site/garden/the-indieweb/amplification/index.md +++ b/site/garden/the-indieweb/amplification/index.md @@ -1,11 +1,18 @@ --- public: "true" -slug: "the-indieweb/amplification" -title: "The IndieWeb/Amplification" +slug: "the-indieweb___amplification" +title: "The IndieWeb___Amplification" prev: false next: false --- -# The IndieWeb/Amplification + +

The IndieWeb___Amplification

+

57 words, ~0 minute read.

+
Refers to reblogging (and re-hosting, sometimes) of someone else's content on your own site diff --git a/site/garden/the-indieweb/signature-blocks/index.md b/site/garden/the-indieweb/signature-blocks/index.md index 95bffa12..5000906d 100644 --- a/site/garden/the-indieweb/signature-blocks/index.md +++ b/site/garden/the-indieweb/signature-blocks/index.md @@ -1,10 +1,17 @@ --- public: "true" -slug: "the-indieweb/signature-blocks" -title: "The IndieWeb/Signature Blocks" +slug: "the-indieweb___signature-blocks" +title: "The IndieWeb___Signature Blocks" prev: false next: false --- -# The IndieWeb/Signature Blocks + +

The IndieWeb___Signature Blocks

+

14 words, ~0 minute read.

+
A proposal I want to write for posting signed content on your [IndieWeb](/garden/the-small-web/index.md) website diff --git a/site/garden/the-small-web/index.md b/site/garden/the-small-web/index.md index a205f633..8ee6593e 100644 --- a/site/garden/the-small-web/index.md +++ b/site/garden/the-small-web/index.md @@ -6,7 +6,14 @@ title: "The Small Web" prev: false next: false --- -# The Small Web + +

The Small Web

+

437 words, ~2 minute read.

+
> Referenced by: [/now](/now/index), [This Knowledge Hub](/garden/this-knowledge-hub/index.md) diff --git a/site/garden/this-knowledge-hub/index.md b/site/garden/this-knowledge-hub/index.md index b4cc0ce6..7abe4a93 100644 --- a/site/garden/this-knowledge-hub/index.md +++ b/site/garden/this-knowledge-hub/index.md @@ -5,7 +5,14 @@ title: "This Knowledge Hub" prev: false next: false --- -# This Knowledge Hub + +

This Knowledge Hub

+

135 words, ~1 minute read.

+
> Referenced by: [Digital Gardens](/garden/digital-gardens/index.md) diff --git a/site/garden/v-ecs/index.md b/site/garden/v-ecs/index.md index 8fdda108..f74314c7 100644 --- a/site/garden/v-ecs/index.md +++ b/site/garden/v-ecs/index.md @@ -6,22 +6,29 @@ title: "V-ecs" prev: false next: false --- -# V-ecs + +

V-ecs

+

209 words, ~1 minute read.

+
> Tags: [My Projects](/garden/my-projects/index.md) -![screenshot.png](/garden/screenshot_1717383987886_0.png) +
V-ecs (pronounced "Vex") is a Vulkan-based engine I made for making highly moddable games and tools in Lua centered around the ECS design pattern and a work-stealing job system. The engine works with "worlds", which are collections of systems and renderers. The engine comes with several worlds using systems and renderers I made, including a voxel world, an incremental game, and some test scenes. All of these include systems to render the fps as well as show a debug console by typing the grave key (\`). The default world is a title screen that detects any worlds in the "worlds" folder and displays a button for each of them. -![debug.png](/garden/debug_1717384018620_0.png) +
The original plans were to eventually put it on the steam workshop so people could more easily share their creations amongst each other, but I never became happy enough with the performance of the engine - the parallelization of the lua code involved a lot of overhead that severely limited performance. Instead, I made a couple of worlds by myself - an infinite procedurally generated voxel world, a simple incremental game, and a more complex incremental game I call "[Sands of Time](https://thepaperpilot.itch.io/sands-of-time)". -![sandsoftime.png](/garden/sandsoftime_1717383994964_0.png) +
The gameplay of Sands of Time was replicated in [Kronos](/garden/kronos/index.md) Chapter 2! \ No newline at end of file diff --git a/site/garden/video-game-monetization/index.md b/site/garden/video-game-monetization/index.md index 9c46aed2..96b39299 100644 --- a/site/garden/video-game-monetization/index.md +++ b/site/garden/video-game-monetization/index.md @@ -5,7 +5,14 @@ title: "Video Game Monetization" prev: false next: false --- -# Video Game Monetization + +

Video Game Monetization

+

123 words, ~1 minute read.

+
> Referenced by: [Life is Strange](/garden/life-is-strange/index.md) diff --git a/site/garden/vitepress/index.md b/site/garden/vitepress/index.md index d56d8307..1c64a91c 100644 --- a/site/garden/vitepress/index.md +++ b/site/garden/vitepress/index.md @@ -5,7 +5,14 @@ title: "Vitepress" prev: false next: false --- -# Vitepress + +

Vitepress

+

4 words, ~0 minute read.

+
> Referenced by: [This Knowledge Hub](/garden/this-knowledge-hub/index.md) diff --git a/site/garden/wanderstop/index.md b/site/garden/wanderstop/index.md index 1a0fdf87..3dca828e 100644 --- a/site/garden/wanderstop/index.md +++ b/site/garden/wanderstop/index.md @@ -6,7 +6,14 @@ title: "Wanderstop" prev: false next: false --- -# Wanderstop + +

Wanderstop

+

8 words, ~0 minute read.

+
> Tags: [Davey Wreden](/garden/davey-wreden/index.md) diff --git a/site/garden/webrings/index.md b/site/garden/webrings/index.md index be9ae3ea..b46d1e4e 100644 --- a/site/garden/webrings/index.md +++ b/site/garden/webrings/index.md @@ -5,7 +5,14 @@ title: "Webrings" prev: false next: false --- -# Webrings + +

Webrings

+

139 words, ~1 minute read.

+
> Referenced by: [The Small Web](/garden/the-small-web/index.md) diff --git a/site/garden/weird/index.md b/site/garden/weird/index.md index b776de89..70e133a1 100644 --- a/site/garden/weird/index.md +++ b/site/garden/weird/index.md @@ -5,7 +5,14 @@ title: "Weird" prev: false next: false --- -# Weird + +

Weird

+

114 words, ~1 minute read.

+
> Referenced by: [Commune](/garden/commune/index.md), [Fedi v2](/garden/fedi-v2/index.md), [The Small Web](/garden/the-small-web/index.md) diff --git a/site/git.data.ts b/site/git.data.ts new file mode 100644 index 00000000..0d193715 --- /dev/null +++ b/site/git.data.ts @@ -0,0 +1,27 @@ +const fs = require("fs"); +const path = require("path"); + +const util = require('node:util'); +const exec = util.promisify(require('node:child_process').exec); + +export default { + watch: ['site/garden/**/*'], + async load(files: string[]): Record { + const ret: Record = {}; + await Promise.all(files.map(e => new Promise(async (resolve) => { + const firstCommit = (await new Promise(async (resolve, reject) => { + exec(`git log -n 1 --diff-filter=A --format="" -- ${e}`) + .then(output => resolve(output.stdout)) + .catch(err => console.warn(`Error calculating first commit for ${e}:\n${err}`) || reject()); + })) ?? ""; + const lastCommit = (await new Promise(async (resolve, reject) => { + exec(`git log -n 1 --diff-filter=M --format="" -- ${e}`) + .then(output => resolve(output.stdout)) + .catch(err => console.warn(`Error calculating first commit for ${e}:\n${err}`) || reject()); + })) ?? ""; + ret[e] = `Planted ${firstCommit}.${lastCommit ? ` Last tended to ${lastCommit}.` : ''}`; + resolve(); + }))); + return ret; + } +}; diff --git a/site/index.md b/site/index.md index 659ebbe1..b2a0054e 100644 --- a/site/index.md +++ b/site/index.md @@ -6,3 +6,5 @@ next: false # Hello! I'm Anthony, or The Paper Pilot, and I make fun games and tools! + + diff --git a/site/now/index.md b/site/now/index.md index bd611862..b0acf093 100644 --- a/site/now/index.md +++ b/site/now/index.md @@ -5,7 +5,14 @@ title: "/now" prev: false next: false --- -# /now + +

/now

+

212 words, ~1 minute read.

+
This "now page" offers a big picture glimpse into what I’m focused on at this point in my life. [What is a now page](https://nownownow.com/about)? diff --git a/site/public/paperpilot.png b/site/public/paperpilot.png new file mode 100644 index 00000000..3194c07c Binary files /dev/null and b/site/public/paperpilot.png differ