<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coinosv3.git/src/recipient-search.js, branch fdroid-v1.8</title>
<subtitle>coinos v3 — bitcoin, Ark, Lightning and nostr wallet (web + Android)</subtitle>
<id>https://git.coinos.io/coinosv3.git/atom?h=fdroid-v1.8</id>
<link rel='self' href='https://git.coinos.io/coinosv3.git/atom?h=fdroid-v1.8'/>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/'/>
<updated>2026-09-11T05:51:56Z</updated>
<entry>
<title>Ship the punks at the size we actually draw them.</title>
<updated>2026-09-11T05:51:56Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-11T05:51:56Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=82cd8da7f5ab285b3a91f7284fb8d845400012ca'/>
<id>urn:sha1:82cd8da7f5ab285b3a91f7284fb8d845400012ca</id>
<content type='text'>
The art is 240x240 (20KB each, 1.5MB for the set) because that's what a punk
published as someone's nostr picture should be — but the circles the app
draws are 18 to 64px, so a new wallet with nothing cached was fetching eight
times the pixels it could show, one request per face.

punks-sm carries a 128px copy of each: 4KB instead of 20KB, indistinguishable
at 64px. Small circles and the wizard's picker tiles load those; only the 64px
profile avatar and the value the wizard publishes stay full-size.

The bigger win is that a punk picture is our own art wherever it turns up.
Everyone who keeps the default publishes v3.coinos.io/punks/N.webp as their
nostr picture, so those faces now paint straight off disk at the size being
drawn — no request, no thumbnail to make, and no broken circle when the
legacy coinos.io copies 502 (which they do for a third of the set).

Co-Authored-By: Claude Opus 5 (1M context) &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_019mrt228Upn9nNCwGixzSLx
</content>
</entry>
<entry>
<title>Recipient search warms its pipes on focus, not first keystroke: the Primal cache socket, the registrar's TLS session, and the NIP-50 relay connections each cost a handshake that used to land on the first query — the cold second of dead air. Touching the send recipient field, opening user search, or unfolding New message now pre-opens all three (throttled; the idle reaper still closes the socket a minute after real use)</title>
<updated>2026-09-03T01:56:04Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-03T01:56:04Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=c4357ab5563aacc3614bfaf8f54cfb5c79a7f1ba'/>
<id>urn:sha1:c4357ab5563aacc3614bfaf8f54cfb5c79a7f1ba</id>
<content type='text'>
Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01MrkLsNScXe9b6BviUSdmMr
</content>
</entry>
<entry>
<title>Hats: put your money where your head is — supporter hats perch above the avatar everywhere it appears, from 21-sat beanie to 2.1M-sat top hat; the crown stays on the founder</title>
<updated>2026-08-16T07:38:49Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-08-16T07:38:49Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=f23a0488854a58bea8c0cb2ddc8e1c424a6828f4'/>
<id>urn:sha1:f23a0488854a58bea8c0cb2ddc8e1c424a6828f4</id>
<content type='text'>
Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JtaatFfAbx91Nh3xqKVqKz
</content>
</entry>
<entry>
<title>The wizard waits out a signer login; a picked recipient shows its work, and search answers from memory before the network</title>
<updated>2026-08-08T16:24:17Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-08-08T16:24:17Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=a8636d2658aedab96eb545ef2f0ba0db972ca228'/>
<id>urn:sha1:a8636d2658aedab96eb545ef2f0ba0db972ca228</id>
<content type='text'>
Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Avatars stop flashing everywhere: backgrounds, not &lt;img&gt;</title>
<updated>2026-08-04T08:50:24Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-08-04T08:50:24Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=c19fd63f1687c8fdfd38a8446e7cf936342ba4ef'/>
<id>urn:sha1:c19fd63f1687c8fdfd38a8446e7cf936342ba4ef</id>
<content type='text'>
A recreated &lt;img&gt; decodes async — one blank frame per render, and boot
renders in bursts. A CSS background paints synchronously from cache, so
the profile page, chat rows, and send candidates all hold steady now.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Zap screens show the recipient, cap amounts to Spending, faster search</title>
<updated>2026-08-03T14:48:31Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-08-03T14:48:31Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=51e0a583ca29019bced1e4e6349afd1c7572a988'/>
<id>urn:sha1:51e0a583ca29019bced1e4e6349afd1c7572a988</id>
<content type='text'>
The zap flows (ark-direct and Lightning) show the recipient's avatar
chip instead of a bare name, and their LNURL ceiling is now capped by
our own Spending balance — when Spending can't cover their minimum the
amount field is replaced by a plain "not enough in Spending" notice
rather than an impossible "min 1 · max 0" range. The confirm path
enforces the same cap.

Recipient search feels instant now: the first short query fires after
120ms (the wait users actually notice) and longer mid-word queries wait
500ms to skip characters still being typed; cached prefixes stay
instant.

Onboarding success screen: check below the title and larger.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
</content>
</entry>
<entry>
<title>Self-host the punks; skipping avatar still publishes your punk</title>
<updated>2026-08-03T14:42:24Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-08-03T14:42:24Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=161adb250e4273d0bcaa160516bc950f5f46310f'/>
<id>urn:sha1:161adb250e4273d0bcaa160516bc950f5f46310f</id>
<content type='text'>
coinos.io serves 502 for a third of the punk set (both the numbered and
hash endpoints), which is why a default avatar could come up blank. The
64 webps now ship with the app (53 salvaged, 11 gaps filled with
donors) and every reference is same-origin. Skipping the avatar step
publishes the deterministic punk as the kind-0 picture — your face is
the same on every nostr client. Success screen: checkmark now sits
below the title, bigger.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
</content>
</entry>
<entry>
<title>Identity polish: 12-char npub default names, no ellipsis, copyable npub</title>
<updated>2026-08-03T02:45:21Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-08-03T02:45:21Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=49a2dd2761fa6ede9f0de4d50cdc4c1c1f731147'/>
<id>urn:sha1:49a2dd2761fa6ede9f0de4d50cdc4c1c1f731147</id>
<content type='text'>
The registrar's auto-claimed username and every npub-fallback display
name use the npub's first 12 characters, shown whole (no truncation
dots), and the profile page's npub gets a copy button.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
</content>
</entry>
<entry>
<title>Punk default avatars, header profile button, owner channel creation</title>
<updated>2026-08-03T02:39:00Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-08-03T02:39:00Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=78ab79e7527bdab08c59e5ee8ee5dd701c0856e0'/>
<id>urn:sha1:78ab79e7527bdab08c59e5ee8ee5dd701c0856e0</id>
<content type='text'>
Everyone gets a face: profiles without a picture fall back to a coinos
punk, picked deterministically by the pubkey's last byte — the same 64
webps and formula the coinos app uses (initials show through if the
image can't load). Your own avatar moves from the chat home to the app
header next to the wallet selector, opening your editable profile from
anywhere.

Community owners can add channels from the room's + panel: one
owner-signed ChannelMetadata edition (CORD-03), and every member's
channel switcher grows when the fold lands.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
</content>
</entry>
<entry>
<title>Pay an npub: ark &gt; lightning &gt; on-chain, and fix the orphaned LN seams</title>
<updated>2026-08-03T01:17:27Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-08-03T01:17:27Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinosv3.git/commit/?id=8da44392be513929802a5f4329b29bfa125aaa04'/>
<id>urn:sha1:8da44392be513929802a5f4329b29bfa125aaa04</id>
<content type='text'>
Picking a search result (or pasting an npub) now resolves every way the
person can be paid and takes the best: their kind-10037 ark advert; an
ark= instruction in BIP-353 via their coinos name (registrar /pubkey
returns the URI directly) or their nip05 name's own DNS record (a bare
domain is the BIP-353 "_" user); then Lightning from profile lud16/
lud06 through the zap flow; then a BIP-353 on-chain address as last
resort. Search results no longer put the nip05 identifier in the fill
value — that's how fiatjaf.com ended up as a dead recipient.

Along the way: the zaps feature's canLnPay/startLnPay seams had no
provider since the swaps feature retired, so the whole Lightning-zap
path was unreachable. Ark provides both now (the ASP pays invoices
natively), which also revives zapping any LN-only npub.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
</content>
</entry>
</feed>
