Privacy & Accessibility
Grocery List is a shared household grocery list that updates live for everyone holding the link. It is free, carries no ads, and is made by Sky Wolf Studio.
Where your data goes
The list's title, every item anyone adds, and whether it has been ticked into the cart is kept in Google Firestore, under the Firebase project `sws-apps-9646d`, and mirrored into this browser's IndexedDB offline cache so the list still opens in a supermarket dead zone. Firebase also keeps your signed-in session in this browser, and writes `gl-signin-email` if you sign in by email link. This app also writes one shared key, sws.prefs, which holds your display settings (text size, contrast, theme) so they follow you across Sky Wolf Studio apps. It holds nothing personal and never leaves the device.
Some of it does leave this device, and we would rather say so plainly than bury it. Everything on a list is stored on Google's Firestore servers, because that is the only way the whole household sees the same list. This app therefore does not carry the 'nothing leaves your device' promise the rest of the portfolio makes. Concretely: the list title and description, every item body (capped at 2000 characters) and the author name (capped at 60) are written to Firestore and readable and editable by anyone holding the 6-character share link. The list owner is signed in, anonymously by default, or with Google or an email link if they choose, and Firebase Authentication issues a user id stored alongside each item.
That is the trade this app makes: sharing with other people needs a copy somewhere both of you can reach. Everything else about the promise still holds, no advertising, no analytics, no profile built about you, and nothing sold to anyone.
How to check that for yourself
Open DevTools → Network and load the page: you will see the Firebase SDK fetched from gstatic.com and nothing else. Open a list and you will see requests to firestore.googleapis.com, that is the shared list itself, and plus one call to identitytoolkit.googleapis.com, which is the sign-in that lets the list tell one of you from another. Those two are the only things sent. There is no analytics call: apps/grocery-list/firebase-config.js has no measurementId, so Google Analytics is never initialised.
What we do not do
- No ads and no profile. No account for the people you share a link with: they open it and start using it. Only the person who starts a list signs in, with Google or an email link, so the list has an owner.
- No ads, no analytics, no advertising trackers, no cookies, no fingerprinting.
- No selling, sharing or brokering of anything you type here. There is no data to sell.
- No paywall, no trial, no subscription, no watermark, no export limit.
Permissions
The app asks for write-only clipboard access when you tap Copy link, most browsers show no prompt, and the app cannot read your clipboard, and only at the moment you use the feature that needs it. Your browser asks you, not us, and you can refuse, the rest of the app keeps working.
Who else is involved
- Google Firebase Firestore (firestore.googleapis.com), stores every list and every item.
- Google Firebase Authentication (identitytoolkit.googleapis.com), issues the anonymous or signed-in user id attached to items.
- Google gstatic.com, the Firebase SDK modules are fetched from https://www.gstatic.com/firebasejs/12.17.1/ on the first visit, then cached by the service worker.
- Google Sign-In (accounts.google.com), only if the owner chooses 'Sign in with Google' instead of staying anonymous.
- Stripe, only if you tap the tip jar, which opens buy.stripe.com in a new tab. We never see or store card details.
- Firebase Hosting (Google) serves the app's static files and keeps ordinary short-lived web-server logs such as IP addresses.
Tips
The tip jar links out to a checkout page hosted by the payment provider on their own site. We never see or store card details. Tipping changes nothing in the app, every feature is free either way.
Hosting
The app's files are served by Google's Firebase Hosting, which, like any web host, keeps standard, short-lived server logs such as IP addresses, for security and operations. That log records that a browser fetched a page. It is separate from the shared data described above.
Children
This app is made for adults. It is not directed at children. The one piece of personal information involved is the email address or Google account the person who starts a list signs in with, which is described in "Where your data goes" above. Nothing is used to build a profile.
Accessibility
We aim for WCAG 2.1 AA: labelled fields, keyboard-operable controls that keep their focus when the page redraws, visible focus rings, 44px touch targets that grow with the text-size setting, screen-reader announcements for changes, and colour contrast checked by build-time solver in both light and dark mode. The display panel in the header sets text size, spacing, contrast, reading style and motion, and those settings follow you across all of our apps.
If anything gets in your way, email us and we will fix it: stephenfurpahs@gmail.com.
Changes
If this policy ever changes in a way that affects what happens to your data, the change will appear here and the date below will move.