Add Plausible analytics with JSON Upload custom event.

Load tagged-events from plausible.elpatron.me on all pages, allow it in CSP, and track successful save uploads with import status.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-19 16:58:58 +02:00
parent 5c87df1e5e
commit 810ad67ab6
5 changed files with 12 additions and 2 deletions
+2 -2
View File
@@ -48,10 +48,10 @@ def configure_app(flask_app: Flask) -> None:
response.headers["Referrer-Policy"] = "strict-origin-when-cross-origin"
response.headers["Content-Security-Policy"] = (
"default-src 'self'; "
"script-src 'self'; "
"script-src 'self' https://plausible.elpatron.me; "
"style-src 'self' 'unsafe-inline'; "
"img-src 'self' data:; "
"connect-src 'self'; "
"connect-src 'self' https://plausible.elpatron.me; "
"frame-ancestors 'self'"
)
return response
+7
View File
@@ -42,6 +42,12 @@ function getViewerId() {
return document.body?.dataset?.viewerId || "";
}
function trackEvent(name, props) {
if (typeof window.plausible === "function") {
window.plausible(name, props ? { props } : undefined);
}
}
function apiBase() {
const vid = getViewerId();
return vid ? `/v/${vid}/api` : "/api";
@@ -143,6 +149,7 @@ function setupUpload() {
e.target.value = "";
return;
}
trackEvent("JSON Upload", { status: result.imported ? "imported" : result.reason || "ok" });
if (result.imported) {
await loadData();
notifyImportSuccess(result);
+1
View File
@@ -0,0 +1 @@
<script defer data-domain="if-viewer.elpatron.me" src="https://plausible.elpatron.me/js/script.tagged-events.js"></script>
+1
View File
@@ -5,6 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Idle Fantasy Viewer</title>
<link rel="stylesheet" href="/static/style.css">
{% include '_analytics.html' %}
<script src="/static/vendor/chart.umd.min.js" defer></script>
<script src="/static/i18n.js" defer></script>
<script src="/static/app.js" defer></script>
+1
View File
@@ -5,6 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Idle Fantasy Viewer</title>
<link rel="stylesheet" href="/static/style.css">
{% include '_analytics.html' %}
<script src="/static/i18n.js" defer></script>
<script src="/static/landing.js" defer></script>
</head>