From 6b586f6e07a59b78f762e4a50b5dd8335dbb382d Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Sat, 6 Jun 2026 20:34:34 +0100 Subject: [PATCH] Integrate plausible --- .prettierignore | 1 + backend/package-lock.json | 7 +++++++ backend/package.json | 1 + backend/public/admin.js | 6 ------ backend/server.js | 8 ++++++++ 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/.prettierignore b/.prettierignore index fc6d402..6c8c5dc 100644 --- a/.prettierignore +++ b/.prettierignore @@ -7,4 +7,5 @@ backend/package-lock.json # Vendored / generated assets frontend/js/jquery.min.js +frontend/js/plausible.js *.min.js diff --git a/backend/package-lock.json b/backend/package-lock.json index 1870b1e..c3e7fbf 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -8,6 +8,7 @@ "name": "fizika-admin-backend", "version": "1.0.0", "dependencies": { + "@plausible-analytics/tracker": "^0.4.5", "cors": "^2.8.6", "express": "^5.2.1", "helmet": "^8.2.0", @@ -20,6 +21,12 @@ "node": ">=18.0.0" } }, + "node_modules/@plausible-analytics/tracker": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@plausible-analytics/tracker/-/tracker-0.4.5.tgz", + "integrity": "sha512-6BfAGejXY+YA3Cw6LYT2Zpn4hTxDtPQAawFsYUsQCOg78wIS5C4deAGXTfJffa5VleMWITv5lpJ/EYuQBl1tPA==", + "license": "MIT" + }, "node_modules/accepts": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", diff --git a/backend/package.json b/backend/package.json index 44a6245..5cc3a4c 100644 --- a/backend/package.json +++ b/backend/package.json @@ -9,6 +9,7 @@ "test": "node --test" }, "dependencies": { + "@plausible-analytics/tracker": "^0.4.5", "express": "^5.2.1", "multer": "^2.1.1", "cors": "^2.8.6", diff --git a/backend/public/admin.js b/backend/public/admin.js index a864d8a..74cbfcd 100644 --- a/backend/public/admin.js +++ b/backend/public/admin.js @@ -1,11 +1,5 @@ const API_BASE = window.location.origin; -window.plausible = - window.plausible || - function () { - (window.plausible.q = window.plausible.q || []).push(arguments); - }; - // Escape user-supplied text before interpolating it into HTML, to prevent XSS. function escapeHtml(value) { return String(value).replace( diff --git a/backend/server.js b/backend/server.js index a12823e..3938d95 100644 --- a/backend/server.js +++ b/backend/server.js @@ -37,6 +37,14 @@ app.use( app.use(express.json({ limit: "100mb" })); app.use(express.static("public")); +// Serve the official Plausible tracker (npm: @plausible-analytics/tracker) from node_modules. +const plausibleTrackerPath = + require.resolve("@plausible-analytics/tracker/plausible.js"); + +app.get("/vendor/plausible.js", (req, res) => { + res.sendFile(plausibleTrackerPath); +}); + // File paths const DATA_PATH = process.env.DATA_PATH || path.join(__dirname, "../frontend/fizika.json");