The full story
Every monitoring app reads the chats.
AI companion apps (character chat, roleplay, synthetic partners) are a new kind of screen time for teenagers. They are private, conversational and hard to put down.
Parents mostly want to know two things: how much, and is it going up. Monitoring products answer by reading the conversations. That breaks trust between parent and child, and it creates a store of a minor’s private messages that is a liability from the moment it exists.
Four choices that make reading impossible.
The browser extension only sees the website’s address. It maps the address to a category of app and throws the rest away. It has no permission to read pages on any monitored site, and anyone can confirm that from its manifest in a few seconds.
On iPhone, Apple’s sandbox does the enforcing. Usage data comes from Apple’s Screen Time framework, which runs in a sandbox with no network access. The app never sees exact sessions. What leaves the phone is only “this child crossed this many minutes at this time”.
The data can’t get more detailed later. Everything is stored per child, per day, per kind of app. A future request to “show the actual chats” would need a rebuild, not a settings change.
The teenager gets their own login. They see exactly what their parent sees and can add notes to a day. Products that skip this get worked around within a week.
A shortcut I didn’t take.
The teenager’s login could have been built in a day with the database’s admin key. That key bypasses every row-level security rule, so the codebase would hold one credential able to read every family’s data.
I used locked-down database functions instead, so no such key exists anywhere in the code. The trade-off is written down too: a family code and PIN is not strong proof of identity. Eight wrong attempts lock the code for fifteen minutes, which is what makes it safe enough.