diff --git a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/01 Privacy/P2 Best Private Notes Apps Android/06-atomic-notes-card.png b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/01 Privacy/P2 Best Private Notes Apps Android/06-atomic-notes-card.png
index 73a2dfc..2f71a7f 100644
Binary files a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/01 Privacy/P2 Best Private Notes Apps Android/06-atomic-notes-card.png and b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/01 Privacy/P2 Best Private Notes Apps Android/06-atomic-notes-card.png differ
diff --git a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/01 Privacy/P3 Notes App Privacy Mistakes/06-routine.png b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/01 Privacy/P3 Notes App Privacy Mistakes/06-routine.png
index 9326437..be96eb0 100644
Binary files a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/01 Privacy/P3 Notes App Privacy Mistakes/06-routine.png and b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/01 Privacy/P3 Notes App Privacy Mistakes/06-routine.png differ
diff --git a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L1 What Is a Local First Notes App/05-atomic-notes-layers.png b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L1 What Is a Local First Notes App/05-atomic-notes-layers.png
index e1e149a..f7ab69e 100644
Binary files a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L1 What Is a Local First Notes App/05-atomic-notes-layers.png and b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L1 What Is a Local First Notes App/05-atomic-notes-layers.png differ
diff --git a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L1 What Is a Local First Notes App/what-is-a-local-first-notes-app.md b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L1 What Is a Local First Notes App/what-is-a-local-first-notes-app.md
index 219ac6a..9c3e19e 100644
--- a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L1 What Is a Local First Notes App/what-is-a-local-first-notes-app.md
+++ b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L1 What Is a Local First Notes App/what-is-a-local-first-notes-app.md
@@ -109,7 +109,7 @@ Here's how Atomic Notes splits those jobs:
2. **A sync server coordinates, and keeps metadata only.** It tracks note IDs, timestamps, flags, and versions so your devices agree. It never stores your note titles or text.
3. **Your own Google Drive holds the cloud copy.** Every note lands in a My-Atomic-Notes folder as its own `.atomic` file. The app uses Google's narrow `drive.file` scope, so it can only see files it created.
-
+
One honest detail. Unless you turn on the optional vault, note text is plain JSON in your Drive and passes through the sync server on its way there, without being stored. Turn the vault on and your phone encrypts every note with AES-256-GCM before upload, so the server and Google only ever hold ciphertext.
diff --git a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L4 Best Offline Notes Apps Android/06-atomic-notes-card.png b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L4 Best Offline Notes Apps Android/06-atomic-notes-card.png
index 2b2c9a0..8a66d62 100644
Binary files a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L4 Best Offline Notes Apps Android/06-atomic-notes-card.png and b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L4 Best Offline Notes Apps Android/06-atomic-notes-card.png differ
diff --git a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L4 Best Offline Notes Apps Android/best-offline-notes-apps-android.md b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L4 Best Offline Notes Apps Android/best-offline-notes-apps-android.md
index d76451b..97e535c 100644
--- a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L4 Best Offline Notes Apps Android/best-offline-notes-apps-android.md
+++ b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/02 Local First/L4 Best Offline Notes Apps Android/best-offline-notes-apps-android.md
@@ -70,7 +70,7 @@ To find the best offline notes app Android owners will actually keep, every entr
- **Latest:** 2.03.5, September 28, 2026
- **Weak spot:** the first sign-in needs internet, the free plan holds 30 notes, and there's no export button yet
-
+
When the network comes back, Atomic Notes retries a failed sync after 5, 15, and 45 seconds, then waits for the next trigger instead of draining the battery. If an offline edit collides with one from another device, the app keeps both and names one "(conflict copy)". That's why it's my pick for the best offline notes app Android users can run on two phones.
diff --git a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/03 Security/S3 Storing Passwords in Notes App/06-atomic-notes-card.png b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/03 Security/S3 Storing Passwords in Notes App/06-atomic-notes-card.png
index 73b0132..8051421 100644
Binary files a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/03 Security/S3 Storing Passwords in Notes App/06-atomic-notes-card.png and b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/03 Security/S3 Storing Passwords in Notes App/06-atomic-notes-card.png differ
diff --git a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/03 Security/S4 Encryption and Privacy Gaps/06-atomic-answers.png b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/03 Security/S4 Encryption and Privacy Gaps/06-atomic-answers.png
index d19c7a7..674f357 100644
Binary files a/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/03 Security/S4 Encryption and Privacy Gaps/06-atomic-answers.png and b/Atomic-Blog-Generation-Pipeline/Output/Main Blogs/03 Security/S4 Encryption and Privacy Gaps/06-atomic-answers.png differ
diff --git a/Atomic-Blog-Generation-Pipeline/visuals/atomic_viz.py b/Atomic-Blog-Generation-Pipeline/visuals/atomic_viz.py
index d03e88d..99c4635 100644
--- a/Atomic-Blog-Generation-Pipeline/visuals/atomic_viz.py
+++ b/Atomic-Blog-Generation-Pipeline/visuals/atomic_viz.py
@@ -28,7 +28,9 @@ def file_url(path):
def mockup(n):
- return file_url(os.path.join(PUBLIC, "mockups", f"atomic-notes-mockup-image-{n:02d}.png"))
+ """An app screen from public/mockups: a name like "encryption" (release 2.03.5) or a legacy number."""
+ name = f"app-{n}.png" if isinstance(n, str) else f"atomic-notes-mockup-image-{n:02d}.png"
+ return file_url(os.path.join(PUBLIC, "mockups", name))
ATOM = file_url(os.path.join(PUBLIC, "icons", "atom.svg"))
diff --git a/Atomic-Blog-Generation-Pipeline/visuals/posts/best_offline_notes_apps_android.py b/Atomic-Blog-Generation-Pipeline/visuals/posts/best_offline_notes_apps_android.py
index 5808260..5270da8 100644
--- a/Atomic-Blog-Generation-Pipeline/visuals/posts/best_offline_notes_apps_android.py
+++ b/Atomic-Blog-Generation-Pipeline/visuals/posts/best_offline_notes_apps_android.py
@@ -70,7 +70,7 @@ def group(x, lbl, title, apps, note, cls):
out["05-backup-plan"] = figure("FIG 4 · BACKUPS", 'THE PHONE MAY HOLD THE ONLY COPY', body,
"Ten minutes a month. Apps with sync cover a lost phone, not a deleted note.", lines=lines, h=680)
- body = phone(7, 64, 190, 260, crop=470, shadow="ink")
+ body = phone("cloud-notes", 64, 190, 260, crop=470, shadow="ink")
facts = [("OFFLINE", "Write, edit, search, delete. No connection needed"), ("SAVES", "To the phone as you type"),
("SYNC LATER", "To your own Google Drive, on its own"), ("RETRIES", "After 5, 15, and 45 seconds, then waits"),
("CONFLICTS", "Both versions kept, one marked conflict copy"), ("HONEST LIMITS", "Sign-in needs internet once. 30 free notes")]
diff --git a/Atomic-Blog-Generation-Pipeline/visuals/posts/best_privacy_first_notes_apps_android.py b/Atomic-Blog-Generation-Pipeline/visuals/posts/best_privacy_first_notes_apps_android.py
index d22f57d..3e0392d 100644
--- a/Atomic-Blog-Generation-Pipeline/visuals/posts/best_privacy_first_notes_apps_android.py
+++ b/Atomic-Blog-Generation-Pipeline/visuals/posts/best_privacy_first_notes_apps_android.py
@@ -71,7 +71,7 @@ def build():
out["05-permissions"] = figure("FIG 4 · PERMISSIONS", 'WHO CAN EVEN REACH THE INTERNET?', body,
"From each app's AndroidManifest.xml or F-Droid listing. No internet permission means notes can't leave by the app itself.", h=790)
- body = phone(12, 64, 190, 260, crop=470, shadow="ink")
+ body = phone("encryption", 64, 190, 260, crop=470, shadow="ink")
facts = [("WHERE NOTES LIVE", "Your phone first, then your own Google Drive"), ("ENCRYPTION", "Optional end-to-end vault, off by default"),
("SERVER", "Metadata only, never note titles or text"), ("NO", "Ads, trackers, or AI"),
("PRICE", "Free, 30 notes, daily sync energy"), ("HONEST LIMITS", "Google sign-in required. No export button yet")]
diff --git a/Atomic-Blog-Generation-Pipeline/visuals/posts/encrypted_notes_privacy.py b/Atomic-Blog-Generation-Pipeline/visuals/posts/encrypted_notes_privacy.py
index d70803d..ae17d28 100644
--- a/Atomic-Blog-Generation-Pipeline/visuals/posts/encrypted_notes_privacy.py
+++ b/Atomic-Blog-Generation-Pipeline/visuals/posts/encrypted_notes_privacy.py
@@ -59,7 +59,7 @@ def build():
out["05-five-questions"] = figure("FIG 4 · THE CHECK", 'FIVE QUESTIONS FOR ANY APP', body,
"Vague answers usually mean the gap is real.", h=700)
- body = phone(12, 64, 190, 260, crop=470, shadow="ink")
+ body = phone("encryption", 64, 190, 260, crop=470, shadow="ink")
facts = [("WHERE", "HTTPS always. On the phone too, with the vault"), ("WHOSE KEY", "Vault: yours, from six words"),
("VISIBLE", "IDs, type, flags, times, rough size"), ("ALSO SENT", "Nothing. No analytics or trackers"),
("RECOVERY", "Your phrase only. No reset path"), ("HONEST LIMITS", "Vault off by default. No audit yet")]
diff --git a/Atomic-Blog-Generation-Pipeline/visuals/posts/notes_app_privacy_mistakes.py b/Atomic-Blog-Generation-Pipeline/visuals/posts/notes_app_privacy_mistakes.py
index 0471b8e..1b75fa6 100644
--- a/Atomic-Blog-Generation-Pipeline/visuals/posts/notes_app_privacy_mistakes.py
+++ b/Atomic-Blog-Generation-Pipeline/visuals/posts/notes_app_privacy_mistakes.py
@@ -68,7 +68,7 @@ def build():
routine = [("LOCKS", "Screen lock, app lock, and no-screenshots still on"), ("SHARES", "Revoke links you no longer need"),
("EXPORTS", "Delete or encrypt stray copies"), ("ACCOUNT", "Unique password and two-step verification"),
("UPDATES", "Read release notes for new sharing or AI features")]
- body = phone(9, 64, 190, 260, crop=470, shadow="ink")
+ body = phone("security", 64, 190, 260, crop=470, shadow="ink")
rws = "".join(f'
'
f'{i + 1:02d}{a}{b}
'
for i, (a, b) in enumerate(routine))
diff --git a/Atomic-Blog-Generation-Pipeline/visuals/posts/storing_passwords_in_notes_app.py b/Atomic-Blog-Generation-Pipeline/visuals/posts/storing_passwords_in_notes_app.py
index 87f125d..26a46fc 100644
--- a/Atomic-Blog-Generation-Pipeline/visuals/posts/storing_passwords_in_notes_app.py
+++ b/Atomic-Blog-Generation-Pipeline/visuals/posts/storing_passwords_in_notes_app.py
@@ -56,7 +56,7 @@ def build():
out["05-move-out"] = figure("FIG 4 · MOVING OUT", 'TWENTY MINUTES, IN THIS ORDER', body,
"Highest blast radius first. A deleted note often stays in the trash for 30 days.", h=620)
- body = phone(12, 64, 190, 260, crop=470, shadow="ink")
+ body = phone("encryption", 64, 190, 260, crop=470, shadow="ink")
facts = [("GOOD FOR", "Journals, health notes, plans, drafts"), ("PROTECTION", "App lock and an optional end-to-end vault"),
("NO AUTOFILL", "Can't stop you pasting into a fake site"), ("NO BREACH ALERTS", "Won't tell you a password leaked"),
("NO GENERATOR", "Can't create unique passwords"), ("VERDICT", "Not a password manager. Use one.")]
diff --git a/Atomic-Blog-Generation-Pipeline/visuals/posts/what_is_a_local_first_notes_app.py b/Atomic-Blog-Generation-Pipeline/visuals/posts/what_is_a_local_first_notes_app.py
index a006678..58894bc 100644
--- a/Atomic-Blog-Generation-Pipeline/visuals/posts/what_is_a_local_first_notes_app.py
+++ b/Atomic-Blog-Generation-Pipeline/visuals/posts/what_is_a_local_first_notes_app.py
@@ -85,7 +85,7 @@ def lane(y, label, steps, note, sig):
"Source: \"Local-first software\", Ink & Switch, 2019.", h=740)
# How Atomic Notes applies it.
- body = phone(7, 64, 196, 250, crop=470, shadow="ink")
+ body = phone("cloud-notes", 64, 196, 250, crop=470, shadow="ink")
body += box(390, 190, 360, 196,
'
1 · YOUR PHONE
THE REAL COPY
Hive storage on the device. Every note saves as you type, online or not.
',
cls="sigshadow")
diff --git a/content/blog/best-offline-notes-apps-android.md b/content/blog/best-offline-notes-apps-android.md
index 7904edc..afaf371 100644
--- a/content/blog/best-offline-notes-apps-android.md
+++ b/content/blog/best-offline-notes-apps-android.md
@@ -70,7 +70,7 @@ To find the best offline notes app Android owners will actually keep, every entr
- **Latest:** 2.03.5, September 28, 2026
- **Weak spot:** the first sign-in needs internet, the free plan holds 30 notes, and there's no export button yet
-
+
When the network comes back, Atomic Notes retries a failed sync after 5, 15, and 45 seconds, then waits for the next trigger instead of draining the battery. If an offline edit collides with one from another device, the app keeps both and names one "(conflict copy)". That's why it's my pick for the best offline notes app Android users can run on two phones.
diff --git a/content/blog/what-is-a-local-first-notes-app.md b/content/blog/what-is-a-local-first-notes-app.md
index 6635a0f..4b78788 100644
--- a/content/blog/what-is-a-local-first-notes-app.md
+++ b/content/blog/what-is-a-local-first-notes-app.md
@@ -109,7 +109,7 @@ Here's how Atomic Notes splits those jobs:
2. **A sync server coordinates, and keeps metadata only.** It tracks note IDs, timestamps, flags, and versions so your devices agree. It never stores your note titles or text.
3. **Your own Google Drive holds the cloud copy.** Every note lands in a My-Atomic-Notes folder as its own `.atomic` file. The app uses Google's narrow `drive.file` scope, so it can only see files it created.
-
+
One honest detail. Unless you turn on the optional vault, note text is plain JSON in your Drive and passes through the sync server on its way there, without being stored. Turn the vault on and your phone encrypts every note with AES-256-GCM before upload, so the server and Google only ever hold ciphertext.
diff --git a/public/blog/best-offline-notes-apps-android/06-atomic-notes-card.png b/public/blog/best-offline-notes-apps-android/06-atomic-notes-card.png
index 2b2c9a0..8a66d62 100644
Binary files a/public/blog/best-offline-notes-apps-android/06-atomic-notes-card.png and b/public/blog/best-offline-notes-apps-android/06-atomic-notes-card.png differ
diff --git a/public/blog/best-privacy-first-notes-apps-android/06-atomic-notes-card.png b/public/blog/best-privacy-first-notes-apps-android/06-atomic-notes-card.png
index 73a2dfc..2f71a7f 100644
Binary files a/public/blog/best-privacy-first-notes-apps-android/06-atomic-notes-card.png and b/public/blog/best-privacy-first-notes-apps-android/06-atomic-notes-card.png differ
diff --git a/public/blog/encrypted-notes-privacy/06-atomic-answers.png b/public/blog/encrypted-notes-privacy/06-atomic-answers.png
index d19c7a7..674f357 100644
Binary files a/public/blog/encrypted-notes-privacy/06-atomic-answers.png and b/public/blog/encrypted-notes-privacy/06-atomic-answers.png differ
diff --git a/public/blog/notes-app-privacy-mistakes/06-routine.png b/public/blog/notes-app-privacy-mistakes/06-routine.png
index 9326437..be96eb0 100644
Binary files a/public/blog/notes-app-privacy-mistakes/06-routine.png and b/public/blog/notes-app-privacy-mistakes/06-routine.png differ
diff --git a/public/blog/storing-passwords-in-notes-app/06-atomic-notes-card.png b/public/blog/storing-passwords-in-notes-app/06-atomic-notes-card.png
index 73b0132..8051421 100644
Binary files a/public/blog/storing-passwords-in-notes-app/06-atomic-notes-card.png and b/public/blog/storing-passwords-in-notes-app/06-atomic-notes-card.png differ
diff --git a/public/blog/what-is-a-local-first-notes-app/05-atomic-notes-layers.png b/public/blog/what-is-a-local-first-notes-app/05-atomic-notes-layers.png
index e1e149a..f7ab69e 100644
Binary files a/public/blog/what-is-a-local-first-notes-app/05-atomic-notes-layers.png and b/public/blog/what-is-a-local-first-notes-app/05-atomic-notes-layers.png differ
diff --git a/public/mockups/app-atomic-energy.png b/public/mockups/app-atomic-energy.png
new file mode 100644
index 0000000..b0b0e22
Binary files /dev/null and b/public/mockups/app-atomic-energy.png differ
diff --git a/public/mockups/app-avatar-picker.png b/public/mockups/app-avatar-picker.png
new file mode 100644
index 0000000..dac4a32
Binary files /dev/null and b/public/mockups/app-avatar-picker.png differ
diff --git a/public/mockups/app-cloud-notes.png b/public/mockups/app-cloud-notes.png
new file mode 100644
index 0000000..f41048f
Binary files /dev/null and b/public/mockups/app-cloud-notes.png differ
diff --git a/public/mockups/app-cloud-sync.png b/public/mockups/app-cloud-sync.png
new file mode 100644
index 0000000..55ae372
Binary files /dev/null and b/public/mockups/app-cloud-sync.png differ
diff --git a/public/mockups/app-danger-zone.png b/public/mockups/app-danger-zone.png
new file mode 100644
index 0000000..cae09d5
Binary files /dev/null and b/public/mockups/app-danger-zone.png differ
diff --git a/public/mockups/app-encryption.png b/public/mockups/app-encryption.png
new file mode 100644
index 0000000..a3050e0
Binary files /dev/null and b/public/mockups/app-encryption.png differ
diff --git a/public/mockups/app-energy-activity.png b/public/mockups/app-energy-activity.png
new file mode 100644
index 0000000..c99f4ba
Binary files /dev/null and b/public/mockups/app-energy-activity.png differ
diff --git a/public/mockups/app-profile.png b/public/mockups/app-profile.png
new file mode 100644
index 0000000..e412c5f
Binary files /dev/null and b/public/mockups/app-profile.png differ
diff --git a/public/mockups/app-security.png b/public/mockups/app-security.png
new file mode 100644
index 0000000..f194492
Binary files /dev/null and b/public/mockups/app-security.png differ
diff --git a/public/mockups/app-settings-about.png b/public/mockups/app-settings-about.png
new file mode 100644
index 0000000..34a443e
Binary files /dev/null and b/public/mockups/app-settings-about.png differ
diff --git a/public/mockups/app-settings-energy-popup.png b/public/mockups/app-settings-energy-popup.png
new file mode 100644
index 0000000..b389a84
Binary files /dev/null and b/public/mockups/app-settings-energy-popup.png differ
diff --git a/public/mockups/app-settings.png b/public/mockups/app-settings.png
new file mode 100644
index 0000000..73b229a
Binary files /dev/null and b/public/mockups/app-settings.png differ
diff --git a/public/mockups/atomic-notes-mockup-image-01.png b/public/mockups/atomic-notes-mockup-image-01.png
deleted file mode 100644
index a204f5e..0000000
Binary files a/public/mockups/atomic-notes-mockup-image-01.png and /dev/null differ
diff --git a/public/mockups/atomic-notes-mockup-image-02.png b/public/mockups/atomic-notes-mockup-image-02.png
deleted file mode 100644
index e5c81b2..0000000
Binary files a/public/mockups/atomic-notes-mockup-image-02.png and /dev/null differ
diff --git a/public/mockups/atomic-notes-mockup-image-07.png b/public/mockups/atomic-notes-mockup-image-07.png
deleted file mode 100644
index 5d7a6f7..0000000
Binary files a/public/mockups/atomic-notes-mockup-image-07.png and /dev/null differ
diff --git a/public/mockups/atomic-notes-mockup-image-08.png b/public/mockups/atomic-notes-mockup-image-08.png
deleted file mode 100644
index cb0032e..0000000
Binary files a/public/mockups/atomic-notes-mockup-image-08.png and /dev/null differ
diff --git a/public/mockups/atomic-notes-mockup-image-09.png b/public/mockups/atomic-notes-mockup-image-09.png
deleted file mode 100644
index 1f60d55..0000000
Binary files a/public/mockups/atomic-notes-mockup-image-09.png and /dev/null differ
diff --git a/public/mockups/atomic-notes-mockup-image-10.png b/public/mockups/atomic-notes-mockup-image-10.png
deleted file mode 100644
index 30e4acb..0000000
Binary files a/public/mockups/atomic-notes-mockup-image-10.png and /dev/null differ
diff --git a/public/mockups/atomic-notes-mockup-image-11.png b/public/mockups/atomic-notes-mockup-image-11.png
deleted file mode 100644
index abbe03a..0000000
Binary files a/public/mockups/atomic-notes-mockup-image-11.png and /dev/null differ
diff --git a/public/mockups/atomic-notes-mockup-image-12.png b/public/mockups/atomic-notes-mockup-image-12.png
deleted file mode 100644
index 818da4f..0000000
Binary files a/public/mockups/atomic-notes-mockup-image-12.png and /dev/null differ
diff --git a/public/mockups/atomic-notes-mockup-image-13.png b/public/mockups/atomic-notes-mockup-image-13.png
deleted file mode 100644
index f6ef5d2..0000000
Binary files a/public/mockups/atomic-notes-mockup-image-13.png and /dev/null differ
diff --git a/public/mockups/atomic-notes-mockup-image-14.png b/public/mockups/atomic-notes-mockup-image-14.png
deleted file mode 100644
index a0f929f..0000000
Binary files a/public/mockups/atomic-notes-mockup-image-14.png and /dev/null differ
diff --git a/public/mockups/atomic-notes-mockup-image-16.png b/public/mockups/atomic-notes-mockup-image-16.png
deleted file mode 100644
index 8fe0c91..0000000
Binary files a/public/mockups/atomic-notes-mockup-image-16.png and /dev/null differ
diff --git a/public/mockups/atomic-notes-mockup-image-19.png b/public/mockups/atomic-notes-mockup-image-19.png
deleted file mode 100644
index 1fcda98..0000000
Binary files a/public/mockups/atomic-notes-mockup-image-19.png and /dev/null differ
diff --git a/public/video/atomic-notes-demo-1280x720.mp4 b/public/video/atomic-notes-demo-1280x720.mp4
new file mode 100644
index 0000000..560c304
Binary files /dev/null and b/public/video/atomic-notes-demo-1280x720.mp4 differ
diff --git a/public/video/atomic-notes-demo-720x1280.mp4 b/public/video/atomic-notes-demo-720x1280.mp4
new file mode 100644
index 0000000..2c05fc8
Binary files /dev/null and b/public/video/atomic-notes-demo-720x1280.mp4 differ
diff --git a/public/video/atomic-notes-demo-poster-1280x720.jpg b/public/video/atomic-notes-demo-poster-1280x720.jpg
new file mode 100644
index 0000000..e75d29d
Binary files /dev/null and b/public/video/atomic-notes-demo-poster-1280x720.jpg differ
diff --git a/public/video/atomic-notes-demo-poster-720x1280.jpg b/public/video/atomic-notes-demo-poster-720x1280.jpg
new file mode 100644
index 0000000..de7bf38
Binary files /dev/null and b/public/video/atomic-notes-demo-poster-720x1280.jpg differ
diff --git a/src/app/globals.css b/src/app/globals.css
index d6c6773..525913c 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -393,6 +393,10 @@ section h2 {
.shot img {
width: 100%;
display: block;
+ /* Screens come from two builds with different heights. Show every card at the 2.03.5 shape, top-aligned. */
+ aspect-ratio: 1080 / 2199;
+ object-fit: cover;
+ object-position: top;
}
.shot .cap {
display: flex;
@@ -3685,3 +3689,30 @@ section h2 {
position: static;
}
}
+
+/* ---------- demo video ---------- */
+.lp-demo {
+ margin: 28px 0 34px;
+}
+.lp-demo video {
+ display: block;
+ width: 100%;
+ height: auto;
+ border: 2px solid var(--ink);
+ border-radius: 8px;
+ box-shadow: 8px 8px 0 var(--signal);
+ background: var(--ink);
+}
+.lp-demo-tall {
+ display: none !important;
+}
+@media (max-width: 640px) {
+ .lp-demo-wide {
+ display: none !important;
+ }
+ .lp-demo-tall {
+ display: block !important;
+ max-width: 360px;
+ margin: 0 auto;
+ }
+}
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 300a032..928d6d3 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -24,25 +24,32 @@ import { APK_URL, DEVELOPER_URL, SITE_URL } from "@/lib/site";
export const dynamic = "force-dynamic";
+// Screens from earlier builds (notes, editors, coins, notifications) that have no 2.03.5 mockup yet.
const M = (n: string) => `/mockups/atomic-notes-mockup-image-${n}.png`;
+// Release 2.03.5 screens, cut from the iPhone 18 Pro mockups without the device frame (the app is Android-only).
+const A = (name: string) => `/mockups/app-${name}.png`;
+const A_H = 2199;
-// The screen tour. Image 17 (a recovery phrase) is left out on purpose.
+// The screen tour. The recovery phrase screen is left out on purpose.
const SHOTS: Shot[] = [
{ src: M("03"), label: "Notes" },
{ src: M("05"), label: "Editor · Note" },
{ src: M("04"), label: "Editor · Checklist" },
{ src: M("06"), label: "Select & Delete" },
- { src: M("12"), label: "Encryption vault" },
- { src: M("14"), label: "Atomic Energy" },
+ { src: A("settings"), label: "Settings" },
+ { src: A("profile"), label: "Profile" },
+ { src: A("avatar-picker"), label: "Choose an avatar" },
+ { src: A("encryption"), label: "Encryption vault" },
+ { src: A("security"), label: "Lock and no screenshots" },
+ { src: A("atomic-energy"), label: "Atomic Energy" },
+ { src: A("energy-activity"), label: "Energy activity" },
+ { src: A("settings-energy-popup"), label: "Energy popup" },
{ src: M("15"), label: "Convert Coins" },
- { src: M("13"), label: "Energy popup" },
+ { src: A("cloud-sync"), label: "Cloud Sync" },
+ { src: A("cloud-notes"), label: "Device and cloud" },
{ src: M("18"), label: "Notifications" },
- { src: M("09"), label: "Biometric lock" },
- { src: M("08"), label: "Cloud Sync" },
- { src: M("07"), label: "Device and cloud" },
- { src: M("02"), label: "Settings" },
- { src: M("01"), label: "Profile" },
- { src: M("10"), label: "Danger Zone" },
+ { src: A("danger-zone"), label: "Danger Zone" },
+ { src: A("settings-about"), label: "About" },
];
async function latestUpdates(): Promise {
@@ -74,7 +81,7 @@ function jsonLd() {
isAccessibleForFree: true,
offers: { "@type": "Offer", price: "0", priceCurrency: "USD" },
image: `${SITE_URL}/og-banner.png`,
- screenshot: [`${SITE_URL}${M("03")}`, `${SITE_URL}${M("12")}`, `${SITE_URL}${M("14")}`],
+ screenshot: [`${SITE_URL}${M("03")}`, `${SITE_URL}${A("encryption")}`, `${SITE_URL}${A("atomic-energy")}`],
featureList: [
"Local-first notes and checklists that work offline",
"Sync to a folder in your own Google Drive",
@@ -268,9 +275,9 @@ export default async function Home() {
-
+
-
+
@@ -449,8 +456,13 @@ export default async function Home() {
-
-
+
+
@@ -618,7 +630,37 @@ export default async function Home() {
The Technical Editorial design system: ink #15171B on paper #F4F5F1 with one accent, Signal #3A2FF0.
- Tap any screen to zoom. Some screens are from the August 2026 build.
+ Tap any screen to zoom. Settings, vault, energy, sync, and Danger Zone screens are from release 2.03.5.
+ The notes, editor, coin, and notification screens are from the August 2026 build.
+
+
+
+
+
+
+ A 30-second tour in a phone mockup. The home and editor screens in it preview the redesign in progress,
+ with search, tags, and text formatting that aren't in release 2.03.5 yet. Everything else matches
+ the current app.