Commit Graph

5019 Commits

Author SHA1 Message Date
2ro 565a2d1eca brand: phoenix in the remaining mobile/PWA assets; drop dead splash rasters
Deploy to GitHub Pages / deploy (push) Waiting to run
Test / test (push) Waiting to run
Rounds out the phoenix rebrand for assets the earlier logo.svg swap
missed:

- public/icon-192.png / icon-512.png (PWA install icons, referenced by
  manifest.webmanifest) still had the old bolt-on-circle mark.
- Android's push-notification status-bar icon (ic_stat_ditto, all
  densities) was carrying an even older mark — a ringed-planet icon
  from 'Ditto', the project two forks back. Regenerated as a white
  phoenix silhouette (status-bar icons must be flat white on
  transparent; the OS tints them).
- android/.../splash_icon_vector.xml, the actual live Android 12+
  splash icon (wired via styles.xml's windowSplashScreenAnimatedIcon),
  had the old double-bolt path hardcoded. Replaced with the phoenix
  path and recomputed the scale/center math for its 1446x1246 viewBox.
- ios/.../Splash.imageset (wired into LaunchScreen.storyboard) had an
  even older blue crossed-arrow mark predating Agora. Regenerated as
  the brand-orange phoenix on white, matching the existing small
  centered-mark proportions.

Also deleted the legacy per-density drawable*/splash.png and
drawable/splash_icon.png rasters: confirmed unreferenced by any theme,
manifest, or code (the app fully migrated to the Android 12
SplashScreen API / splash_icon_vector.xml), so they were dead weight
carrying outdated branding no user could ever see.

generate-icons.sh now produces all of the above so future logo changes
regenerate everything in one pass instead of missing assets again.

Note: unlike the web assets, the Android/iOS changes here only take
effect on the next native app build + store release — there's no web
deploy step for them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 13:41:57 -04:00
2ro aa936b59f9 brand: recreate og-image.jpg with Eranos marks; drop 'Who made Eranos?' FAQ
Test / test (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Has been cancelled
og-image.jpg (the link-preview image for eranos.fund) still carried the
Agora bolt logo and wordmark, plus an in-app mockup labeled 'Agora'.
Recreated it in-place via a headless-Chromium render: same world-map/
phone-mockup background, Agora branding swapped for the Eranos phoenix
in both spots.

Also removed the 'Who made Eranos?' FAQ entry, which credited Soapbox/
Ditto (the upstream Agora fork) rather than describing Eranos itself.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 03:07:15 -04:00
2ro ba8ba5fef9 content: fix donor guide privacy section — nonlogs.io link was on the wrong card
Test / test (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Has been cancelled
The nonlogs.io link previously sat on 'Skip the public receipt', a
behavioral tip with no relation to exchanges — clicking through led
somewhere the surrounding copy didn't explain. Looked up NonLogs (a
privacy-first exchange, no KYC/logs/account required, listed by the
Grin community for GRIN/USDT trading) and gave it its own card next to
'Acquire Grin without KYC', where it actually belongs. 'Skip the
public receipt' is now a plain tip with no dangling external link.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 03:00:41 -04:00
2ro 68fdc01fc9 content: donor guide privacy section — Bisq as an example, nonlogs.io link, softer exchange warning
Test / test (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Has been cancelled
- 'Acquire Grin without KYC' copy now names Bisq as one option, not the
  only one.
- 'Skip the public receipt' now links to nonlogs.io (no-KYC exchange)
  instead of a coinjoin wallet, which didn't match the card's point.
- 'Exchanges know who you are' overstated that all exchanges track
  withdrawals; softened to 'some' and points to nonlogs.io as the
  no-KYC alternative.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 02:16:52 -04:00
2ro 3f8c14ab69 content: recipient guide cash-out — swap exchange link, drop spend-directly
Deploy to GitHub Pages / deploy (push) Has been cancelled
Test / test (push) Has been cancelled
Point the Exchanges tile at nonlogs.io (no-KYC) and match its chip/copy
to the Peer-to-peer tile's 'no KYC' framing. Drop the Spend it directly
tile — no vetted resource to link yet.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 23:36:53 -04:00
2ro d19cdace19 brand: feed empty-state hero says Eranos, not leftover Agora
Deploy to GitHub Pages / deploy (push) Has been cancelled
Test / test (push) Has been cancelled
LandingHero (shown as the splash above the feed) hardcoded the
fork-original 'ÁGORA' brand name instead of config.appName like
TopNav does.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 23:27:58 -04:00
2ro 7c173af097 brand: swap Bitcoin coin for Grin/MimbleWimble coin on About page step 2
Deploy to GitHub Pages / deploy (push) Has been cancelled
Test / test (push) Has been cancelled
step-2-send.jpg showed a Bitcoin-B coin; Eranos is Grin-only. Replaced
with the MW smiley-coin, matching the alt text already in en.json.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 23:20:19 -04:00
2ro 4e75f56d4d brand: phoenix in the inline LogoIcon/AgoraBoltIcon components
Deploy to GitHub Pages / deploy (push) Has been cancelled
Test / test (push) Has been cancelled
The header, sidebar, hero, onboarding, and auth screens draw the brand
mark from inline React SVG components, not /logo.svg — so the previous
logo swap didn't reach them. LogoIcon now carries the phoenix path
(currentColor); AgoraBoltIcon wraps it in fixed brand yellow.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 18:45:05 -04:00
2ro 8933c00974 brand: new phoenix logo
Deploy to GitHub Pages / deploy (push) Has been cancelled
Test / test (push) Has been cancelled
Replace the diamond-bolt mark with the phoenix (brand yellow #fcd414).
Regenerate favicons, web logo.png, and Android/iOS launcher icons from
the new public/logo.svg; update the generator scripts for the new
viewBox (1446x1246) and fill color.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 18:17:12 -04:00
2ro efb13c7fbe copy: purge leftover Bitcoin/silent-payments text, describe the real Grin flow
Deploy to GitHub Pages / deploy (push) Has been cancelled
Test / test (push) Has been cancelled
2026-07-02 14:56:33 -04:00
Goblin ce63127e69 eranos: use our own relay (nrelay.us-ea.st), not Agora's ditto relays
Deploy to GitHub Pages / deploy (push) Has been cancelled
Test / test (push) Has been cancelled
Starts clean instead of showing every Agora campaign.
2026-07-02 09:21:15 -04:00
Goblin f131198feb Eranos: Grin-only fundraising (rebrand + Grin payments + gold)
Deploy to GitHub Pages / deploy (push) Has been cancelled
Test / test (push) Has been cancelled
Rebrand Agora to Eranos and strip the non-Grin rails. Add Grin donations:
a GoblinPay client + GrinPayDialog, on-chain payment-proof verification
(receiver-sig + kernel-on-chain + dedupe), and a proof-verified campaign
tally (kind 3414). Shift the brand from orange to gold. 118 tests green.
2026-07-02 08:12:51 -04:00
Chad Curtis 24009cabdd release: v2.9.1
Deploy to GitHub Pages / deploy (push) Has been cancelled
Test / test (push) Has been cancelled
2026-06-27 12:48:41 -05:00
Chad Curtis 817144c146 Fix Venezuela relief popup donate button navigating to home
The popup's donate button and learn-more link used a React Router
<Link> inside the Radix dialog. The dialog's click handling swallowed
the SPA navigation, so the click only closed the popup and left the user
on the home page — looking like the popup cleared itself out and went
nowhere.

Point both at the absolute production URL (https://agora.spot/venezuela-relief)
via a plain <a href>, which does a full, reliable navigation regardless
of the dialog's event handling.
2026-06-27 12:47:04 -05:00
Chad Curtis 6e03a4abb9 Showcase all Venezuela relief campaigns instead of one
Replace the single baked-in terremoto-venezuela campaign with a live,
agnostic showcase: every Venezuela-located campaign tagged
`humanitarian-aid` or `emergency-relief` and created since the
earthquake is pulled in and rendered as a card carousel across the home
hero and the dedicated relief page.

- New useVenezuelaReliefCampaigns hook queries kind 33863 filtered by
  `#i: [iso3166:VE]` + `#t: [humanitarian-aid, emergency-relief]` +
  `since` (quake timestamp), and aggregates on-chain raised totals the
  same way useProfileCampaignStats does (one /address lookup per
  campaign, summed; no per-receipt /tx fan-out). The flagship
  terremoto-venezuela campaign predates the geo-tag convention and
  carries no `iso3166:VE` tag, so it's pinned by coordinate and merged
  ahead of the filtered results, deduped by aTag.
- Extend useCampaigns with `categories` (`#t`) and `since` options.
- New VenezuelaReliefShowcase: an auto-panning marquee of CampaignCards
  (seamless -50% loop, hover/focus pause, click-drag + momentum, edge
  fades, prefers-reduced-motion fallback to a native scroll rail),
  ported from the surveil deck shelf.
- Hero/page CTAs and the popup donate button now point at the relief
  page (no more single-campaign naddr deep-link); the page CTA scrolls
  to the showcase. Drop the embedded CampaignDetailPage, the
  .relief-donate-flash CSS, and the now-unused scroll-to-campaign logic.
- VenezuelaReliefGoal now reads the aggregate hook and shows the
  combined raised total + matching-campaign count only (no goal bar —
  an aggregate goal across independent campaigns is meaningless).
- Tighten the hero height so the carousel sits near the fold.
- Locale updates across all 16 languages: drop `startCampaign`/`goalOf`,
  add `showcaseTitle` + `campaignCount`.
2026-06-27 12:40:18 -05:00
Chad Curtis 89eb5fb6ac release: v2.9.0 2026-06-25 16:16:05 -05:00
Chad Curtis 89f78914c2 Bake Venezuela relief campaign into appeal surfaces
Resolve the terremoto-venezuela campaign (naddr) directly in the relief
banner, popup, and dedicated page, turning each into an info + donation
hybrid:

- New useVenezuelaReliefCampaign hook + VenezuelaReliefGoal component
  surface the campaign's live raised/goal progress in all three surfaces.
- Donate CTAs deep-link to the campaign naddr; on the dedicated page the
  full campaign detail (story, donate panel, ledger, comments) is embedded
  below the appeal hero, and "Donate to relief" smooth-scrolls to the
  donate panel and flashes a highlight ring (mobile inline + desktop
  sidebar). Scroll margin clears the sticky nav.
- Drop the "Raise funds for Venezuela" button; shrink the page hero.
- Add the goalOf locale key across all 16 locales.
2026-06-25 16:13:47 -05:00
Chad Curtis eb35eeaf63 Merge branch 'venezuela-relief-popup' into 'main'
Add Venezuela relief banner to home page

See merge request soapbox-pub/agora!43
2026-06-25 16:10:03 +00:00
Chad Curtis 96335c1472 Add Venezuela relief popup, shareable page, and share buttons
Extend the home-page Venezuela earthquake relief appeal beyond the hero
banner so it can reach more visitors and be shared directly:

- Session popup (VenezuelaReliefPopup) mounted site-wide in AppRouter.
  Shows once per browser session (sessionStorage) on a fresh load of any
  route, carrying the same photo, headline, and donate CTA as the hero.
- Dedicated /venezuela-relief page (VenezuelaReliefPage) so the appeal
  has its own shareable URL with SEO/OG metadata and a "how your donation
  helps" non-custodial explainer. The hero and popup link to it via
  "Learn more".
- Share buttons (native share sheet, clipboard fallback via shareOrCopy +
  useShareOrigin) on the hero banner, popup, and page.
- Shared constants in lib/venezuelaRelief.ts (route, image gallery,
  donate deep-link, popup sessionStorage key) keep all three surfaces in
  sync.
- Fix the highlighted "you" word to match the home hero idiom
  (leading-[0.95] so the orange block hugs the cap height).

The popup decides whether to open exactly once per page load via a
module-level guard, so React 19 StrictMode's double-mount can't write the
"seen" flag on the first mount and then suppress the popup on the remount
(which made it flash open and immediately dismiss).

New venezuelaRelief locale keys added to en.json and translated across
all fifteen other locales.
2026-06-25 10:53:43 -05:00
Chad Curtis ee189f6455 Remove orphaned common.donors locale keys
The donors_one/donors_other plural keys were the last consumer of the
donor count, which the previous commit dropped from the campaign card.
Delete them from en.json and all fifteen other locales.
2026-06-25 10:04:50 -05:00
Chad Curtis 88bb768658 Drop donor count from campaign cards to skip the per-receipt tx fan-out
The card footer showed "x donors", sourced from useCampaignDonations'
donorCount. Populating that count required fetching every kind 8333
receipt for the campaign and then verifying each one with a per-receipt
Esplora /tx call — a fan-out that, across a ~200-card grid, hammered
every configured Esplora backend.

Cards only ever render the raised total (the progress bar), which needs
just the single /address balance lookup. Add a receipts option to
useCampaignDonations that skips the receipt fetch and verification
fan-out, and have CampaignCard pass receipts: false. Remove the now-dead
donor-count UI and its unused t()/useTranslation import.
2026-06-25 10:04:50 -05:00
Chad Curtis 9362ebf8d6 Add Venezuela earthquake relief banner to home page
Pin a full-bleed emergency relief banner to the top of the home page
during the Venezuela earthquake response. It rotates through news
photographs from Caracas via the shared HeroBanner (slow crossfade +
Ken-Burns pan), with a humanitarian headline and two CTAs: Donate to
relief (deep-links to /campaigns?country=VE) and Raise funds for
Venezuela (auth-gated campaign creation).

Also fix a latent HeroBanner crossfade bug where new layers mounted at
their final opacity, making transitions snap instead of fade; layers now
mount hidden and flip visible on the next animation frame.

Copy lives under campaigns.home.venezuelaRelief.* and is translated
across all 16 locales.
2026-06-25 10:04:50 -05:00
Alex Gleason fe16f2ac07 read: false from relay.primal.net and relay.damus.io 2026-06-25 15:48:33 +03:00
Alex Gleason 8adf351ae6 Localize "no Bitcoin" Cash App prompt 2026-06-25 15:44:56 +03:00
Alex Gleason 3f4746a72d Use official Cash App logo in "no Bitcoin" prompt 2026-06-25 15:35:57 +03:00
Alex Gleason 059dff3686 Add "Don't have Bitcoin?" Cash App prompt to campaign pages 2026-06-25 15:32:00 +03:00
lemon 9bfc3498da Remove unused WLC hero image 2026-06-24 10:02:32 -07:00
lemon 47a35d35cf Make DM backfill progressive and cursor-safe
Keep the fast pooled first render, but merge each read relay's DM backfill
into the visible inbox as soon as that relay finishes instead of waiting for
all relays. Track per-relay sent/received cursors so older pagination cannot
skip dense relay history because another relay returned older sparse events.

Timed-out or failed relays are kept retryable instead of being marked
exhausted, while successful relay cursors unlock deterministic pagination.
Backfilled events still dedupe by id and update latest previews/sort order.
2026-06-23 12:47:44 -07:00
lemon 734be77be7 Render DM inbox fast, then backfill slower relays
Use the shared pooled query for the initial messages page so the inbox keeps
Ditto-style fast first paint with the provider's short eoseTimeout. Page 0 is
marked pending backfill, then a background effect queries each configured read
relay individually, merges those slower results into the same infinite-query
cache entry, and unlocks older-page pagination after backfill completes.

Also update conversation merging so a backfilled newer event updates the row's
latest preview and sort order.
2026-06-23 12:37:34 -07:00
lemon 301309f03c Fetch DMs from every read relay instead of racing the pool
The inbox query went through the shared pool, whose eoseTimeout resolves as
soon as the first relay sends EOSE (+300ms). DMs held only by slower relays
were dropped, so each hard refresh returned a different, incomplete set of
conversations. Fan the kind-4 query out to each configured read relay
individually (Promise.allSettled, bounded by the existing 8s cap) and merge
deduped by event id, so every relay contributes its full set.

The inbox query key now carries the read-relay list; update the send-message
optimistic cache writes to match ['direct-messages', pubkey] by prefix so the
append still lands.
2026-06-23 12:27:00 -07:00
lemon 05c1d1bf39 Hide muted DM conversation immediately on mute
handleMute awaited addMute's relay round-trip (fetch fresh kind 10000 +
publish) before hiding the conversation, leaving the muted thread visible
for a few seconds. Hide the peer optimistically the moment the user
confirms; the relay-backed mute list still reconciles on reload.
2026-06-23 12:22:27 -07:00
lemon cf9535ff39 Add new-chat compose flow to /messages with inline recipient autocomplete
Adds a 'New message' button to the conversation list (and the empty-pane
prompt) that opens a fresh compose pane in the right column instead of a
modal. The pane has a 'To:' field that drives debounced profile search via
useSearchProfiles (name / NIP-05 / npub / nprofile), rendering suggestions
inline beneath the field — no popover. Arrow-key navigation + Enter select a
recipient; choosing one opens the normal thread (existing conversation or a
fresh blank thread). Adds the supporting locale strings across all locales.
2026-06-23 09:26:06 -07:00
lemon a76d53e686 Fix status bubble visibility — use top offset instead of bottom-full
bottom-full anchored the bubble above the avatar block's top edge, which
margin-collapses up into the banner, pushing the bubble off the visible
area. Position it with a top offset within the same coordinate space the
original used, lowered so its tail rests at the banner's bottom edge.
2026-06-23 08:53:37 -07:00
lemon 7e6fe43b86 Polish profile: lower status bubble, plain campaign cards, themed raised total
- Anchor the NIP-38 status bubble to the bottom edge of the banner so it
  no longer overlaps the follow/donate action buttons.
- Drop the founder/verified footer badges from the profile Agora tab so its
  campaign cards render identically to the campaigns page CampaignCard.
- Recolor the 'raised' stat from text-orange-500 to text-primary to match
  bio/profile hyperlink coloring.
2026-06-23 08:50:32 -07:00
lemon 809f4aa7dc Align login back arrow vertically with the dialog close button
The back arrow used top-5 on a size-9 padded button, sitting lower than
the X close button (top-4, size-5 icon). Move it to left-2 top-2 so its
icon center lines up with the X on the opposite side.
2026-06-21 00:13:40 -07:00
lemon c380ef70ae Match login secret-key input and upload button height to submit button
Bump the nsec input and key-file upload icon button to h-12 / size-12 so
they line up with the full-width 'Log in' submit button below them.
2026-06-21 00:11:33 -07:00
lemon 97f5f82b05 Rework login modal: translations, layout, and UX
Overhaul AuthDialog's login step:
- Add translation keys for every previously-hardcoded string (titles,
  buttons, placeholders, status labels, validation/errors) across all
  sixteen locales.
- The secret-key form is no longer collapsible — it's always open and is
  the first option, followed by 'Log in with extension', then a
  text-with-arrow link to the remote-signer step.
- Move the key-file upload icon onto the same row as the nsec input
  (instead of beside the submit button); submit button is now full-width
  below.
- Surface extension-login errors as a destructive toast rather than
  writing them into the nsec input's inline error.
- Replace the centered 'Back' text buttons with a back arrow in the
  top-left of the dialog header.

Also correct AGENTS.md's i18n section: the project ships fifteen
non-English locales (hi, id, sw, tr, zh-Hant were missing from the list).
2026-06-21 00:08:52 -07:00
lemon b01f573bf9 Hide nav language switcher when logged in; swap hero CTA to Verify campaigns
Logged-in users change language via Settings, so the top-nav globe now
appears only when logged out (matching the search icon). On the homepage
hero, replace the 'Explore campaigns' button with 'Verify campaigns' and
order it before 'How it works'. Drop the now-unused exploreCampaigns
locale key across all locales.
2026-06-20 23:55:03 -07:00
lemon 59538e1798 Add search to account dropdown 2026-06-20 23:43:32 -07:00
lemon e132587b6d Add profile message action 2026-06-20 23:40:52 -07:00
lemon c78a7ac089 Match profile group card sizing 2026-06-20 23:30:26 -07:00
lemon 9498411e13 Avoid cramped profile Agora cards 2026-06-20 23:25:11 -07:00
lemon 5e07f72fb8 Refine profile Agora campaign grid 2026-06-20 23:21:46 -07:00
lemon e7ca4cc9b1 Merge profile Agora tabs 2026-06-20 23:13:34 -07:00
lemon 4d148218ac Move profile fields below bio 2026-06-20 22:59:35 -07:00
lemon 716579d91e Simplify profile overflow menu 2026-06-20 22:55:47 -07:00
lemon bba7fb045a Remove profile reaction action 2026-06-20 22:52:14 -07:00
lemon 557063c0f3 Match profile action button heights 2026-06-20 22:50:14 -07:00
lemon 65aeb724a3 Move profile stats above bio 2026-06-20 22:49:26 -07:00
lemon 21306afdb2 Inline raised profile stat 2026-06-20 22:48:20 -07:00