Privacy
Policy.
Last updated: October 26, 2026
This policy explains what data Mosey Studio collects, how we handle your photos, which third-party services receive your data, and what rights you have.
The short version
- →The mosaic rendering engine runs entirely in your browser. Your photos are not uploaded during normal use. If you choose to Save a mosaic, your photo and any custom tile photos in its palette are uploaded to our cloud storage so it can be restored later.
- →Three optional AI features (background removal, 3D depth, and AI palette curation) briefly send your photo to fal.ai, our AI processing partner. The uploaded photo is set to auto-delete within 30 seconds.
- →We store your email, subscription status, and credit balance. If you save mosaics, we also store your source photos, custom tile photos, and configuration.
- →We use PostHog for analytics. In the EU/EEA, UK, Switzerland and Quebec, we only count visits anonymously, without cookies, unless you accept analytics cookies. Elsewhere, analytics cookies are on by default and you can opt out at any time; we also honor Global Privacy Control.
- →We do not sell or share your personal data for advertising purposes.
- →To request access, correction, or deletion of your data, email support@mosey.studio.
01 / Who We Are
Mosey Studio ("we", "us", "our") is a trading name of Cameron Garvey, a sole trader based in New Zealand. We are the data controller for personal data processed in connection with this service. If you have any privacy questions, contact us at support@mosey.studio.
02 / What We Collect
Where applicable, we identify the legal basis for processing under GDPR. New Zealand users are protected by the Privacy Act 2020, which is covered in the Your Rights section below.
Account data
When you create an account we collect your email address, a Supabase user identifier, and, if you sign in with Google, your Google account identifier, name and profile avatar URL. You can also set a display name in your account settings. We need this to authenticate you and link your subscription. We never store your password in plain text; Supabase handles credential hashing.
Lawful basis (GDPR): Performance of a contract. You can't have an account without it.
Subscription data
If you subscribe to Mosey Pro, we store your Stripe customer ID, subscription ID, status, billing interval, and current billing period dates. Your card number, CVC, and billing address are collected directly by Stripe and never pass through our servers.
Lawful basis (GDPR): Performance of a contract.
Credit ledger
We maintain an append-only credit transaction ledger recording each credit grant, purchase, usage, and refund. Each row stores: your user ID, which bucket (subscription or purchased) was affected, the amount, the transaction type (e.g. monthly_grant, purchase, usage, refund), optionally which AI feature was used, and a timestamp. No image content is stored in this ledger.
This ledger is visible to you in your account and is used for billing transparency, fraud prevention, and customer support. All ledger rows are deleted when your account is deleted.
Lawful basis (GDPR): Legitimate interests. Credit accounting and fraud prevention are necessary to operate a fair and sustainable service.
Saved mosaics
When you explicitly click Save in the studio, we upload and store the following to Supabase Storage and our database on your behalf: your source photo (or, for an imported 3D model, a voxelized version of it rather than the original file), an optional painted mask, the depth image from 3D depth (only if you used 3D depth on that photo), any custom tile photos you added to an image palette, a small thumbnail image, and your mosaic configuration (tile type, layout, palette settings). This data is retained until you delete the mosaic or your account. You can manage your saved mosaics at any time from your library page.
By default, saved mosaics are private. If you toggle a mosaic to shared, it becomes accessible to anyone who has the link, including the source photo, mask, and any custom tile photos you uploaded. Shared mosaics are unlisted: we never publish links to your shared mosaics or include them in our sitemap, and they tell search engines not to index the page or its images. Anyone you send the link to can still pass it on. You can revert to private or delete the mosaic at any time. Shared assets are served via Supabase's CDN; Supabase may cache them at edge nodes.
Lawful basis (GDPR): Performance of a contract. The save feature only works by storing your data.
Analytics
We use PostHog to collect page views, clicks (including the text of the button or link you click), feature events (such as render completion with non-identifying dimensions like tile count and layout type), and error reports when something breaks in the app. We do not record your screen or sessions. PostHog is configured with person_profiles: 'identified_only', so anonymous visitors generate session events but no personal profile is ever created for them. For signed-in users, we link events to a profile containing your user ID, email, and plan tier. We do not send image data or generated mosaics to PostHog.
Analytics run in one of two modes. Full: PostHog sets analytics cookies, and signed-in users are linked to the profile above. Anonymous: page views, clicks, feature events and error reports are counted without cookies or local storage. PostHog derives a temporary identifier on its servers from a one-way hash of your IP address and browser details with a random salt that changes daily and is then deleted, so visits can't be linked across days or to you. No profile is created and your account is never linked.
Which mode applies: in the EU/EEA, the UK, Switzerland and Quebec, analytics are anonymous until you accept analytics cookies in the banner. Elsewhere, full analytics are on by default and you can opt out in (also in the site footer, the editor's Help menu and your account settings). If your browser sends a Global Privacy Control signal, we treat it as an opt-out. Choosing "Decline" or opting out switches you to anonymous analytics. To pick the mode, our server checks the country (and, in Canada, the province) your connection comes from; this is not stored.
Lawful basis (GDPR): consent for full analytics; legitimate interest in understanding, in aggregate, how the app is used for anonymous analytics.
Support messages
If you contact us via the FAQ support form, we collect your name (optional), email address (optional), the subject category, and your message. This is sent to our support inbox via Resend, and if you give your email address, Resend also sends you a confirmation that we received it.
Lawful basis (GDPR): Legitimate interests, to respond to support requests.
Feedback
After an export, the editor asks how it turned out; while you're working it may ask, at most once a day, how your mosaic is looking; and you can send feedback from the Help menu at any time. If you answer, we store your thumbs up or down, any reasons you pick, any comment you write, and the settings of the mosaic at the time (such as tile type, layout and export format). If you're signed in, it is linked to your account and deleted with it; otherwise it isn't linked to you. Your photo is never included. We're notified in a private team chat when feedback arrives, with your rating, reasons, the mosaic settings and the first 300 characters of your comment, after email addresses, phone numbers and links are removed. Please don't include personal details in comments. Feedback is stored in Supabase until we no longer need it to improve Mosey or you delete your account. So the in-editor question isn't repeated, your browser remembers when it last asked (mosey_feedback_prompted_at).
Lawful basis (GDPR): Legitimate interests, to improve Mosey based on what you tell us. Giving feedback is always optional.
IP addresses (rate limiting)
To prevent abuse, our servers temporarily process your IP address for rate limiting purposes. For unauthenticated requests (e.g. the support form, image search, and guest checkout), your IP address is used as the rate-limit key. For authenticated API requests to our Edge Functions (e.g. checkout session creation), your Supabase user identifier is used instead of your IP address where possible.
IP addresses passed to Edge Functions are forwarded to Upstash (our rate-limiting provider) as part of the rate-limit key. Each key expires automatically within about 20 minutes, once its rate-limit window has passed. IP addresses used for rate limiting within the application server are held in process memory only and are never written to disk or sent to a third party.
Lawful basis (GDPR): Legitimate interests, to protect the service from abuse, spam, and denial-of-service attacks.
03 / Your Photos
Core rendering is 100% local. Your photos are compressed in the browser and stay on your device. Mosey's servers never receive them during normal use. So you don't lose unsaved work, the studio keeps a draft of your current mosaic (including its photos) in your browser's local storage until you close the mosaic or save it to your account.
The mosaic rendering engine (tile layout, color matching, palette selection) runs entirely in WebGL on your device. No image data is sent to Mosey or any third party as part of this core workflow.
Three optional features change this by design:
Background Removal
When you tap "Remove Background", your photo is sent over HTTPS from your browser to a Supabase Edge Function, which uploads it to fal.ai for neural-network segmentation. Both your uploaded photo and the processed result (a subject-only PNG) are set to expire from fal.ai's storage within 30 seconds. The result is returned to your browser and stays on your device (in the draft described under Cookies & Analytics). We do not keep a copy unless you save the mosaic.
3D Depth
The same flow applies: your photo is sent over HTTPS to fal.ai (via a Supabase Edge Function) for depth estimation, and the result (a grayscale depth image) is returned to your browser. Your uploaded photo and the depth image are both set to expire from fal.ai's storage within 30 seconds.
AI Palette Curation
When you use "Suggest Palette", your photo is uploaded to fal.ai's storage. fal.ai then sends that temporary URL through OpenRouter to Google Gemini 2.5 Flash, which analyzes the image and returns a list of emoji suggestions. The photo at fal.ai is set to expire within 30 seconds; only the emoji list is kept by Mosey (in your browser session). The OpenRouter and Google accounts used for this request are fal.ai's, not ours, so their retention follows fal.ai's agreements with them. Google states that prompts and images sent through its paid API are not used to improve its products, and are logged for a limited time only to detect abuse.
If you upload photos of other people, you are responsible for ensuring you have the right to do so and that those individuals have consented to their image being processed as described above.
04 / Sub-Processors
We share data with the following third-party vendors only to the extent required to operate the service. Each vendor is listed with what they receive and our understanding of their retention.
Vercel
Application hosting, SSR, and serverless functions (support email, Unsplash proxy, account deletion, consent region lookup)
Receives: IP addresses, request headers, and request bodies for all page views and API calls. Static assets (JS, CSS, images) served from Vercel's global CDN.
Retention: Per Vercel's Privacy Policy and the log retention of our plan
Cloudflare
CDN, DDoS protection, and DNS. All traffic passes through Cloudflare before reaching our origin.
Receives: IP addresses, request metadata (URL, User-Agent, headers). Cloudflare may cache static assets.
Retention: Per Cloudflare's Privacy Policy and the log retention settings of our plan
Supabase
Authentication, database, file storage, Edge Functions
Receives: Email, user ID, name (if provided), subscription data, credit balance and transaction ledger. If you save a mosaic: your source photo, mask, depth image, custom tile photos, thumbnail, and mosaic configuration. If you send feedback: your rating, reasons, comment, and mosaic settings.
Retention: Until account deletion; anonymous feedback until we no longer need it
Stripe
Payment processing for subscriptions and one-time credit pack purchases
Receives: Email, Supabase user ID, billing interval, one-time payment amount. Card details are collected by Stripe directly; we never see them.
Retention: Per Stripe's data retention policy
fal.ai
AI inference for background removal, 3D depth, and palette curation. For palette curation, fal.ai forwards the request to OpenRouter and Google using its own accounts.
Receives: Compressed photo when you trigger one of these three features
Retention: Uploaded photo and generated result: about 30 seconds (auto-delete). fal.ai keeps a record of each request (its settings and links to the files, which stop working once the files expire) in its request history. fal.ai's terms let it use your photo only to provide the service, though it may use anonymized or aggregated data from requests to improve its services.
OpenRouter
Routes the palette-curation request from fal.ai to a vision model (fal.ai's sub-processor)
Receives: A temporary fal.ai URL pointing to your image, plus the curation prompt. No account or user details.
Retention: OpenRouter states it does not keep prompts or responses unless the account holder (here, fal.ai) opts in to logging. It keeps request metadata such as timestamps and token counts.
Google (Gemini 2.5 Flash)
Vision analysis for AI palette curation (fal.ai's sub-processor, via OpenRouter)
Receives: The image at the temporary fal.ai URL (which expires within 30 seconds), via OpenRouter
Retention: Paid API: not used to improve Google's products; logged for a limited time only to detect abuse, per Google's terms.
PostHog
Product analytics
Receives: Page views, clicks, feature events, and error reports; for signed-in users with full analytics: user ID, email, and plan tier. Visitors with anonymous analytics are never linked to a personal profile.
Retention: Per PostHog project settings; no images or file data is sent
Resend
Transactional emails (account verification, subscription and payment notices, support form messages and confirmations)
Receives: Email address, message body, and your name if you give one on the support form
Retention: Per Resend's data retention policy
Team messaging service
Internal notifications (checkouts opened, new sales, sign-ups, feedback)
Receives: Feedback ratings, reasons, mosaic settings, and comments with email addresses, phone numbers and links removed. Checkout and sale notices contain the product, the amount, whether you were signed in, and your Stripe customer ID, but no name or email. Sign-up notices contain only the sign-in method and our total number of users.
Retention: Until we delete the message
Upstash
Rate limiting for Edge Functions (abuse and spam prevention)
Receives: Rate-limit keys containing either your IP address (unauthenticated requests) or your Supabase user identifier (authenticated requests). No other personal data is transmitted.
Retention: Each key expires within about 20 minutes, once its rate-limit window has passed. Nothing else is stored.
Unsplash
Stock photo search in the Library (proxied via Mosey server route)
Receives: Search query text only, with no user identity or photos
Retention: Per Unsplash's Terms of Service
Google OAuth
Optional single sign-on
Receives: Your sign-in request if you choose to sign in with Google, which then shares your Google account ID, email, name and profile picture URL with us
Retention: Per Google's Privacy Policy
06 / We Don't Sell Your Data
Mosey Studio does not sell, rent, or share your personal data with third parties for cross-context behavioral advertising or any commercial purpose. The sub-processors listed above receive data only to perform services on our behalf. California residents: this constitutes our "Do Not Sell or Share My Personal Information" disclosure. We do not sell or share as defined by the CCPA.
07 / Children
Mosey Studio is not directed at children under the age of 13 (or 16 in jurisdictions where a higher age applies to digital consent). We do not knowingly collect personal data from children, and our Terms require account holders to meet this minimum age. If you believe a child has submitted data through our service, please contact us at support@mosey.studio and we will delete it promptly.
08 / Your Rights
GDPR / UK GDPR rights
If you are located in the European Economic Area or the United Kingdom, you have the right to: access a copy of the personal data we hold about you; request correction of inaccurate data; request erasure (the "right to be forgotten"); request restriction of processing; obtain a portable copy of your data; object to processing based on legitimate interests; and withdraw consent at any time (this does not affect the lawfulness of processing prior to withdrawal). You also have the right to lodge a complaint with your local supervisory authority.
CCPA / CPRA rights (California)
California residents have the right to know what personal information we collect, to request deletion, to correct inaccurate information, to opt out of any sale or sharing (we do not sell or share; see Section 6), and to non-discrimination for exercising these rights.
New Zealand Privacy Act 2020
As a New Zealand-based operator, we are bound by the New Zealand Privacy Act 2020. If you are located in New Zealand (or anywhere else), you have the right to request access to personal information we hold about you, and to request correction of that information if it is inaccurate, out of date, incomplete, or misleading. We will respond to such requests within 20 working days as required by the Act.
If you believe we have breached the Privacy Act 2020 and are unsatisfied with our response to your complaint, you have the right to make a complaint to the Office of the Privacy Commissioner (privacy.org.nz).
How to exercise your rights: Email support@mosey.studio. We will respond within 20 working days (or the applicable legal deadline). To request account deletion, include the email address associated with your account. We will delete your profile, subscription record, credit transaction ledger, saved mosaics and their stored files, any feedback linked to your account, and your PostHog person record, except where retention is required for legal, fraud-prevention, tax, accounting, or security obligations. You can also delete your account directly from your account settings.
09 / International Transfers
Mosey Studio operates globally. Your data may be processed in the following regions:
- →Ireland (eu-west-1): Supabase database, auth, and file storage, and our server functions on Vercel. Your account, subscription, usage data, and saved files are stored here.
- →United States: Vercel (hosting), Cloudflare (CDN), PostHog, Stripe, fal.ai, OpenRouter, Google (Gemini and sign-in), Resend, Upstash (rate limiting), Unsplash (image search), a team messaging service (internal notifications).
- →Worldwide: Cloudflare, Vercel and Supabase Edge Functions run on global networks, so your requests (including photos sent to the AI features) may first be handled in a data center near you.
Mosey Studio is based in New Zealand and not established in the EU. GDPR applies to us because we offer this service to individuals in the European Economic Area, and we process that data accordingly.
If you are in the European Economic Area, the United Kingdom or Switzerland, note that the EU adequacy decision for the United States (the EU-US Data Privacy Framework) only covers companies certified under it. For these transfers we rely on:
- →Standard Contractual Clauses in the data processing agreements of Supabase, Stripe, Cloudflare, PostHog, Resend, Upstash and fal.ai.
- →EU-US Data Privacy Framework certification (including the UK and Swiss extensions) for Vercel, Stripe, Cloudflare, PostHog, Resend and Upstash.
- →fal.ai's agreement for OpenRouter and Google, which handle palette requests as fal.ai's sub-processors.
The team messaging service only receives the minimal, redacted notices described in the sub-processor list.
10 / Security
All data in transit is encrypted via HTTPS/TLS. Database access is enforced by Supabase Row-Level Security policies, so you can only read or modify your own account and subscription rows. During normal use, we do not receive or store your photos. If you explicitly save a mosaic, your source photo, custom tile photos, and related assets are stored securely in Supabase Storage on your behalf until deleted. No security measure is 100% infallible; if you discover a vulnerability please disclose it responsibly to support@mosey.studio.
11 / Business Transfer
If Mosey Studio is involved in a merger, acquisition, restructuring, or sale of assets, your information may be transferred as part of that transaction. We will notify you via email or a prominent notice on the service before your data becomes subject to a materially different privacy policy.
12 / Changes to This Policy
We may update this policy as the product evolves. The "Last updated" date at the top of this page reflects the most recent revision. We encourage you to check back periodically.
13 / Contact
Privacy questions, data requests, or concerns: support@mosey.studio. We aim to reply to general questions quickly, and to formal data requests within 20 working days.