# 2024 NLnet Project Plan
Payment rate: 750€ per week
Total amount currently: 48.750 (should be ~50k)
Milestones are up for grabs, and assigned to whoever starts working on it.
Payment goes to the person who implemented each milestone. If multiple people worked on a single milestone, the payment is split according to the amount of work done by each.
Any work done after February 12 can be paid.
[Most popular issues](https://github.com/LemmyNet/lemmy/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc)
Previous project plans:
- [2021](https://codimd.tyhou12.xyz/YB88QJyuRNiE1hH_IGMPfg)
- [2022](https://codimd.tyhou12.xyz/Rd2qRR7vRK-RTCZmVXW0QA)
## Private Communities
- Works like existing communities, but new followers need to be approved manually by moderators
- Community profiles including sidebar are public, but posts/comments inside private community can only be seen by approved followers
- [RFC describes in detail how to implement it](https://github.com/LemmyNet/rfcs/blob/main/0005-private-communities.md)
### Backend
- Changes to database, federation, api
- Write integration tests to ensure no private data leaks out
- Duration: 6 weeks
- Amount: 4500€
### Frontend
- Workflow to approve private community followers (similar to approving new user registrations)
- Duration: 2 weeks
- Amount: 1500€
## Activity sending improvements
- Send activities in parallel
- Better test coverage
- https://github.com/LemmyNet/lemmy/issues/4529
- Duration: 4 weeks
- Amount: 3000€
## SQL paging and filtering for multiple types
- For API endpoints like inbox, profile, modlog, reports, search, return a single sorted list of multiple object types, rather than multiple lists with different sort orders.
- https://github.com/LemmyNet/lemmy/issues/2444
- Duration: 4 weeks
- Amount: 3000€
## Rework notifications
- Rework API
- https://github.com/LemmyNet/lemmy/issues/2441
- Duration: 2 weeks
- Amount: 1500€
- Notifications about moderation actions
- https://github.com/LemmyNet/lemmy/issues/4572
- Duration: 3 weeks
- Amount: 2250€
- More user settings about which notifications to receive:
- [New comments in post](https://github.com/LemmyNet/lemmy/issues/3069)
- [New posts in community](https://github.com/LemmyNet/lemmy/issues/3904)
- [Disable notifications for replies](https://github.com/LemmyNet/lemmy/issues/1883)
- Duration: 4 weeks
- Amount: 3000€
- [All relevant issues](https://github.com/LemmyNet/lemmy/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc+label%3A%22area%3A+notifications%22)
## Create Plugin
- Plugin system is already implemented as proof of concept (https://github.com/LemmyNet/lemmy/pull/4695)
- Create a new plugin to ensure that it works
- Could move existing functionality into plugin (eg disable downvotes, or slur filter)
- Or implement new feature as plugin
- Write documentation on how to develop and deploy plugins
- Duration: 2 weeks
- Amount: 1500€
## Post scheduling
- New db column `post.publish_date`, if it is not null the post is hidden from api
- Scheduled task which regularly checks `publish_date`, if its in the past set to null and trigger federation, webmention
- Post form on frontend and api gets new optional field `publish_date`
- https://github.com/LemmyNet/lemmy/issues/234
- Duration: 2 week
- Amount: 1500€
## Improve Linking Federated Posts
- Parse markdown for post bodies, comments etc and attempt to resolve all links using `ObjectId::dereference`
- If dereference successful, replace link with one to local domain
- Maybe add config option to dereference only via local db (less resource usage but wont work for yet unknown links), or also via network (more resource usage)
- [This PR](https://github.com/LemmyNet/lemmy/pull/4035) has an example for rewriting markdown
- Write test cases
- https://github.com/LemmyNet/lemmy/issues/1540
- https://github.com/LemmyNet/lemmy/issues/2987
- Duration: 3 weeks
- Amount: 2250€
## Automatic Language Tagging
- When receiving a new post/comment via api or federation which has no language/undefined, automatically analyze language from text
- https://github.com/pemistahl/lingua-rs
- https://github.com/LemmyNet/lemmy/issues/2870
- Duration: 2 week
- Amount: 1500€
## Poll support
- Implement necessary database and api functions
- Make it federate
- Write API tests
- https://github.com/LemmyNet/lemmy/issues/787
- Duration: 3 weeks
- Amount: 2250€
## Moderation Improvements
- Include instance blocks in mod log
- https://github.com/LemmyNet/lemmy/issues/2506
- Duration: 1 week
- Amount: 750€
- Implement warnings, notify user when warned
- https://github.com/LemmyNet/lemmy/issues/1424
- Duration: 3 weeks
- Amount: 2250€
- Attach unresolved report counts to comment and post payloads
- https://github.com/LemmyNet/lemmy/issues/4163
- Duration: 2 weeks
- Amount: 1500€
## Rework API Endpoints (Api v4)
- Separate endpoints for image upload (eg POST /api/v3/account/avatar, POST /api/v3/community/icon)
- https://github.com/LemmyNet/lemmy/issues/1772
- Duration: 4 weeks
- Amount: 3000€
- Move taglines and emojis out of `/api/v3/site`, into separate paged endpoint
- https://github.com/LemmyNet/lemmy/issues/4577
- Duration: 2 weeks
- Amount: 1500
- Reduce amount of redundant data returned
- https://github.com/LemmyNet/lemmy/issues/2957
- Duration: 2 weeks
- Amount: 1500
- Meta issue: https://github.com/LemmyNet/lemmy/issues/4428
## Multi-communities
- Most upvoted issue
- Only local (no federation) for simplicity
- https://github.com/LemmyNet/lemmy/issues/818
- Duration: 4 weeks
- Amount: 3000€
## Ease discovery of federated communities
- Each instance can serve a collection of all local communities via Activitypub
- Fetch this together with the site actor and store communities in db
- Should only perform minimal fetch of discovered communities (no mod list, recent posts, stickied posts). otherwise local db gets too bloated
- https://github.com/LemmyNet/lemmy/issues/2951
- Duration: 4 weeks
- Amount: 3000€
## Post tags
- https://github.com/LemmyNet/lemmy/issues/317
- https://github.com/LemmyNet/rfcs/blob/main/0004-post-tags.md
- should be simple at first extensible in the future for other kinds of tags (tags that are instance-local vs federated, foreign tags from a different instance to e.g. add context)
- Duration: 6 weeks
- Amount: 4500€
# Potential extra milestones
## User-to-User vote totals
- https://github.com/LemmyNet/lemmy/issues/2370
## Make lemmy an identity provider for secure App login
- Implement Oauth 2 Identity Provider standard
- This is the opposite of https://github.com/LemmyNet/lemmy/pull/4238 which allows login to lemmy with third party providers
- Currently apps log in by getting the password
- More secure approach is to let apps be registered with a client id in the server and log in via a token exchange (oauth2)
- Password login should be deprecated (?)
- Done by: phiresky
- I've looked at the spec before but unfortunately it's very complex :/
## Implement official account migration
- Similar to mastodon: The should be an official method of migrating to a new instance
- When this happens, the old user profile should show a link to the new one
- Ideally this should be possible even if the home instance is gone
- users already have individual private keys, a federated migrate event could could be accepted based on being signed by the correct user key regardless of where it comes from
- Done by: phiresky
- Too much effort for little benefit
## Work through lemmy-ui issue tracker
- Close issues which are outdated, duplicates, out of scope etc
- Fix minor issues that are easy to implement
- Apply correct labels
- Should close at least 200 out of 500 issues
- Necessary to keep the issue tracker usable
- Estimated time: 2 weeks
- Payment amount: 1500€
## Hide Community
- Already [implemented in the backend](https://github.com/LemmyNet/lemmy/pull/2055), but missing from lemmy-ui
- POST /api/v3/community/hide
- Estimated time: 2 weeks
- Payment amount: 1500€
## Create URL scheme or handlers for cross-lemmy links
- If you encounter an arbitrary lemmy it should be very easy to get to your preferred App or home instance via the link
- No manual copy-pasting or link modifying or searching should be needed
- The thing that https://lemmyverse.link implements a workaround for
- Look at how other software does it: Mastodon and Matrix/Element
- Something similar is done in non-fedi software to open apps, maybe look how those solve it as well (Slack, Discord, Netdata, Zoom, ...)
- Probably a link with scheme `lemmy:` so that apps/websites can configure a handler
- Can take inspiration from https://fedilinks.org/spec/
- https://github.com/LemmyNet/lemmy/issues/4391
- Duration: 4 weeks
- Amount: 3000€
## Improve URL structure
Improve URLs to make them more readable and useful and potentially better for search engines:
- Add post title to URL (accept any but redirect to canonical)
- Add canonical URL to posts and comments
- Add post to hierarchy of comment url (/post/x/comments/y? to discuss)
- Implement full backwards compatibility (permanent redirects)
- Would be useful for cross-instance linking: make URLs predictable (if you know of a post and an instance you can deterministically say what the link to that post on that instance will be - like resolve_object but without an extra API call)
- https://github.com/LemmyNet/lemmy/issues/875
- Duration: 4 weeks
- Amount: 4000€