From c17b73b9a78bb7bd4b8693f74c1e50c244fb6a2d Mon Sep 17 00:00:00 2001 From: DevBehindYou Date: Mon, 28 Sep 2026 19:38:26 +0530 Subject: [PATCH] Support page (Patreon, early Atomic Coins) and a New accounts audience MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - /support-atomic-notes: support Atomic Notes on Patreon at any amount, send your Atomic Notes account email in a Patreon message, and the developer sends Atomic Coins by hand as an early-supporter reward. Four steps, an "exact email" warning, what coins do, and honest notes (Patreon handles payment, memberships renew monthly until cancelled, rewards are sent by hand). - Support link in the nav and footer, a line under the energy rules, the sitemap and llms.txt. PATREON_URL lives in content.ts. - Controller: "New accounts — created from now on" audience. Publishing to it says every account created from now on will see it. - Steps: the arrow badges are hidden on phones again (a specificity bug). Co-Authored-By: Claude Opus 5.5 --- public/llms.txt | 3 +- src/app/controller/page.tsx | 10 +- src/app/globals.css | 57 +++++++++- src/app/page.tsx | 3 +- src/app/sitemap.ts | 1 + src/app/support-atomic-notes/page.tsx | 148 ++++++++++++++++++++++++++ src/components/SiteFooter.tsx | 1 + src/components/SiteNav.tsx | 5 +- src/lib/content.ts | 3 + 9 files changed, 226 insertions(+), 5 deletions(-) create mode 100644 src/app/support-atomic-notes/page.tsx diff --git a/public/llms.txt b/public/llms.txt index 45a26a6..f1ea710 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -6,7 +6,7 @@ Key facts: - Storage: on-device first (Hive). Sync writes one .atomic file per note to the user's Google Drive, using the drive.file scope (the app sees only files it created). - Server: stores metadata only (note ids, pinned and deleted flags, timestamps, Drive file ids). It never stores note titles or text. With the vault off, note text passes through it in transit to Drive. -- Price: free. Every account holds 30 notes. Cloud sync uses Atomic Energy: +20 every 24 hours, cap 120, standard sync 5 (at most once an hour), instant sync 10, syncs with nothing to upload are free. 1 Atomic Coin = 40 energy. New accounts get 5 coins. Coin purchases are not available yet. +- Price: free. Every account holds 30 notes. Cloud sync uses Atomic Energy: +20 every 24 hours, cap 120, standard sync 5 (at most once an hour), instant sync 10, syncs with nothing to upload are free. 1 Atomic Coin = 40 energy. New accounts get 5 coins. Coins are not sold in the app yet. Early supporters on Patreon (https://www.patreon.com/cw/DevBehindYou) who send their account email get Atomic Coins from the developer by hand. - Capacity tiers: Tachyon 30 notes (free), Antimatter 40 (10 coins), Monopole 50 (20 coins), Strangelet 100 (30 coins). - Device security: biometric lock, TOTP two-step verification, blocked screenshots (FLAG_SECURE), Android secure storage. - Distribution: signed APKs on GitHub Releases. Certificate SHA-256 cc24ae5ce1dca50fcd5e5c4c252d69e4965c55a975bd0e4739e8938fad9bebeb. Not on Google Play. No iOS build yet. @@ -16,6 +16,7 @@ Key facts: - [Home](https://atomic-notes-community.vercel.app/): features, how sync works, what each party can see, Atomic Energy, FAQ - [Updates](https://atomic-notes-community.vercel.app/updates): live release notes and service status - [Blog](https://atomic-notes-community.vercel.app/blog): development updates and technical write-ups +- [Support](https://atomic-notes-community.vercel.app/support-atomic-notes): support on Patreon and get Atomic Coins early ## Source and downloads diff --git a/src/app/controller/page.tsx b/src/app/controller/page.tsx index 070cdf1..f7784d6 100644 --- a/src/app/controller/page.tsx +++ b/src/app/controller/page.tsx @@ -413,7 +413,14 @@ function NewNotification({ setTargetEmail(""); setPinned(false); const size = typeof d.audience_size === "number" ? d.audience_size : null; - onMsg(size === null ? "Notification published." : `Notification published to ${size} ${size === 1 ? "user" : "users"}.`); + const forNewAccounts = !targetEmail.trim() && audience === "new"; + onMsg( + forNewAccounts + ? "Notification published. Every account created from now on will see it." + : size === null + ? "Notification published." + : `Notification published to ${size} ${size === 1 ? "user" : "users"}.` + ); onCreated(); } catch (e) { onMsg(e instanceof Error ? e.message : "Failed to create."); @@ -470,6 +477,7 @@ function NewNotification({ +