The data promise

Your numbers stay on your laptop. Here’s how we prove it.

No accounts, no fetches, no tracking. Every Muntin tool is built so you can verify the promise — not just trust it. Nine claims, five tests you can run on any tool, four tiers of business data, one principle: data never flows up a tier.

How we handle your data — nine verifiable claims

Each claim is verifiable in your own browser in under a minute. If any of them turn out to be wrong, we want you to find out first — open every “Inspect this” and check us. The build chain enforces the load-bearing claims (1, 2, 4, 5) — so a future tool that ships a forbidden pattern fails CI before it can deploy.

Your numbers never leave the page.

No fetch(), XMLHttpRequest, or form submission fires when you type a financial number. Every Muntin tool runs entirely in your browser.

Inspect this

Open DevTools (Cmd+Opt+I / Ctrl+Shift+I) → Network tab. Type a number into any tool. The request list should not grow.

There's no server to store them on.

The only endpoint a tool page uses is GET /tools/<slug>/. No /api/save, no /api/calculate, no logger. The Worker can't hear you.

Inspect this

From a terminal: curl -X POST https://muntin.digital/tools/margin-math/. Response: 405 Method Not Allowed — there's nothing listening for POSTs.

Analytics sees only buckets, never numbers.

Plausible receives properties from a short, fixed list of enumerated values. A $25 ticket becomes 25-39. A 30% food cost becomes 28-32. Your raw numbers are never a value on any event.

Inspect this

DevTools → Network → filter plausible. Interact with any tool. When the event fires, look at its payload. Values like ticket_bucket: "25-39" — never ticket: 25.00.

No cookies, no localStorage, no sessionStorage — for your inputs.

Your typed numbers live only in JavaScript variables, which disappear when you close the tab. There's no persistent state for any tool's financial inputs.

Inspect this

DevTools → Application → Storage. Use any tool. Check Cookies, Local Storage, Session Storage, IndexedDB for this origin — the panels stay empty of any financial value.

No third-party scripts touch the inputs.

Every tool page loads only first-party JS plus one privacy-first analytics script (Plausible). No Google Tag Manager, no Meta Pixel, no chat widget, no session replay.

Inspect this

DevTools → Network → filter JS. Reload. Every script should be plausible.io or muntin.digital — nothing else.

Shareable scenario links keep numbers out of server logs.

Shareable links carry inputs in the URL fragment — the part after the #. Per HTTP spec, browsers never send fragments to servers. The link you paste is an audit trail you control.

Inspect this

Move any slider on a tool. Watch the URL bar. It updates to something like …#v=1&t=25&f=30. That fragment is never in an HTTP request.

The source is readable.

No build step, no minification, no framework. Every tool's math module is plain JavaScript — you can read every line.

Inspect this

Right-click any tool page → View Page Source. Or open the tool's .js file directly. Every function name is human-readable; every comment is in the source.

Nothing persists beyond this tab.

Close the tab, reopen the tool: every input resets to default. There's no account, no saved history, no "welcome back" — unless you sign in to the optional Workshop, in which case you control what gets saved and you can delete it.

Inspect this

Change every slider and input on any tool. Close the tab. Reopen the tool. Everything is back to its starting value.

Print + calendar exports are 100% client-side.

"Print this report" opens your browser's native print dialog — we never see the output. "Add to calendar" generates an .ics file in your browser and downloads it locally. The calendar event includes only values already visible to you.

Inspect this

DevTools → Network. Click Print this report — no new requests. Click Add to calendar — still no new requests; a .ics download appears. Open it with a text editor: every field in the event is plain text.

Operator Sheets stay on your device.

Every sheet at /sheets/<slug>/ runs entirely in your browser. The math, the bands, the recommendations — all client-side. Drafts auto-save to localStorage on your device only. The only network requests a sheet page makes are user-initiated: clicking Save sends one POST to your own Workshop, and (when you're signed in) the page reads back your prior saves of the same sheet to draw the trend sparkline. Anonymous visitors trigger zero network calls from the sheet itself.

Inspect this

Open DevTools (Cmd+Opt+I / Ctrl+Shift+I) → Network tab. Open any sheet — e.g. /sheets/recipe-cost-card/. Type ingredients and watch the request list. The list does not grow as you type. The only requests on initial load are static assets (CSS, fonts, the shared sheets.js / sheet-csv.js / sheet-viz.js / sheet-parse.js / sheet-benchmarks.gen.js). Click Save (only visible when signed in): one POST to /api/workbench/save with { kind: 'sheet', payload: { v:1, slug, inputs, outputs, savedAt } }. The build-time check `node scripts/check-sheet-no-fetch.mjs` greps every sheet fragment for forbidden network calls; CI fails if any fragment contacts any URL.

How to check if any tool is safe

Five tests you can run on any free financial tool you encounter — before you type a single real number into it. We score ourselves alongside a typical lead-generation free tool so the difference is concrete, not rhetorical.

The test Muntin Typical free tool
1. Does typing a number trigger a network request?
Open DevTools → Network. Type.
No requests fire. Every keystroke POSTs to a server.
2. Is the privacy claim at the point of input?
Not buried in a policy page.
"Stays in your browser" rail on every tool, full claims page in-line. Privacy Policy link in footer only; implicit consent on submit.
3. Is there an account / newsletter / cookie gate?
Anything demanding "accept all" before you can use the tool.
Nothing — no gate, no popup, no cookie banner. "Enter your email to see your results."
4. Any third-party analytics, session replay, marketing scripts?
DevTools → Network → filter JS.
Privacy-first Plausible only; bucket props (never raw values). Google Analytics, Meta Pixel, HubSpot, session replay — stacked.
5. Is the source code readable?
Right-click → View Source.
Unminified, every math function named. Minified SaaS bundle; math hidden inside a framework dashboard.

Run the audit on a real tool →

The four tiers of your business data

Not every number belongs in every conversation. Most small-business owners carry all their data in the same mental bucket — which means the supplier list and the tax ID get the same protection (often the same low level of it). Four tiers, each with a different audience and a different level of caution.

Tier 1

Public

Everything anyone can find on your site, your listing, or a walk-by.

  • Menu, hours, photos
  • Address, phone, website URL
  • Schema.org markup, cuisine tags, service attributes
Tier 2

Competitive-sensitive

Legal to share, but useful to a rival — or leverage for a platform.

  • Cost of goods, supplier list, negotiated pricing
  • Commission tier you actually pay (not the public rate)
  • Labor schedule template, daypart mix, menu-engineering matrix
Tier 3

Operational-confidential

Your actual operating numbers, customer pipeline, employee details.

  • Monthly P&L, actual food cost %, actual margins
  • Reservations pipeline, customer database, loyalty data
  • Employee names, schedules, tipped-employee distributions
Tier 4

Regulated

Legally protected. Losing this has fines, lawsuits, or criminal exposure attached.

  • SSN, EIN, other tax identifiers
  • Customer card data (PCI scope), employee bank details
  • Food-safety logs, health-department correspondence, liquor-license status, I-9s

Apply this anywhere you’re asked to hand data over — vendor evaluations, contracts, loan applications, “free audit” intakes. The pattern: data never flows up a tier. A Tier 3 vendor doesn’t get Tier 4 access just because they asked. The easiest way to reduce your attack surface is to stop volunteering data that wasn’t actually required.

Verify it yourself

The point of this page is that you don’t have to take any of it on faith. Three concrete ways to confirm:

  1. DevTools. Open any tool, then DevTools (Cmd+Opt+I / Ctrl+Shift+I). Watch the Network tab while you type. Watch Application → Storage while you click. Both stay empty of your inputs.
  2. Source. Right-click → View Page Source. Or open /assets/site.js directly. Search for any tool’s function — every line is in the open. Hash the file yourself, or compare against the SHA-256 digests published at /security/integrity.txt (regenerated on each deploy; the file lists exactly which paths were hashed).
  3. The audit. Run the 5-test audit checklist on this site, then on a competitor’s “free margin calculator.” The difference is the load-bearing argument.

Found a hole? Tell Don directly through The Window. Security reports get the fastest reply turnaround on the site — within 24 hours, weekends included.

What about paid clients?

If you hire the studio — whether that’s a one-off Site Read, a full build, or a recurring Care Plan — the data we hold for billing is whatever the agreed-upon engagement letter calls for: typically your name, your business name, your email, and an invoice history. Card data is never in our hands; payments go through the payment processor named on the invoice (Stripe, Wise, or check). We don’t back up your operating numbers from any tool you’ve run to a third location, and the Workshop stays opt-in: you save what you choose, you delete it when you choose.

The legal version is at /privacy.html. This is the operator-trust version: same data, plain English.