diff --git a/.env b/.env
index 3781f84b..55649bc4 100644
--- a/.env
+++ b/.env
@@ -1,6 +1,6 @@
VITE_THEME=transparent:transparent,black:#0f0f0e,white:#FFFFFF,accent:#EB5E28,accent-light:#FB652C,gray-dark:#8D8581,gray-light:#A8A5A4,danger:#ff0000,warning:#ebd112,success:#37ab51,input:#FAF6F1,input-hover:#F2EBE1
-VITE_DEFAULT_FOLLOWS=97c70a44366a6535c145b333f973ea86dfdc2d7a99da618c40c64705ad98e322,3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d,82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2,6e468422dfb74a5738702a8823b9b28168abab8655faacb6853cd0ee15deee93
-VITE_DUFFLEPUD_URL=
+VITE_DEFAULT_FOLLOWS=1739d937dc8c0c7370aa27585938c119e25c41f6c441a5d34c6d38503e3136ef,fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52,cc8d072efdcc676fcbac14f6cd6825edc3576e55eb786a2a975ee034a6a026cb,d91191e30e00444b942c0e82cad470b32af171764c2275bee0bd99377efd4075,3335d373e6c1b5bc669b4b1220c08728ea8ce622e5a7cfeeb4c0001d91ded1de,0b118e40d6f3dfabb17f21a94a647701f140d8b063a9e84fe6e483644edc09cb,b83a28b7e4e5d20bd960c5faeb6625f95529166b8bdb045d42634a2f35919450,958b754a1d3de5b5eca0fe31d2d555f451325f8498a83da1997b7fcd5c39e88c,a4cb51f4618cfcd16b2d3171c466179bed8e197c43b8598823b04de266cef110,e56e7b4326618f3d626c0e398f5082c3b16732e469e0a048b7ddb544c2be294a,011c1b374c12fbd3633e98957d3c46bed67983abecef50706c73a77c171d0d2c,b9e76546ba06456ed301d9e52bc49fa48e70a6bf2282be7a1ae72947612023dc,b708f7392f588406212c3882e7b3bc0d9b08d62f95fa170d099127ece2770e5e,5c508c34f58866ec7341aaf10cc1af52e9232bb9f859c8103ca5ecf2aa93bf78,baf27a4cc4da49913e7fdecc951fd3b971c9279959af62b02b761a043c33384c,2edbcea694d164629854a52583458fd6d965b161e3c48b57d3aff01940558884,0fecf65daa26faf3f668e8143325a4c199a040b6345ed40a08614d7dd85b1823,1bc70a0148b3f316da33fe3c89f23e3e71ac4ff998027ec712b905cd24f6a411,f783ba3b12b91e375aba6594015b90bd95f7e132b03cc8c4c52ce0a7c36aab52,3f770d65d3a764a9c5cb503ae123e62ec7598ad035d836e2a810f3877a745b24,82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2,3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d,ee11a5dff40c19a555f41fe42b48f00e618c91225622ae37b6c2bb67b76c4e49,97c70a44366a6535c145b333f973ea86dfdc2d7a99da618c40c64705ad98e322
+VITE_DUFFLEPUD_URL=http://localhost:8000
VITE_ENABLE_ZAPS=true
VITE_FORCE_RELAYS=
VITE_LOGO_URL=
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1dd84eae..6aa141bb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
- [x] Add note preview when composing
- [x] Merge advanced search, feed options, and lists
- [x] Fix loading lists on login
+- [x] Improve anonymous user UX
# 0.2.31
diff --git a/ROADMAP.md b/ROADMAP.md
index f5272b8d..c5cdc567 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -1,5 +1,6 @@
# Current
+- [ ] Feeds load forever if a modal is open
- [ ] Support other list types
- [ ] Use vida to stream development
- [ ] Fix connection management stuff. Have GPT help
@@ -14,7 +15,6 @@
- [ ] Image classification
- https://github.com/bhky/opennsfw2
- [ ] Private groups
-- [ ] Fix unauthenticated experience. Going to an npub just spins
- [ ] Convert app store to nip 89
- [ ] Put search icon in header or hover button, open in modal
- [ ] Hide muted quoted events
diff --git a/src/agent/social.ts b/src/agent/social.ts
index 39ff9f16..d6dc9344 100644
--- a/src/agent/social.ts
+++ b/src/agent/social.ts
@@ -3,9 +3,9 @@ import {Tags} from "src/util/nostr"
import {getPersonWithFallback} from "src/agent/db"
import user from "src/agent/user"
-export const defaultFollows = (import.meta.env.VITE_DEFAULT_FOLLOWS || "")
- .split(",")
- .filter(identity)
+const {VITE_DEFAULT_FOLLOWS} = import.meta.env
+
+export const defaultFollows = (VITE_DEFAULT_FOLLOWS || "").split(",").filter(identity)
export const getFollows = pubkey =>
Tags.wrap(getPersonWithFallback(pubkey).petnames).type("p").values().all()
diff --git a/src/app/EnsureData.svelte b/src/app/EnsureData.svelte
deleted file mode 100644
index 0944f4ad..00000000
--- a/src/app/EnsureData.svelte
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-{#if modal === "relays"}
-
-
- {#if $relays.length > 0}
- Your Relays
- {/if}
-
- {#each $relays as relay (relay.url)}
-
- {:else}
-
-
-
- You aren't yet connected to any relays.
-
-
Search below to find one to join.
-
- {/each}
-
-
-
-
-
-
-
-
-{:else if needsRelays()}
-
-
-
-
- You aren't yet connected to any relays.
-
-
- Click
here to find one to join.
-
-
-
-{:else if modal === "people"}
-
-
- {#if $petnamePubkeys.length > 0}
- Your Follows
- {/if}
- {#each $petnamePubkeys as pubkey (pubkey)}
-
- {:else}
-
-
-
- You aren't yet following anyone.
-
-
Search below to find some interesting people.
-
- {/each}
-
-
-
-{:else if needsPeople()}
-
-
-
-
- You aren't yet following anyone.
-
-
- Click
here to find some interesting people.
-
-
-
-{:else}
-
-{/if}
diff --git a/src/app/ForegroundButtons.svelte b/src/app/ForegroundButtons.svelte
index d92ff980..8e289e3c 100644
--- a/src/app/ForegroundButtons.svelte
+++ b/src/app/ForegroundButtons.svelte
@@ -1,5 +1,6 @@
@@ -122,7 +131,7 @@
+ options={scopeOptions} />
{#if Array.isArray(_filter.authors)}
diff --git a/src/app/shared/PersonInfo.svelte b/src/app/shared/PersonInfo.svelte
index 3e0b4de0..4cec9ccb 100644
--- a/src/app/shared/PersonInfo.svelte
+++ b/src/app/shared/PersonInfo.svelte
@@ -31,7 +31,7 @@
modal.push({type: "person/feed", pubkey: person.pubkey})}
- class="flex gap-4 overflow-hidden border-l-2 border-solid border-gray-7 py-3 px-4
+ class="flex gap-4 overflow-hidden border-l-2 border-solid border-gray-7 py-3 pl-4
transition-all hover:border-accent hover:bg-gray-8">
diff --git a/src/app/state.ts b/src/app/state.ts
index 4d25ddda..0596f712 100644
--- a/src/app/state.ts
+++ b/src/app/state.ts
@@ -19,7 +19,7 @@ import keys from "src/agent/keys"
import network from "src/agent/network"
import pool from "src/agent/pool"
import {getUserReadRelays, getUserRelays} from "src/agent/relays"
-import {getUserFollows, getUserNetwork} from "src/agent/social"
+import {getUserFollows, getUserNetwork, defaultFollows} from "src/agent/social"
import user from "src/agent/user"
// Routing
@@ -290,12 +290,14 @@ export const publishWithToast = (relays, thunk) =>
// Feeds
export const compileFilter = (filter: DynamicFilter): Filter => {
+ const getAuthors = pubkeys => shuffle(pubkeys.length > 0 ? pubkeys : defaultFollows).slice(0, 256)
+
if (filter.authors === "global") {
filter = omit(["authors"], filter)
} else if (filter.authors === "follows") {
- filter = {...filter, authors: shuffle(getUserFollows()).slice(0, 256)}
+ filter = {...filter, authors: getAuthors(getUserFollows())}
} else if (filter.authors === "network") {
- filter = {...filter, authors: shuffle(getUserNetwork()).slice(0, 256)}
+ filter = {...filter, authors: getAuthors(getUserNetwork())}
}
return filter
diff --git a/src/app/views/ChatList.svelte b/src/app/views/ChatList.svelte
index 731e11b0..7db4d890 100644
--- a/src/app/views/ChatList.svelte
+++ b/src/app/views/ChatList.svelte
@@ -10,14 +10,14 @@
import {watch} from "src/agent/db"
import user from "src/agent/user"
import network from "src/agent/network"
- import {getUserReadRelays} from "src/agent/relays"
+ import {getUserReadRelays, sampleRelays} from "src/agent/relays"
import {modal} from "src/partials/state"
let q = ""
let search
let results = []
- const {roomsJoined} = user
+ const {roomsJoined, canPublish} = user
const rooms = derived([watch("rooms", t => t.all()), roomsJoined], ([_rooms, _joined]) => {
const ids = new Set(_joined)
const [joined, other] = partition(r => ids.has(r.id), _rooms)
@@ -32,7 +32,7 @@
onMount(() => {
const sub = network.listen({
- relays: getUserReadRelays(),
+ relays: sampleRelays(getUserReadRelays()),
filter: [{kinds: [40, 41]}],
})
@@ -43,25 +43,27 @@
-
-
-
-
Your rooms
+ {#if $canPublish}
+
+
+
+
Your rooms
+
+
modal.push({type: "room/edit"})}>
+ Create Room
+
-
modal.push({type: "room/edit"})}>
- Create Room
-
-
- {#each $rooms.joined as room (room.id)}
-
- {:else}
-
You haven't yet joined any rooms.
- {/each}
-
-
-
-
Other rooms
-
+ {#each $rooms.joined as room (room.id)}
+
+ {:else}
+
You haven't yet joined any rooms.
+ {/each}
+
+
+
+
Other rooms
+
+ {/if}
diff --git a/src/app/views/ChatListItem.svelte b/src/app/views/ChatListItem.svelte
index fdcdb668..4e72870b 100644
--- a/src/app/views/ChatListItem.svelte
+++ b/src/app/views/ChatListItem.svelte
@@ -8,7 +8,7 @@
export let room
- const {roomsJoined} = user
+ const {roomsJoined, canPublish} = user
const enter = () => navigate(`/chat/${nip19.noteEncode(room.id)}`)
const join = () => user.joinRoom(room.id)
const leave = () => user.leaveRoom(room.id)
@@ -34,7 +34,7 @@
Leave
- {:else}
+ {:else if $canPublish}
Join
diff --git a/src/app/views/Feeds.svelte b/src/app/views/Feeds.svelte
index d9aae730..def71812 100644
--- a/src/app/views/Feeds.svelte
+++ b/src/app/views/Feeds.svelte
@@ -9,12 +9,16 @@
import Popover from "src/partials/Popover.svelte"
import Feed from "src/app/shared/Feed.svelte"
import user from "src/agent/user"
+ import {getUserFollows} from "src/agent/social"
- const {lists} = user
+ const {lists, canPublish} = user
let relays = null
- let filter = {kinds: [1, 1985], authors: "follows"} as DynamicFilter
let key = Math.random()
+ let filter = {
+ kinds: [1, 1985],
+ authors: getUserFollows().length > 0 ? "follows" : "network",
+ } as DynamicFilter
$: listsByName = indexBy(l => Tags.from(l).getMeta("d"), $lists)
@@ -60,36 +64,38 @@
{#key key}
- {#if $lists.length > 0}
-
-
-
- {#each $lists as e (e.id)}
- {@const meta = Tags.from(e).asMeta()}
+ {#if $canPublish}
+ {#if $lists.length > 0}
+
+
+
+ {#each $lists as e (e.id)}
+ {@const meta = Tags.from(e).asMeta()}
+
+ {/each}
- {/each}
-
-
-
- {:else}
-
+
+
+ {:else}
+
+ {/if}
{/if}
diff --git a/src/app/views/NotFound.svelte b/src/app/views/NotFound.svelte
index 06f6b4e5..c48f5276 100644
--- a/src/app/views/NotFound.svelte
+++ b/src/app/views/NotFound.svelte
@@ -1,7 +1,6 @@
diff --git a/src/app/views/UserSettings.svelte b/src/app/views/UserSettings.svelte
index fe5d8da8..a4b8009b 100644
--- a/src/app/views/UserSettings.svelte
+++ b/src/app/views/UserSettings.svelte
@@ -1,7 +1,5 @@