Commit graph

3207 commits

Author SHA1 Message Date
im-adithya
c3dbeefbb5 fix: replace highlighted dropdown links with menu actions 2026-05-06 12:32:45 +05:30
daywalker90
12c454f3ae
feat: add notifications for CLN backend (#2287)
* fix: protoc command for cln bindings documentation

* feat: update cln proto bindings to v26.04

* feat: add notifications for CLN backend

starting with nwc_lnclient_payment_sent, nwc_lnclient_payment_failed,
nwc_lnclient_payment_received, nwc_payment_forwarded, nwc_channel_ready,
nwc_channel_closed
2026-05-06 13:11:03 +07:00
Adithya Vardhan
099ad146df
chore: bump protobuf hex-display replace to v1.33.0 (#2293)
* chore: bump protobuf hex-display replace to v1.33.0

* chore: update protobuf replace comment for lnd v0.20.1-beta
2026-05-06 13:06:59 +07:00
Adithya Vardhan
f9fd5e9993
chore: bump lnd to v0.20.1-beta (#2285) 2026-05-04 15:07:23 +05:30
Adithya Vardhan
b9d15f54d3
fix: avoid highlighted border on menu buttons in Alby theme (#2286) 2026-05-04 15:06:55 +05:30
dependabot[bot]
fef6fc0afc
build(deps): bump github.com/mattn/go-sqlite3 from 1.14.42 to 1.14.44 (#2276)
Bumps [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) from 1.14.42 to 1.14.44.
- [Release notes](https://github.com/mattn/go-sqlite3/releases)
- [Commits](https://github.com/mattn/go-sqlite3/compare/v1.14.42...v1.14.44)

---
updated-dependencies:
- dependency-name: github.com/mattn/go-sqlite3
  dependency-version: 1.14.44
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-04 14:10:23 +05:30
dependabot[bot]
fa978b6faf
build(deps): bump @scure/bip39 from 2.0.1 to 2.2.0 in /frontend (#2277)
Bumps [@scure/bip39](https://github.com/paulmillr/scure-bip39) from 2.0.1 to 2.2.0.
- [Release notes](https://github.com/paulmillr/scure-bip39/releases)
- [Commits](https://github.com/paulmillr/scure-bip39/compare/2.0.1...2.2.0)

---
updated-dependencies:
- dependency-name: "@scure/bip39"
  dependency-version: 2.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-04 13:55:49 +05:30
dependabot[bot]
66467b580a
build(deps): bump dayjs from 1.11.13 to 1.11.20 in /frontend (#2278)
Bumps [dayjs](https://github.com/iamkun/dayjs) from 1.11.13 to 1.11.20.
- [Release notes](https://github.com/iamkun/dayjs/releases)
- [Changelog](https://github.com/iamkun/dayjs/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/iamkun/dayjs/compare/v1.11.13...v1.11.20)

---
updated-dependencies:
- dependency-name: dayjs
  dependency-version: 1.11.20
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-04 13:42:00 +05:30
dependabot[bot]
80291dcb90
build(deps-dev): bump @commitlint/cli from 20.5.0 to 20.5.3 in /frontend (#2279)
Bumps [@commitlint/cli](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/cli) from 20.5.0 to 20.5.3.
- [Release notes](https://github.com/conventional-changelog/commitlint/releases)
- [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/cli/CHANGELOG.md)
- [Commits](https://github.com/conventional-changelog/commitlint/commits/v20.5.3/@commitlint/cli)

---
updated-dependencies:
- dependency-name: "@commitlint/cli"
  dependency-version: 20.5.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-04 13:37:50 +05:30
dependabot[bot]
a73338e168
build(deps-dev): bump typescript-eslint from 8.58.2 to 8.59.1 in /frontend (#2281)
build(deps-dev): bump typescript-eslint in /frontend

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.58.2 to 8.59.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.59.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.59.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-04 13:31:05 +05:30
dependabot[bot]
386a849124
build(deps-dev): bump eslint from 10.2.0 to 10.3.0 in /frontend (#2280)
Bumps [eslint](https://github.com/eslint/eslint) from 10.2.0 to 10.3.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v10.2.0...v10.3.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-04 13:26:20 +05:30
daywalker90
28706ecf31
feat: add CLN backend (#2026)
* feat: add CLN as a lnclient backend

* feat: add hold invoice support for CLN backend

* fix: reduce CLN form to just addresses and lightning dir

* feat: add README for CLN grpc go code generation

* fix: cln backend does not support keysend with given preimages

* fix: hold invoice notifications in CLN backend

* fix: remove dead code in CLN backend from ListTransactions

* fix: env example CLN_ADDRESS_HOLD with different port to show it's a different service

* fix: cleanup of CLN ressources in all cases

* fix: cln backend's GetNetworkGraph only fetches specified nodeId's

* fix: cln backend: only advertise hold methods for nip47 if hold plugin enabled

* fix: cln's Shutdown should not stop CLN itself

* fix: relax the LND README line regarding env configuration

* fix: more nil checks in clnInvoiceToTransaction

* fix: prevent feerate overflow in CLN's RedeemOnchainFunds

* fix: don't access nil errors for empty reponses of certain CLN methods

* fix: nil instead of empty string in cln's GetNetworkGraph return types

* fix: nil checks for created_at in cln's clnInvoiceToTransaction

* fix: set minimum tls version to 1.2 for cln backend grpc connections

* fix: cln's subscribeOpenHoldInvoices doesn't give up as fast

* fix: deduplicate graph edges in cln's GetNetworkGraph

* fix: print the error string, not pointer address, in cln's ListChannels

* fix: remove cln's ListTransactions completely

* fix: use ListPeers instead of ListPeerChannels in cln's ListPeers

* feat: cln's MakeHoldInvoice supports minCltvExpiryDelta

* fix: use named return err in NewCLNService

* fix: cln listpeers log message

* fix: incorrect import

* fix: compile errors after rename

---------

Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
2026-05-03 12:36:13 -07:00
Adithya Vardhan
fe1f338ed3
feat: allow payments from app connections (#2267)
* feat: allow payments from app connections

* feat: add searchable pay-from combobox

* chore: add constant for apps limit and sort apps in list

* fix: add serverside filtering, default combobox value

* chore: rename appId to fromAppId in send payment request

---------

Co-authored-by: Roland Bewick <roland.bewick@gmail.com>
2026-05-03 12:27:38 -07:00
im-adithya
a10c328876 fix: stretch theme preview labels to full width 2026-05-01 16:00:01 +05:30
Adithya Vardhan
f9702c6998
fix: preserve badge background clipping (#2273)
* fix: update codex logo

* fix: preserve badge background clipping
2026-05-01 15:48:09 +05:30
Adithya Vardhan
0c421375e5
chore: update to use sat/msat suffixes everywhere (#2271)
* chore: align internal models and methods to use sat/msat suffixes

* chore: update request structs to use sat/msat suffixes

* fix: default max amount to 0 during app creation

* fix: simplify helper functions

* chore: remove unused lnclient probing methods

* chore: remove unused json tags on swap struct

* chore: update frontend to use sat/msat suffixes everywhere

* chore: use request types in frontend

* fix: linting

* fix: remove deprecated sat and msat fields in frontend

* chore: further changes

* fix: avoid sat/msat resolver variable shadowing

* fix: validate Support Alby amounts
2026-05-01 15:41:56 +05:30
Adithya Vardhan
663b805868
feat: simplify onchain receive routing (#2268)
* feat: show onchain options in receive screen

* fix: wallet receive mode routing and navigation issue

* fix: receive on-chain link in command palette
2026-05-01 13:00:45 +05:30
Adithya Vardhan
1394733729
fix: simplify themes (#2270) 2026-04-30 20:39:13 +02:00
René Aaron
925cba450c
refactor(frontend): extract DetailRow for transaction details dialog (#2269)
refactor(frontend): extract TransactionDetailRow for both detail dialogs

Pulls the repeated `<div><label/><value+copy/></div>` shape out of
TransactionItem and OnchainTransactionItem into a shared component with
an optional `copyable` prop. Replaces ~16 hand-written rows in the
lightning dialog and 4 in the on-chain dialog. Lightning also gets
parent-driven `gap-6` spacing in place of per-row `mt-6` / `mt-8`.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 21:03:32 +05:30
René Aaron
25ce056eb8
fix(frontend): auto-balance home dashboard columns (#2255)
* fix(frontend): auto-balance home dashboard columns

Replace the fixed two-column grid with a CSS multi-column layout so
widgets flow and auto-balance regardless of which ones render (several
widgets can return null based on user state). Group the Alby ecosystem
cross-promo cards so they stay together within a column.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: extract Alby home widgets

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-04-30 20:46:36 +05:30
saunter
30ef3c254a
feat(frontend): wallet on-chain mode (#2217)
* feat(frontend): add wallet on-chain balance mode

Show on-chain balances and transactions in Wallet.
Keep receive and send flows aligned with the active balance mode.

Made-with: Cursor

* fix(frontend): gate on-chain toggle on channel management and fix isLast naming

Hide the balance mode toggle for backends without on-chain support
(PHOENIX, CASHU). Rename misleading `isLast` prop to `showSeparator`
in PendingClosedChannelsAlert.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(frontend): inline on-chain balance display per page

Drop the shared OnchainBalanceSummary component. The two call sites
(compact card on Channels, large hero on Wallet) diverged enough that
sharing required threading className overrides for every internal node.
Inline each shape next to its surrounding context.

Also drop the pending-closed-channels alert from Wallet — it's
channel-management context and belongs on the Channels page only.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(frontend): a11y and small cleanups on wallet on-chain mode

- Add aria-label to the balance-mode toggle and aria-hidden on its
  icon so screen readers announce it as a mode switch.
- Drop the unnecessary :index suffix on the pending-closed-channels
  item key — (fundingTxId, fundingTxVout) is unique.
- Replace trailing mb-4 on each on-chain transaction row with
  space-y-4 on the list container so the last row has no dangling
  margin.
- Use named useState import in Wallet to match repo convention.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(frontend): move OnchainTransactionsTable to components/wallet and drop node page copy

Wallet is now the single place to review on-chain transaction history,
so drop the duplicate <OnchainTransactionsTable /> from the Node page
and move the component to components/wallet/ to reflect its new home.
Pure move — no content changes to the component itself.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(frontend): simplify OnchainTransactionsTable to its one use case

Wallet is now the sole consumer of this component, so remove the
reusability props that were only there for the now-dropped Channels
page render: wrapInCard, title, className, contentClassName,
showEmptyState, and the four emptyState* props. The card-wrapping
branch and its CardHeader/CardTitle dependencies are gone with it.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(frontend): add on-chain transaction details dialog

Open a lightweight details dialog from an on-chain transaction row
showing amount, status, confirmations, date/time, and full transaction
id. Mempool becomes a secondary action in the dialog footer (hidden
when no mempool URL is configured).

Diverges slightly from saunter's original implementation: body content
lives in a sibling div of DialogDescription instead of inside it, so
the block elements don't nest inside a <p> (invalid HTML / React
hydration warning).

Folds in https://github.com/getAlby/hub/pull/2218 (original author: saunter).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(frontend): polish on-chain pending transaction state

Treat unconfirmed on-chain transactions as pending in the Wallet UI.
Keep the backend "unconfirmed" state value unchanged — this only
affects UI labels and the variable name (isUnconfirmed → isPending).

Folds in https://github.com/getAlby/hub/pull/2221 (original author: saunter).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(frontend): use "transactions" instead of "payments" in on-chain empty state

Aligns terminology with bitcoin.design convention: "transaction" for
on-chain, "payment" for lightning.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(frontend): reset receive-onchain flow on "Receive Another Payment"

The success screen's "Receive Another Payment" button linked to
/wallet/send (typo) and later to /wallet/receive/onchain (still broken
since the route is unchanged, so React Router wouldn't remount and the
local state kept showing the success card).

Replace the LinkButton with a Button that resets the local state
(txId, confirmed/pending amount, start timestamp) and requests a fresh
on-chain address, taking the user back to "Waiting for Payment…" with
a new QR.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(frontend): address review feedback on wallet on-chain mode

- OnchainTransactionsTable: don't flash the empty state while SWR is
  still loading; only render it once transactions is defined AND empty.
- OnchainTransactionsTable: add DialogDescription to the details dialog
  so DialogContent has an accessible description (fixes Radix's dev
  warning and improves screen-reader flow).
- OnchainTransactionsTable: swap the copy-tx-id native button for the
  shadcn Button in ghost/icon-xs — kept the row-level button native
  because the shadcn variants (justify-center, h-9, bg) fight the
  custom-shaped row surface.
- Wallet: dynamic aria-label on the balance-mode toggle so the current
  state is announced (previously "Switch balance mode" hid the visible
  label).
- Wallet: align on "On-chain Balance" (repo convention — ~18 other uses)
  instead of "On-Chain Balance".
- Wallet: gate the "Open Your First Channel" alert on channels being
  loaded so it doesn't flash while useChannels() is resolving.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(frontend): unify copy buttons in transaction details dialogs

Both the Lightning (TransactionItem) and on-chain (OnchainTransactionsTable)
transaction details dialogs now use the shadcn Button component for
inline copy-to-clipboard affordances — variant=ghost, size=icon-sm,
muted foreground to match the surrounding value text. Previously Lightning
used a bare CopyIcon with onClick and on-chain used a mix; now both
dialogs look and behave the same.

Also drops the now-redundant "Copy Transaction ID" footer button from
the on-chain dialog (the inline copy icon next to the tx id does the
same thing). Footer hosts only "View on Mempool" and renders only when
a mempool URL is configured.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(frontend): second review pass — pluralization and null-guard fixes

- OnchainTransactionsTable: pluralize the confirmations tooltip so a
  single-confirmation tx reads "1 confirmation" instead of
  "1 confirmations".
- PendingClosedChannelsAlert: guard the mempool funding-tx link on
  info?.mempoolUrl being resolved — previously the URL interpolated to
  "undefined/tx/..." during the brief window before useInfo settles.
  Falls back to omitting the funding-tx link rather than rendering a
  broken one.
- PendingClosedChannelsAlert: only render "with {details}" when the
  details arrays are non-empty. Avoids the dangling "with." sentence
  in the unlikely case that pendingBalancesFromChannelClosures > 0
  while both pendingBalancesDetails and pendingSweepBalancesDetails
  are empty.

Other items in the review were already addressed in earlier commits:
capitalization (6a8f47b3), row mb-4 → space-y-4 on parent (c51826bb),
and the title/emptyState* props (gone with the component simplification).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(frontend): drop redundant mempoolUrl guards

Backend always populates info.mempoolUrl — MEMPOOL_API env defaults to
https://mempool.space/api in config/models.go and GetMempoolUrl
(config/config.go:206) returns it with /api trimmed. There's no code
path that leaves the URL empty, so guarding the "View on Mempool"
button and the "funding tx" link against it being falsy was defensive
against a state the backend won't produce. Matches the convention
used elsewhere (ReceiveOnchain etc.).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(frontend): guard against negative incoming and drop dead mb-1

In the Channels-page inline on-chain balance block:

- Switch the "+X incoming" guard from spendable !== total to
  total > spendable, matching the wallet hero. Prevents a negative
  displayed amount in the unlikely event spendable briefly exceeds total.
- Drop mb-1 from the inline <span> wrapping FormattedBitcoinAmount;
  margin-bottom is a no-op on inline elements. Parent <div className="mb-1">
  already provides the intended spacing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(frontend): drop unreachable short-txid branch in subtitle

Bitcoin transaction ids are always 64 hex chars, so the
`tx.txId.length > 22` ternary's false branch is dead code.
Always render the truncated head…tail form in the row.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(frontend): group subtitle with other derived vars

Move the subtitle declaration up alongside Icon, isPending,
typeStateText, statusText, createdAt at the top of OnchainTransactionRow.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(frontend): use ExternalLinkButton for "View on Mempool"

Replace the Button + onClick(openLink(...)) pattern with the repo's
ExternalLinkButton component. In http mode it renders as a real
<a target="_blank" rel="noreferer noopener"> so right-click-to-open,
middle-click, keyboard nav, and ctrl-click all work; in wails mode it
falls back to openLink. Previously the button always used the wails
path regardless of mode.

Also drops the now-unused openLink import.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix: redirect to send screen in onchain mode

* chore: align components

* feat(frontend): drive wallet balance mode from URL

Lift the spending/onchain toggle state into a `mode` query param so the
browser back button restores the previous mode after going through
send/receive flows.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(frontend): split wallet dashboard into Lightning and Onchain routes

Replaces the single conditional Wallet component with two sibling route
components mounted under a shared WalletLayout that hosts the page header
and Outlet. The Lightning view (default `/wallet`) is the renamed and
trimmed-down former index.tsx; on-chain (`/wallet/onchain`) is a new
component with its own balance, action buttons, and transactions list.

The toggle UI stays — clicking it now navigates between the two real
routes instead of flipping a `?mode=` query param, so the browser back
button restores the previous tab for free.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(frontend): drop on-chain incoming indicator from balance header

Pending receives are already visible in the on-chain transactions list
below, so the duplicated +X incoming summary just adds noise.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: René Aaron <rene@twentyuno.net>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-04-30 14:30:01 +02:00
René Aaron
ed7e10cf25
feat: user labels for transactions (#2265)
* feat: user labels poc

* feat: backend for transaction user labels

Add PATCH /api/transactions/:paymentHash/label that merges a
user-supplied {key:value} map into the existing transaction metadata
under the user_label key, preserving NIP-47 fields. Empty map clears
the labels. Trims whitespace, drops blank rows, caps key/value length.

Wire the frontend editor to call the endpoint and revalidate the
transactions SWR cache on success.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat: include user labels as columns in CSV export

Collect the union of user_label keys across all exported transactions
and emit each one as its own label_<key> column. The existing metadata
JSON column is preserved so importers like Raccoin keep working.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat: drop hardcoded label suggestions, autocomplete from prior keys

Open the editor with a single blank row instead of four pre-seeded
fields. Suggest label keys via a datalist populated from any
user_label keys already present in the SWR transactions cache, so
suggestions reflect the user's own taxonomy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat: inline label editor and indicator-only list row

Replace the nested label dialog with an inline editor that toggles
within the existing transaction detail dialog, removing dialog
stacking. In the transactions list, replace per-label badges with a
single tag icon next to the timestamp so row height stays uniform; the
full labels remain visible in the detail view.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix: don't bump updated_at on metadata-only edits

GORM's Update auto-touches updated_at, which made the transactions
list reorder labeled transactions to the top. Switch
SetTransactionMetadata to UpdateColumn so only the metadata column
changes. Add regression test.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat: route PATCH transaction label requests in wails

The desktop app routes API calls through WailsRequestRouter rather
than HTTP. Add a handler for PATCH /api/transactions/:hash/label
before the existing transaction lookup so labels work in Wails too.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: finalize backend

* chore: rename to labels

* chore: finalize frontend

* chore: use tx id to add user labels

* chore: address minor nits

* fix: linting

* fix: use explicit primary key lookups

* chore: simplify transaction csv label export

* fix(frontend): drop label count from transaction list badge

The count adds visual weight without informing any decision from the
list view. The icon-as-badge already signals labels exist; the actual
values are in the details dialog.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(frontend): revert transaction list label indicator to bare icon

The Badge wrapper made the icon-only indicator wider than tall, which
looked off. Restores the pre-PR look — a small TagIcon next to the
timestamp — since the in-dialog editor is the place to see actual labels.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-04-30 13:13:07 +02:00
Adithya Vardhan
7195c09de3
feat: make Alby the default theme and rename default to classic (#2266)
* feat: make Alby the default theme and rename default to classic

* refactor(frontend): extract neutral base.css for theme defaults

Splits the global :root/.dark fallbacks out of alby.css into a dedicated
base.css so no single theme is special. Alby and Classic both become
pure override layers; Classic is now an empty layer that falls through
to base, eliminating the :root/.theme-classic dual-selector pattern.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: René Aaron <rene@twentyuno.net>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 11:04:02 +02:00
René Aaron
51ec695a6d
fix(frontend): improve Earn page readability (#2264)
* fix(frontend): improve Earn page readability and polish

Use theme-safe link styling instead of text-primary (unreadable yellow
on white in the Alby theme), bolder reward amounts, and trophy/heart
icons for non-sat rewards.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: simplify reward icon handling

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-04-28 17:10:36 +05:30
René Aaron
54840ba2ed
refactor(frontend): drop time-based home greeting (#2254)
refactor(frontend): replace time-based greeting with static title

The previous time-of-day greeting used the browser's local hour but had
range bugs (e.g. midnight showed "Good Morning"). Rather than iterate on
the ranges, drop the greeting entirely and use "Home" to match the
sidebar nav.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 14:01:49 +05:30
dependabot[bot]
4c1c592a3c
build(deps): bump swr from 2.3.6 to 2.4.1 in /frontend (#2263)
Bumps [swr](https://github.com/vercel/swr) from 2.3.6 to 2.4.1.
- [Release notes](https://github.com/vercel/swr/releases)
- [Commits](https://github.com/vercel/swr/compare/v2.3.6...v2.4.1)

---
updated-dependencies:
- dependency-name: swr
  dependency-version: 2.4.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 16:58:27 +05:30
dependabot[bot]
eb7ecb086a
build(deps): bump react-router from 7.14.0 to 7.14.2 in /frontend (#2262)
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.14.0 to 7.14.2.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.14.2/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.14.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 16:50:21 +05:30
dependabot[bot]
ba7d10086e
build(deps-dev): bump eslint-plugin-react-hooks from 7.0.1 to 7.1.1 in /frontend (#2261)
* build(deps-dev): bump eslint-plugin-react-hooks in /frontend

Bumps [eslint-plugin-react-hooks](https://github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks) from 7.0.1 to 7.1.1.
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/eslint-plugin-react-hooks@7.1.1/packages/eslint-plugin-react-hooks)

---
updated-dependencies:
- dependency-name: eslint-plugin-react-hooks
  dependency-version: 7.1.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: disable react-hooks set-state-in-effect

* chore: suppress react-hooks set-state-in-render in NewApp

* fix: avoid mutating order before submission

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-04-27 16:46:41 +05:30
dependabot[bot]
a4f81fd907
build(deps-dev): bump @commitlint/config-conventional from 20.0.0 to 20.5.0 in /frontend (#2260)
build(deps-dev): bump @commitlint/config-conventional in /frontend

Bumps [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/config-conventional) from 20.0.0 to 20.5.0.
- [Release notes](https://github.com/conventional-changelog/commitlint/releases)
- [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/config-conventional/CHANGELOG.md)
- [Commits](https://github.com/conventional-changelog/commitlint/commits/v20.5.0/@commitlint/config-conventional)

---
updated-dependencies:
- dependency-name: "@commitlint/config-conventional"
  dependency-version: 20.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 16:45:39 +05:30
dependabot[bot]
008a1c7f74
build(deps-dev): bump @tailwindcss/vite from 4.1.11 to 4.2.4 in /frontend (#2259)
build(deps-dev): bump @tailwindcss/vite in /frontend

Bumps [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite) from 4.1.11 to 4.2.4.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.2.4/packages/@tailwindcss-vite)

---
updated-dependencies:
- dependency-name: "@tailwindcss/vite"
  dependency-version: 4.2.4
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 15:58:29 +05:30
dependabot[bot]
eca9599047
build(deps): bump github.com/BoltzExchange/boltz-client/v2 from 2.11.2 to 2.11.3 (#2257)
build(deps): bump github.com/BoltzExchange/boltz-client/v2

Bumps [github.com/BoltzExchange/boltz-client/v2](https://github.com/BoltzExchange/boltz-client) from 2.11.2 to 2.11.3.
- [Release notes](https://github.com/BoltzExchange/boltz-client/releases)
- [Changelog](https://github.com/BoltzExchange/boltz-client/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BoltzExchange/boltz-client/compare/v2.11.2...v2.11.3)

---
updated-dependencies:
- dependency-name: github.com/BoltzExchange/boltz-client/v2
  dependency-version: 2.11.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 15:52:15 +05:30
René Aaron
12557618ad
refactor(frontend): redesign Pro upgrade modal (#2251)
* refactor(frontend): redesign Pro upgrade dialog and fix theme bleed

- Drop the `premium` button variant; default buttons now use the alby
  theme gradient via theme tokens instead of hard-coded amber
- Fix alby button gradient: target `data-variant` only (so Radix
  asChild wrappers like DialogTrigger don't break the selector) and
  unlayer the override so it's not overridden by Tailwind utilities
- ExternalLink now forwards arbitrary props so ExternalLinkButton's
  data-variant attribute reaches the rendered <a>
- Recompose UpgradeDialog: Pro badge -> headline -> stacked $3 / mo
  price -> 6-feature grid -> CTA with inline price -> guarantee

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(frontend): apply V1 upgrade modal design

Restructure the Pro upgrade dialog to match the V1 "Refined default"
design from the Claude Design handoff:

- Pro pill: primary-tinted Badge with sparkles glyph
- New headline ("Do more with your Hub.") + open-source subhead
- Price block: $3 / month inline with "Billed $36 yearly" caption
- Single-column feature list with primary-tinted check circles
- CTA drops the inline price (already prominent above) and the
  guarantee tightens to "30-day money-back guarantee"

All color treatments use theme tokens (bg-primary/10, border-primary/40,
text-foreground) so the look adapts per hub theme.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(frontend): inline Pro badge in upgrade dialog heading

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix: copy

* fix(frontend): compose onClick in ExternalLink non-http branch

Spreading props after setting onClick silently dropped caller-provided
handlers. Compose them instead so callers' onClick runs, with
openLink skipped if the event is prevented.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: add sr-only to dialog header

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-04-27 15:44:04 +05:30
René Aaron
1c69f2f261
feat: redesign settings pages with improved UI (#2224)
* feat: redesign settings pages with improved UI

- Add icons and group nav into sections
- Visual theme picker with color previews
- Segmented light/dark/system toggle
- Card-based layout for settings sections
- Alby Account: profile info with ProBadge
- Locked themes trigger UpgradeDialog
- Sidebar: startsWith for active states

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: address review feedback

- Sidebar: boundary-aware route matching
- Theme cards: use button for keyboard a11y
- Appearance toggle: add aria-pressed
- Alby Account: show email when name exists

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: use CSS variables for theme previews

Use actual theme classes with CSS variables instead
of hardcoded hex colors for theme preview cards.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor: extract ThemePreview component

Use CSS theme classes directly on preview elements
with a theme-default wrapper for proper fallback.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: mobile view

* revert: restore AlbyAccount page to master

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor: align general settings with other settings pages

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor: drop unused optional description change in SettingsHeader

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix: improve theme picker accessibility and loading state

- Use role=radiogroup/radio semantics for theme grid and dark mode toggle
- Make locked theme cards keyboard-accessible via controlled UpgradeDialog
- Gate render on albyMe load when account connected to prevent lock flash
- Use cursor-not-allowed on disabled theme cards
- Mark ThemePreview aria-hidden (decorative)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor: extract isPathActive helper in AppSidebar

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor: move ThemePreview to components directory

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix: align settings sidebar with main sidebar

* chore: polish appearance section in settings

* chore: add spacing for scroll in backup page

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-04-27 15:12:38 +05:30
René Aaron
2f3dc233d3
feat: improve Alby Account settings page (#2253)
* feat: improve Alby Account settings page

Redesigns the settings page with a unified profile card, groups
destructive actions into a "Danger Zone", and simplifies the copy
for the Switch/Disconnect flows.

Closes #2247

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix: handle loading and failed state

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-04-27 10:55:22 +05:30
hermes-alby
d97ed7114f
chore: update ldk-node-go (#2256)
Co-authored-by: Hermes Alby <hermes-alby@users.noreply.github.com>
2026-04-25 14:50:33 +07:00
dependabot[bot]
3b1dae25ef
build(deps): bump @getalby/lightning-tools from 6.0.0 to 8.1.0 in /frontend (#2237)
build(deps): bump @getalby/lightning-tools in /frontend

Bumps [@getalby/lightning-tools](https://github.com/getAlby/js-lightning-tools) from 6.0.0 to 8.1.0.
- [Release notes](https://github.com/getAlby/js-lightning-tools/releases)
- [Commits](https://github.com/getAlby/js-lightning-tools/compare/v6.0.0...v8.1.0)

---
updated-dependencies:
- dependency-name: "@getalby/lightning-tools"
  dependency-version: 8.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-21 23:08:54 +05:30
dependabot[bot]
20ce0fadae
build(deps-dev): bump typescript-eslint from 8.57.1 to 8.58.2 in /frontend (#2238)
build(deps-dev): bump typescript-eslint in /frontend

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.57.1 to 8.58.2.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.58.2/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.58.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-21 23:00:30 +05:30
dependabot[bot]
3632baeb12
build(deps-dev): bump @types/node from 25.3.3 to 25.6.0 in /frontend (#2239)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 25.3.3 to 25.6.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-21 22:59:13 +05:30
dependabot[bot]
f929e80300
build(deps-dev): bump prettier from 3.8.1 to 3.8.3 in /frontend (#2240)
Bumps [prettier](https://github.com/prettier/prettier) from 3.8.1 to 3.8.3.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.8.1...3.8.3)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.8.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-21 22:54:43 +05:30
dependabot[bot]
7eb0667411
build(deps): bump zustand from 4.5.7 to 5.0.12 in /frontend (#2241)
Bumps [zustand](https://github.com/pmndrs/zustand) from 4.5.7 to 5.0.12.
- [Release notes](https://github.com/pmndrs/zustand/releases)
- [Commits](https://github.com/pmndrs/zustand/compare/4.5.7...v5.0.12)

---
updated-dependencies:
- dependency-name: zustand
  dependency-version: 5.0.12
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-21 22:52:19 +05:30
Adithya Vardhan
dc7f3f4ccb
fix: use file paths instead of hex during LND onboarding (#2231) 2026-04-21 22:33:25 +05:30
hermes-alby
d4bd46f05a
fix: clarify connected peers navigation in LDK alert (#2250)
Co-authored-by: Hermes Alby <hermes-alby@users.noreply.github.com>
2026-04-21 21:42:00 +05:30
Roland
963c7e139c
fix: remove bzip install command (agent can figure it out) (#2246) 2026-04-21 20:59:46 +07:00
René Aaron
fd977f157e
feat: add Sats4AI to app store (#2232)
* feat: add Sats4AI to app store

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: pad Sats4AI logo to square

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-21 11:22:40 +02:00
René Aaron
6e8e8cb056
fix(frontend): use npx skills add for agent skill install prompts (#2236)
* fix(frontend): use npx skills add for agent skill install prompts

Agents WebFetch the GitHub URL and summarize the skill content, losing
important details. Switch to `npx -y skills add` commands which install
the skill directly, matching the pattern already used for payments-skill.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(frontend): use npx skills add for Bitrefill skill prompt too

Bitrefill is also on the skills registry as bitrefill/agents.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-21 11:01:30 +02:00
Roland
0a36ebaf65
chore: make install and update scripts more agent-friendly (#2245)
The download was too verbose.
This lead to the agent unable to read the whole output.
It then made incorrect decisions on what to do next.
2026-04-21 13:58:40 +07:00
Anshuman
1d3f9ecd41
feat: suffix balance/amount fields with explicit unit (Sat or Msat) (#2153)
* feat: add both Sat and Msat companion fields for all ambiguous balance/amount properties

* feat: add sat and msat companion fields to backend API responses

* chore: align frontend types and other missing fields

* chore: keep old formula for calculating total fee sat

* chore: remove unnecessary balance assignments in cashu and phoenix

* chore: add deprecated comment to non unit fields

* chore: rename callers and variable to specify units

* chore: remove msat fields for channel size and liquidity fields

* chore: drop msat fields from onchain channel size and liquidity responses

* chore: further changes

* chore: remove amount msat field onchain tx

* chore: remove msats from onchain balance response

* chore: remove msat fields for swaps

* chore: remove msat fields for punishment reserves

* chore: simplify rebalancing fee calculation

* chore: remove unnecessary fields

* chore: mark deprecated fields in frontend types

---------

Co-authored-by: im-adithya <imadithyavardhan@gmail.com>
2026-04-17 13:53:28 +05:30
saunter
46d3a8942a
feat(frontend): move ZapPlanner button to Wallet and move wallet mobile actions to overflow menu (#2200)
* feat(frontend): improve wallet page balance layout

Center the wallet balance area and tune spacing for a cleaner visual rhythm.
Move secondary actions to the header as ghost buttons and use a vertical more icon.

Made-with: Cursor

* feat(frontend): refine wallet header actions on mobile

Move wallet secondary actions into the mobile overflow menu and add Recurring.
Also remove the ZapPlanner card from Home to avoid duplicate entry points.

Made-with: Cursor

* refactor(frontend): separate wallet actions, add ProDropdownMenuItem and AlertAction

- Extract wallet navigation (Swap, Recurring, Buy) into dedicated WalletActionsMenu component
- Revert TransactionsListMenu to single-purpose (export transactions only)
- Move CSV export logic to shared transactions-utils
- Add ProDropdownMenuItem for reusable pro-gated dropdown items with consistent Pro badge
- Add AlertAction component to alert system for proper action button placement
- Use controlled mode in UpgradeDialog to avoid DialogTrigger data-slot conflicts
- Replace inline upgrade gating in Channels (Set Node Alias) and Settings (themes)
- Theme select now opens UpgradeDialog instead of disabling paid items
- Use AlertAction in SubwalletList for upgrade prompt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(frontend): consolidate export into WalletActionsMenu

Show wallet actions (Swap, Recurring, Buy) only on mobile,
Export Transactions on all breakpoints — removes the separate
TransactionsListMenu from the wallet page.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(frontend): sanitize CSV export and fix subwallet upgrade copy

Prevent CSV formula injection by prepending a single quote to values
starting with =, +, -, or @. Fix grammar in sub-wallet upgrade prompt.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(frontend): center fiat amount skeleton on wallet page

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: René Aaron <rene@twentyuno.net>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 16:18:41 +02:00
saunter
ac88c8d573
feat(frontend): improve wallet balance section layout (#2199)
* feat(frontend): improve wallet page balance layout

Center the wallet balance area and tune spacing for a cleaner visual rhythm.
Move secondary actions to the header as ghost buttons and use a vertical more icon.

Made-with: Cursor

* fix: no important modifiers

* fix: remove important modifiers

* fix: use ghost for both occurrences

* fix: screenreader

* fix: center fiat amount skeleton on wallet page

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: René Aaron <rene@twentyuno.net>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 11:34:50 +02:00
René Aaron
a7a0d891a4
feat: AI & Agents page (#2193)
* feat: ai

* fix: review feedback

* fix: new tabs, install via prompt

* fix: cleanup

* fix: visual improvements

* fix: connection names

* fix: cursor

* fix: copy

* fix: optimize images

* fix: agent card

* fix: cursor logo

* fix: avatar rounding

* fix: class

* fix: link with tab handling

* fix: example prompts, claude code using skill

* fix: capabilities

* feat: share connection instructions

* fix: mange + explore ai apps

* fix: always create a new connection

* fix: use externallink, cleanup

* fix: improved hero copy

* fix: copy

* fix: apply CodeRabbit auto-fixes

Fixed 1 file(s) based on 2 unresolved review comments.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>

* fix: formatting

* fix: openclaw description

* fix: dim card classes

* fix: use tailwind divide classes

* fix: stop cursor blinking in header

* feat: use CLI auth flow for agent wallet onboarding

Replace connection secret embedding with @getalby/cli auth command
for CLI-based agents. The auth flow generates keys locally so the
secret never leaves the device or gets sent to the AI model.

- Generic agents skip connection creation, show auth prompt immediately
- Claude Code and Goose CLI tabs use auth instead of secret/MCP config
- Claude Web/Desktop and Goose Desktop still use MCP URLs as before
- "Waiting for agent to connect" only shown for MCP-based agents

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: simplify AI agent onboarding with CLI auth flow

- Use @getalby/cli auth for all CLI agents instead of embedding
  connection secrets in prompts — keys stay local, never sent to AI
- Split Claude dropdown into "Claude Code" (auth prompt) and
  "Claude Web/Desktop" (MCP setup via /apps/new)
- Goose uses generic auth prompt (no dedicated setup page needed)
- Remove Goose internal-app page/route (no longer linked)
- Remove standalone ClaudeConnectionInstructions and
  GooseConnectionInstructions components (inlined into consumers)
- Add agent logo map in AppAvatar for connections without full
  app store entries (goose, openclaw, cursor, codex, cline, opencode)
- Remove Goose from app store (prevents 404 on internal redirect)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: add gemini, update mcp link

* fix: clarify Claude connector instructions (#2216)

fix: update Claude connector setup wording

Align Claude Web/Desktop steps with current Connectors labels and MCP URL wording.

Made-with: Cursor

Co-authored-by: René Aaron <rene@twentyuno.net>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: inline MCP setup on AI page, remove Claude internal-app

- Add generic McpSetup component for inline MCP URL connection
  creation (reusable for future agents with MCP support)
- Claude entry gets mcpInstructions for Web/Desktop connector setup
- Remove /internal-apps/claude page and route
- Remove Claude from app store, add to agentLogos map
- Support subfolder installs in auth prompt hub URL

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: update inspiration prompts and copy

- Add service names to prompts (bitrefill.com, ppq.ai, unhuman.store)
- Add "Creative" category with image generation + print-on-demand
- Replace weak automation example with spending analysis
- Rename heading to "What can your agent do?"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: improve AI page prompt cards UX

Make inspiration prompts clickable to copy (matching connect card),
use ChevronRightIcon consistently, and add discovery prompt to Services.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: update Services prompt to podcast search example

Replace untestable "bitcoin price data" prompt with a working
discover→fetch example using Pull That Up Jamie podcast search.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat: use npx skills add for agent onboarding prompts

WebFetch summarizes SKILL.md content, losing critical details. Switch
to `npx -y skills add getAlby/bitcoin-payments-skill` which downloads
the full skill file via GitHub without summarization.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: update prompts

* fix: update skill install command to use correct repo name

The repo was renamed from getAlby/bitcoin-payments-skill to
getAlby/payments-skill.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: add -y flag to skill install prompts for non-interactive install

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: redirect to app detail page after connection is established

After approving a new app connection, redirect to /apps/:id instead of
the apps list so the user sees the app they just created.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: match agent logos by app name fallback

When app_store_app_id metadata is not set, fall back to matching the
app name against the agent logos map so agent apps created via auth
show proper icons without needing app store entries.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: saunter <68239231+stackingsaunter@users.noreply.github.com>
2026-04-14 16:36:43 +02:00