aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Change username: a name this wallet's key claimed before a login identity ↵Adam Soltys2026-10-092-4/+32
| | | | | | was attached no longer reads as taken — the identity-signed claim is refused, so retry signed by the wallet key that owns the record Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Reuse feed overscan to reduce rendering during scroll coastsAdam Soltys2026-10-092-6/+78
|
* Feed scrolls faster on a desktop: a wheel notch pushes a quarter further, ↵Adam Soltys2026-10-092-4/+4
| | | | | | and a grab-and-flick throws twice as hard with a higher top speed Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Grab-and-flick no longer opens the post: a flick that starts a little ↵Adam Soltys2026-10-092-9/+29
| | | | | | sideways still scrolls (only a clearly sideways drag selects text), and any press that moved eats the click Chrome still fires. A wheel push at the very top of the page no longer dies on its first frame (a frame stamp older than the push read as a step up) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Desktop feed scrolls like a phone: a mouse-wheel notch coasts and slows ↵Adam Soltys2026-10-093-0/+196
| | | | | | (quick turns stack, a reverse turn brakes, trackpads left alone), and a mouse can grab the feed and flick it (a sideways drag still selects text, a drag doesn't click what it started on) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Footer: "Show your support" beside How it works opens the hat shop from any ↵Adam Soltys2026-10-094-0/+57
| | | | | | page (shown once a wallet is open, since the shop pays from it) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Profile public key: solid border instead of dashed, a copy icon beside the ↵Adam Soltys2026-10-092-2/+10
| | | | | | key, and a slightly larger font (13px) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Keep carousel flick destination through stale scroll-end eventsAdam Soltys2026-10-092-12/+128
|
* The built-in community's fallback name is Coinos, matching its new ↵Adam Soltys2026-10-081-1/+1
| | | | | | owner-signed metadata (edition v3), so the public /chat page and a client that hasn't folded the control plane yet agree Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Asset paths are site-absolute: relative ones resolved against a deep page ↵Adam Soltys2026-10-083-36/+8
| | | | | | (/feed/…, /nevent1…) and fetched the app's HTML, which broke the coinos community's logo (and would have broken the QR decoder, signer module and language packs there). Dev server serves the app icons. The live Concord delivery test is gone: it posted "delivery test" messages into the real coinos #general Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Chip strips drag sideways with a mouse (a drag doesn't click the chip it ↵Adam Soltys2026-10-082-0/+40
| | | | | | started on) and show a thin scrollbar on mouse devices, so the feed chips that run past the card are reachable on desktop Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Amethyst's feed model: an Everything feed (your follows, everyone on your ↵Adam Soltys2026-10-084-15/+90
| | | | | | lists and packs, and posts from anyone on a hashtag you follow: your topic feeds' tags and your NIP-51 interests, kind 10015) and a Follows + lists feed beside Following, built from your feeds and offered once there's something to add. Long names in search results end in an ellipsis instead of running off the card Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Desktop layout: from 900px the bottom nav is a left rail (your profile first ↵Adam Soltys2026-10-083-12/+141
| | | | | | with a bigger face and name, Settings last) beside a 600px page column, and from 1220px the wallet (balance, Receive/Send, latest payments) rides in a right column; search is a full field in the header there. Floaters re-centred on the page column, open chats still fill the window, phones unchanged Co-Authored-By: Claude Opus 5.5 <[email protected]>
* PWA maskable icon is the inner mark on white, like the native app's adaptive ↵Adam Soltys2026-10-082-1/+1
| | | | | | icon: it was a copy of the full logo, so Chrome's home-screen Coinos showed an extra outer ring Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Auto-pay budgets on offer are round money when fiat is the unit on screen ↵Adam Soltys2026-10-081-1/+9
| | | | | | ($1, $5, $10, $100 in the user's currency, kept as sats at today's rate) instead of 1k/5k/10k/100k sats shown as odd fiat figures Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A tapped lightning:lnurl (NFC at a till) waits on the paying shell for the ↵Adam Soltys2026-10-082-17/+28
| | | | | | feature that pays it instead of sitting as raw text in the recipient field; Paste and Scan stay one line tall as a long address grows the field Co-Authored-By: Claude Opus 5.5 <[email protected]>
* POS terminals ring up in the owner's currency: the app sends its currency ↵Adam Soltys2026-10-082-2/+10
| | | | | | when minting a terminal token (it sent none, so every terminal priced sales in USD and a $0.03 sale paid out as $0.04 CAD), and a new token retunes the terminals already paired to that name Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Max in fiat sends every sat: the figure a Max fill wrote is remembered with ↵Adam Soltys2026-10-082-7/+19
| | | | | | its exact sats, so the cent-rounded amount no longer parses back a few sats short and strands them. Anything typed parses as typed Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The 'Coins renew in ~N days for X. Manage' line under the Spending balance ↵Adam Soltys2026-10-081-29/+3
| | | | | | is gone: the card's gear opens the coins page, which carries the renewal schedule and fees Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Max fills the amount in the unit the field shows: in fiat that's money ↵Adam Soltys2026-10-085-8/+68
| | | | | | floored to the cent (so it never parses back above the maximum), not a BTC figure under a CAD label. One ctx.amountField helper for the ark send/LN Max, the gift Max and fixed-amount zap/BOLT 12 fills Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Registrar: rateExempt IPs in names-config.json skip the per-minute limits ↵Adam Soltys2026-10-081-0/+4
| | | | | | (the operator's own IP while testing sign-ups) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Prefetch visible post threads after a bounded reading dwellAdam Soltys2026-10-084-6/+129
|
* Coins in another device's renewal are busy here too: the renewal sliver ↵Adam Soltys2026-10-083-39/+94
| | | | | | names its inputs, and ArkManager._free / freeCoins exclude coins an in-flight remote renewal holds from balance (counted pending), send/LN/offboard/exit selection, auto-renew, the backstop and the coins page (greyed with the round). Freed the moment that renewal reads finished, failed or lapsed Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Renewals show on every device: the sync snapshot carries each device's own ↵Adam Soltys2026-10-083-2/+112
| | | | | | renewals as display-only slivers (step, amounts, fee, round txid; no signing material), merged into remoteRenewals furthest-step-wins, never as actions; the coins page lists another device's renewal in progress with its round transaction until it finishes there or a 'Renewed' row syncs (two-day cap) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A renewal refused for 'insufficient refresh fee' re-reads the server's fee ↵Adam Soltys2026-10-082-1/+91
| | | | | | schedule and re-prices instead of resubmitting the same underpaying set on every sync; if the new fee leaves under 330 sats (or the price didn't change) it fails and frees the coins. Backstop registration re-reads the schedule on the same refusal Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Renewal page shows the server's flat renewal fee: the schedule reads '0.2% + ↵Adam Soltys2026-10-082-4/+12
| | | | | | 300 sats' and '300 sats' instead of 'free' when the ASP charges a base fee, and the description says automatic renewals wait for the cheapest bracket rather than a free one Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A finished renewal adopted twice no longer shows 'Renewal in progress' ↵Adam Soltys2026-10-082-1/+89
| | | | | | forever: once its done action is pruned, a re-read round breadcrumb adopted it again as a rescue at step 'issued', whose spent inputs had lost their bytes, so every sync threw. A round counts as claimed when its 'Renewed' movement or its fresh coins are already in the wallet; the breadcrumb and rescueParticipation skip it, and a stuck issued action retires without a row Co-Authored-By: Claude Opus 5.5 <[email protected]>
* F-Droid recipe: wrap IssueTracker / unwrap Binaries the way fdroid ↵Adam Soltys2026-10-081-3/+3
| | | | | | rewritemeta wants Co-Authored-By: Claude Opus 5.5 <[email protected]>
* F-Droid recipe: source and signed APKs on git.coinos.io while the GitHub org ↵Adam Soltys2026-10-081-4/+4
| | | | | | is unavailable; issues via gitworkshop.dev (NIP-34) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Savings scan looks 20 addresses past the last used one (BIP-44 gap limit) ↵Adam Soltys2026-10-081-35/+40
| | | | | | instead of stopping at the first unused address, so a seed restored from another wallet shows coins sitting past a gap; the window of 20 is probed in parallel, the empty look-ahead tail isn't kept, and the next fresh address is one past the highest used (never a hole another wallet left) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* No speaker pop on opening the app: the zap sound decodes in an ↵Adam Soltys2026-10-072-25/+42
| | | | | | | OfflineAudioContext and makes its real AudioContext on the first tap (one made at load ran at once in the installed app, re-opening the phone's audio output on every open/refocus), suspended again after the sound and when the app is hidden Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01PCGjEEMD23CweKrefbTDJp
* Gentler on relays: a relay that says rate-limited (CLOSED/OK/NOTICE) gets no ↵Adam Soltys2026-10-072-12/+148
| | | | | | | one-shot reads for 30 s, doubling to 10 min; zap/reply tallies flush at most every 2 s in one REQ (two filters) and the live #e sub swaps at most every 10 s; quoted-note lookups batch per relay over 150 ms — scrolling a 300-follow feed went from ~21 to ~8.5 REQs per 10 s on the busiest relay, primal's "too many concurrent REQs" from 19 to 0 Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01PCGjEEMD23CweKrefbTDJp
* Feed videos before they play: the picture fills the box with only the play ↵Adam Soltys2026-10-076-12/+61
| | | | | | button and size (no seek bar or sound button until playing); hovering the cover no longer paints it over with the app's button grey; upright phone clips (stored sideways with a quarter-turn matrix) paint upright, v1 size caches dropped; a clip the probe found HEVC switches to the copy before fetching the original Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Videos: posters for clips that came without one, and an H.264 copy for a ↵Adam Soltys2026-10-077-9/+448
| | | | | | clip this browser can't picture (an iPhone's HEVC on Chrome for Linux played sound over black) — vmedia container on cs (bun + ffmpeg, /vmedia/), switch on zero-width metadata or an HEVC header from the probe, a line saying why if the copy fails too Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Desktop Send focus: a mouse click leaves the Send button focused, and that ↵Adam Soltys2026-10-072-10/+30
| | | | | | blocked the recipient field — only a field you're typing in is protected now (test opens Send with a real click) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Wizard cover: an upload icon (arrow out of a tray) instead of the camera emojiAdam Soltys2026-10-071-1/+2
| | | | Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Desktop: Send opens with the cursor in the recipient field (once per visit, ↵Adam Soltys2026-10-072-13/+22
| | | | | | never off another field, never on phones); the amount field still takes it once a recipient resolves Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Call the protocol by its name: 'Marmot (MLS)' in the group-type picker and ↵Adam Soltys2026-10-072-6/+6
| | | | | | the send-by menu (White Noise is one app that speaks it); a zap on something no relay has says it may be a private message instead of claiming the post vanished Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Setup wizard: a cover behind the avatar — twelve nature covers ↵Adam Soltys2026-10-0730-9/+152
| | | | | | (self-hosted, Unsplash) cycled with arrows or a swipe, or upload your own; untouched, each pubkey gets its own default, published as the kind-0 banner beside the punk Co-Authored-By: Claude Opus 5.5 <[email protected]>
* DMs: read every relay our kind-10050 inbox list names (up to 8), not just ↵Adam Soltys2026-10-071-1/+4
| | | | | | the first three — a reply delivered only to the fourth (primal) never showed Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Profile links paint whole on the first frame: the server renders /npub1…, ↵Adam Soltys2026-10-075-9/+391
| | | | | | | | | | /nprofile1… and /<name> with the kind 0, latest posts, follow counts and mentioned faces inlined (stale-while-refresh cache, 2 s budget), the app seeds its caches from it, and the big avatar never flashes punk art while a lookup runs A cold visit to a profile link showed a punk, '–' counts and no posts for 9 s. Server-side relay answers settle once events stop arriving (idle 400 ms) instead of waiting out a relay that never sends EOSE: a cold build is ~1.9 s. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* History: a Lightning payment still settling (a zap, mostly) shows at once as ↵Adam Soltys2026-10-073-6/+82
| | | | | | | | a pending Sent row with the recipient's face, and gives way to its completed row One-tap zaps now record who they went to, so their rows carry a face too. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Send suggestions: a name lookup's avatar is a quiet circle until its profile ↵Adam Soltys2026-10-072-3/+99
| | | | | | arrives — the default punk flashed in front of a new account's chosen picture Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Browser tests: public relays answered in the page, never reachedAdam Soltys2026-10-0791-113/+241
| | | | | | | | | | | | | | A suite run let ~90 throwaway test wallets subscribe and publish on public relays from one home address, and nos.lol and relay.damus.io banned it. tools/puppeteer.js wraps puppeteer-core: every socket to a non-local host gets an in-page stand-in relay (EVENT -> OK, REQ -> EOSE). Tests that read real content launch with { relays: 'read' } (real reads, publishes answered in place); feed-live, chat-layout and cordn-ui launch with { relays: 'live' }. LIVE_RELAYS=read|1|host,... overrides per run. profile-key-qr: measure the QR again if a repaint swapped it out. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* names: a welcome DM counts as sent only when a relay acknowledges it — ↵Adam Soltys2026-10-071-2/+24
| | | | | | dead sockets are dropped and it retries on fresh ones (four welcomes on 2026-10-07 vanished after the uplink dropped while the log said sent) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Desktop: the Send amount field takes the cursor as soon as it appears (once; ↵Adam Soltys2026-10-072-1/+30
| | | | | | never off another field, never on phones) Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Swiping to Savings opens its Receive pane (the deposit address, no extra ↵Adam Soltys2026-10-072-6/+170
| | | | | | tap); Enter on Send picks the top suggestion, and Enter walks amount → review → confirm Co-Authored-By: Claude Opus 5.5 <[email protected]>
* ark ui-test and comments-test: no more timing racesAdam Soltys2026-10-072-10/+76
| | | | | | | | | | | | | ark ui-test: wait for the selected balance card to stick before opening Receive (the carousel lands on a card's history, and a glide could settle back on Savings), wait for the first mailbox read before paying, paste addresses whole (typed a key at a time, a re-render mid-typing broke the checksum), and poll for alice's balance and the history rows. 8/8 runs. comments-test: the article and comments it fetched are handed to the app on every relay socket that asks, so it no longer depends on the app reaching the same public relays. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Merge branch 'worktree-agent-a9ba2f8bea9a7dafc'Adam Soltys2026-10-0718-635/+262
|\
| * ln-e2e-test: wait for both CLN nodes to reach the chain tip before the hold ↵Adam Soltys2026-10-071-0/+5
| | | | | | | | | | | | | | | | | | receive Run right after tests that mine, cln-ark could trail by a block or two and the receive failed with final_incorrect_cltv_expiry. Co-Authored-By: Claude Opus 5.5 <[email protected]>