The short version
In the default Google Sheet mode, your diary never touches our servers. Everything you log is written straight to a Google Sheet that you own, through a Google Apps Script Web App that you deploy into your own Google account. We — the people who wrote this app — never receive, see, or store your diary. In this mode we can't, because it never passes through anything we run.
The web app can also offer a second, opt-in choice: keeping your diary in Dhruvanta cloud instead. It appears in Settings only once Dhruvanta has switched it on; until then you will not see it. If you choose that, your diary does pass through, and is stored by, Dhruvanta — see "If you choose Dhruvanta cloud" below. Nothing about it is turned on unless you sign in and choose it yourself.
Both the web app and the Android app offer one optional extra: signing in with a Dhruvanta account, so your Apps Script setup can be backed up and restored on a new device. If you never sign in, both apps work exactly the same way — nothing about your diary changes. If you do sign in, some things are stored on servers Dhruvanta runs — see the "Signing in with Dhruvanta" and "Backing up your Apps Script credentials" sections below for exactly what.
Where your data goes (Google Sheet mode)
In Google Sheet mode, every entry you create is sent directly from your device (browser or Android app) to the Apps Script Web App URL you configured in Settings. That script runs inside your own Google account and writes to your own Google Sheet. Reads work the same way in reverse. In this mode this app is only a client for a backend you host yourself — that is true whether or not you've signed in to Dhruvanta, in the browser or on Android (one exception, in the "backing up" section below, covers how that address can land on a new device).
What's stored on your device
Your Apps Script URL and API key are the credentials this app uses to reach your diary, and they are stored locally — in this browser's localStorage on the web, or in Android's DataStore on the Android app. They are sent only to the Apps Script URL you entered, never anywhere else — except that if you turn on the optional backup feature, in either app, this same URL and key are also sent (encrypted) to Dhruvanta; see below.
Android app: offline queue
The Android app queues entries you log while offline in a local database on your phone, and syncs them to your own Apps Script backend once you're back online. Until that sync happens, those entries exist only on your device.
Signing in with Dhruvanta (optional, web and Android)
Both apps let you optionally sign in with a Dhruvanta account. This is entirely optional — each app works identically whether you sign in or not, and your diary setup never changes because of it.
If you sign in, this reaches identity.dhruvantasystems.net, a server Dhruvanta runs: the email and password you type into the sign-in form, some machine-generated technical values that are a normal part of signing in securely, and afterwards a short-lived access token and (when needed) a refresh token. As with any request to any server, your IP address and app version are visible to it too.
On the web, the two apps differ in how your password gets there. The Android app talks to identity.dhruvantasystems.net directly. In the browser, the email and password you type are sent first to Daybook's own server — the same Vercel deployment serving you this page — which then forwards them toidentity.dhruvantasystems.net and keeps the resulting tokens server-side, so that your browser never holds them. Your password is used once, for that exchange, and is never stored or logged by either server. This is a deliberate design (it keeps tokens out of the browser, where scripts could read them), but it does mean the browser sign-in passes your password through Daybook's own server, and you should know that rather than have to infer it.
Once you're signed in, both apps contact identity.dhruvantasystems.net again each time you open them, to keep your session current. On the web, that check happens server-side on Daybook's deployment, on every page load.
What's kept on your device differs too. On Android it is only your refresh token, sealed with a key generated by your phone's own Android Keystore (a key that never leaves your device), and excluded from Android's backup and device-transfer features. In the browser, no token is stored at all — not in localStorage, not in sessionStorage; there is only the session cookie described under "Cookies" below, which your browser cannot read and which is only meaningful to Daybook's own server.
Backing up your Apps Script credentials (optional, web and Android)
If you're signed in, in either app, you can separately choose to back up your Apps Script URL and API key with Dhruvanta, so a new device can restore them. This is a second, distinct opt-in — signing in on its own does not do this.
If you turn it on, this leaves your device and goes to a Dhruvanta-operated sync service: your Apps Script URL and API key, encrypted; an id for the encryption key that was used; and a short label so you can tell which device last updated the backup — on Android that is your phone's manufacturer and model, like "Google Pixel 8", and in the browser it is a description of the browser and operating system, like "Chrome on Windows". Neither is a device identifier. Dhruvanta's server also keeps a timestamp, a version number, and a record of when this happened, the same as any account feature would.
This is encrypted, but Dhruvanta can decrypt it. The encryption key is issued by Dhruvanta's own server, which also stores the encrypted copy — there is no passphrase or user-held secret that would stop Dhruvanta from reading it, by design, so a second device can restore your setup just by signing in. What the encryption does protect against: someone who obtains a copy of the sync database alone, without Dhruvanta's key, cannot read it. This is not end-to-end encryption, and we won't describe it as more private than that.
One consequence worth knowing: your diary entries always go only to the Apps Script address held in this app's settings — but if you sign in on a new device and restore from this backup, it's Dhruvanta's server that supplies that address, not you retyping it. Normally that's the same address you set up yourself. Because it is not, a restored address is never adopted on its own: both apps show it to you and require you to confirm it before anything is saved, and an address that could not be a real Apps Script deployment is refused outright.
If you choose Dhruvanta cloud (optional, web app only)
Everything in this section applies only if you sign in and then choose "Dhruvanta cloud" under "Where your diary is stored" in Settings. If you do not, none of it happens and the rest of this policy is unchanged. The Android app does not offer this.
Your diary is then stored by Dhruvanta, in Microsoft 365. Each entry and routine you save is sent from your browser to Daybook's own server on Vercel, which passes it on to a Dhruvanta service, which stores it in Dhruvanta's Microsoft 365 (SharePoint) storage, in a folder named with a coded form of your Dhruvanta account id (a keyed hash), not the id itself. Reading your diary goes the same way back. Your Apps Script URL and API key are not sent for this; the diary content does pass through Vercel's servers on the way, which is different from Google Sheet mode.
Dhruvanta can read it. This is not end-to-end encrypted, and your diary is not encrypted with a key only you hold. What Dhruvanta's own support tools show is limited to dates and sizes — when a diary was created, how many entries it has, how big the file is — not what you wrote. That is how the support tools are built; it is not a technical barrier that stops everyone at Dhruvanta who has access to the storage itself.
Start fresh keeps your old copy. It begins a new, empty diary and archives the previous one. The archived diary stays in storage, with no time limit, until you use Delete everything. You cannot open it in Daybook. Dhruvanta support restores an archived diary if you ask; that is our policy rather than a technical lock. A restore switches which diary is active, so the diary you were using at that point is archived instead.
Delete everything schedules erasure after 14 days. When you confirm, every diary of yours, archived or current, and all of its entries are scheduled to be erased on or after the date shown in Settings, 14 days later. You can cancel until then. Your diary is stored in Microsoft 365, and Microsoft's own backup and retention may hold copies for a limited time after we erase it; we do not control that. If an erasure cannot complete, we keep retrying it.
What Dhruvanta keeps after you delete. A coded form of your Dhruvanta account id (the same keyed hash, not the id itself); a history of actions on your cloud diary (turning it on, starting fresh, deletion requested or cancelled, and any support restore, with its ticket reference); and service logs. Microsoft's own file activity log also records that a folder with that coded name existed. None of that contains your diary entries.
Deleting your Dhruvanta account does not delete your cloud diary. They are separate. To erase the diary, sign in and use "Delete everything" in Settings, before or after you ask for the account to be deleted (see the account-deletion page).
Switching does not move your entries. Choosing Dhruvanta cloud shows only what your cloud diary already holds (nothing, the first time); your Google Sheet is left exactly as it was, and switching back returns you to it. Your Sheet is never changed or deleted by anything in this section.
Analytics and tracking: none
There is no analytics, no telemetry, no advertising, and no third-party tracker in this app. The web app ships with exactly four production dependencies — Next.js, React, and React DOM, plus @dhruvanta/bff-broker, the library that manages the sign-in session cookie described below — and nothing that reports usage back to us or anyone else. The optional sign-in and backup features (above) don't add any analytics, telemetry, crash reporting, or advertising SDK either, in either app — the only network calls they make are the ones described in those sections.
Cookies (web app)
If you never sign in, the web app sets no cookies at all. If you do sign in, it sets one session cookie — holding your Dhruvanta tokens in encrypted form, so the tokens never sit in the browser where a script could read them. (When that encrypted value is too long for a single cookie it is split across a few numbered parts of the same name; that is one session, not several cookies.) It is marked HttpOnly (JavaScript in your browser cannot read it), Secure, and SameSite=Lax; it is scoped to the whole site (Path=/) and set to expire after 30 days. It is not an advertising or analytics cookie, it is not shared with anyone, and signing out clears it.
Hosting
The web app is served by Vercel. Its pages and assets are static files, but four routes run as server functions on Vercel: the one that handles signing in and holds your session cookie, the one that talks to the credential-backup service on your behalf, and two that carry your diary and its management requests to Dhruvanta cloud (used only if you choose Dhruvanta cloud). As with any web host, Vercel's CDN necessarily processes request metadata (such as your IP address and browser user agent) to deliver the page to you — that's true of loading any website.
We add no analytics or tracking of our own. We should be precise about one thing that does not cover, though. Every page load asks the sign-in function whether you have a session — for a guest the answer is simply "no", but the function still runs, and Vercel records an operational log entry for each invocation. If you are signed in, those entries are tied to your session, which amounts to a request-by-request record of your use of the app. That is Vercel's ordinary platform logging rather than something we collect, query, or use, and it contains no diary content — but it exists, and it did not before this feature.
In Google Sheet mode your diary content never reaches Vercel, because it goes straight from your browser to your own Apps Script deployment. In Dhruvanta cloud mode it does pass through Vercel's server functions on its way to Dhruvanta. Daybook's own code passes it on without storing it, but Vercel processes the request as any host does.
Offline caching (web app)
The web app installs a small service worker so it opens even when you're offline. It caches only the app shell — the page framework, static assets, and icons — never your diary data or any response from your Apps Script backend or from Dhruvanta cloud. Requests to your backend are explicitly excluded from the cache and always go straight to the network.
Deleting your data
In Google Sheet mode your diary lives entirely in your own Google Sheet, so you delete it the same way you'd delete any spreadsheet data: remove the rows, or delete the Sheet itself. In that mode we have no copy of your diary to delete, because we never had one. If you use Dhruvanta cloud, use "Delete everything" in Settings (see "If you choose Dhruvanta cloud" above).
If you signed in and backed up your Apps Script credentials, you can delete that backup from Dhruvanta's server yourself: the button is called "Remove synced copy" in the Android app and "Remove from Dhruvanta" in the web app, and both do the same thing — they delete the backup and leave this device's own settings alone. Two things worth knowing: it's only reachable while you're signed in, and neither signing out, uninstalling the app, nor clearing your browser removes it — a backup you made stays on Dhruvanta's server until you sign back in and remove it yourself. There is currently no way to delete a Dhruvanta account outright — see Delete your account for how to remove a synced backup yourself right now, and how to request deletion of the account itself.
Changes to this policy
If this policy changes, we'll update this page and the date at the top.
Contact
Questions about this policy or the app: jayashankar.pjs@gmail.com.