fuzzyworld

north-star / commit

Deploy to apps.fuzzyworld.net with fuzzyworld-tools

b10cf38ce72f826e95f7b26994f4da48be90b271 · Pavel Safronov · 2026-10-26 18:37:21 -0700 · parents 96f7bf1a152f

Deploy to apps.fuzzyworld.net with fuzzyworld-tools

Adds the fuzzyworld package.json section, a deploy script (fw deploy) and the fuzzyworld-tools dependency, and points gitlab.io / gitlab.com links at apps.fuzzyworld.net and code.fuzzyworld.net.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
 package-lock.json               | 13 +++++++++++++
 package.json                    | 12 +++++++++++-
 readme.md                       |  4 ++--
 src/app.ts                      |  2 +-
 src/commit.ts                   |  5 +----
 src/features/session/session.ts |  2 +-
 src/index.html                  | 12 ++++++------
 src/public_settings.ts          |  2 +-
 vite.config.js                  |  3 ++-
 9 files changed, 38 insertions(+), 17 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 95b84f5..2dcae16 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,6 +14,7 @@
             "devDependencies": {
                 "@types/qrcode": "^1.5.6",
                 "firebase-tools": "^15.10.0",
+                "fuzzyworld-tools": "git+https://code.fuzzyworld.net/fuzzyworld-tools.git#semver:^1.0.0",
                 "markdownlint-cli": "^0.48.0",
                 "typescript": "^5.8.2",
                 "vite": "^5.4.19",
@@ -5483,6 +5484,18 @@
                 "node": ">= 0.6.0"
             }
         },
+        "node_modules/fuzzyworld-tools": {
+            "version": "1.0.2",
+            "resolved": "git+https://code.fuzzyworld.net/fuzzyworld-tools.git#de3a84832ad148e50d1d4d94f0cef3ad395a1575",
+            "dev": true,
+            "license": "MIT",
+            "bin": {
+                "fw": "bin/fw"
+            },
+            "engines": {
+                "node": ">=18"
+            }
+        },
         "node_modules/gaxios": {
             "version": "6.7.1",
             "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz",
diff --git a/package.json b/package.json
index 86ead64..43d4d27 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,8 @@
         "clean-old-firebase:run-30d": "bash scripts/clean-old-firebase.sh --days=30 --apply --verbose",
         "clean-old-firebase:run-1m": "bash scripts/clean-old-firebase.sh --minutes=1 --apply --verbose",
         "gen-commit-ts": "echo \"export const GIT_COMMIT='${CI_COMMIT_SHORT_SHA}'; export const IS_LOCAL_BUILD=false;\" > ./src/commit.ts",
-        "md-lint": "markdownlint \"**/*.md\" --ignore node_modules --ignore .git"
+        "md-lint": "markdownlint \"**/*.md\" --ignore node_modules --ignore .git",
+        "deploy": "fw deploy"
     },
     "dependencies": {
         "firebase": "^12.0.0",
@@ -23,9 +24,18 @@
     "devDependencies": {
         "@types/qrcode": "^1.5.6",
         "firebase-tools": "^15.10.0",
+        "fuzzyworld-tools": "git+https://code.fuzzyworld.net/fuzzyworld-tools.git#semver:^1.0.0",
         "markdownlint-cli": "^0.48.0",
         "typescript": "^5.8.2",
         "vite": "^5.4.19",
         "vite-plugin-checker": "^0.12.0"
+    },
+    "fuzzyworld": {
+        "app": "north-star",
+        "title": "Friend Compass",
+        "description": "Friend Compass shows live arrows pointing toward your friends. No account needed, end-to-end encrypted, works on any phone.",
+        "prebuild": [
+            "CI_COMMIT_SHORT_SHA=$(git rev-parse --short HEAD) npm run gen-commit-ts"
+        ]
     }
 }
diff --git a/readme.md b/readme.md
index ffa4aa8..d9ae205 100644
--- a/readme.md
+++ b/readme.md
@@ -256,8 +256,8 @@ Tradeoff accepted:
 If priorities change later (for example, stronger anti-closed-clone goals),
 future versions can be relicensed with a different strategy.
 
-[repo-link]: https://gitlab.com/PavelSafronov/north-star
-[app-link]: https://pavelsafronov.gitlab.io/north-star/
+[repo-link]: https://code.fuzzyworld.net/north-star/
+[app-link]: https://apps.fuzzyworld.net/north-star/
 [firebase-db-screenshot]: ./firebase-realtime-database-view.png
 [browserstack-link]: https://live.browserstack.com/dashboard#os=iOS&os_version=26.0&device_browser=safari&zoom_to_fit=true&full_screen=true&url=https%3A%2F%2Fpavelsafronov.gitlab.io%2Fnorth-star&speed=1
 [firebase-console-link]: https://console.firebase.google.com/project/north-star-e5dee/overview
diff --git a/src/app.ts b/src/app.ts
index 7303cb0..7a45e5e 100644
--- a/src/app.ts
+++ b/src/app.ts
@@ -136,7 +136,7 @@ if (debugCommit instanceof HTMLAnchorElement) {
         });
     } else {
         debugCommit.textContent = GIT_COMMIT;
-        debugCommit.href = `https://gitlab.com/PavelSafronov/north-star/-/commit/${GIT_COMMIT}`;
+        debugCommit.href = `https://code.fuzzyworld.net/north-star/commit/${GIT_COMMIT}.html`;
         debugCommit.target = '_blank';
         debugCommit.rel = 'noopener noreferrer';
     }
diff --git a/src/commit.ts b/src/commit.ts
index 35a3fc3..007d4de 100644
--- a/src/commit.ts
+++ b/src/commit.ts
@@ -1,4 +1 @@
-// This file is generated during CI builds (see gen-commit-ts in package.json).
-// The dev fallback here keeps IS_LOCAL_BUILD=true so local runs are correctly identified.
-export const GIT_COMMIT: string = 'local';
-export const IS_LOCAL_BUILD: boolean = true;
\ No newline at end of file
+export const GIT_COMMIT='96f7bf1'; export const IS_LOCAL_BUILD=false;
diff --git a/src/features/session/session.ts b/src/features/session/session.ts
index 2a31f60..bbb114b 100644
--- a/src/features/session/session.ts
+++ b/src/features/session/session.ts
@@ -67,7 +67,7 @@ export async function initSession({
         if (isLocalRun) {
             await renderInviteQrCard({
                 container: inviteRoomQrList,
-                title: 'GitLab Pages URL',
+                title: 'App URL',
                 url: `${GITLAB_PAGES_BASE_URL}#${roomHash}`,
                 statusText: 'Scan to join on hosted app',
                 roomId
diff --git a/src/index.html b/src/index.html
index b1c3917..42f4650 100644
--- a/src/index.html
+++ b/src/index.html
@@ -11,7 +11,7 @@
     <meta property="og:title" content="Someone wants you to know where they are 📍" />
     <meta property="og:description"
         content="Friend Compass shows live arrows pointing toward your friends. No account needed, end-to-end encrypted, works on any phone." />
-    <meta property="og:url" content="https://pavelsafronov.gitlab.io/north-star/" />
+    <meta property="og:url" content="https://apps.fuzzyworld.net/north-star/" />
     <meta name="twitter:card" content="summary" />
     <meta name="twitter:title" content="Someone wants you to know where they are 📍" />
     <meta name="twitter:description"
@@ -26,15 +26,15 @@
 
 <body>
     <p class="app-title">
-        <a href="https://gitlab.com/PavelSafronov/north-star/-/blob/main/readme.md" target="_blank"
+        <a href="https://code.fuzzyworld.net/north-star/blob/readme.md.html" target="_blank"
             rel="noopener noreferrer" aria-label="Open project README">
             <img src="assets/compass.png" alt="Compass icon" class="app-icon" />
         </a>
-        <a id="app-title-link" href="https://pavelsafronov.gitlab.io/north-star/">Friend Compass</a>
+        <a id="app-title-link" href="https://apps.fuzzyworld.net/north-star/">Friend Compass</a>
     </p>
     <div class="room-header">
         <p id="room-current" class="room-current"></p>
-        <a id="create-room-link" href="https://pavelsafronov.gitlab.io/north-star/">Create New Room</a>
+        <a id="create-room-link" href="https://apps.fuzzyworld.net/north-star/">Create New Room</a>
     </div>
     <form id="name-form" class="name-form" autocomplete="off">
         <div class="controls-row controls-row-main">
@@ -66,9 +66,9 @@
     </div>
     <div id="debug-info">
         <p id="debug">
-            <a id="debug-commit" href="https://gitlab.com/PavelSafronov/north-star/-/commits/main"
+            <a id="debug-commit" href="https://code.fuzzyworld.net/north-star/log/"
                 target="_blank">Current Commit</a>
-            <a href="https://gitlab.com/PavelSafronov/north-star" target="_blank">Repo</a>
+            <a href="https://code.fuzzyworld.net/north-star/" target="_blank">Repo</a>
         </p>
         <p id="attributions">
             <a href="https://www.flaticon.com/free-icons/tools-and-utensils" title="Tools and utensils icons">Tools and
diff --git a/src/public_settings.ts b/src/public_settings.ts
index efb6f98..b923377 100644
--- a/src/public_settings.ts
+++ b/src/public_settings.ts
@@ -41,7 +41,7 @@ export const PUBLIC_SETTINGS = {
     },
     links: {
         /** Hosted app base URL used in invite QR cards for local runs. */
-        gitlabPagesBaseUrl: 'https://pavelsafronov.gitlab.io/north-star/'
+        gitlabPagesBaseUrl: 'https://apps.fuzzyworld.net/north-star/'
     },
     ui: {
         emojis: {
diff --git a/vite.config.js b/vite.config.js
index 8c40294..3bba094 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -1,10 +1,11 @@
 import { defineConfig } from 'vite';
 import checker from 'vite-plugin-checker';
+import fuzzyworld from 'fuzzyworld-tools/vite';
 
 export default defineConfig({
     root: 'src',
-    base: './',
     plugins: [
+        fuzzyworld(),
         checker({
             typescript: true,
         }),