dvnt

Privacy policy

Effective date:

This policy explains what data the dvnt apps (the account app and the apps at *.dvnt.app, such as perfect me, Notes, contrée, Billiard, Rubik's and Vault) handle, where it is kept and what you can do about it. The service is run by dvnt. Contact: davidanaton@gmail.com.

In short

1. Your account and sign-in

You sign in with Google. dvnt is invite-only: an account works only if its email is on our allowlist, and access can be limited to some apps or to a period of time.

When you sign in, we store:

Access requests. If you sign in with an email that is not on the allowlist, we store your email, name, picture, the time of the attempt and, if you used an invite link, who invited you and for which app. The administrator is notified so they can approve or delete the request.

2. Google permissions

The sign-in screen asks Google for exactly these scopes:

When Google returns a refresh token at sign-in, we store it encrypted (AES-256-GCM) together with the list of granted scopes. It is used only for the Drive sync feature: to get short-lived Google access tokens when an app syncs with your Drive. If you revoke dvnt's access in your Google account, the stored token stops working and we delete it the next time it is used.

We use Google user data only to provide the features described in this policy. We do not sell it, use it for advertising, or share it with anyone else.

3. Data on your device

By default, what you enter in the apps (habits, goals, journal entries, games and scores, player names, vault items, settings and so on) is stored only in your browser, in IndexedDB or localStorage. It does not leave your device unless you use one of the features below or export it to a file yourself. Notes, and perfect-me's journal when you have Notes, are the exception: they use Cloud storage unless you choose otherwise (see Notes). contrée's nearby play also keeps, on the device only and never synced: the table you host (every hand included), the table you joined, and your copies of nearby games others hosted (see Playing nearby).

4. Google Drive sync (optional)

If you choose Drive storage in an app's settings, that app keeps a copy of its data in the app data folder of your own Google Drive. That copy is stored by Google, not on dvnt servers. You can remove it from your Google Drive settings (manage apps) and revoke dvnt's access at any time in your Google account.

5. contrée: Cloud backup, shared links and TV mode (optional)

Cloud backup. If you choose Cloud storage in contrée, your games (including the @username and picture of the players at each game who have a dvnt account), the player names you entered, your contrée settings, the game in progress, the lessons you marked as done and the bidding systems you made are stored on dvnt servers, linked to your account, so they sync across your devices. You can delete the whole backup in contrée Settings: the games on the device you delete it from are kept there, and your other devices remove their copy the next time they sync, so the deleted data doesn't come back.

Shared game links. When you share a game, anyone with the link can see it without signing in: team names, player names, bids and scores. The page asks search engines not to index it (noindex). A link keeps working until you revoke it, delete the game, or delete your Cloud backup. Apps you paste the link into (for example messaging apps) may fetch its preview. A link shows the game as it is when someone opens it; it does not update live. If you start a rematch of a shared game, the rematch is shared too and the old link shows a link to it, so people who have the old link can see the new game; stop sharing the rematch to end this.

TV mode. A screen can open contrée's TV page without an account; it shows a QR code. When you scan it with your phone, signed in, we store a TV session linked to your account: a random code, a hashed secret only that screen knows, and when it was paired and expires. The screen then shows your game in progress, the next ones included (team names, player names, bids and scores; for the players at the table who have a dvnt account, which can include your friends, their @username and picture), and the bids of the round being played, which your phone sends to our servers while a TV follows you. Anyone who can see the screen sees them. It stops when you stop it from your phone, after 12 hours, or when you delete your Cloud backup; a code nobody scans expires after 15 minutes. TV mode needs Cloud storage.

Online games. When you create or join an online table in contrée, our servers keep the table while it is open: who is at it (account ID, first name, @username and picture), the rules, the team names and colors players choose, each player's chosen teammate, the dealer chip, who pressed Ready, whether the game counts for the rating, and once the game starts every card dealt and played, every bid and the scores. Only the server sees all the hands; each player receives only their own cards and what the table shows. The other players at the table see your first name, picture and @username on the lobby, at the table and in your player card, where they can send you a friend request. When two players at a table have the same first name, the others also see the first letter of each one's last name, taken from their account name ("David A."), or their @username if that isn't enough; that name stays in the recorded game. A table has a 5-character code and a link (/t/<code>): anyone signed in with the code or link can see the lobby's owner and join while it hasn't started; once it has, only its players can open it. When a game ends, the server records it for all players: the creator gets it in their Cloud backup, the others in their shared games, already approved and final (no approval request: pressing Ready in the lobby agrees to the rules and, for a rated table, to the game counting). A game between two teams of dvnt users, with no bot, at a table its owner left rated, is verified at once and counts for the official rating. A player can leave the table once a game is over; it then no longer lists for them. A game ended early by the players, or after 24 hours without activity, is kept as abandoned and never counted. Online play needs Cloud storage.

Playing nearby. contrée can also be played with people around you with no internet, the phones on the same Wi-Fi or on one phone's hotspot. To connect, the host's phone shows a QR code and the guest's phone shows one back; each phone's camera reads the other's. The camera images are processed on the phone to read the code and are never recorded or sent anywhere; the camera runs only while that screen is open. A QR code carries what two phones need to connect: their addresses on the local network, connection keys, a table number and the app's version. Instead of a QR code, the host can send an invite link, and the guest a reply, by any messaging app the players choose: the link and the reply carry the same connection data (in the link's # part, which browsers don't send to our servers), and that app handles them under its own terms. The phones then talk directly, over an encrypted WebRTC connection (DTLS), with no dvnt server and no third-party relay (no STUN or TURN server). Each guest's phone sends the host its account ID, first name, @username and picture (from the account saved on the phone; nothing can check it offline) and its moves. The host's phone runs the table: it knows every hand, and saves the table (every hand included) on the phone after every move, so the game can resume if the app restarts; it deletes it when the host closes the table, or when the game is over. The other players see your first name, picture and @username, as in an online game. When the game ends, it is recorded on the host's phone as the host's game, with each player's account on their seat; once the host is online with Cloud storage, it is shared for approval with the players who are the host's friends, like any game the host scores, and it isn't verified at once. Each guest keeps a summary of the game on their phone only (the 20 latest), removed when the host's copy reaches them.

6. Notes and the perfect-me journal (optional)

Notes is a Markdown notes app. If you have access to it, perfect-me's journal is part of your notes: each day's journal entry (mood, energy, tags, people, goal and your answers to the prompts) is that day's note. Writing @name in a note creates a note for that person in your notes; its properties can hold details you type about them, such as their first and last name, other names and date of birth.

Where they are kept. You choose it once, in Notes or in perfect-me's settings, and both apps follow it; we store that choice with your account. With Cloud (the default), your notes (their names and folders, text and properties) are stored on dvnt servers, linked to your account, with the earlier versions of each note so you can restore one. With Google Drive, they are kept in one file in the app data folder of your own Drive (see Google Drive sync). With This device only, they stay in the browser; the Notes app and perfect-me then each keep their own and don't see each other's. Your notes are only for you: no one else can read them, and they are not encrypted end to end (the server can read them, as it must to sync and keep their history).

7. openGym (gym.dvnt.app)

The gym tracker at gym.dvnt.app is openGym, an open-source app we run unchanged on our servers. It doesn't use your dvnt account: it has its own profiles, and you sign in to it with a passkey (Face ID, Touch ID, fingerprint or a security key). Creating a profile needs an invite code from the administrator.

With a profile, we store on dvnt servers: the profile name you choose, an email address if you add one to sign in with, your passkeys' public keys (never your fingerprint or face), and what you enter to sync it between your devices: routines, workouts and sets, body weight and goals, settings, and the photos or videos you add to your own exercises. Training and body-weight data can say something about your health; only you and the administrator can see them. The administrator can see the list of profiles and each profile's workout history in openGym's admin dashboard. If you turn on notifications, your browser's push subscription is stored as described in Push notifications; if you pair a new device with a code or QR code, we store that link between your devices.

Activity log. openGym records sign-ins, failed sign-in attempts and administrator actions, with the profile and the time, but no IP addresses.

8. Usernames and friends

Your username. When you first sign in, you get a username made from the part of your Google email address before the @ (with a number added if it's already taken). You can change it in the account app (Username tab) once every 30 days. The administrator can also change it, for example to stop impersonation, and every change is logged.

Who can see it. Other dvnt users can find you only by typing your exact username in an app you both use; there is no way to browse or search the list of users, and lookups are rate-limited. A lookup shows your username, first name and picture, never your email address. Apps fetch this profile information from the account service only when a signed-in user needs it, for example to show their friend list.

Friends (per app; today in contrée, which needs Cloud storage). Friendships are separate in each app. When you add a friend, by their username or with their friend link or QR code, we store both account IDs, who asked, and when the request was sent and accepted. Friends see each other's username, full name and picture. A friend request shows only the first name until it is accepted. In contrée, a friend picked for a game gets their first name as a player name, or their first name and last initial ("David A.") when another player has the same first name; that name is part of the game, like any player name. When you start a game signed in, your own seat (South) is filled in with your first name from your account, or your @username, which you can change before starting; friends who see the game see that name.

9. Push notifications (optional)

If you turn on push notifications, we store your browser's push subscription (an endpoint URL and its keys) to send you notifications, for example alerts about new access requests, or in contrée a friend request or its acceptance, an invitation to a table, a game to approve, or a game you approved being over. For an app's notifications we also store which app it is and your language, so the text is in that language. Notifications are delivered through your browser maker's push service (such as Google, Mozilla or Apple). Turning notifications off deletes the subscription.

10. Cookies and local storage

We use three cookies, all needed for sign-in, and all httpOnly (not readable by scripts), Secure (sent only over HTTPS) and SameSite=Lax:

The apps also use localStorage and IndexedDB on your device for your data and preferences. We do not use advertising or tracking cookies.

11. Third parties

We do not use analytics, ads or trackers, and we do not sell or rent your data. The services involved are:

Our servers process technical data such as your IP address (for example to limit abusive request rates) and request logs, only to run and protect the service.

12. How long we keep data

13. Your choices

There is no self-service account deletion yet. To see, correct or delete your account and the data we hold about you, email davidanaton@gmail.com; we will answer within a reasonable time.

14. Security

All traffic uses HTTPS; phones playing nearby talk over encrypted WebRTC (DTLS). Sign-in cookies are httpOnly and Secure, session secrets are stored only as hashes, and Google refresh tokens are encrypted. No system is perfectly secure, but we work to protect your data.

15. Children

dvnt is not directed at children. If you think a child has given us personal data, contact us and we will delete it.

16. Changes

We may update this policy. When we do, we change the effective date at the top of this page.

17. Contact

dvnt: davidanaton@gmail.com