Legal

Privacy Policy

Meshkis a study tool, not an ad-funded product — there’s no account to create and nothing for sale. This page explains, plainly, what the app collects, why, and the choices you have over it.

What's collected, and why

When analytics are on (see Your consent choice, next), Meshk reports two kinds of signal to Google Analytics 4 (GA4). The generic kind: a page_view each time you load or navigate to a page, scroll_depth at roughly 25/50/75/90% of the way down a page, scroll_to_end once when you reach the bottom, and cta_click for the buttons and links you interact with.

The rest is purpose-built for this app, and named for exactly what it records rather than anything generic:

  • instrument_page_view— which instrument page you visit, logged with the instrument and its musical tradition (Turkish, Persian, etc.) so we can see which instruments are most used
  • string_grouping_toggle— grouping or ungrouping two adjacent courses on the neck, logged with the instrument and which course pair was changed
  • tuning_change— which tuning you pick
  • custom_tuning_create— creating a custom tuning, logged with the tuning’s name and identifier
  • custom_tuning_edit— editing a custom tuning you’ve previously created, logged with the tuning’s name and identifier
  • custom_tuning_delete— deleting a custom tuning, logged with the tuning’s identifier
  • makam_change— which makam you pick
  • neck_pluck— which pitch you tap on the neck, logged as its exact position in cents, not just a note name
  • pattern_play— starting playback, tagged with where it came from: the active makam’s own seyir, a built-in pattern, or a pattern you created
  • sound_panel_change— adjusting sound design, reported once you release a slider or pick a preset, not on every point along the way
  • pattern_search— what you type in the pattern browser search bar, along with how many results matched
  • pattern_filter— which filter you apply in the pattern browser (e.g. filtering by makam or category), logged as the filter dimension and selected value
  • pattern_group_by— how you choose to group patterns in the pattern browser (by makam, by category, or flat list)
  • mode_change— when you switch between Auto and Strum interaction modes, logged with the selected mode name
  • strum_gesture— swiping across strings in the strum zone (a cross-course strum), logged with the number of strings strummed and the strum direction, or holding to mute a string, logged with which course was muted
  • gesture_type— classifying a neck touch gesture as a slide (glissando) or a pitch bend, logged with which type was detected
  • fullscreen_toggle— entering or exiting fullscreen practice mode, logged with which direction
  • shortcuts_help_toggle— showing or hiding the keyboard shortcuts help overlay, logged with its new visibility
  • toolbar_control— using a toolbar control (transport buttons, the sound-design and flip-strings toggles, the tuning/makam/pattern popovers, the fret adjustment guide, or opening the custom-tuning dialog), logged with which control was used
  • user_pattern_create— creating a new pattern in the pattern editor, logged with the pattern’s name and identifier
  • user_pattern_rename— renaming a pattern you created, logged with the pattern’s name and identifier
  • user_pattern_delete— deleting a pattern you created, logged with the pattern’s identifier
  • pwa_install— progress through the “Install app” prompt — shown, accepted or dismissed in the browser’s own install dialog, or completed — logged with which stage was reached
  • nav_click— using primary navigation (the desktop nav pills or the mobile tab bar), logged with which link and which navigation surface you used
  • instrument_change— switching instruments from the instrument page’s picker, logged with the instrument you switched to
  • theme_toggle— cycling the light/dark/system theme toggle, logged with the theme it switched to

That’s more granular than a typical marketing site’s analytics, because it answers a narrower question than “how many visitors”: which tunings, makams, and features people actually use, so development effort goes where it’s useful. It is not designed to, and does not, identify you personally.

All of this travels through Meshk’s own domain rather than straight to Google — see Google’s role, below.

Your consent choice

On your first visit, a banner asks you to Accept or Decline analytics. Nothing described in the section above runs until you choose Accept — no script loads, no request reaches Google Analytics or this site’s analytics proxy. Choosing Decline, or leaving before you answer, keeps it that way.

One consequence of that: clicking Accept is never itself one of the events listed above. Nothing is running yet at the moment you click it, so there’s nothing in place to record the click — a structural feature of gating analytics behind the same choice it measures, not a gap we’ve overlooked.

Either choice is remembered on this device, stored locally rather than on a server, so you’re not asked again on your next visit. Privacy choices in the footer reopens the same banner on any page, any time, if you want to change your answer.

What's stored on your device

Independent of analytics, Meshk keeps a small amount of data locally, in your own browser, so the app remembers your work between visits:

  • IndexedDB, via a library called Dexie — sound presets you’ve named and saved, and any patterns you’ve created.
  • localStorage — your light/dark theme choice, your current sound-design settings, and your analytics consent choice.

None of this is transmitted anywhere. It exists only on the device you’re using, and clearing your browser’s site data for this app removes all of it.

Google's role

When you’ve accepted analytics, GA4 beacons don’t travel straight from your browser to Google — they’re sent first to a first-party endpoint on this domain, which relays them to Google server-side. That keeps the request on this domain rather than a third-party one, so it doesn’t hand your visit directly to Google (or to a browser extension watching for third-party requests) the way a default GA setup does — though Google still processes the underlying data as our analytics provider.

If you’d rather opt out of Google Analytics everywhere, not just here, Google publishes a browser add-on that does that: tools.google.com/dlpage/gaoptout.

What's not collected

  • No accounts — nothing to sign up for, no password, email, or profile stored for you.
  • No payments — the app is free; no billing or payment information is collected anywhere.
  • No third-party advertising — no ad networks, ad pixels, or sponsored content.
  • No cross-site tracking — nothing here follows you to other sites or links your visit to activity elsewhere: no ad-tech cookies, no fingerprinting, no sharing of the data above with anyone besides Google, in its role as the analytics processor described above.

Retention

Analytics data, when you’ve opted in, is retained under Google Analytics 4’s own account-level retention settings — not a custom schedule configured per visitor.

Data stored on your device — presets, patterns, theme, and your consent choice — has no expiration imposed by Meshk; it persists until you clear it yourself, through your browser’s own storage controls.

Questions

Questions about any of this: support+meshk-app@bkuberek.com.

Effective date

This policy is effective as of August 2026.

See also the Terms of Service.