MMF · Map My Friends

Privacy policy

Last updated 27 October 2026 · MMF is made and operated by Zenemix Labs · zenemixlabs@gmail.com

This is our own draft, not legal advice. We wrote it ourselves, by reading our own code, because we would rather publish something accurate than something that sounds lawyerly. It has not been reviewed by a lawyer yet. If you need a formal guarantee about how a particular law applies to you, ask us and we will get a proper answer rather than improvise one.

MMF is a private map of friends you already have. This page describes exactly what the app holds, where it holds it, and what you can do about it. Where the honest answer is uncomfortable, it is written down anyway.

1. The short version

The things that are unusual about MMF, and true:

And the parts we are not proud of, stated up front:

2. Who we are

MMF (Map My Friends) is made and operated by Zenemix Labs. For anything about this policy, your data, or a request to have something removed, write to zenemixlabs@gmail.com. A person reads it.

3. Using MMF without an account

MMF opens straight onto the map. You can search cities, create pins, write notes and attach photos without ever signing in. Those pins, notes and photos stay on your device — they are written to the phone's own storage and no part of the app sends them anywhere while you are signed out.

Three things do leave your phone even while you are signed out, and you should know about them:

One clipboard read, on the first launch only

If you installed MMF by following an invitation link, the app store often drops the invitation on the way. To recover it, MMF reads the clipboard once, ever — on the first launch after install, and only if the clipboard is not empty. If what it finds is one of our invitation links, it uses it and clears the clipboard. If it is anything else, it is ignored and left alone, and nothing is sent anywhere. iOS shows its usual "pasted from" notice when this happens, which is why we are telling you.

4. What changes when you sign in

Signing in is the moment your local map becomes cloud data. It is worth being blunt about it: when you sign in, the pins you created while signed out are adopted into your account and uploaded on the next sync — including the private notes and the photos you attached to them. They stop being device-only.

We do this because otherwise signing in would appear to erase the map you just built. But if you built a map you never intended to send us, sign-in is the point to stop and think, not later.

We never ask for or store a password. Signing in is Google, Apple, or a one-time link emailed to you.

5. What we hold, and why

Everything below is either on your device, on our server, or both. "Our server" means our Supabase project — see §14.

Your pins
What
For each person on your map: the name you gave them, their city and country, coordinates cut to ~1.1 km, their status (Resident, Temporary, Traveling), their availability (Open to plans, Coffee, Busy), a public note, tags, and where the pin came from.
Where
Your device while signed out; your device and our server after you sign in.
Why
This is the map. It is the product.
Your private note about a person
What
The free-text note only you see, separate from the public one on the pin.
Where
Your device while signed out; after sign-in, also a column on our server that no other user and no part of our API can read.
Why
So it survives a reinstall and appears on your second device.
Contact details you enter about someone
What
Email, phone, Instagram, LinkedIn, Telegram, WhatsApp, and any other network you add yourself.
Where
Your device while signed out; our server after sign-in, indexed in a normalised form so that matching can work.
Why
Opening WhatsApp, Instagram, Telegram or LinkedIn straight from a pin, and recognising that person if they later join MMF themselves.
Photos you attach to a pin
What
A picture of another person, taken or picked by you.
Where
Always your device. After sign-in, also a private storage bucket on our server that only your account can read.
Why
So the photo survives a reinstall and appears on your other device.
Your own profile
What
Display name, email address, profile picture URL, phone number if you add one, your city and country, coordinates cut to ~1.1 km, your status, availability and note, your social handles, your language and your theme preference.
Where
Our server, from the moment your account is created.
Why
It is your account record, and it is your own pin on your friends' maps.
Hashes of your own email and phone number
What
One-way SHA-256 digests, generated automatically from the address and number on your account.
Where
Our server, as part of your profile.
Why
So a friend who already has your number can find you without either side sending the number itself. Turn off "allow smart matching" and they stop working.
Your device's notification token
What
The push token issued by your phone's operating system.
Where
Our server, only for a signed-in account that granted notification permission. If the permission is withdrawn, the token is cleared.
Why
Telling you a friend request arrived or was accepted.
A log of country changes
What
Each time a pin on your map moves to a different country, we record the pin, the new city and country, the ~1.1 km coordinates, the previous country and the date. A redeemed invitation adds a row too.
Where
Our server. It is written by the database itself, never sent up by the app.
Why
It exists to support country-change alerts. Today the alerts you actually see are worked out on your own phone from pins it already has, and nothing in the app reads this log back. Nothing prunes it either — it is deleted when your account is deleted.
Friend requests, friendships and notifications
What
Who asked whom, when, and the outcome; the resulting friendship; and a small outbox row per notification. An outbox row carries the other person's display name only when they accepted your request — for an incoming request no name is sent at all.
Where
Our server, readable only by the two people involved.
Why
Friendship is the consent step that lets two accounts see each other at all.
Rate-limit counters
What
A count of how often an account called a protected operation. For a support message sent without an account, the counter is keyed to an identifier derived from your IP address by hashing it — the address itself is never stored.
Where
Our server. No user can read this table.
Why
Stopping abuse of the few operations that are open to people without accounts.
Settings and state on your device
What
Theme, language, onboarding flags, filters, recent searches, the last map position, your location-precision choice, country alerts, the sync marker, and your signed-in session token in a separate encrypted store.
Where
Your device only. Anything that could name a person or a place is filed under the account it belongs to and is never inherited by the next account to sign in on the same phone.
Why
Working offline, and keeping one account's data out of another's.

6. Your location

Automatic location is off until you switch it on, and nothing reads the GPS while it is off. When it is on:

Reverse geocoding — turning a position into a city name — sends Mapbox the cut ~1.1 km value. Mapbox never receives a raw fix from MMF.

7. People who are not MMF users

Most of the people on MMF maps never agreed to anything. That is the honest shape of this product and we are not going to bury it.

When you add a pin, you can type in another person's name, city, country, an approximate position, a photo, a public note, a private note, their email, their phone number and their social handles. That person usually has no MMF account and was never asked. Those identifiers are then indexed and hashed so that, if they ever do join, their pin and their account can be matched up.

You decide what goes in. A pin needs nothing but a name and a city. Everything else is optional and every field you leave empty is a field we never hold. Please only enter what you would be comfortable that person knowing you entered.

If you are on someone's map and you want off it

Write to zenemixlabs@gmail.com with enough detail for us to identify the pin — typically the name and the email address or phone number that might be on it. We can remove the copy held on our servers. The copy on that person's own phone is theirs to delete, and we will ask them to. See Delete your data for the full route.

8. Finding friends by phone number

If you let MMF look through your contacts, this is exactly what happens:

This is pseudonymous, not anonymous, and we want to correct our own wording. Two things are true that "anonymous" would hide. First, the comparison runs under your signed-in session — the server knows it is your account asking. Second, a hash of a phone number is not the same as anonymising it: there are only so many possible phone numbers, and anyone holding a hash and enough patience could work back to the number. The protection here is real — we do not keep what you send, and we never see a name — but the accurate word is "pseudonymous". The permission prompt your phone shows still says "anonymously"; that is our mistake, and we are fixing it.

You can decline the contacts permission entirely. Nothing in MMF depends on it, and the app explains itself before your phone shows its own dialog.

9. Private notes and photos

No other MMF user can read your private note about a person, and no part of our API will return it to anyone but you. That is enforced by two independent database rules, one of which cannot be overridden by adding a new rule later.

What it is not: end-to-end encrypted. Your note is stored in our database in readable form, so we — and Supabase, who run the database for us — are technically capable of reading it. We do not, and we have no tool that does, but we are not going to claim a mathematical guarantee we have not built. If an older version of our text told you a private note never leaves your device, that stopped being true when it started syncing, and this page is the correction.

Photos you attach to a pin go into a private storage bucket. It is created private and re-asserted as private, only image types are accepted, and there are four separate rules plus one overriding rule tying every file to the account that owns it. Not even the person in the photo can read it. The app fetches them through short-lived signed links and keeps a copy on your device.

10. What other MMF users can see

Nobody can see you until you accept them. There is no directory, no search for strangers and no way to appear on someone's map without either being added by them or accepting their request.

When you accept a friend request, MMF shows that person your pin: your name and photo, your city and country, your position at the precision you chose, your status, availability and note.

Your profile record contains more than that, and our access rules are currently too generous with it. The record also holds the email address on your account, your phone number if you added one, the hashes built from them, your notification token and your ~1.1 km coordinates. Today, our rules open that whole record to anyone whose friend request you accepted. No screen in MMF shows it and no part of the app asks for it — but someone who queried our API directly with their own account could reach it. We are narrowing this to the fields the app actually uses. Until then: accept friend requests only from people you would give your email address to.

Ghost mode

Ghost mode hides your location from every friend while you keep seeing all of theirs, and it works backwards as well as forwards: turning it on blanks the city, country and coordinates already copied onto your friends' maps, not just future ones, and keeps them blank. A friendship accepted while you are ghosting copies nothing at all. One exception, by design: if you personally fill in your city through someone's invitation link while ghosting, that one deliberate disclosure stands.

Declining a request

MMF sends no notification when you decline someone — no message, no badge, nothing in the app tells them. To be precise rather than reassuring: the request they sent is their own record, and its status changes to "declined". The app never displays that, but a person querying our API directly could read the status of a request they sent.

11. Invitation links

An invitation link lets a friend put themselves on your map from a web page, with no app and no account. Two facts about it deserve stating plainly:

We store the invitation itself: its token, the label you gave the person, how you sent it, whether it was used, and, once it is, the city and country they submitted.

If you are the guest filling one in: the page asks for your name, city, status, availability and an optional note. Your coordinates are cut to ~1.1 km in your own browser before anything is sent. A photo you pick there never leaves your browser at all — there is nowhere for it to be uploaded to. The page sets no cookies, stores nothing and loads no analytics or third-party fonts; it talks only to our database and to Mapbox for the city search.

12. Support messages

When you write to support from inside MMF, we receive your message (up to 1000 characters), the topic you picked, and a fixed set of diagnostics: app version, operating system, device model, app language, device language, whether you are signed in, and the email address on your account if there is one. Your device's name is deliberately excluded — on iOS it is usually the owner's own name.

Support messages are write-only. There is no way for anyone — you, another user, or a request from our own app — to read them back out; only our own backend key reaches them. That also means we cannot show you a history of what you sent. And see §15: support messages deliberately outlive the account they are about.

13. Analytics

MMF sends product analytics to OpenPanel, running on our own configured instance. We are strict about the contents and loose about nothing else, so here is both halves.

What we do send: event names from a fixed list, screen names, and properties that are only ever counts, yes/no flags, values from a closed set, your language, your theme and the build environment. For example: how many countries your filter covers, never which ones; whether a search returned results, never what you typed.

What cannot get through: properties are checked against an allow-list of names, then against a backstop that rejects anything whose name resembles an email, phone, handle, city, coordinate, name, token or URL, and the event name itself must be on the list. If a payload fails, the whole payload is dropped at the boundary rather than trimmed. The fields for email, first name, last name and avatar are never filled in.

Analytics are pseudonymous, not anonymous, and they are on until you switch them off. Every event carries a stable identifier for your installation, and when you sign in we deliberately link that identifier to your account so the before and after are one trail. There is no consent prompt: analytics are on by default from the first launch. Switching off "Share usage analytics" in Settings → Privacy stops them on that device at once — nothing further is sent, not even a note that you switched them off — and the choice survives erasing local data. If you would rather be asked first, tell us at zenemixlabs@gmail.com.

14. Companies that receive data

MMF is not a "no third parties" app and we will not pretend otherwise. Four services receive data, plus the two sign-in providers and your phone's own operating system.

Supabase — database, sign-in, file storage
Receives
Everything MMF syncs: your profile, your pins with their private notes and the contact details you entered, your photos in a private bucket, invitations, the country-change log, friend requests and friendships, notification rows, support messages and rate-limit counters.
Note
They run the database, so they are technically able to read what is in it. Your private notes are protected by access rules, not by encryption.
Mapbox — maps and city names
Receives
Every city name you type into the search, the cut ~1.1 km value when naming the area you are in, map tile requests including the part of the world you are looking at, and your IP address as a consequence of those requests.
Note
Their map SDK's own usage telemetry is currently left at its default setting, which means it is on. We should be turning it off; until we have, treat Mapbox as receiving usage telemetry from the map screen.
OpenPanel — product analytics
Receives
The pseudonymous event stream described in §13: an installation identifier, then your account identifier once you sign in, plus event names, screen names and allow-listed properties.
Note
No consent prompt: on by default, until you switch it off in Settings. How long they keep events is governed by their retention, not ours.
Expo — push notifications
Receives
Your device's push token and the text of the notification. For an accepted friend request the text contains the accepter's name; for an incoming request no name is sent.
Note
Only reached if you granted notification permission.
Google and Apple — signing in
Receives
Ordinary sign-in traffic when you choose their button.
Note
They return your email address and, when available, your name and a link to your profile picture, which we store. Because that picture stays hosted by them, displaying it contacts them.
Resend — forwarding support mail
Receives
Nothing today. This is how support messages would be forwarded to our inbox, and it is not switched on, so support messages currently reach only our database. When we do switch it on, they will carry the message and its diagnostics.
Your phone's operating system
Receives
The ordinary platform surfaces: the share sheet when you export pins or send an invitation, the keystore protecting your encrypted session, the permission dialogs, and the local country-change alert — which is composed on your phone and sent nowhere.

We do not sell data, we do not run ads, and we do not send anything to advertisers or data brokers.

15. How long we keep things

16. Your controls

What you cannot do today, so you are not left guessing:

Depending on where you live you may have statutory rights — to a copy of your data, to correction, to erasure, to object to processing. Ask us at zenemixlabs@gmail.com and we will do it by hand where the app has no button for it.

17. Deleting your account

Settings → Your data → Delete account, behind a confirmation. It deletes your sign-in record, and everything hanging off it goes with it: your profile, your pins and their private notes, your invitations, the country-change log, your friend requests, your friendships and your notification rows. It can only ever delete the account making the request. You are signed out immediately afterwards.

Four things survive it, and we would rather you heard it here:

Uninstalled the app already? Delete your data explains how to have the account removed by email.

18. Changes to this policy

This page describes code. When the code changes, this page changes with it, and the date at the top moves. If a change makes MMF hold something new about you or share it somewhere new, we will say so in the app rather than leave it here to be discovered.

This page is in English only for now. The app speaks Spanish too, and a Spanish version of this policy is coming; until it is here, the English text is the one that describes the app.

19. Contact

MMF is made and operated by Zenemix Labs. For anything at all — a question, a correction, a deletion request, or a pin with your name on it that you want gone — write to zenemixlabs@gmail.com.

Email us about your data