-
Add team manager
-
Add site manager
-
Add site list
-
Isolate public routes from ensureLoggedIn - done by using jsonrpc
-
Add
Comments
component -
Add tests for site manager
-
Fix React SSR error handling
-
Add React error boundaries
-
Use strings as ids for big decimals TODO verify
-
Regenerate session id after logging in to prevent session hijacking
-
react-test
- Do not use a class
- Call findRenderedComponentWithType after render, do not return intermediary TestContainer
-
Social logins
- GitHub
-
Framework development
- Improve comments
- Generate docs using using
typedoc
- Generate framework website using Docusaurus
- Split framework projects and actual projects
-
Styled components
- SSR
- Replace bulma/blommer css framework with styled components
- Check if reakit still significantly slows down TS compilation
-
Use JSON schema instead of @Entity decorators
-
Extract database into a separate module
-
Replace tslint with eslint: https://github.com/typescript-eslint/typescript-eslint
-
Do not import express when importing jsonrpc
-
Custom subdomains
-
User Profile
- Customize user data
- Reset password
- Delete account
- Add/Remove profile picture
-
Privacy
- Do not require email for account creation
- Preventing fake accounts/spam using either:
- Moderation techniques described below
- Require proof of work during acct creation?
- Open Source machine learning model for posts, if it exists
- svg-captcha from npm. Could prevent blind users from creating an account. Also, new ML models can probably read this format.
- Possible solution: use TTS like say.js to generate audio. Use tasq lib to prevent too much cpu usage if more users arrive.
- FIXME debug why espeak sometimes does not stream responses:w
- Add privacy policy statement
-
Email
- Verification emails
- Password reset emails
- Digest emails (low priority)
-
Web push notifications
- Replies to parent comment
- User references via @-prefix
-
Add ability to cross-reference posts
-
Realtime notifications
- Socket.io w/ Redis
- Investigate if web push notifications would eliminate immediate need for socket.io/redis
-
Benchmarks
- Test how long would it take to load and sort comments full tree of 100.000 comments, with 500-1000 chars each.
- Test how much would profile images slow down the loading process
- Investigate what could be done to keep loading this many comments without hogging the server
- Reduce JS payload size. Hard because ReactDOM already uses more than 90kb compressed (I think).
-
Pagination
- offset/limit or last id
- Check TypeORM's offset/limit support
-
Embedding comments
- Iframe
- Automatically resize iframe height
- JavaScript
- Iframe
-
Add ability to bootstrap server in cluster mode
-
OpenGraphScraper
- Add support for scraping URLs
- Do we need to respect robots.txt?
- How can Telegram cache site contents using InstantView? Is it legal?
- Prevent DDoS by scanning sites in queue (tasq module should help)
- Disable access to localhost, local IP addresses, etc
- Think about fallback if site is not scanned within 4 seconds
-
Think of a better project name
-
Comments representation
- Tree (reddit/hn-style)
- Forum
- Q&A (forum w/ 1st level comments)
-
Voting
- Add ability to upvote
- Add (optional) ability to dowmvote
- Add per-site configuration to enable/disable voting
-
Spam
- Add ability to mark comments as spam
-
Moderation
- admins/moderators to approve comments
- admins/moderators to ban users
- admins/moderators to hide comments by default
- start requiring approval for users who have been consequtively marked as spam
-
Monitoring
- Prometheus
- Server side errors
- Client side errors
-
Monetization
- License: figure out the best license
- SaaS payments
- Donations
- Consulting
-
Meta posts
- Add ability for users to start discussions without a relevant link
- Add option to allow only certain roles to be able to author posts
- This could potentially allow users to write blog posts with comments
-
Aggregation
- Post/story tags
- Show latest posts/similar posts
- From same site
- From other sites
- Pagination
-
Images
- Client-side resize before upload
- CDN
- Storage for image uploads
- Mastodon
- Allow users from multiple instances to reply to each other's posts. Would have to think about how to make money.
- Implement JSONRPC
- Make it easy to create actions and reducers based on JSONRPC method sigatures
- Refactor part of functionality as POC
- Refactor comments projects to only use JSONRPC
- Fix migrations so that they do not recreate a bunch of changes that are not needed. Possibly related to fix in 517dd2f
-
Figure out a way to make server-side tests execute successfully without
--runInBand
Done by using unique user ids per jest thread, using theprocess.env.JEST_WORKER_ID
variable on the mysql projects.The
server/
tests run migrations at the beginning and each jest worker creates a new in-memory SQLite database because TypeORM will not allow multiple (queued) transactions - it only uses a single SQLite connection.