Commit Graph

4972 Commits

Author SHA1 Message Date
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
lemon 34b5babc01 Blend verification request button 2026-06-20 22:45:01 -07:00
lemon 43dee910b8 Remove verification request button border 2026-06-20 22:43:22 -07:00
lemon 979cc1d097 Refine verification request button 2026-06-20 22:42:16 -07:00
lemon 00579e5de2 Request verification by message 2026-06-20 22:38:49 -07:00
lemon 978ee5f77e Show verifier statements in messages 2026-06-20 22:32:13 -07:00
lemon 66bc7e80f2 Translate received direct messages 2026-06-20 21:38:56 -07:00
lemon 1b5d2bf771 Filter messages by followed users 2026-06-20 21:22:52 -07:00
lemon 495c2c7ce0 Add message thread header actions 2026-06-20 21:16:08 -07:00
lemon cdf47e2900 Smooth direct message sending 2026-06-20 21:00:08 -07:00
lemon 4d7a7acbae Fix direct message thread decryption 2026-06-20 20:55:49 -07:00
lemon 790787aa43 Remove message count badges 2026-06-20 20:51:16 -07:00
lemon ca972704fb Update messages composer controls 2026-06-20 20:50:25 -07:00
lemon 514db0cc59 Refine message send icon 2026-06-20 20:47:18 -07:00
lemon b34660f7d4 Soften messages input styling 2026-06-20 20:45:48 -07:00
lemon 4e0c97482a Restyle message send icon 2026-06-20 20:43:24 -07:00
lemon bf1770eec2 Unify message pane background 2026-06-20 20:40:54 -07:00
lemon e0f122aaad Remove messages pane borders 2026-06-20 20:37:29 -07:00
lemon b244e9d645 Fix messages viewport overflow 2026-06-20 20:35:50 -07:00
lemon 728a56af3f Search message peers by display name 2026-06-20 20:07:01 -07:00
lemon 5553a31ffa Constrain messages page scrolling 2026-06-20 20:01:03 -07:00
lemon 7a4259db6a Paginate direct messages like feeds 2026-06-20 19:54:24 -07:00
lemon 1e4c0735e6 Redesign and speed up messages page 2026-06-20 19:45:14 -07:00
lemon 2e0defa977 Page direct-message history backwards so old conversations load 2026-06-20 19:38:40 -07:00
lemon 0e75799cf0 Add a NIP-04 direct messages page 2026-06-20 11:35:51 -07:00
mkfain e4b0f9a80d Add a corporate sponsorship page
Add /sponsors, a landing-style page for companies that want to partner
with the platform. Lays out the three ways to get involved: an
unrestricted gift to the Agora Seed Fund (BTC or USD), a matching pool
for an individual campaign, a featured campaign, or a curated list of
campaigns (e.g. political prisoners or women's sovereignty in Africa),
and promoting Agora donations to a customer base as a philanthropic
initiative.

Modeled on AboutPage's section recipe (dark hero, alternating section
backgrounds, hand-rolled cards) and routed under the wide
FundraiserLayout above the /:nip19 catch-all. Adds a Sponsors link to
the site footer. English copy only for now; other locales fall back to
English until the copy settles.
2026-06-19 10:54:13 +03:00
lemon 374a1d62de Localize the 'Your name' placeholder in the profile editor
ProfileCard's namePlaceholder default was a hardcoded 'Your name'
literal used by the profile/org editor onboarding steps. Default it to
the new profile.namePlaceholder key (translated across all locales) and
resolve it via t() in the component body; callers that pass their own
placeholder (e.g. the campaign name step) are unaffected.
2026-06-14 17:46:59 -07:00
lemon ccf6b59ae1 Backfill missing translations across all 15 non-English locales
Keys added to en.json over time (notably the verifier create-account
onboarding flow, the walletDoubleTweak recovery namespace, and the
campaign-wizard tag step) were never propagated to the other locales,
so they silently fell back to English at runtime — which is why the
verify-campaign onboarding steps still rendered in English under e.g.
Chinese despite the components calling t().

Translate every key present in en.json but missing from each locale
(84-157 keys each, 1553 total) so all sixteen locales are now complete
with zero English fallbacks. Placeholders, technical tokens, and the
Agora name are preserved verbatim; plural categories follow each
language's grammar.
2026-06-14 17:39:16 -07:00
lemon 5375466e15 Translate the secret-key field aria-label in onboarding
The nsec reveal input in the onboarding 'Save your key' step carried a
hardcoded English aria-label. Route it through
onboarding.secure.secretKeyAriaLabel and translate across all locales.

This was the last untranslated user-facing string in the verifier
create-account flow.
2026-06-14 17:26:01 -07:00
lemon d1e579dda3 Redesign the auth welcome step around the Agora brand
Drop the 'Welcome to Agora' header and the Nostr-flavored subtext from
the welcome step. The Agora bolt mark and wordmark are now the focal
point — laid out inline with the same tight spacing and Bebas display
recipe as the top-nav wordmark, just larger — and the wordmark doubles
as the dialog's accessible title.

Retitle the two buttons to 'Create new account' / 'Log in with
existing' (no Nostr phrasing) and route them through new auth.* keys,
translated across all sixteen locales.
2026-06-14 17:22:38 -07:00
lemon 786938f9fc Translate the image crop dialog and verify-tutorial goal label
The crop modal used in the verifier 'set up your organization'
onboarding step had hardcoded English controls (Reset, the
reposition/zoom hint, Cancel, Processing, Apply Crop, and the default
title). Route them through a new top-level imageCrop namespace and
add translations for all sixteen locales.

The VerifyTutorial demo card's 'of … goal' label was also hardcoded;
reuse the existing campaignsDetail.ofGoal key.
2026-06-14 17:09:58 -07:00
lemon 0486ff3c9f Use a globe icon and tidy the language switcher column
Swap the top-nav language trigger from the Languages glyph to Globe — the
more universal "change language" affordance.

Stop flipping individual RTL rows: the previous per-item dir="rtl" pushed
Arabic / Persian / Pashto names to the far edge while LTR rows hugged the
left, leaving a ragged, jarring column. Force every row LTR-aligned
(text-left) so the selected dot and the names share one clean left edge,
while each name keeps its own lang attribute so the browser still shapes
Arabic/Persian/Khmer/CJK glyphs correctly.
2026-06-14 16:48:00 -07:00
lemon f6c5b69b5c Add an always-visible language switcher to the top nav
A visitor who lands in a language they can't read had no discoverable way
to change it: on desktop the only chrome was the search icon + login, and
the picker was buried at /settings/language (itself only reachable through
the mobile hamburger's "Settings" — a word they may not be able to read).

Add a globe/languages icon to the top-nav right cluster, visible to
everyone regardless of login state. It opens a dropdown listing every
supported language by its own native name (each row rendered in its own
lang/dir), so the right entry is recognizable no matter the current UI
language. Selecting one switches in place via changeAppLanguage without
navigating away, so scroll position and in-progress form state survive.
The /settings/language page remains the canonical deep-link.

New key nav.language added to en.json and all 15 other locales (reusing
each locale's existing language.title translation).
2026-06-14 16:43:58 -07:00
lemon b034716fca Translate strings introduced during the verify-onboarding work
Wire the branch-new hardcoded UI strings through i18n:

- ProfileCard's shared image-edit menu ("Upload file", "Paste URL",
  "Remove") and the website-slot placeholder now use t(); the component
  gains useTranslation.
- The campaign profile step's name placeholder regressed from a
  translated string to a literal "Campaign title" when it switched to the
  shared identity card; restore it via a new
  onboarding.profile.campaignNamePlaceholder key.

New keys added to en.json and translated into all 15 other locales:
profile.imageMenu.{upload,pasteUrl,remove}, profile.websitePlaceholder,
and onboarding.profile.campaignNamePlaceholder.

The plural keys flagged by a first pass (campaignsCount, seeAllCampaigns,
followersTitle, profile.verified.count, etc.) already resolve via
i18next's _one/_other suffixes and needed no change. Pre-existing
untranslated strings that predate this branch (e.g. ImageCropDialog) were
left untouched.

Regression-of: a7a9ed06
2026-06-14 16:34:03 -07:00
lemon 3534a0c4f7 Consolidate duplicated profile-edit logic in onboarding and campaigns
These onboarding/campaign surfaces accumulated several copies of the same
logic over the iterative work. Fold them into shared modules:

- Kind-0 publishing: the campaign-creator profile step reimplemented the same
  read-modify-write publish that usePublishOrgProfile already had (fetch fresh
  -> parse -> merge name/picture/banner/about -> publish with prev), plus its
  own parseProfileMetadata. Route it through the shared hook.

- Draft type: the identical ProfileIdentityDraft and OrgProfileDraft
  interfaces become one ProfileDraft in src/lib/profileDraft.ts, alongside
  parseProfileMetadata/mergeProfileDraft helpers. The hook no longer imports
  its draft type from a component module.

- Auto-grow textarea: the campaign story and verifier bio fields shared an
  identical borderless textarea with copy-pasted height-resize handlers and
  styling. Extract an AutoGrowTextarea component plus an autoGrowTextarea
  helper (also reused by ProfileCard's editable fields).
2026-06-14 16:23:30 -07:00
lemon 222968286b Shorten profile edit button label to 'Edit'
The action now sits in a compact row beside the avatar, so the verbose
'Edit profile' label is unnecessary. Shorten profile.header.editProfile
to just 'Edit' across all locales.
2026-06-14 16:15:12 -07:00
lemon 37dd7dc3e7 Move profile actions onto the avatar row on mobile
On sm/md the Edit Profile / QR / more (or Follow / Donate) buttons sat in
a full-width row below the bio. Put them on the same row as the avatar,
bottom-right, Twitter/X-style: ProfileIdentityHeader gains a hideActionBar
prop, ActionBar is exported with an align prop, and the mobile layout
renders the avatar and a right-justified ActionBar (align="end") together.
With align="end" the Edit Profile button sizes to its label instead of
stretching full-width.
2026-06-14 16:13:32 -07:00
lemon c39caab068 Use the larger profile avatar size at every breakpoint
The profile avatar was size-28 below md and size-32 at md+, so it shrank
on small screens. Pin it to size-32 everywhere and drop the matching
responsive overhang (-mt-20), status-bubble offset, and skeleton
placeholders to the larger variant so the layout stays aligned.
2026-06-14 16:09:45 -07:00
lemon b0fc77ada1 Let verify tutorial demo card fill the /verify card width
On /verify the VerifyTutorial rendered without the stacked prop, so its
DemoStage stayed capped at max-w-md inside the much wider max-w-2xl
verifier panel, leaving the animated campaign card looking too small for
its parent. Pass stacked so the demo spans the full container width.

Regression-of: 96c7acfc
2026-06-14 16:07:38 -07:00
lemon 7c4ee25379 Keep profile banner height constant and inscribe avatar crop circle
The recent profile banner/sticky-rail experiments (the 3:1 cover crop,
desktop banner isolation, square corners, and the various sticky/pinned
identity-rail attempts) were reverted off this branch; they added
complexity without landing cleanly.

Re-apply the two wanted tweaks on the clean baseline instead:

- Banner height is now h-48 at every breakpoint rather than shrinking to
  h-36 below md, so it no longer gets needlessly shorter on small screens.
- The avatar crop dialog draws a dashed circle inscribed in the existing
  (square) crop boundary, tracking the cropper's actual rendered crop size
  via onCropSizeChange so it stays flush as the boundary resizes. Wired in
  for the avatar (picture) crops in ProfileSettings and the onboarding
  ProfileIdentityEditor; banner/cover crops are unaffected.
2026-06-14 16:03:34 -07:00
lemon 96c7acfca2 Widen VerifyTutorial demo card on the verify page
The centered (non-stacked) demo card was capped at max-w-sm, which looked
undersized inside the wide card on the /verify page. Bump it to max-w-md so
it better fills the parent. The onboarding flow uses the stacked/full-width
path and is unaffected.
2026-06-14 16:03:34 -07:00
lemon 741ce22d97 Show logged-in user's avatar in verify page tutorial 2026-06-14 16:03:34 -07:00
lemon 1e7bfae560 Replace verify nav tab with CTA buttons on home and campaigns 2026-06-14 16:03:34 -07:00
lemon cf635a19ff Restore verify page editor 2026-06-14 16:03:34 -07:00
lemon 0a6a5830d0 Add verify navigation route 2026-06-14 16:03:34 -07:00
lemon a7a9ed06a3 Reuse organization banner card for campaign title step 2026-06-14 16:03:34 -07:00
lemon 6ac6c0b22f Put campaign banner above name and match the profile name field style 2026-06-14 16:03:34 -07:00
lemon c27dfb212a Restyle the campaign story field to match the org bio step
Swap the FormSection-wrapped mono textarea on "Tell your story" for the
borderless, auto-growing muted textarea used by the organization bio
step, so the two long-form surfaces look the same.
2026-06-14 16:03:34 -07:00