- Publish comment over pubsub
- Captcha
- Signature
- Encryption
- HTTP gateway fallback if IPFS client undefined
- Pubsub provider fallback if IPFS client undefined
- Add signature to
PubsubMessage
and validatePubsubMessage.signature
- Encrypt
ChallengeMessage.challenges
andChallengeAnswerMessage.answers
- Include Plebbit and plebbit-js version in every pubsub message
- Get comment over IPFS/IPNS
- Verify author signature
- Verify subplebbit owner signature
- HTTP gateway fallback if IPFS client undefined
- Validate
comment.link
is valid withnew URL(comment.link).protocol === 'https:'
(all posts, comments and replies, and in pages)
- Get subplebbit over IPNS
- Verify Subplebbit.signature (sub owner must sign subplebbit updates otherwise IPNS provider can lie)
- HTTP gateway fallback if IPFS client undefined
- Get subplebbit pages over IPNS
- Verify author signature
- HTTP gateway fallback if IPFS client undefined
- Tests
- Tests run under 1 minute
- Concurrent mocha tests
- Concurrent karma tests
- Add CI
- Add CI including plebbit-react-hooks CI
- Add way to run only 1 file in mocha tests with CLI
- Bind
Plebbit
,Comment
.Subplebbit
,Pages
classses public methods
- Post page
- Feed page
- Infinite scroll
- Loading skeleton
- Submit post page
- Publish vote and captcha modal
- Publish comment and captcha modal
- Auto login with default account
- Deploy demo to demo.plebbit.eth
- Electron client
- Add windows icon
- Add mac icon
- Add linux .desktop file info and icon
- Set up Plebbit app to open Plebbit links. Any link that starts with demo.plebbit.eth
- Builds and runs on Linux
- Builds and runs on Windows
- Builds and runs on Mac
- Accounts actions
- createAccount
- setAccount
- setActiveAccount
- setAccountsOrder
- publishComment
- publishCommentEdit
- publishVote
- Accounts hooks
- useAccount
- useAccountComments
- useAccountVotes
- useAccountVote
- useAccounts
- useAccountsActions
- Comments hooks
- useComment
- useComments
- Subplebbits hooks
- useSubplebbit
- useSubplebbits
- Make Cloudflare not cache IPNS requests
- Feeds hooks
- useFeed
- useBufferedFeeds
- Tests
- Add CI
- Clean up tests to be smaller and give better errors
- Add CI integration tests with plebbit-js (after the plebbit-js test are optimized)
- Add way to run only 1 file in mocha tests with CLI
- Publish comment over pubsub
- Encrypt challenges and challengeAnswers
- Queue pubsub publishing when more than 5 keepalive connections in the browser
- Get comment over IPFS/IPNS
- Resolve
author.address
ENS name - Subplebbit owner adds comment.thumbnailUrl (optionally because it can leak IP)
- Electron and Android client can fetch comment.thumbnailUrl when not already available (optionally because it can leak IP)
- Resolve
- Get subplebbit over IPNS
- Resolve
subplebbit.address
ENS name
- Resolve
- Get subplebbit pages over IPNS
- Resolve
author.address
ENS name
- Resolve
- Multisubs
- Implement
Plebbit.createMultisub(createMultisubOptions): Multisub
- Implement
Plebbit.getMultisub(multisubAddress): Multisub
- Implement
- Subplebbits
- Implement
Plebbit.createSubplebbitEdit(createSubplebbitEditOptions): SubplebbitEdit
- Implement
- IPNS over pubsub
- Peers block spam IP addresses
- Challenges
- Text captcha challenge
- Implement
Plebbit.listSubplebbits(): address[]
- Change dataPath to dataPath/subplebbits and dataPath/cache
- Implement
Plebbit.getDefaults()
- Add
Plebbit.createSubplebbitEdit(createSubplebbitEditOptions)
andCreateSubplebbitEditOptions
documentation to readme - Round robin multiple pubsub providers and IPFS gateways, change provider/gateway configs to arrays
- Make BlockchainProvider.rpcUrls an array, either to round robin or double validate responses
- Figure out how to block IPFS files larger than the max publication size
- Challenges
- Text captcha challenge
- Challenge success/fail notification
- Information about the publication on the challenge modal
- Multiple challenges with progress indicator (e.g. 1/4)
- Moderator/about pages
- Subplebbit settings
- Instructions to export/backup subplebbit (backup the file
${plebbit.dataPath}/subplebbits/${subplebbit.address}
) - Instructions to import subplebbit (copy the database file in
${plebbit.dataPath}/subplebbits/${subplebbit.address}
) and refresh
- Instructions to export/backup subplebbit (backup the file
- Subplebbit appearance
- Subplebbit rules
- Subplebbit moderators
- Subplebbit settings
- Settings pages
- Account
- Language
- Location
- Export
- Import
- Profile
- NFT avatar
- Display name
- Crypto wallet addresses (to receive tips and awards)
- Safety & Privacy
- Blocked addresses
- Account
- Own profile page
- Edit NFT avatar
- Edit display name
- Edit crypto wallet addresses (to receive tips and awards)
- Feed page
- Author address (ENS or 14 characters public key)
- Author avatar image
- Author flair
- Post flair
- Date
- Full embed images
- Small thumbnails
- Share button
- Block button
- Sidebar links
- Sidebar popular communities
- Nicely display broken images and thumbnails
- Switch sort types
- Comment page
- Display markdown
- Verify markdown tags links don't allow remote execution in electron
- Cross posts
- Top menu
- Create more than 1 account
- Switch account
- Translations
- Arabic
- Chinese
- Hindi
- Spanish
- Russian
- Japanese
- Portuguese
- German
- Korean
- French
- Italian
- Turkish
- Improve logo and 'plebbit' text light and dark mode
- Improve captcha modal design
- Search default subs
- Pubsub HTTP client can open unlimited keepalive connections without timeout in electron
- Tests
- Playright browser tests
- Add CI playright browser tests
- Add CI/CD on master merge using plebbit-js, plebbit-react-hooks and plebbit-react tests
- Add config for progressive web app
- Add config for react-native build to Android APK
- Add Android APK to automatic releases
- Embeds
- Twitch
- Tiktok
- Youtube
- Odysee
- Bitchute
- Streamable
- Spotify
- Imgur (not needed, they give direct links to .png)
- Giphy (not needed, they give direct links to .gif)
- Rumble (doesn't seem possible without API)
- Soundcloud (doesn't seem possible without API)
- Bandcamp (doesn't seem possible without API)
- Google Drive (need to research, low priority)
- Accounts actions
- publishSubplebbitEdit
- deleteAccount
- importAccount
- exportAccount
- deleteComment
- blockAddress
- Accounts hooks
- useAccountNotifications
- Feeds hooks
- useRepliesFeed
- Authors hooks
- useAuthorComments or useAuthorFeed
- hook to get total karma and other profile info (possibly just include it in useAuthorFeed)
- Multisubs hooks
- useFeed should resolve multisubs
- useMultisub
- createMultisub
- Tipping
- Gold and Silver NFT awards
- Filter feed by language
- Filter feed by location
- Add account.warnings for ENS not resolving properly
- useResolvedSubplebbitAddress for debugging setting up ENS in a subplebbit
- Filter blocked addresses from accounts notifications
- Migrate feeds React context to Zustand
- Challenges
- ERC20 staking challenge
- ERC721 staking challenge
- ERC20 tipping challenge
- ERC20 balance challenge
- ERC721 balance challenge
- Video captcha challenge
- Audio captcha challenge
- More difficult image captcha challenge
- Settings for less or no captcha for users with karma in the sub
- Settings for less or no captcha for users with karma in other subs
- Migrate to typescript
- Mod subplebbit posts pages
- Mod queue
- Reports
- Spam
- Edited
- Unmoderated
- Report publication type (possibly just use CommentEdit, need to think of design)
- Comment edit log
- Comment vote log
- Remove all typescript any and @ts-ignore
- Security
- Context isolated desktop only functions to use in the electron client
- Algo for most anonymous padding size for publication encryption
- Make createSigner a native function with a
sign()
method to protect privateKey against XSS - Sort by active
- Pass
acceptedChallengeTypes
in Plebbit constructor - Make
updateInterval
andpublishInterval
public APIs - API for
postTitleMinLength
- Comment.archived and subplebbit.settings.archiveTimestampOlderThan, archiveLastReplyTimestampOlderThan
- Spec for public gateway providers and public pubsub providers challenges
- Retry infinity getComment, getSubplebbit, getPage with a global timeout in plebbitOptions
- Comment.linkRemoved to remove only the link, like on 4chan
- image galleries
- video/audio playlists
- frames like farcaster
- "sage" option like 4chan to reply to a post without bumping it in the active sort. Unclear what this API should be called at the moment
- Moderator/about pages
- Queues
- Mod queue
- Reports
- Spam
- Edited
- Unmoderated
- Queues
- Create multisub page
- Manage multisub page
- Migrate to typescript
- Comment edit log
- Comment vote log
- Integrated crypto wallet for desktop client
- Encrypt private key PEM with password at rest (similar to MetaMask)
- Interface to choose and sign NFT avatars so users don't have to go to Etherscan
- Securely embed Twitter/Youtube/etc. (if possible to do securely)
- Lazy resolve author addresses
- Add markdown XSS examples in content mock
- Make list of warnings and display them randomly in feeds, e.g. warn that subplebbits can be hacked and display scams. Maybe have a removable sticky with a list of common scams
- Embed IPFS webui inside the electron app in the settings or profile page
- Notification count in ( ) and post.title in meta title
- Web of trust recommendations from authors, i.e. look at the authors I upvote and find the subs they post in and recommend them
- Playlist with autoplay for video/audio
- Accounts actions
- publishReport
- saveComment
- followComment
- hideComment
- followAuthor
- limitAddress
- Multisubs
-
usePlebbitDefaults()
-
useMultisub
-
useMultisubs
- incorporate multisubs with useFeed()
-
createMultisub()
-
- Define all types
- Remove all typescript any and @ts-ignore
- Progressive scrolling of replies in a post for posts with 100+ replies
- Include accountComments and accountVotes when importing/exporting
- Don't subscribe to all accountComments at once, queue new ones with higher priority, and old ones with lower priority
- Add statuses to all hooks, like success, error, ready, progress, etc
- Sort by active
- Indicator to what HTML tag to use by analyzing comment.link (e.g.
useCommentLinkTagName(commentLink?: string): 'a' | 'img' | 'video' | 'audio'
) - Implement useThumbnailUrl() on desktop and android
- Hook for plebbit and IPFS stats
- Block communities / comments / authors based on keyword / tag / language / etc
- PLEB reward interface for best posts by plebbit team
- ERC20 reward interface for best posts by subplebbit owners
- PLEB DAO vote for curated NFT collection
- PLEB DAO vote for curated multisubs
- Moderator log (a
Page
of CommentEdit publications available both onSubplebbit.posts
andComment.replies
) - Vote log (a
Page
of CommentEdit publications available both onSubplebbit.posts
andComment.replies
) - Event/Meetup post type (to compete with Facebook and Meetup.com events)
- Marketplace post type (to compete with Facebook marketplace, Shopify, Amazon)
- Fundraiser post type (to compete with Gofundme and Kickstarter)
- Sync accounts between multiple devices
- Encrypt private key with password at rest (similar to MetaMask)
- Publish Android APK on F-Droid
- Make pubsub-provider and ipfs gateway more spam resistant using provider catchas on top of subplebbit captchas (as part of the protocol)
- Share provider (a server that caches a plebbit page and hosts it on a random domain for 24h to easily share on other social medias)
- 4chan interface
- Discourse interface
- Validate IPFS CIDs and content gotten from public IPFS gateways (because they can lie)
- Update desktop version over IPFS
- CLI client
- JSON-RPC client
- Build open source plebbit archiver
- Integrate P2P DMs from another project
- Integrate P2P live threads (chat) from another project
- Integrate comment.link for livestreaming (with live thread)
- Develop a tool to scrape a subreddit and copy its posts to Plebbit
- Fallback to IPFS provider on desktop app when P2P not supported, like on cellular
- Subplebbit uptime monitor and alerter
- Video/audio player android/android tv client, similar to youtube, to play youtube, soundcloud, rumble, etc links directly, without ads and without visiting the original video site
- ENS over IPFS, create a trie of all ENS domains, and resolve the new trie daily using IPNS, to resolve ENS over IPFS, without needing an ETH provider
- Configurable search and recommendation RPC, several centralized providers could provide their API and the user can choose which API to use
- Substack / patreon / medium like interface, to publish long text and paywalled content
- Stackexchange like interface with LaTeX support
- Centralized service to index/search plebbit, like warosu.org
- Centralized service to run subs for others for free
- vBulletin v3 client