From 2511538b650ec8db83b6c988cd4b0cecbf963c10 Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 14:37:43 -0700 Subject: [PATCH 01/29] update devDependencies --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 27c925f..e892aea 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "www/**/*" ], "devDependencies": { - "eslint": "10.8.1", + "eslint": "10.9.0", "@eslint/js": "10.0.1", - "typescript-eslint": "8.66.0" + "typescript-eslint": "8.67.0" } } \ No newline at end of file From 78770ed6ed80a6bad018486cb11f6c536cf0a146 Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 14:39:31 -0700 Subject: [PATCH 02/29] update dependencies for orbit-idle --- www/games/orbit-idle/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/www/games/orbit-idle/package.json b/www/games/orbit-idle/package.json index 7d5f969..9331ffb 100644 --- a/www/games/orbit-idle/package.json +++ b/www/games/orbit-idle/package.json @@ -5,8 +5,8 @@ "release": "../../../cmd/release" }, "dependencies": { - "graphico": "1.6.0", - "smath": "3.0.0", - "viridis": "1.6.1" + "graphico": "1.7.0", + "smath": "3.1.0", + "viridis": "1.7.0" } } \ No newline at end of file From 3862b2b297f69859dd38fbbf6dadd567f0f52b5a Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 15:05:03 -0700 Subject: [PATCH 03/29] update artifact path --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f48d7c9..0a6a35e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,7 +25,7 @@ jobs: - name: Upload artifact uses: actions/upload-pages-artifact@v5 with: - path: 'www' + path: 'site' deploy: needs: build if: github.event_name == 'push' && github.ref == 'refs/heads/main' From bfe83b83a8eba8e456a679e52a4f01cd957f7191 Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 15:07:57 -0700 Subject: [PATCH 04/29] ignore site/ output --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1d2c904..b4cd544 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ node_modules package-lock.json bun.lock -dist +site *.zip From 11363154a4785883418c61b544bae4e3ee105ec7 Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 15:08:23 -0700 Subject: [PATCH 05/29] clean site/ instead of dist --- cmd/clean | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/clean b/cmd/clean index 355f84a..507f553 100755 --- a/cmd/clean +++ b/cmd/clean @@ -14,7 +14,7 @@ fi # Select files to delete if [[ "${1}" == 'dev' ]] ; then - files=('node_modules' 'dist' 'bun.lock' '*.zip') + files=('node_modules' 'site' 'bun.lock' '*.zip') elif [[ "${1}" == 'prod' ]] ; then files=('node_modules' 'src' 'package.json' '*.md' '*.zip' 'release') else From e45cba8b03529ad7d77540ab265b6d88c97f44a1 Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 15:16:22 -0700 Subject: [PATCH 06/29] add audio, update script src --- www/games/orbit-idle/index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/www/games/orbit-idle/index.html b/www/games/orbit-idle/index.html index 74b9aa8..1354bd9 100644 --- a/www/games/orbit-idle/index.html +++ b/www/games/orbit-idle/index.html @@ -8,13 +8,14 @@ - +

Orbit Idle

+

This game takes a new spin as the 4th game in the Revolution Idle series.

From b9b95f3198e5b42f6b42a8dfb9c05d4d1d2b2aea Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 15:23:26 -0700 Subject: [PATCH 07/29] capture audio src from html element --- www/games/orbit-idle/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/games/orbit-idle/src/index.ts b/www/games/orbit-idle/src/index.ts index 21cf460..94e171f 100644 --- a/www/games/orbit-idle/src/index.ts +++ b/www/games/orbit-idle/src/index.ts @@ -55,7 +55,7 @@ const canv: Canvas = new Canvas({ menu.click(button); if (!audio) { audio = true; - canv.playAudio('./Between_The_Sleepless_Stars.mp3', true, 0.25); + canv.playAudio((document.getElementById('music') as HTMLAudioElement).src, true, 0.25); } }, keydown(key) { From 9d4b3e3d4d3f012de96275261e707020bd11c1f2 Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 15:26:41 -0700 Subject: [PATCH 08/29] create built outputs in site//index.html --- cmd/start | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmd/start b/cmd/start index 1929da7..eb931ae 100755 --- a/cmd/start +++ b/cmd/start @@ -10,5 +10,9 @@ else exit 1 fi +# Create project output directory +name="../../../site/$(basename "${PWD}")" +mkdir -p "${name}" + # Lint and build project -bun x tsc --noEmit && bun x eslint src && bun build "${args[@]}" --outfile=dist/main.js src/index.ts +bun x tsc --noEmit && bun x eslint src && bun build "${args[@]}" --compile --target=browser ./index.html --outfile="${name}/index.html" From acc9787035e8d607752fb9f26b3baa9abe04d8c9 Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 15:29:29 -0700 Subject: [PATCH 09/29] remove release workflow --- cmd/release | 6 ------ www/games/orbit-idle/package.json | 3 +-- 2 files changed, 1 insertion(+), 8 deletions(-) delete mode 100755 cmd/release diff --git a/cmd/release b/cmd/release deleted file mode 100755 index 9851b3c..0000000 --- a/cmd/release +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -bun start prod -cp dist/main.js ./*.mp3 release -zip -r release.zip release -rm -r release/*.js release/*.mp3 diff --git a/www/games/orbit-idle/package.json b/www/games/orbit-idle/package.json index 9331ffb..aa69ce8 100644 --- a/www/games/orbit-idle/package.json +++ b/www/games/orbit-idle/package.json @@ -1,8 +1,7 @@ { "name": "orbit-idle", "scripts": { - "start": "../../../cmd/start", - "release": "../../../cmd/release" + "start": "../../../cmd/start" }, "dependencies": { "graphico": "1.7.0", From 0c16fa50147a1d357608914e3fa186863dd9830f Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 15:30:00 -0700 Subject: [PATCH 10/29] remove space game (not really a game) --- www/games/space/index.html | 13 ------------ www/games/space/package.json | 11 ---------- www/games/space/src/Star.ts | 39 ------------------------------------ www/games/space/src/game.ts | 23 --------------------- www/games/space/src/index.ts | 6 ------ 5 files changed, 92 deletions(-) delete mode 100644 www/games/space/index.html delete mode 100644 www/games/space/package.json delete mode 100644 www/games/space/src/Star.ts delete mode 100644 www/games/space/src/game.ts delete mode 100644 www/games/space/src/index.ts diff --git a/www/games/space/index.html b/www/games/space/index.html deleted file mode 100644 index 42c6a56..0000000 --- a/www/games/space/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - Space - - - - -

Space

- - - \ No newline at end of file diff --git a/www/games/space/package.json b/www/games/space/package.json deleted file mode 100644 index 9fb6d1d..0000000 --- a/www/games/space/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "space", - "scripts": { - "start": "../../../cmd/start" - }, - "dependencies": { - "graphico": "1.0.0", - "smath": "1.13.2", - "viridis": "1.4.1" - } -} \ No newline at end of file diff --git a/www/games/space/src/Star.ts b/www/games/space/src/Star.ts deleted file mode 100644 index 8e6ce99..0000000 --- a/www/games/space/src/Star.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Drawable } from 'graphico'; -import { Color, Gradient } from 'viridis'; -import * as SMath from 'smath'; -import { game } from './game'; - -export class Star implements Drawable { - private static readonly temp_gradient: Gradient = new Gradient([ - Color.rgb(255, 100, 100), // 2,500 [K] - Color.rgb(255, 255, 150), // 5,000 [K] - Color.rgb(255, 255, 255), // 7,500 [K] - Color.rgb(150, 150, 255), // 10,000 [K] - ]); - private readonly color: Color; - constructor(private x: number, private y: number, private readonly r: number, private readonly distance: number, temp: number) { - this.color = Star.temp_gradient.getColor(temp, 2500, 10000); - } - public static rand(): Star { - return new Star(SMath.runif(0, game.width), SMath.runif(0, game.height), SMath.runif(1, 3), SMath.rint(10, 100), SMath.rnorm(6000, 2000)); - } - public move(dx: number, dy: number, dt: number): void { - this.x -= dx * dt / this.distance; - this.y -= dy * dt / this.distance; - this.x = (game.width + this.x) % game.width; - this.y = (game.height + this.y) % game.height; - } - public draw(graphics: CanvasRenderingContext2D): void { - const grad = graphics.createRadialGradient(this.x, this.y, 0, this.x, this.y, 4 * this.r); - grad.addColorStop(0, this.color.toString()); - grad.addColorStop(1, Color.rgb(0, 0, 0, 0).toString()); - graphics.fillStyle = grad; - graphics.beginPath(); - graphics.arc(this.x, this.y, 20 * this.r, 0, 2 * Math.PI); - graphics.fill(); - graphics.fillStyle = this.color.toString(); - graphics.beginPath(); - graphics.arc(this.x, this.y, this.r, 0, 2 * Math.PI); - graphics.fill(); - } -} \ No newline at end of file diff --git a/www/games/space/src/game.ts b/www/games/space/src/game.ts deleted file mode 100644 index 00bf32e..0000000 --- a/www/games/space/src/game.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Canvas } from 'graphico'; -import { Star } from './Star'; - -export const stars: Star[] = []; - -export const game: Canvas = new Canvas({ - background: 'black', - border: 'black', - borderBlur: 'gray', - width: 1280, - height: 720, - loop(dt) { - game.clear(); - const left: boolean = game.isKeyDown('arrowleft'); - const right: boolean = game.isKeyDown('arrowright'); - const up: boolean = game.isKeyDown('arrowup'); - const down: boolean = game.isKeyDown('arrowdown'); - for (const star of stars) { - star.move((left ? -1 : 0) + (right ? 1 : 0), (up ? -1 : 0) + (down ? 1 : 0), dt); - game.draw(star); - } - }, -}); diff --git a/www/games/space/src/index.ts b/www/games/space/src/index.ts deleted file mode 100644 index 2932a87..0000000 --- a/www/games/space/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { stars } from './game'; -import { Star } from './Star'; - -for (let i = 0; i < 1000; i++) { - stars.push(Star.rand()); -} From 4373f0770e754d30b2bc7d1af2d6ee176920a9c7 Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 15:32:26 -0700 Subject: [PATCH 11/29] fix script srcs --- www/games/ballistic/index.html | 2 +- www/games/cave-explorer/index.html | 2 +- www/games/cellsplit/index.html | 2 +- www/games/geomarin/index.html | 2 +- www/games/hexles/index.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/www/games/ballistic/index.html b/www/games/ballistic/index.html index 25be253..1e077a1 100644 --- a/www/games/ballistic/index.html +++ b/www/games/ballistic/index.html @@ -8,7 +8,7 @@ - + diff --git a/www/games/cave-explorer/index.html b/www/games/cave-explorer/index.html index 1421ad9..6638308 100644 --- a/www/games/cave-explorer/index.html +++ b/www/games/cave-explorer/index.html @@ -5,7 +5,7 @@ Cave Explorer - + diff --git a/www/games/cellsplit/index.html b/www/games/cellsplit/index.html index c6af7c7..5343265 100644 --- a/www/games/cellsplit/index.html +++ b/www/games/cellsplit/index.html @@ -8,7 +8,7 @@ - + diff --git a/www/games/geomarin/index.html b/www/games/geomarin/index.html index 398030e..5891457 100644 --- a/www/games/geomarin/index.html +++ b/www/games/geomarin/index.html @@ -9,7 +9,7 @@ content="A daily puzzle game dedicated to the unique architecture and natural beauty of Marin county, California."> - + diff --git a/www/games/hexles/index.html b/www/games/hexles/index.html index 196ab89..fee595a 100644 --- a/www/games/hexles/index.html +++ b/www/games/hexles/index.html @@ -9,7 +9,7 @@ - + From b69ba550200d94e54c8fd7b7bc1f35ef72e5c30f Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 15:36:30 -0700 Subject: [PATCH 12/29] remove tools index page (i forgot this still existed!!) --- www/tools/assets/script.js | 44 -------------------------------- www/tools/assets/style.css | 52 -------------------------------------- www/tools/index.html | 23 ----------------- 3 files changed, 119 deletions(-) delete mode 100644 www/tools/assets/script.js delete mode 100644 www/tools/assets/style.css delete mode 100644 www/tools/index.html diff --git a/www/tools/assets/script.js b/www/tools/assets/script.js deleted file mode 100644 index e22e00c..0000000 --- a/www/tools/assets/script.js +++ /dev/null @@ -1,44 +0,0 @@ -console.log('Loaded!'); - -const allTools = document.getElementById('tools'); -let hue = 0; - -function addGroup(heading = '') { - const head = document.createElement('h3'); - head.setAttribute('title', `Below is a group of tools relating to: ${heading}`) - head.textContent = heading; - allTools.appendChild(head); -} - -function addTool(path = '', name = '', desc = '') { - hue += 10; - const anchor = document.createElement('a'); - anchor.setAttribute('href', path); - anchor.setAttribute('title', `${name}: ${desc}`); - anchor.className = 'tool'; - allTools.appendChild(anchor); - const container = document.createElement('div'); - container.style.background = `hsl(${hue},100%,75%)`; - container.className = 'tool'; - anchor.appendChild(container); - const title = document.createElement('strong'); - title.textContent = name; - const descr = document.createElement('i'); - descr.textContent = ` - ${desc}`; - container.append(title, descr); -} - -addGroup('Finance'); -addTool('tvm', 'Time Value of Money', 'Calculate the time value of money using various equations.'); -addTool('interest', 'Interest Calculator', 'A collection of formulas that calculate parameters for an environment with an interest rate.'); - -addGroup('Science'); -addTool('https://psychart.nicfv.com/', 'Psychart', 'Plot thermodynamic conditions of air on a psychrometric chart, optionally displaying comfort zones.'); -addTool('dimensional', 'Unit Converter', 'Convert anything to anything! Build complex units and analyze dimensions.'); -addTool('dimensional-playground', 'Dimensional Playground', 'Presents a live editor with the `dimensional` package ready to use.'); -addTool('data-url', 'File To Data URL', 'Encode any file as a data URL that can be directly embedded into a source code file.'); - -addGroup('Gaming'); -addTool('wordle', 'Wordle Helper', 'Filters the wordle dictionary based on your previous guesses to help you make an informed next guess.'); -addTool('hearts', 'Hearts Helper', 'Help counts cards specifically for the game, Hearts.'); -addTool('pokemon-go', 'Pokemon Go Catch Rate', 'A catch rate calculator for the mobile game, Pokemon Go.'); diff --git a/www/tools/assets/style.css b/www/tools/assets/style.css deleted file mode 100644 index 770b1c1..0000000 --- a/www/tools/assets/style.css +++ /dev/null @@ -1,52 +0,0 @@ -* { - outline: none; - box-sizing: border-box; -} - -html, -body { - height: 100%; - margin: 0; - padding: 0; -} - -body { - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: center; - font-family: sans-serif; -} - -main { - padding: 1rem; - max-width: 40rem; -} - -footer { - width: 100%; - background: lightgray; - border-top: 1px solid gray; - padding: 0.5rem; -} - -a, -a:link, -a:visited { - color: navy; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -a:active { - color: red; -} - -div.tool { - margin: 0.5rem 0; - padding: 0.5rem; - border-radius: 0.5rem; -} \ No newline at end of file diff --git a/www/tools/index.html b/www/tools/index.html deleted file mode 100644 index a39f8e3..0000000 --- a/www/tools/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - Tools - - - - - - - - - -
-

Tools

-

A collection of software tools created by Nicolas Ventura.

-
-
- - - - \ No newline at end of file From 23d33dae09213e1a555e742471f05999e168a6e3 Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 15:42:54 -0700 Subject: [PATCH 13/29] update script srcs for tools --- www/tools/data-url/index.html | 2 +- www/tools/dimensional-playground/index.html | 2 +- www/tools/dimensional/index.html | 2 +- www/tools/hearts/index.html | 2 +- www/tools/interest/index.html | 2 +- www/tools/pokemon-go/index.html | 2 +- www/tools/tvm/index.html | 2 +- www/tools/wordle/index.html | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/www/tools/data-url/index.html b/www/tools/data-url/index.html index 7769ecc..247f2e3 100644 --- a/www/tools/data-url/index.html +++ b/www/tools/data-url/index.html @@ -7,7 +7,7 @@ - + diff --git a/www/tools/dimensional-playground/index.html b/www/tools/dimensional-playground/index.html index 0dc0292..82af763 100644 --- a/www/tools/dimensional-playground/index.html +++ b/www/tools/dimensional-playground/index.html @@ -9,7 +9,7 @@ - + diff --git a/www/tools/dimensional/index.html b/www/tools/dimensional/index.html index 23d2bb5..db002d5 100644 --- a/www/tools/dimensional/index.html +++ b/www/tools/dimensional/index.html @@ -9,7 +9,7 @@ - + diff --git a/www/tools/hearts/index.html b/www/tools/hearts/index.html index 9ccf5aa..b5ba4df 100644 --- a/www/tools/hearts/index.html +++ b/www/tools/hearts/index.html @@ -8,7 +8,7 @@ - + diff --git a/www/tools/interest/index.html b/www/tools/interest/index.html index 796c808..af401b5 100644 --- a/www/tools/interest/index.html +++ b/www/tools/interest/index.html @@ -8,7 +8,7 @@ - + diff --git a/www/tools/pokemon-go/index.html b/www/tools/pokemon-go/index.html index 5e35c82..ff73c9b 100644 --- a/www/tools/pokemon-go/index.html +++ b/www/tools/pokemon-go/index.html @@ -8,7 +8,7 @@ - + diff --git a/www/tools/tvm/index.html b/www/tools/tvm/index.html index 86dcac7..25ba8eb 100644 --- a/www/tools/tvm/index.html +++ b/www/tools/tvm/index.html @@ -8,7 +8,7 @@ - + diff --git a/www/tools/wordle/index.html b/www/tools/wordle/index.html index 742fe44..e9d373d 100644 --- a/www/tools/wordle/index.html +++ b/www/tools/wordle/index.html @@ -5,7 +5,7 @@ Wordle Helper - + From a2ee69667192f768beedd44fe953fe68860df0d5 Mon Sep 17 00:00:00 2001 From: nicfv Date: Sat, 22 Aug 2026 15:47:24 -0700 Subject: [PATCH 14/29] update versions where applicable (tools) --- www/tools/data-url/index.html | 2 +- www/tools/dimensional-playground/index.html | 2 +- www/tools/pokemon-go/index.html | 2 +- www/tools/tvm/index.html | 2 +- www/tools/wordle/index.html | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/www/tools/data-url/index.html b/www/tools/data-url/index.html index 247f2e3..47f5194 100644 --- a/www/tools/data-url/index.html +++ b/www/tools/data-url/index.html @@ -13,7 +13,7 @@ - Convert File to Data URL + Convert File to Data URL diff --git a/www/tools/dimensional-playground/index.html b/www/tools/dimensional-playground/index.html index 82af763..fd8d65d 100644 --- a/www/tools/dimensional-playground/index.html +++ b/www/tools/dimensional-playground/index.html @@ -15,7 +15,7 @@

- Dimensional Analysis Playground — + Dimensional Analysis Playground — Documentation

diff --git a/www/tools/pokemon-go/index.html b/www/tools/pokemon-go/index.html index ff73c9b..887094b 100644 --- a/www/tools/pokemon-go/index.html +++ b/www/tools/pokemon-go/index.html @@ -17,7 +17,7 @@
- Pokemon Go Catch Rate Calculatorv2.3 + Pokemon Go Catch Rate Calculatorv2.4 Likelihood to catch: %
diff --git a/www/tools/tvm/index.html b/www/tools/tvm/index.html index 25ba8eb..740cb8c 100644 --- a/www/tools/tvm/index.html +++ b/www/tools/tvm/index.html @@ -17,7 +17,7 @@

Time Value of Money

- v1.3 + v1.4