diff --git a/ROADMAP.md b/ROADMAP.md index 9356dc5c..a7d07d84 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -4,9 +4,8 @@ - [ ] Use vida to stream development - [ ] Fix connection management stuff. Have GPT help - [ ] Relay reviews - - New kind, d as url? Combine with labeling? - - Show reviews in relay detail rather than events. Warn about events tab - Add curated relay list, and an easy way to view content on the relays + - Deploy ontology.coracle.social - [ ] Add preview proxy thing - [ ] White-labeled - [ ] Add invite code registration for relay @@ -71,6 +70,10 @@ - [ ] NIP 39 Support https://github.com/nostr-protocol/nips/pull/201/files - [ ] Integrate plephy https://plebhy.com/ - [ ] Add support for website kind0 +- [ ] Schedule notes for x seconds in the future with a queue + - In the queue, add send now and cancel buttons + - maybe put all user events here too - keep track of what relays they were published to + - Add un-delete using event log # UI/Features diff --git a/src/agent/cmd.ts b/src/agent/cmd.ts index 17e3f7fc..f94ca093 100644 --- a/src/agent/cmd.ts +++ b/src/agent/cmd.ts @@ -84,6 +84,8 @@ const requestZap = (relays, content, pubkey, eventId, amount, lnurl) => { const deleteEvent = ids => new PublishableEvent(5, {tags: ids.map(id => ["e", id])}) +const createLabel = payload => new PublishableEvent(1985, payload) + // Utils const tagsFromContent = (content, tags) => { @@ -158,7 +160,6 @@ class PublishableEvent { } async publish(relays, onProgress = null, verb = "EVENT") { const event = await this.getSignedEvent() - // console.log(event); return const promise = pool.publish({relays, event, onProgress, verb}) // Copy the event since loki mutates it to add metadata @@ -186,5 +187,6 @@ export default { createReply, requestZap, deleteEvent, + createLabel, PublishableEvent, } diff --git a/src/app/ModalRoutes.svelte b/src/app/ModalRoutes.svelte index 8e8a03fe..f1bb2da4 100644 --- a/src/app/ModalRoutes.svelte +++ b/src/app/ModalRoutes.svelte @@ -21,6 +21,7 @@ import ListEdit from "src/app/views/ListEdit.svelte" import RelayAdd from "src/app/views/RelayAdd.svelte" import RelayDetail from "src/app/views/RelayDetail.svelte" + import RelayReview from "src/app/views/RelayReview.svelte" export let m @@ -41,6 +42,8 @@ {:else if m.type === "relay/detail"} +{:else if m.type === "relay/review"} + {:else if m.type === "onboarding"} {:else if m.type === "room/edit"} diff --git a/src/app/shared/Feed.svelte b/src/app/shared/Feed.svelte index cb62de35..04105d31 100644 --- a/src/app/shared/Feed.svelte +++ b/src/app/shared/Feed.svelte @@ -1,6 +1,6 @@ - + {#if notesBuffer.length > 0} import {find, last, propEq} from "ramda" + import {modal} from "src/partials/state" import OverflowMenu from "src/partials/OverflowMenu.svelte" import user from "src/agent/user" import {getRelayWithFallback} from "src/agent/db" @@ -37,6 +38,12 @@ label: "Add to list", icon: "scroll", }) + + actions.push({ + onClick: () => modal.push({type: "relay/review", url: relay.url}), + label: "Review", + icon: "feather", + }) } if (relay.contact) { diff --git a/src/app/views/Apps.svelte b/src/app/views/Apps.svelte index 01121267..20b9cdf8 100644 --- a/src/app/views/Apps.svelte +++ b/src/app/views/Apps.svelte @@ -20,9 +20,10 @@ ["https://nostr.watch", "Nostr Watch", "A directory of nostr relays."], ["https://nostr.directory", "Nostr Directory", "Validate your nostr pubkey with Twitter."], ["https://getalby.com", "Alby", "Sign in to nostr apps without sharing your private key."], - ["https://nak.nostr.com", "NAK", "A Nostr Army Knife, for advanced users."], ["https://nostrplebs.com", "NostrPlebs", "Get verified at nostrplebs.com."], ["https://nadar.tigerville.no", "Nadar", "Find out what relays know about your post."], + ["https://pinstr.app", "Pinstr", "Create and manage collections of notes."], + ["https://advancednostrsearch.vercel.app", "Advanced Search", "Find what you're looking for."], ] document.title = "Apps" diff --git a/src/app/views/Feeds.svelte b/src/app/views/Feeds.svelte index 9f2c4076..9e671201 100644 --- a/src/app/views/Feeds.svelte +++ b/src/app/views/Feeds.svelte @@ -69,46 +69,44 @@ {/if} - - - {#if $canPublish} - {#if $lists.length > 0} - - - - {#each $lists as e (e.id)} - {@const meta = Tags.from(e).asMeta()} - { - $feedsTab = meta.d - }}> - - {meta.d} - - {/each} + + {#if $canPublish} + {#if $lists.length > 0} + + + + {#each $lists as e (e.id)} + {@const meta = Tags.from(e).asMeta()} - Customize + })} + on:click={() => { + $feedsTab = meta.d + }}> + + {meta.d} - - - {:else} - - {/if} + {/each} + + Customize + + + + {:else} + {/if} - - {#key $feedsTab} - - {/key} - + {/if} + + {#key $feedsTab} + + {/key} diff --git a/src/app/views/RelayDetail.svelte b/src/app/views/RelayDetail.svelte index e8fa9a22..ed2f7b27 100644 --- a/src/app/views/RelayDetail.svelte +++ b/src/app/views/RelayDetail.svelte @@ -2,15 +2,22 @@ import {displayRelay, normalizeRelayUrl} from "src/util/nostr" import Content from "src/partials/Content.svelte" import Feed from "src/app/shared/Feed.svelte" + import Tabs from "src/partials/Tabs.svelte" import RelayTitle from "src/app/shared/RelayTitle.svelte" import RelayActions from "src/app/shared/RelayActions.svelte" import {relays} from "src/agent/db" export let url + let activeTab = "reviews" + url = normalizeRelayUrl(url) const relay = relays.get(url) || {url} + const tabs = ["reviews", "notes"] + const setActiveTab = tab => { + activeTab = tab + } document.title = displayRelay(relay) @@ -23,8 +30,17 @@ {#if relay.description} {relay.description} {/if} - - - - + + {#if activeTab === "reviews"} + + {:else} + + {/if} diff --git a/src/app/views/RelayReview.svelte b/src/app/views/RelayReview.svelte new file mode 100644 index 00000000..de54ba53 --- /dev/null +++ b/src/app/views/RelayReview.svelte @@ -0,0 +1,48 @@ + + + + + Leave a review + + + + Your rating: + + + + + Send + + + diff --git a/src/partials/Rating.svelte b/src/partials/Rating.svelte new file mode 100644 index 00000000..fe7463b8 --- /dev/null +++ b/src/partials/Rating.svelte @@ -0,0 +1,16 @@ + + + + {#each range(0, 5) as x} + = x / 5} + on:click={() => { + value = x / 5 + }} /> + {/each} + diff --git a/src/partials/Subheading.svelte b/src/partials/Subheading.svelte new file mode 100644 index 00000000..aaff8fd1 --- /dev/null +++ b/src/partials/Subheading.svelte @@ -0,0 +1,8 @@ + + + + + + diff --git a/src/partials/Tabs.svelte b/src/partials/Tabs.svelte index 831421d9..c345464d 100644 --- a/src/partials/Tabs.svelte +++ b/src/partials/Tabs.svelte @@ -6,10 +6,11 @@ export let activeTab export let setActiveTab export let getDisplay = tab => ({title: toTitle(tab), badge: null}) + export let borderClass = "border-gray-7" {#each tabs as tab}
{relay.description}