KITY privacy policy
The short version
- KITY has no accounts and no ads.
- KITY’s server keeps a small record for your device only while the morning story is on. It holds a push token, your time zone and three facts about the morning story, and KITY deletes it when you turn the story off.
- KITY uses Firebase Analytics, a Google service, to see how the app is used, but only if you agree. KITY asks once, in your first visit, and sends nothing to Firebase until you say yes. You can turn it off at any time in Settings. KITY logs eight events, and Firebase records more by itself, such as your phone’s make and model and an approximate location. It uses no advertising ID.
- If you report a story, KITY’s own server records only which story it was, and a report is logged in Firebase with the install ID. Your phone keeps its own list of the stories you reported.
What KITY stores
KITY’s server keeps a record for your device, and only while the morning story is on. It holds these five facts:
- Push token
- A code that Apple’s push service gives your device so KITY can send it notifications. It isn’t your name, your Apple ID or your phone number.
Stored as
apns_token - Time zone
- For example, America/Chicago. KITY uses it to send your story at 8 a.m. your time.
Stored as
timezone - Morning story on
- Whether the morning story is on. KITY keeps the record only while it is, so this always says on.
Stored as
push_enabled - Date of the last story sent
- The date KITY last sent a morning story to your device, so you get one a day and not two.
Stored as
last_pushed_on - When your device registered
- The date and time your device registered for the morning story. Turn the story off and on again and your device registers again, with a new date.
Stored as
created_at
That is the whole record. KITY has no name, email address, Apple ID, phone number or advertising ID for you. KITY never asks for your location, but two things are an approximate location all the same: the time zone in this record, which is a whole region, and the area that Firebase works out from your phone’s network address (see Analytics).
The app’s public key can add, update or delete a record, but it can’t read any.
The rest of KITY’s database holds stories, the outlets they come from, which story was picked as the morning story on which day, and the report counts described below. None of it identifies a reader.
You can check this yourself. KITY’s code is public on GitHub, and the database is defined by the files in this folder:
backend/supabase/migrations
How long KITY keeps it
The record exists only while the morning story is on.
- Turn the morning story off in Settings and KITY deletes the record right away. Turn it on again and KITY makes a new one.
- Turn off KITY’s notifications in iOS Settings and iOS stops showing them at once. The next time you open KITY, it sees that notifications are off and deletes the record. Allow notifications again and, if the morning story is still on in KITY, the app registers your device again the next time you open KITY.
- KITY also deletes a record when Apple reports that its push token no longer works, for example because you deleted the app. KITY only learns this when it tries to send a story.
There is one gap. If you turn off notifications in iOS and never open KITY again, KITY can’t see that. The record stays until Apple reports the push token dead, and until then KITY keeps sending stories that iOS doesn’t show.
When you report a story
When you tap This isn’t good news, the app sends KITY’s server one thing: the story’s ID. It sends KITY’s server nothing that identifies you, such as your push token or your time zone. Like every request the app makes, a report can appear in the standard logs described under Other services involved.
KITY’s own server records only which story it was. It keeps one row for each story that has been reported, with these five facts about the story:
- The story that was reported
- Which story the reports are about.
Stored as
article_id - How many reports
- How many times readers have reported the story.
Stored as
report_count - First report
- The date and time of the first report.
Stored as
first_reported_at - Latest report
- The date and time of the latest report.
Stored as
last_reported_at - Reviewed
- Whether we have reviewed the reports and kept the story.
Stored as
reviewed
Nothing in the row says who sent a report. A new report on the same story adds one to its count. KITY deletes the row along with the story, 90 days after the story is published. We keep a story we take down, and its row, as a record.
A report is logged in Firebase with the install ID, together with its topic and outlet (see Analytics). So in Firebase, unlike on KITY’s server, a report is tied to your install.
Your phone keeps its own list of the stories you reported, with the date of each, so they stay hidden for you. The list is kept on your phone and in its backups, and is never sent to KITY. Your phone drops each entry after 90 days.
The story is hidden for you only. Other readers still see it until we have reviewed the report. If it breaks the rules, we remove it for everyone.
Analytics
KITY uses Firebase Analytics to see how the app is used, for example whether readers come back and which topics they open, but only if you agree. Firebase is a Google service, and once you agree, Google receives the events and details that this section lists: those KITY logs, and those Firebase records by itself. Google’s privacy information for Firebase explains how Firebase handles data. For Analytics in particular, see Google’s page on how it uses information from sites and apps that use its services.
KITY sends nothing to Firebase until you agree. In your first visit, a card among the stories asks whether you want to share how you use KITY, with two answers of the same weight: Share usage data and Don’t share. Until you say yes, Firebase isn’t even started on your phone. If you say no, or never answer, it stays off, and KITY doesn’t ask again.
You can change your mind at any time. In Settings, the Share usage data switch turns analytics on or off, and turning it off stops KITY from sending anything more to Firebase. What you agreed to share is what this section lists.
Once you have agreed, Firebase records some events by itself, whatever KITY logs:
- The first open
- Each visit
- Time spent in the app
- When KITY is updated
- When iOS is updated
- Screen views: every screen a reader moves to
With every visit and event, KITY’s own included, Firebase also records:
- Its own random install ID
- The time
- The phone’s make, model and type
- The iOS version and KITY’s version
- The phone’s language
- The store KITY came from
- When KITY was first opened
- An approximate location (country, region and city), worked out from the phone’s network address. It isn’t GPS, and KITY never asks for location.
On top of that, KITY adds eight events and no others. A story’s topic is the subject it is filed under, such as Animals, and its outlet is the publisher it comes from.
- A reader opens a story’s sheet
- Sent with it: its topic, its outlet, and whether it came from the feed or the morning story.
Logged as
story_openDetailstopicoutletopened_from - A reader taps “Read the full story” on a story
- Sent with it: its topic and outlet.
Logged as
full_story_openDetailstopicoutlet - A reader opens a tab
- Sent with it: the tab, such as For You or Animals.
Logged as
tab_openDetailstab - A reader switches between Positivity and Time
- Sent with it: the new order.
Logged as
sort_changeDetailsorder - A reader turns the morning story on or off
- Sent with it: on or off.
Logged as
morning_story_setDetailsstate - A reader opens the 8 a.m. notification
- Sent with it: none of its own.
Logged as
morning_story_openDetails none - A reader taps “This isn’t good news” on a story
- Sent with it: its topic and outlet.
Logged as
report_sentDetailstopicoutlet - A reader reaches the end of a topic, or of everything
- Sent with it: which one.
Logged as
feed_endDetailstab
KITY never logs:
- Headlines or story text
- The phone’s push token
- Names, emails or accounts (KITY has none)
- Any ID that follows a reader across apps
KITY sets Firebase up this way:
- No advertising ID
- KITY uses the version of Firebase Analytics that can’t read it, so iOS never asks you “Allow tracking?”.
- Ad features off
- Ad personalization and Google signals stay off.
- No vendor ID
- The iPhone’s per-company ID isn’t read. Each install is counted by Firebase’s own random install ID.
- Detail kept 14 months
- This is Firebase’s data-retention setting for event-level detail. Firebase’s standard reports cover longer trends either way.
KITY also sets Firebase up this way:
- Two more ad settings off
- Firebase has two consent settings for ads, for ad storage and for ad user data.
- Ad-network registration off
- KITY doesn’t register the app with an ad network.
- Firebase’s notification proxy off
- Firebase normally puts itself in front of the app’s code for notifications and links, so it can credit app opens to ad campaigns. KITY has no campaigns, and the morning story’s own code runs there.
Turning off Share usage data, or deleting the app, stops KITY from sending anything more. What Firebase has already received stays with it until it is deleted.
Analytics ID. Once you have agreed at least once, Settings shows your analytics ID under the switch: Firebase’s random install ID for your phone. Tap it to copy it. It stays there after you turn the switch off, because the data already sent is still tied to it.
To ask for the analytics data of your phone to be deleted, email southpawlabsteam@gmail.com with the analytics ID shown in Settings. KITY then asks Google to delete the data tied to that ID. Without the ID, KITY can’t tell which data is yours.
What KITY doesn’t do
- No accounts. There is nothing to sign in to.
- No ads, and no advertising ID.
- KITY doesn’t sell this information or share it for advertising.
On your phone
The app keeps your choices, such as the feed order you picked, and a copy of the last stories it loaded, so it opens quickly and works offline. It also keeps the list of stories you reported. These are kept on your phone, not on KITY’s server. Like other app data, they can also be in your phone’s backups. Deleting the app removes them from your phone.
Other services involved
- Supabase hosts KITY’s server and database. Like any host, it keeps standard technical logs of requests, which can include IP addresses, under its own privacy policy. KITY’s database doesn’t store IP addresses, and KITY doesn’t use these logs to track readers.
- Apple delivers the morning story. If you turn it on, Apple’s push service receives your push token and the story’s headline and one-line summary. Apple also gives KITY’s developer aggregate App Store statistics, such as download counts, and crash reports from people who chose to share them with developers. KITY adds no software of its own to collect these.
- Google provides Firebase Analytics and, once you agree to share usage data, receives the events and details that the Analytics section above lists. Google’s privacy information for Firebase explains how it handles data.
- Anthropic makes Claude, the AI model KITY uses to check stories and write summaries. Claude receives the publisher’s text and never anything about readers.
- Publishers see your visit only if you open one of their stories, or open an outlet’s homepage from Sources in Settings. The feed shows KITY’s own art, not publishers’ photos, so your phone contacts a publisher only then. The page opens in a Safari view inside KITY. The publisher’s privacy policy applies there, and KITY can’t see what you do on it.
- Cloudflare hosts this website. KITY adds no cookies or scripts to these pages, and doesn’t count visits to them. Cloudflare may log visits under its own privacy policy.
Google and Supabase handle this information for KITY under written agreements that require them to keep it secure and confidential and to use it only to provide their services. That is the protection this policy describes and Apple’s App Store rules require. The morning story’s push carries only a story’s public headline and summary, and nothing about you.
Your choices and requests
KITY has no accounts, so there is nothing to sign in to, review or correct. You can turn the morning story off at any time in Settings, and KITY deletes its record for your device right away.
To ask a privacy question, or to ask for something to be deleted, email southpawlabsteam@gmail.com. The Analytics section says how to ask for analytics data to be deleted.
Following you across other apps and sites
KITY doesn’t follow you across other companies’ apps or websites. It has turned off the Firebase settings that link activity across apps for advertising, as the Analytics section lists. So KITY has nothing to switch off when a browser sends a signal asking not to be followed, and the app doesn’t look for one.
When you open a publisher’s page from KITY, that page is the publisher’s own. The publisher, and the advertising and analytics services on its page, may collect information about what you do there over time and across websites. KITY can’t see this and doesn’t control it.
Children
KITY is for a general audience and isn’t directed to children under 13. It has no accounts and doesn’t ask anyone’s age. KITY doesn’t knowingly collect personal information from children under 13. If you believe a child under 13 has used KITY, email southpawlabsteam@gmail.com.
Where KITY is available
KITY is for readers in the United States and is offered in the U.S. App Store only. If KITY comes to other regions, such as Europe, this policy will be reviewed first.
Changes to this policy
If what KITY stores or logs changes, this page changes with it, and the date at the top moves. KITY has no way to email you, so this page is where a change is announced.
Contact
Questions about your privacy? Email southpawlabsteam@gmail.com.