Psyched · vruikeliu.github.io

Psyched Privacy Policy

Effective: 21 August 2026
Last updated: 10 November 2026

The short version

This policy covers the Psyched app on iPhone and on Android, and the Psyched pages on our website. Where the two apps differ, the section "If you use the Android app" says how.

What Psyched is

Psyched is a performance psychology tool. You log something you're about to do, rate how bad you expect it to be, then rate how bad it actually was, and the app shows you the gap between the two over time.

It is not a medical service, a mental health service, or therapy. It does not diagnose anything, treat anything, or give clinical advice.

Who is responsible

Psyched is published by Ruike Liu. For anything about your data, write to PsychedSupportTeam@gmail.com.

What stays on your phone

Your events live on your device in the app's own database (Apple's SwiftData on iPhone). That's the real copy. The app reads and writes it whether or not you have an account, and whether or not you have any network connection.

Also stored on your device, in standard app storage:

Companion lines the app has already fetched are held in memory while it is open, so the same screen doesn't ask for the same text twice. They are not written to disk.

Reminder notifications are scheduled locally by iOS. The notification text contains your event title, and it never leaves your device to be delivered.

Like any app's data, all of this is included in your phone's own backup (an iCloud Backup, or a backup to your computer) if you have one switched on. That backup is between you and Apple; we can't see it.

If you turn on iCloud sync

On iPhone, Settings has a "Sync with iCloud" switch. It is off by default, and it has nothing to do with a Psyched account: you can use either, both, or neither.

If you turn it on, your events are copied to your own private iCloud storage, tied to your Apple Account, so they appear on your other Apple devices. That copy includes everything in each event, including the free text you wrote, the same list as under "What happens if you make an account" below. It travels straight between your phone and Apple. It never passes through our servers, we cannot read it, and it is covered by Apple's privacy policy.

Turning the switch off stops the copying. What is already in your iCloud stays there until you delete it, which you can do in the iPhone's Settings, under your name and iCloud, where iCloud storage is managed.

What happens if you make an account

An account is optional. It exists for one reason: so your history survives losing your phone, and so you can sign in on a new one.

When you register, we store:

Once you're signed in, the app syncs the events you log while signed in to our server. Events you logged before making an account, or while signed out, belong to the phone's signed-out profile: they stay on the phone and are never uploaded. A synced event includes everything in it, including the free text you wrote:

We are stating that plainly rather than hiding it behind "content you provide." If you sign in, the sentences you write in Psyched sit in a database we run. If you would rather they never did, don't make an account — the app is fully usable without one and we designed it that way on purpose.

So that somebody can't sit there guessing passwords or usernames, our server keeps three kinds of counter:

Each counter is one row holding the username or the network address, a count, and the time its current window started. Nothing in a row says which account it belongs to. The username counter is deleted when you sign in successfully and when you delete your account. The network-address rows are not deleted on a schedule. A row starts again from one the next time that address trips it, and otherwise stays in the database. So we hold a list of network addresses that have tried to create an account or failed to sign in, each with the time of its latest window. An address that created an account has a row whose time is close to the time that account was created, which means someone with access to our database could often work out which address made which account.

What DeepSeek sees

The companion characters are written by DeepSeek, an AI model provider based in China. Their servers are outside our control, so what we send them matters more than anything else in this policy.

We send DeepSeek only the following, and never anything else:

For App Store privacy disclosure, we conservatively classify that fixed sensation selection as Health data. What DeepSeek is sent is not linked to your username, account, Apple Account, or random install identifier. The copy that syncs with your events, if you have an account, is stored with your account like the rest of the event.

We never send DeepSeek:

You can switch this off. In Settings, under AI, turn off "AI-written companion lines". From then on the app asks for no generated text at all, so nothing from it reaches DeepSeek, and your companion speaks in the lines built into the app and skips its comment on the next-move card. Everything else, including your chart, works exactly the same.

If you downloaded Psyched from the China mainland App Store, the app does not ask for generated companion text at all, so nothing from it reaches DeepSeek. You see the companion lines built into the app instead. The app learns which App Store it came from a moment after its first launch. Until then it goes by your phone's region setting, so a phone set to mainland China is treated as a China mainland download from the first second, and a phone set to any other region may ask for a generated line before the App Store has answered.

Requests for generated text go to our server, which talks to DeepSeek. DeepSeek never receives your network address or anything else about your phone. Our server builds each prompt from scratch out of the items listed above: every choice must match a fixed list and every number must be in range, or the request is refused, and anything else in a request is ignored. The code that handles accounts and synced events and the code that builds prompts are separate parts of the server that do not call each other, so there is no path from the synced-events database to a prompt. That separation is kept by how the code is organised and reviewed; no automated check enforces it yet.

Everything the model writes back is checked by our own code before you see it, and anything that reads as clinical language, invents a number we didn't supply, or breaks character is thrown away and replaced with a line built into the app.

Where your data is stored

If you have an account, your data sits in Cloudflare D1, a hosted SQLite database, in the Western North America (wnam) region, reached through a Cloudflare Worker. Cloudflare operates the infrastructure and can see the network requests that reach it, including your IP address, in the ordinary way any web host does. We don't keep our own logs of your requests. The one place our own database records a network address is the sign-in and sign-up counters described under "What happens if you make an account."

Requests for companion lines go through the same Cloudflare Worker whether or not you have an account. To cap how many lines one install can ask for in a day, the Worker keeps a counter in Cloudflare KV under your random install identifier and the date. It holds a number, nothing about what you asked for, and expires after two days.

Generated lines are cached in Cloudflare KV for 30 days so the same situation doesn't have to be written twice. A cached line is stored under the inputs that produced it and never under anything identifying you: the short companion lines under the plain combination (companion, language, moment, event type, rating bands), and the Insights readings under a hash of the figures that produced them.

If you downloaded Psyched from the China mainland App Store, new accounts are made on a server we run in mainland China, hosted by Alibaba Cloud, instead of on Cloudflare. Your account, your synced events, and the sign-in counters described above are stored there, in mainland China, and not on Cloudflare. Alibaba Cloud operates the infrastructure and can see the network requests that reach it, the same way Cloudflare can for everyone else. We don't keep logs of your requests there either: the web server's request log is switched off. Its error log is on, and a request that fails can leave a line there with the network address it came from. If you made your account from the China mainland App Store before version 1.2, when accounts there could only be made on Cloudflare, the app moves it — your username, password, and synced events — to the mainland China server the next time it can reach Cloudflare, and then deletes it from Cloudflare. Nothing about signing in changes. Otherwise an account stays on the server where it was made.

Apple sees whatever it normally sees when you download an app: your Apple Account and purchase records. That's between you and Apple, and we don't get names or email addresses from it.

Staying signed in

Signing in gives your phone a session token, which is 32 random bytes. The server never stores the token itself, only a SHA-256 hash of it, so a leak of our database would not hand anyone a working login.

A session expires 90 days after you sign in. After that the app asks you to sign in again. Signing out deletes that one session. Using your recovery code invalidates every session on every device. A session that simply expires stops working, but its record (the hash, your account ID, and its start and end times) stays in the database until you reset your password with your recovery code or delete your account.

If you lose your password

There is no password reset by email, because we never collect an email. There is no SMS reset, because we never collect a phone number. Instead, the app resets your password with the recovery code in your iCloud Keychain: tap "Forgot password?" on any device that keychain reaches and choose a new password. Each reset replaces the code with a new one, saved the same way. Accounts made before the app saved codes to iCloud Keychain were shown the code once at signup, and that code still works.

If you lose your password and your recovery code, your account cannot be recovered by anyone, including us. That happens if your devices with the code are all gone and iCloud Keychain was off, or if you delete it from your keychain. We cannot verify who you are, so we will not hand over an account to someone who asks nicely. This is a deliberate design choice and the cost of not collecting your contact details.

Your history is still on your phone in that situation. It's the server copy and the username that are gone.

Deleting your account

Settings has a delete option. It asks for your password and asks you to confirm twice, and then:

Events you logged while signed out, your companion and language choices, and the random install identifier stay on the phone. If "Sync with iCloud" is on, the deletion of those events carries through to the copy in your iCloud. The network-address counters are not tied to your account and are not removed.

This is a hard delete, not a "deactivated" flag we could restore. It is not reversible and we cannot get it back for you. If you want to keep your history, save it somewhere else first.

Cloudflare's own infrastructure backups may hold a copy for a short period before rolling off. We don't read them and can't selectively edit them. For accounts on our mainland China server, our nightly backups and Alibaba Cloud disk snapshots may hold a copy for up to 14 days before they are deleted.

Links to other services

The Toolkit tab links to research papers, and its Get support page lists helplines and websites run by other organisations. Tapping one opens Phone, Messages, WhatsApp or your browser. Psyched sends nothing about you when you do, and has no arrangement with any of them; once you call, text, message or visit, that organisation's own privacy policy applies (and WhatsApp's, for a WhatsApp link). Nothing on these pages reads your events, and nothing on them is generated by an AI while you use the app: the text ships with the app, and nothing from these pages is sent to an AI provider.

What we don't do

The only third parties in the picture are Apple (app distribution, and iCloud if you use iCloud sync or iCloud Keychain), Cloudflare (hosting), Alibaba Cloud (hosting, for accounts made from the China mainland App Store), and DeepSeek (companion text, with the strict limits described above). On Android, Google takes Apple's place for backup and for saving your recovery code. Our website is served by GitHub, and one page on it loads fonts from Google.

If you use the Android app

Psyched for Android is a separate download from our website. It follows everything in this policy, with these differences:

The website

The Psyched pages at vruikeliu.github.io (the app's page, the support page, this policy, and the Terms) are plain pages hosted on GitHub Pages. They set no cookies and have no analytics, no visit counter, and no trackers. GitHub, as the host, sees the ordinary request your browser makes, including your IP address, under GitHub's own privacy statement. The app's page loads its fonts from Google Fonts, so Google sees that request too. The website never receives anything from the app.

If you are under 18

A lot of people using Psyched are students, and many of them are under 18. Pretending otherwise would be dishonest, so here's how that works.

If you are in a place with specific children's privacy rules, note that we designed around them by collecting as little as possible rather than by age-gating you out.

What you can do

How long we keep things

While your account exists, we keep your events so sync works. Sessions stop working after 90 days; an expired session's record is removed when you reset your password with your recovery code or delete your account. The daily counter for companion-line requests expires after two days. The sign-in and sign-up counters are kept as described under "What happens if you make an account": the username one is deleted when you sign in or delete your account, and the network-address ones are not deleted on a schedule. Cached companion lines expire after 30 days and contain no identifying data. When you delete your account, your events, your sessions, your user record and your username counter go at once.

Security, honestly

We hash passwords with PBKDF2 at 100,000 iterations, compare secrets in constant time, store only hashes of session tokens, and talk to the server over HTTPS only. Account deletion is written as explicit deletes inside a single transaction rather than relying on database cascade rules to fire.

No system is perfect, and this one is built by a small team. If you find a security problem, please write to PsychedSupportTeam@gmail.com before telling anyone else, and we'll fix it.

Changes to this policy

If we change what we collect or who we send it to, we'll update this page and the "Last updated" date, and the app will point you at it. If a change is significant — new third party, new category of data — we'll say so in the app rather than quietly editing the page.

Questions

Write to PsychedSupportTeam@gmail.com. This policy is governed by the law of the Commonwealth of Massachusetts, United States.