e.stopPropagation()}
onTouchMove={(e) => e.stopPropagation()}
>
diff --git a/src/release-notes.ts b/src/release-notes.ts
index e2a2c87..1deb0c7 100644
--- a/src/release-notes.ts
+++ b/src/release-notes.ts
@@ -14,6 +14,15 @@ export type ReleaseNote = {
}
export const RELEASE_NOTES: ReleaseNote[] = [
+ {
+ version: '26.15.0',
+ date: '2026-06-16',
+ highlights: [
+ 'Mobile got a big usability pass. Tapping a note or profile now opens it as a screen that slides in and can be swiped back, instead of piling up columns. Columns run edge-to-edge, and a new overview — the grid button in the bottom bar — shows all your open columns at a glance so you can jump between or close them (also available on desktop).',
+ 'The mobile bottom bar is clearer, with separate buttons for the column overview, adding a column, and composing a note. The active deck and deck switcher now appear in the top bar on mobile too.',
+ 'A batch of iOS fixes: the layout no longer crops oddly, focusing a text field no longer leaves the page stuck zoomed in, columns sit flush under the toolbar, and a stray browser sign-in popup triggered by some relays and profiles is gone.'
+ ]
+ },
{
version: '26.14.2',
date: '2026-06-15',
diff --git a/src/services/relay-info.service.ts b/src/services/relay-info.service.ts
index 1013a39..b888c6c 100644
--- a/src/services/relay-info.service.ts
+++ b/src/services/relay-info.service.ts
@@ -91,7 +91,12 @@ class RelayInfoService {
private async fetchRelayNip11(url: string) {
try {
const res = await fetch(url.replace('ws://', 'http://').replace('wss://', 'https://'), {
- headers: { Accept: 'application/nostr+json' }
+ headers: { Accept: 'application/nostr+json' },
+ // NIP-11 is public — never send credentials, and `omit` keeps WebKit
+ // from engaging an HTTP auth challenge. Without this, a relay that
+ // 401s with `WWW-Authenticate: Basic` (e.g. a defunct/parked host)
+ // makes Safari pop its native username/password sheet over the app.
+ credentials: 'omit'
})
return res.json() as Omit
} catch {