Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 109 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"test:smoke": "node --test tests/runtime.test.mjs"
},
"dependencies": {
"@vercel/analytics": "^2.0.1",
"gray-matter": "^4.0.3",
"marked": "^18.0.11",
"next": "15.5.24",
Expand Down
4 changes: 2 additions & 2 deletions public/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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. 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.
- 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) or Ko-fi (https://ko-fi.com/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.
Expand All @@ -16,7 +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
- [Support](https://atomic-notes-community.vercel.app/support-atomic-notes): support on Patreon or Ko-fi and get Atomic Coins early

## Source and downloads

Expand Down
208 changes: 207 additions & 1 deletion src/app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -1744,6 +1744,27 @@ section h2 {
line-height: 1.55;
color: #2b2e34;
}
.support-platforms {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 24px;
margin-top: 30px;
}
.support-platform {
display: flex;
flex-direction: column;
}
.support-platform h3 {
font-size: 2rem;
margin-top: 6px;
}
.support-platform .support-list {
flex: 1;
margin-bottom: 20px;
}
.support-platform .btn-signal {
align-self: flex-start;
}
.support-facts {
margin: 22px 0 26px;
max-width: 640px;
Expand All @@ -1752,7 +1773,8 @@ section h2 {
color: var(--signal);
}
@media (max-width: 820px) {
.support-grid {
.support-grid,
.support-platforms {
grid-template-columns: 1fr;
}
}
Expand All @@ -1779,3 +1801,187 @@ section h2 {
.legal .prose li {
margin-bottom: 6px;
}

/* ---------- community Discord popup ---------- */
.community-pop {
position: fixed;
left: 20px;
bottom: 20px;
z-index: 60;
width: 320px;
max-width: calc(100vw - 32px);
padding: 12px;
background:
radial-gradient(320px circle at 0% 0%, rgba(58, 47, 240, 0.38), transparent 65%),
var(--ink);
border-radius: 4px;
box-shadow: 5px 5px 0 var(--signal);
opacity: 0;
transform: translateY(16px);
visibility: hidden;
transition:
opacity 0.35s ease,
transform 0.35s ease,
visibility 0s linear 0.35s;
}
.community-pop.is-visible {
opacity: 1;
transform: none;
visibility: visible;
transition:
opacity 0.35s ease,
transform 0.35s ease,
visibility 0s;
}
.community-pop-close {
position: absolute;
top: 8px;
right: 8px;
width: 28px;
height: 28px;
display: grid;
place-items: center;
border: none;
border-radius: 4px;
background: transparent;
color: #cfd0d3;
font-size: 18px;
line-height: 1;
cursor: pointer;
}
.community-pop-close:hover {
background: rgba(244, 245, 241, 0.1);
color: #fff;
}
.community-pop-head {
display: flex;
align-items: center;
gap: 10px;
padding: 2px 34px 12px 4px;
}
.community-pop-mark {
width: 30px;
height: 30px;
flex-shrink: 0;
}
.community-pop-brand {
display: flex;
flex-direction: column;
gap: 2px;
min-width: 0;
}
.community-pop-brand b {
font-family: var(--display);
font-weight: 400;
font-size: 1.15rem;
letter-spacing: 0.5px;
line-height: 1;
color: var(--paper);
}
.community-pop-live {
display: inline-flex;
align-items: center;
gap: 6px;
font-family: var(--mono);
font-size: 0.62rem;
letter-spacing: 1.6px;
text-transform: uppercase;
color: #8f88ff;
}
.community-pop-live::before {
content: "";
width: 6px;
height: 6px;
border-radius: 50%;
background: #3ddc84;
box-shadow: 0 0 0 3px rgba(61, 220, 132, 0.18);
}
.community-pop-card {
background: var(--paper);
border-radius: 3px;
padding: 14px 14px 0;
overflow: hidden;
}
.community-pop-title {
font-family: var(--display);
font-size: 1.55rem;
line-height: 0.98;
letter-spacing: 0.3px;
text-transform: uppercase;
margin: 0 0 8px;
}
.community-pop-copy {
font-size: 0.86rem;
line-height: 1.45;
color: var(--slate);
margin: 0 0 12px;
}
.community-pop-copy strong {
color: var(--ink);
}
.community-pop-cta {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
margin: 0 -14px;
padding: 11px 14px;
border-top: 3px solid var(--ink);
background: var(--signal);
color: #fff;
text-decoration: none;
transition: background 0.15s ease;
}
.community-pop-cta:hover {
background: #2a20c9;
}
.community-pop-cta-text {
display: flex;
flex-direction: column;
gap: 3px;
}
.community-pop-label {
font-family: var(--mono);
font-size: 0.62rem;
letter-spacing: 1.6px;
text-transform: uppercase;
opacity: 0.85;
}
.community-pop-go {
font-family: var(--display);
font-size: 1.25rem;
letter-spacing: 0.6px;
line-height: 1;
}
.community-pop-arrow {
font-size: 1.2rem;
transition: transform 0.15s ease;
}
.community-pop-cta:hover .community-pop-arrow {
transform: translateX(3px);
}
.community-pop-close:focus-visible,
.community-pop-cta:focus-visible {
outline: 2px solid #8f88ff;
outline-offset: 2px;
}
@media (max-width: 420px) {
.community-pop {
left: 16px;
bottom: 16px;
}
}
@media (prefers-reduced-motion: reduce) {
.community-pop,
.community-pop.is-visible {
transform: none;
transition:
opacity 0.2s ease,
visibility 0s;
}
.community-pop-arrow,
.community-pop-cta:hover .community-pop-arrow {
transition: none;
transform: none;
}
}
Loading