Commit Graph
15003 Commits
Author SHA1 Message Date
Claude cdb56f63e2 fix(notifications): migrate legacy Global filter to Curated once
The notifications "Global" mode was split into a raw Global (every event
that p-tags the user) and a curated Selected mode. Existing users who had
selected the old curated-Global kept a persisted value that now
deserializes to the much-more-permissive raw Global, so they suddenly saw
everything.

Add a one-shot, per-account migration: on load, if the account hasn't been
stamped yet and its notification filter is Global, rewrite it to Selected
and stamp the account. saveToEncryptedStorage always stamps the account as
migrated, so brand-new accounts (and any deliberate raw-Global choice made
after the split) are never reverted.

Only the notifications key is touched; Global keeps its original meaning
for every other feed.
2026-06-13 15:49:35 +00:00
Vitor PamplonaandGitHub cdb0c47b39 Merge pull request #3204 from vitorpamplona/claude/trusting-heisenberg-4iu49o
Add show button to hidden words list
2026-06-13 11:08:53 -04:00
Vitor PamplonaandGitHub c2b9391239 Merge pull request #3203 from vitorpamplona/claude/modernize-post-notify-tags-ogz2h1
Refactor notification chips UI with Material 3 components
2026-06-13 11:07:58 -04:00
Claude 72ecb98749 fix: add spacing before the notify add-user search field
The search field shown after tapping Add sat flush against the notify
chips row. Add a standard vertical spacer so it gets a consistent gap.
2026-06-13 15:00:05 +00:00
Claude 6fcbecb293 fix: make notify chip row spacing match horizontal spacing
Chips render through a selectable Surface that enforces a 48dp minimum
touch target, inflating each chip's measured height above its visible 32dp
pill. That invisible padding dominated the gap between wrapped rows, so the
previous verticalArrangement bump was imperceptible. Disable the minimum
interactive size around the chips so they measure at their visible height
and the row spacing matches the 6dp horizontal spacing.
2026-06-13 14:48:50 +00:00
Claude 6a2033fbb4 feat: show per-row unblock button on Hidden Words screen
Each hidden word now displays an inline unblock button when not in
selection mode, mirroring the Blocked Users screen. Long-press to
multi-select still works for batch unblocking.
2026-06-13 14:46:30 +00:00
Claude 45ce6f2815 fix: render notify chip avatar via leadingIcon to avoid circle clip
InputChip clips its avatar slot to a circle, which cut off the following
badge that BaseUserPicture draws slightly outside the picture's circle.
Pass the picture through the leadingIcon slot instead, which is not clipped.
2026-06-13 14:38:40 +00:00
Claude 82daed3c55 fix: match vertical chip spacing to horizontal in notify row 2026-06-13 14:36:26 +00:00
Claude d7a552770f feat: modernize notify-tag chips in new post screens
Replace the plain solid-color buttons used for Notify: mentions with
Material3 InputChips that show each user's avatar and display name plus a
remove (X) trailing icon, matching the modern contact-chip pattern. The
add-user action now uses an AssistChip with a PersonAdd icon.

Since the Notifying composable is shared, this updates the look across all
new post screens (short notes, comments/replies, and polls).
2026-06-13 03:38:32 +00:00
Vitor PamplonaandGitHub eff826f3d5 Merge pull request #3201 from vitorpamplona/claude/beautiful-ride-n6y3s2
Support private notes: gift-wrap kind-1 replies and posts to p-tagged users
2026-06-12 21:17:55 -04:00
Claude 74d394a7f7 Merge remote-tracking branch 'origin/main' into claude/beautiful-ride-n6y3s2
# Conflicts:
#	amethyst/src/main/java/com/vitorpamplona/amethyst/model/Account.kt
2026-06-12 22:52:57 +00:00
Claude 0b5f926dd8 docs: TODO for gift-wrap deletion requests (recipient-authored kind 5)
Captures the verified current behavior (author-keyed DeletionIndex, no
wrap→rumor cascade, accidental seal-id blocking) and the agreed design:
recipient special case in hasBeenDeleted, recipient field on HostStub,
and the reverse-lookup live cascade in LocalCache.

https://claude.ai/code/session_01B39MQmrT3dz137nfpXABvo
2026-06-12 22:52:15 +00:00
Vitor PamplonaandGitHub 3339577c37 Merge pull request #3200 from vitorpamplona/claude/laughing-tesla-va4nvi
Improve NIP-82 software app UI with author info and screenshots
2026-06-12 15:43:28 -04:00
Claude bb43fd97b8 feat: open app screenshots fullscreen via ZoomableContentView
ScreenshotsStrip now renders each screenshot through ZoomableContentView,
so tapping one opens the standard fullscreen zoomable viewer with paging
across all of the app's screenshots. Tiles keep a fixed height and take
their width from the image's cached aspect ratio (portrait fallback
before first load).

https://claude.ai/code/session_01RJSke6d4dpSZgdtXAmGMmp
2026-06-12 19:31:31 +00:00
Claude 8c7430038d fix: letter-avatar fallback for app icons while loading or on failure
AppIcon used to render an empty bordered box when the icon url was
missing, still downloading, or failed to load. It now draws the app
name's first letter on a surfaceVariant background underneath the
image, so all three states show a meaningful placeholder.

https://claude.ai/code/session_01RJSke6d4dpSZgdtXAmGMmp
2026-06-12 18:19:20 +00:00
Vitor PamplonaandGitHub bf07917260 Merge pull request #3196 from vitorpamplona/claude/nice-ptolemy-9153uk
Add Selected filter mode for curated notifications
2026-06-12 14:07:38 -04:00
Claude 7072da5286 feat: show screenshots in app feed cards, drop platform chips
Feed cards now render the app's screenshots in a horizontal LazyRow at
200dp so the images are big enough to convey what the app is about.
The platform/license chips were removed from the card since they add
little at feed level (still shown on the detail screen).

https://claude.ai/code/session_01RJSke6d4dpSZgdtXAmGMmp
2026-06-12 18:07:24 +00:00
Claude 7743d2a82a feat: show 'by <author>' under the app name in feed cards and detail header
Replaces the standalone author row on the detail screen with a shared
AppAuthorLine ('by' + clickable profile picture + username) rendered
right under the app name, and adds the same line to the app feed cards.

https://claude.ai/code/session_01RJSke6d4dpSZgdtXAmGMmp
2026-06-12 18:05:44 +00:00
Vitor PamplonaandGitHub c6ac3bebed Merge pull request #3197 from davotoula/fix/relay-log-diagnostics
Make relay failure logs diagnosable (exception class on null message, correct NIP-11 error label)
2026-06-12 13:42:31 -04:00
David KasparandGitHub 83a32c685a Merge pull request #3198 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-06-12 19:41:42 +02:00
Crowdin Bot 7f0a902ece New Crowdin translations by GitHub Action 2026-06-12 17:37:46 +00:00
David KasparandGitHub efe23db553 Merge pull request #3195 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-06-12 19:35:45 +02:00
Vitor PamplonaandGitHub e0e21f4562 Merge pull request #3192 from vitorpamplona/claude/eager-ptolemy-rwso2r
Add NIP-89 app recommendation management UI
2026-06-12 13:33:38 -04:00
davotoula d2f0b717ba Code review:
- apply exception-class fallback to connect() too
- dedup message construction
2026-06-12 19:30:09 +02:00
davotoula 16e5ddbc5f fix(amethyst): report NIP-11 fetch failures as FAIL_TO_REACH_SERVER 2026-06-12 19:30:09 +02:00
davotoula 91a003d72d fix(quartz): include exception class in relay failure logs when message is null 2026-06-12 19:30:09 +02:00
Claude 1ea0b91ff1 feat: relabel the curated notification filter from Selected to Curated
https://claude.ai/code/session_013VDWpD8Dr6sBF7tBEUZGpg
2026-06-12 17:30:02 +00:00
Claude b9a1d198c2 feat: show app author on the app detail screen
Adds a clickable author row (profile picture + username) below the
app header, matching the owner row pattern used by community and
long-form screens.

https://claude.ai/code/session_01RJSke6d4dpSZgdtXAmGMmp
2026-06-12 17:26:27 +00:00
Crowdin Bot bd8f4cdb48 New Crowdin translations by GitHub Action 2026-06-12 17:23:00 +00:00
Claude 24ef184de5 fix: start the app recommendations flow eagerly to pin notes in the soft cache
With WhileSubscribed, nothing held a strong reference to my own 31989
notes while no UI was collecting; under memory pressure the soft cache
could drop them, and the next recommendApp would rebuild that kind's
event from an empty snapshot, wiping previously recommended apps.
Eagerly keeps the observer registered (its result set strongly
references the notes), matching the sibling account states.

https://claude.ai/code/session_015dX5vWqvXUYD8rzPYX8vTB
2026-06-12 17:22:57 +00:00
Vitor PamplonaandGitHub 5d1e9d3a6e Merge pull request #3194 from vitorpamplona/claude/vibrant-feynman-awdqs4
Exclude metadata tags from text search
2026-06-12 13:21:11 -04:00
Claude ac7f55eb3e refactor: extract NIP-89 recommendation logic into AppRecommendationsState
Follows the Account state-class convention (InterestSetsState et al.):
the observed flow, the publish mutex, and recommendApp/unrecommendApp
now live in model/nip89AppHandlers/AppRecommendationsState, publishing
through account.sendMyPublicAndPrivateOutbox. Account just links it as
val appRecommendations = AppRecommendationsState(signer, cache, scope).

https://claude.ai/code/session_015dX5vWqvXUYD8rzPYX8vTB
2026-06-12 15:40:15 +00:00
Claude 5263e3b1d9 fix: exclude p, e, a, and alt tags from note text search matching
Their values are ids or descriptions of other events, not content of
the event itself, so they shouldn't make an event match a text search.

https://claude.ai/code/session_01YMs6aXuvs5NaYjzyPH6Zqj
2026-06-12 15:37:16 +00:00
Claude 41055c7769 fix: align app detail screen with thread UI conventions
- Add 12dp horizontal padding to all app detail sections (header,
  screenshots, about, platforms, topics, links, releases) so content
  no longer touches the screen edges like other screens
- Render comments with the reply-level indentation bars used by the
  regular thread feed (drawReplyLevel + levelFlowForItem)
- Move the reactions row below the releases, matching the master-note
  layout of thread screens, and follow it with a divider
- Drop the Comments section label since the reactions row + threaded
  replies already follow the standard screen pattern

https://claude.ai/code/session_01RJSke6d4dpSZgdtXAmGMmp
2026-06-12 15:36:35 +00:00
Vitor PamplonaandGitHub ee95312700 Merge pull request #3193 from vitorpamplona/claude/nifty-brown-egcooi
Add --payer-data flag to offer request command
2026-06-12 11:30:20 -04:00
Claude cbe4b030e1 refactor: expose my 31989s as a LocalCache-observed StateFlow on Account
Account.myAppRecommendations is now LocalCache.observeEvents (indexed
kind+author filter) stated in the account scope, seeded with a
synchronous scan so the editor's first frame still sorts correctly.
The editor and the Recommend button collect it instead of rescanning
the cache on every newEventBundles emission; isAppRecommended is gone.
The synchronous scan stays only as the seed and for the mutex-guarded
read-modify-write publishers, which must read current cache truth.

https://claude.ai/code/session_015dX5vWqvXUYD8rzPYX8vTB
2026-06-12 15:29:30 +00:00
Claude 18c21ad51b feat(cli): add --payer-data to amy offer request
Offers can be configured (via nmanage / ShockWallet) to require payer
fields; Lightning.Pub rejects requests missing them with the misleading
"Invalid Offer" (code 1) reply. A flag to attach payer_data makes such
offers testable from the CLI.

https://claude.ai/code/session_01Fh7MRv8477pJiAJZ7yF87r
2026-06-12 15:18:45 +00:00
Claude 3fc19ce023 refactor: model the curated notification mode as TopFilter.Selected
Replaces TopFilter.GlobalRaw: TopFilter.Global itself now shows every
event that p-tags the user in Notifications (still minus hidden/reported
authors, muted threads, hidden DM content, and self), and the curated
per-kind relevance heuristics move to a new notifications-only
TopFilter.Selected mode.

Selected is offered only in the notifications top nav filter and is the
default for new users and new installs. Existing users who had Global
selected keep Global and therefore now see everything, intentionally.

https://claude.ai/code/session_013VDWpD8Dr6sBF7tBEUZGpg
2026-06-12 15:15:16 +00:00
Claude eed490f579 fix: open app definitions by address instead of version event id
Clicking an app in the recommendations editor (or any 31990 link)
navigated to Route.Note(event.id) — the per-id version note, which the
soft cache evicts and relays can't serve for replaceables — leaving the
thread stuck on 'Event is loading or can't be found'. Route by
addressTag() like the generic AddressableEvent branch already does.

https://claude.ai/code/session_015dX5vWqvXUYD8rzPYX8vTB
2026-06-12 15:08:42 +00:00
Claude 7f39a18a02 fix: exclude client tag from note text search matching
Searching for an app name (e.g. "Amethyst") was returning every event
published through that client, because the local-cache note search
matched the search term against all tag values including the NIP-89
["client", ...] tag. Skip the client tag when matching tag values in
findNotesStartingWith.

https://claude.ai/code/session_01YMs6aXuvs5NaYjzyPH6Zqj
2026-06-12 15:07:13 +00:00
Claude 36d1b9b506 feat: split notifications Global into Selected (curated) and a raw Global
The notifications mode previously labeled Global applied per-kind relevance
heuristics (tagsAnEventByUser) that drop reactions/reposts targeting other
people's notes, unrelated thread replies, etc. That mode is now shown as
"Selected" in the notifications spinner, and a new real Global mode
(TopFilter.GlobalRaw) shows every event that p-tags the user, filtered only
by the notification kind whitelist, hidden/reported authors, muted threads,
muted DM content, and self-authored events.

The split-notifications Everyone tab now pins to the raw Global mode.
Other feeds' Global filter is unchanged.

https://claude.ai/code/session_013VDWpD8Dr6sBF7tBEUZGpg
2026-06-12 15:00:53 +00:00
Vitor PamplonaandGitHub 1927ce1ef0 Merge pull request #3191 from vitorpamplona/claude/elegant-allen-9mt4he
Unify payment card UI with PaymentCard component
2026-06-12 10:59:49 -04:00
David KasparandGitHub f161cfce77 Merge pull request #3190 from vitorpamplona/l10n_crowdin_translations
New Crowdin Translations
2026-06-12 16:56:31 +02:00
Claude 4b47da9c5d feat: 'by author' chip on app items + stable scroll on return to the editor
- New ByAuthorChip ('by <picture> <name>' pill, tappable to the profile,
  with the following-checkmark overlay on the picture) shown under the
  app name in the recommendations editor rows and on the app definition
  card, so apps from known authors are distinguishable from impersonators.
- The editor's ordering pins now initialize from cached data instead of
  empty sets, so the first frame after returning from an item sorts the
  same as before leaving; previously the restored scroll anchor jumped
  down the list when the recommended/follows tiers kicked in.

https://claude.ai/code/session_015dX5vWqvXUYD8rzPYX8vTB
2026-06-12 14:44:05 +00:00
Crowdin Bot 061da30553 New Crowdin translations by GitHub Action 2026-06-12 13:33:32 +00:00
Vitor PamplonaandGitHub b37e62cd62 Merge pull request #3186 from nrobi144/feat/unhealthy-relay-review
feat(desktop): unhealthy-relay review banner + popup
2026-06-12 09:31:34 -04:00
Claude 7605a5659a revert: drop the kind 31989 search result collapsing
Restores SearchBarViewModel to return search results unmodified.

https://claude.ai/code/session_015dX5vWqvXUYD8rzPYX8vTB
2026-06-12 13:28:38 +00:00
Vitor PamplonaandGitHub da8dca29d7 Merge pull request #3188 from davotoula/feat/onchain-failure-translations
Localize onchain zap send UI and failure messages
2026-06-12 09:20:18 -04:00
davotoula a593ec35f4 Code review:
- Account.kt: collapse three identical backend-not-configured Failure
  constructions into one helper
- OnchainZapSendError: declare causeIsUserFacing on the enum so the
  sender owns which failures carry a human-readable cause, instead of
  the UI mapper hardcoding the list
- SendPaymentScreen: fee chip label is now a single format resource
  instead of manual string concatenation
2026-06-12 14:05:12 +02:00
davotoula 97f9cca43e feat(l10n): localize onchain zap send dialog and failure messages 2026-06-12 14:04:55 +02:00