Setup usage metrics

This commit is contained in:
Kieran 2023-09-12 22:53:32 +01:00
parent 377dfd5d30
commit 6745786e9f
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
4 changed files with 40 additions and 0 deletions

View File

@ -71,6 +71,11 @@ export interface UserPreferences {
* Proof-of-Work to apply to all events * Proof-of-Work to apply to all events
*/ */
pow?: number; pow?: number;
/**
* Collect usage metrics
*/
telemetry?: boolean;
} }
export const DefaultPreferences = { export const DefaultPreferences = {
@ -87,4 +92,5 @@ export const DefaultPreferences = {
defaultRootTab: "notes", defaultRootTab: "notes",
defaultZapAmount: 50, defaultZapAmount: 50,
autoZap: false, autoZap: false,
telemetry: true,
} as UserPreferences; } as UserPreferences;

View File

@ -20,6 +20,12 @@ import QrCode from "Element/QrCode";
import Copy from "Element/Copy"; import Copy from "Element/Copy";
import { delay } from "SnortUtils"; import { delay } from "SnortUtils";
declare global {
interface Window {
plausible?: (tag: string) => void
}
}
interface ArtworkEntry { interface ArtworkEntry {
name: string; name: string;
pubkey: HexKey; pubkey: HexKey;
@ -112,6 +118,7 @@ export default function LoginPage() {
async function makeRandomKey() { async function makeRandomKey() {
await generateNewLogin(); await generateNewLogin();
window.plausible?.("Generate Account")
navigate("/new"); navigate("/new");
} }

View File

@ -128,6 +128,23 @@ const PreferencesPage = () => {
</select> </select>
</div> </div>
</div> </div>
<div className="flex f-space w-max">
<div className="flex-column g8">
<h4>
<FormattedMessage defaultMessage="Send usage metrics" />
</h4>
<small>
<FormattedMessage defaultMessage="Send anonymous usage metrics" />
</small>
</div>
<div>
<input
type="checkbox"
checked={perf.telemetry ?? true}
onChange={e => updatePreferences(login, { ...perf, telemetry: e.target.checked })}
/>
</div>
</div>
<div className="flex w-max"> <div className="flex w-max">
<div className="flex-column g8"> <div className="flex-column g8">
<h4> <h4>

View File

@ -115,6 +115,16 @@ async function initSite() {
} catch (e) { } catch (e) {
console.error("Failed to register protocol handler", e); console.error("Failed to register protocol handler", e);
} }
// inject analytics script
// <script defer data-domain="snort.social" src="http://analytics.v0l.io/js/script.js"></script>
if (login.preferences.telemetry ?? true) {
const sc = document.createElement("script");
sc.src = "http://analytics.v0l.io/js/script.js";
sc.defer = true;
sc.setAttribute("data-domain", "snort.social");
document.head.appendChild(sc);
}
return null; return null;
} }