FAQ
Short answers. Longer explanations are linked where they exist.
What is IsotopeAI? #
A study platform for JEE, NEET and Board students — focus timer, tasks, syllabus tracking, exam analytics and study groups. It runs as a Node server on your own device and stores data in a Supabase project you create.
Is it free? #
Yes. MIT licensed, no subscription, no paid tier. Supabase has a free tier that is sufficient for personal use. See License.
Is my data sent to you? #
No. There is no IsotopeAI server. The app talks to a process on your machine, which talks to your Supabase project. There is no telemetry and no analytics. See Privacy.
Does it work offline? #
Mostly. A service worker caches the app shell, so it opens and your local data is available. Anything requiring the cloud — login, sync, community, leaderboards — needs a connection.
Do I need Supabase at all? #
To sign in, sync or use community features, yes. A fresh install ships pointing at a shared demo project so you can try it immediately, but you should create your own before storing anything real. See Supabase setup.
Can I sign in with Google? #
Yes, but it needs setting up first and the button is hidden until you do. Google will not accept http://127.0.0.1:3000 as an authorised origin, so an unconfigured button would fail on click — server.mjs removes it rather than showing something broken.
Enabling it means creating an OAuth client in Google Cloud, pointing its redirect URI at your Supabase callback (not your local address), adding your loopback origin to Supabase's redirect list, and then removing the hiding function. The walk-through is in Supabase setup.
Worth saying plainly: email sign-in is not the lesser option. It needs no third-party client, no consent screen, no redirect list to maintain, and it keeps working when your device's IP changes. Google sign-in saves you one password at the cost of a configuration surface that fails quietly.
Can I use it on more than one device? #
Yes. Each device runs its own server and signs in to the same Supabase project. Sync reconciles them, resolving conflicts by richness before recency so a fresh install cannot overwrite existing progress.
Does it work on Android? #
Yes, via Termux — a first-class target with its own installer and home-screen shortcuts. Note that Android kills background processes, so acquire a wake lock and disable battery optimisation for Termux.
Is there an iOS version? #
Not currently. iOS does not permit a general-purpose local server the way Termux does on Android. You can reach a server running on another machine from an iOS browser on the same network.
Why Node with no dependencies? #
package.json lists zero dependencies by design. Nothing to audit, no transitive breakage, no build toolchain, and install works on a phone. Everything the server needs is in the standard library.
Why does the server rewrite the frontend? #
The shipped bundles are pre-built and minified. The local server patches them as they are served to fix upstream crashes, neutralise a demo-data gate, and add features such as group chat. Files on disk are never modified. See Architecture.
How do I update? #
isotope update, or the in-app Update button when the browser is on the same machine. It runs git pull, so commit local changes first — otherwise they are stashed.
How do I back up everything? #
./backup.sh backup produces a verified tarball containing schema, all tables, auth users and storage. ./backup.sh restore <file> applies it to any project. See Sync & backup.
Can I move to a different Supabase project? #
Yes — that is what restore is for. Back up the old project, then restore into the new one with its keys. Verification runs before .env is touched, so a failed migration cannot leave you pointed at a half-populated database.
Do I need admin mode? #
No. It is owner tooling for schema verification, SQL patching and backup repair. Normal use needs only SUPABASE_URL and SUPABASE_ANON_KEY. See Admin console.
Where does the service-role key go? #
In .env, read only by server handlers. It is never injected into a page and never sent to the browser. Only needed for admin mode and startup backfills.
Is my data protected from other users? #
Row-level security is enabled on all 42 tables with 153 policies. Reads and writes from the browser are filtered by policy using the caller’s own JWT. Group content is membership-gated through SECURITY DEFINER helpers. See Database.
Can I contribute? #
Yes. See Contributing for repository layout, the CI gates and how to verify a change locally.
I found a bug #
Open an issue on GitHub. Include output from isotope doctor and the last 40 lines of ~/.isotope/logs/server.log — secrets are redacted by isotope logs.