# 2024 NLnet Project Plan
Payment rate: 750€ per week ([same as in 2021](https://codimd.tyhou12.xyz/YB88QJyuRNiE1hH_IGMPfg#))
Total amount currently: 49.75k€ (should be ~50k)
## 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
- Nutomic writes RFC describing in detail how to implement it
### Implement backend
- Changes to database, federation, api
- Write integration tests to ensure no private data leaks out
- Done by: phiresky
- Duration: 8 weeks
- Amount: 6000€
### Implement frontend
- Workflow to approve private community followers (similar to approving new user registrations)
- Done by: Sleepless one
- 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
- Done by: sleepless one
- Duration: 3 weeks
- Amount: 2250€
## 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
- Done by: phiresky
- Duration: 4 weeks
- Amount: 4000€
## Improve Linking Federated Posts
- (phiresky: I think the design of this first needs a design document / RFC for discussion to get good results for not just lemmy-ui but also apps on phones, alternate UIs etc.)
- 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)
- phiresky: Do we want rewrites or a new unambiguous URL syntax like for users / communities (!x@lemmy.ml / @x@lemmy.ml)
- [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
- Done by: phiresky
- Duration: 5 weeks
- Amount: 3750€
## 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
- Done by: phiresky
- Duration: 4 weeks
- Amount: 3000€
## Use less Disk Space for Thumbnails
- https://github.com/LemmyNet/lemmy/issues/4053
- Done by: ?
- 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
- Could potentially let us remove `undetermined` language
- https://github.com/pemistahl/lingua-rs
- https://github.com/LemmyNet/lemmy/issues/2870
- Done by: SleeplessOne
- Duration: 3 weeks
- Amount: 2250€
## Post tags
- https://github.com/LemmyNet/lemmy/issues/317
- there's already a RFC draft i think, needs to be considered
- 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)
- Done by: phiresky (?)
- Duration: 8 weeks
- Amount: 6000€
## Poll support
- Implement necessary database and api functions
- Make it federate. Mastodon does this in a completely nonsensical way, better to do it in our own way
- Write API tests
- https://github.com/LemmyNet/lemmy/issues/787
- Done by: SleeplessOne
- Duration: 5 weeks
- Amount: 3750€
## 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
- https://github.com/LemmyNet/lemmy/issues/2951
- Done by: SleeplessOne
- Duration: 4 weeks
- Amount: 3000€
## Moderation Improvements
- Include instance blocks in mod log
- https://github.com/LemmyNet/lemmy/issues/1947
- https://github.com/LemmyNet/lemmy/issues/2506
- Implement warnings, notify user when warned, possibly automatic ban after multiple warnings
- https://github.com/LemmyNet/lemmy/issues/1424
- Attach unresolved report counts to comment and post payloads
- https://github.com/LemmyNet/lemmy/issues/4163
- https://github.com/LemmyNet/lemmy/issues/4163
- Improve UX of /reports page
- *Updated, need to adjust time/amount estimates*
- Done by: SleeplessOne
- Estimated time: 3 weeks
- Payment amount: 2250€
## 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
- Done by: SleeplessOne
- Estimated time: 2 weeks
- Payment amount: 1500€
## Rework Image Endpoints
- Seperate upload endpoints for each purpose, eg POST /api/v3/user/avatar, POST /api/v3/community/banner etc
- Allows for more fine-grained controls like allowing avatar uploads while disabling post image uploads
- Done by: SleeplessOne
- Duration: 4 weeks
- Amount: 3000€
## Improvements to lemmy-ui-leptos
- [Lemmy-ui-leptos](https://github.com/LemmyNet/lemmy-ui-leptos/) is our proposed alternative frontend using Rust and webassembly, eventually meant to supercede lemmy-ui. [See discussion about this here](https://github.com/LemmyNet/lemmy-ui-leptos/issues/15)
- Get lemmy-ui-leptos basic read functionality working: Reading the front page, comment threads, profiles, and posts.
- Done by: SleeplessOne
- Estimated time: 5 weeks
- Payment amount: 3750€
## Hide Community
- Already [implemented in the backend](https://github.com/LemmyNet/lemmy/pull/2055), but missing from lemmy-ui
- POST /api/v3/community/hide
- Done by: SleeplessOne
- Estimated time: 2 weeks
- Payment amount: 1500€
# 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
## Migrate lemmy-ui to Next.js
- Will work on this if decided (Still prefer leptos) - SleeplessOne
- Too much effort for little benefit.
- https://github.com/LemmyNet/lemmy-ui/pull/2287