Rename NWC feature to Lightning Wallet Connections and split modal into tabs

Naming: user-facing 'Wallet Connections' -> 'Lightning Wallet Connections'
across the Hub, feature registry, tile, and NixOS modules. Internal ids
(nwc-wallets, albyhub.service, /api/nwc/*) are unchanged.

UX: the service-detail modal put status, domain diagnostics, router ports,
the enable/disable toggle, restart, the liquidity guide and the whole wallet
manager in one cramped scrolling column. For this feature the modal is now
980px wide and split into two tabs:

  - Wallets: wallet grid, create/share/verify flows, collapsible liquidity guide
  - Service & Setup: description, status, domain checklist, ports, enable, restart

A status dot and domain chip sit in the tab bar so state is visible from both
tabs, and the modal opens on Setup when the service is off or the Lightning
Address domain is unconfigured. Wallet cards gain a balance chip, pending
badge, a prominent address row, and separated destructive actions.

Non-NWC services keep the original single-column layout and width.

Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
This commit is contained in:
naturallaw777
2026-07-29 01:59:28 +00:00
co-authored by arena-agent
parent 7d92026303
commit aa4ffaa803
11 changed files with 636 additions and 101 deletions
+4 -4
View File
@@ -227,7 +227,7 @@ FEATURE_REGISTRY = [
},
{
"id": "nwc-wallets",
"name": "Wallet Connections",
"name": "Lightning Wallet Connections",
"description": "Connect apps to isolated wallets on your Lightning node and create reusable Lightning Addresses.",
"category": "bitcoin",
"needs_domain": True,
@@ -461,7 +461,7 @@ SERVICE_DESCRIPTIONS: dict[str, str] = {
"Sovran_SystemsOS integrates Tor natively across your entire stack."
),
"albyhub.service": (
"Create isolated Wallet Connections for Lightning apps and attach reusable Lightning "
"Create isolated Lightning wallets for your apps and attach reusable Lightning "
"Addresses on your Sovran_SystemsOS node."
),
"gnome-remote-desktop.service": (
@@ -4323,7 +4323,7 @@ async def api_domains_set(req: DomainSetRequest):
"error": "domain_conflict",
"conflicting_domain_key": conflicting_key,
"message": (
"Wallet Connections requires its own unique hostname. "
"Lightning Wallet Connections requires its own unique hostname. "
"Choose a new subdomain such as lightning.yourdomain.com. "
f"This hostname is already assigned to: {conflicting_key}."
),
@@ -4448,7 +4448,7 @@ async def api_domains_check(req: DomainCheckRequest):
return {"domains": list(check_results)}
# ── Wallet Connections (NWC) endpoints ────────────────────────────
# ── Lightning Wallet Connections (NWC) endpoints ────────────────────────────
NWC_DOMAIN_FILE = "/var/lib/domains/lightning"
NWC_ALIAS_RE = re.compile(r"^[a-z0-9][a-z0-9_-]{0,31}$")