Last updated: 2026-08-09 ยท 30-Day Reading Challenge v2.0
Your reading data stays in your browser. No account required. No tracking pixels. No cookies. We don't sell data โ we don't even have it. If you enable Supabase sync, you choose where it goes; otherwise everything is localStorage on your device.
readingChallenge30.v3 (+ per-user readingChallenge30.data.*) โ your streaks, minutes, bookshelf summaries, settings, lang/themerc30.analytics โ aggregate counts only: sessions, total minutes, feature uses, lang. Never book titles, notes, names, IP, or device ID.rc30_device_id โ random anonymous device ID for optional cloud sync (not PII)All are localStorage on your device. Clear browser data โ it's gone. Export a backup from Your data โ Export backup (JSON).
Off by default. If you (the host) configure Supabase URL + anon key in Admin โ Settings, the app will upsert your anonymized state JSON to your own Supabase project (reading_progress table) every ~60 s + 5 s debounced. You control RLS policies. No data goes to us.
Host may uncomment one line <script defer data-domain="yourdomain.com" src="https://plausible.io/js/script.js"> โ Plausible is cookieless, GDPR-friendly, no personal data.
Contact messages are stored locally under readingChallenge30.contacts until host enables Formspree/Supabase. If enabled, they go to host's endpoint โ not to us.
Questions? Use the in-app Contact the Creator card or email the host shown on the Support card (ABA KHQR). This is a static PWA โ there is no central server to contact beyond your host's deployment.
Built with โค๏ธ for readers ยท Open source ยท Changelog