Thinking about making my own lemmy client, but I could use some feedback
Here are the problems I want to solve:
The same app everywhere
It will run as a website, iOS app (also on macOS), and Android app. It will be responsive, supporting phone, tablet, and computer screen sizes along with everything in between.
And I’m not talking about simply resizing the interface. Navigation (e.g. sidebar or on mobile bottom tab bar) will match what you would expect to see on the device size you’re using. But everything else (e.g. posts) will look the same, which I hope will make it really easy to jump from mobile to desktop.
Onboarding and configuration
The app will allow you to configure it to look like a typical Reddit or Lemmy app. During the onboarding process, I will prompt you, asking which style of interface you prefer. Consider these presets, which change a bunch of more granular configuration options. I will also give you the ability to fully customize each option instead of picking a preset.
Caching and offline support
This is where it starts to get more tricky. Caching is easy. If you launch the app, it will have everything you previously saw still loaded.
I would like to make it so upvoting, for example, can be done offline. The app will optimistically apply the upvote to the post or comment, then when you reconnect to the internet, it will actually apply the upvote. This is a difficult problem to solve, so I can’t promise this will work, and it would likely be the last feature I add.
I need your feedback
This is a big project to undertake. I really want a Lemmy client that checks those boxes for myself, but I’m curious if any of those resonate with you? Is there anything I missed that you would like to see? If I do build this, I will likely have to keep the project very focused as far as features go initially.
Just for context, I’m using Voyager on iOS currently. I really like it, but the “the same app everywhere” concept and making it easier to onboard Reddit users are my main motivations for creating my own app. My app will also be fully open source
I use Voyager on android but the web client or "old reddit" style on larger screens. You could also look at redreader which is an android reddit client that could be adapted to Lemmy. IDK if there's an iOS version.
Wow, I totally missed that. However, it does feel like the web was tacked on as an afterthought. It feels like navigation hasn’t been optimized for larger screens (see screenshot below). A sidebar would be much more usable on larger screens than this stretched bottom tab bar.
That being said, it would probably be easier for me to contribute to Voyager than to build my own app. But I also kinda want to build my own app, lol. But I might also consider contributing to voyager if they are interested in optimizing their interface for larger screens.
Great idea! Just here to offer support. I don't think voyager existing matters much, diversity is the name of the game for the fediverse.
Feature wise, I'd love to see something that embedded youtube videos and similar media with the url given but I'm not sure of the feasibility. Making something forward thinking that can eventually be integrated with other activity pub services would be a good idea but I'm certain that brings up the workload as well.
Keep us updated and make a sub when you have a name!
Awesome! Have a look at the Lemmy Apps Directory if you are interested in comparing the features of existing apps. You should especially see the web apps section, which has some brilliant solutions to cross-platform and cross-device functionality.
This directory also lists the dev for each app, and most of them are great at being responsive and helpful. Of course sometimes people get busy, but the development community has been great here.
That would actually be easier than the offline upvote feature. The issue with offline interactions is if you upvote in one app, but downvote on another, who wins?
Offline posts wouldn’t suffer from this problem. That’s my very roundabout way of saying, this shouldn’t be that hard to do.
That would actually be easier than the offline upvote feature. The issue with offline interactions is if you upvote in one app, but downvote on another, who wins?
Whichever interaction is sent 'last' when connected. No, the user would not have any control over this in the example situation,but to be honest it is a pretty minor issue with no real solution. The same thing could happen in an arbitrary order if you clicked different options on two different browsers at approximately the same point in time because web calls are not instantaneous.
That makes sense since upvoting and commenting seem the hardest to me. I think anything that interacts with existing content in the API will be more difficult to do offline than creating new content (e.g. creating a post offline).
Offline mode will need a robust handling of replies and comments for content that has been deleted or removed if you want the user to be aware, especially if they have multiple comments on deleted posts when they reconnect.
Sorry, I don’t mean this to sound rude, but websites don’t magically become responsive. It takes a lot of work. And that becomes even more complicated when you want to share large amounts of code between web and native.
I’m not reinventing the wheel. I’m using the best libraries—imo— to build a responsive cross-platform app.
That’s a great question! As far as I can tell, Voyager is optimized for smaller screens, and larger screens are supported but not as well optimized. My app would have first-class support for large and small screen sizes. Alternatively, I may consider contributing to Voyager.
it should have good moderation implementation and have its markdown synced with lemmy ( like spoilers etc. ).
It should be easy to block, report.
I like the idea of the offline support. Could be cool if you are able to "download" a post for offline reading or just reading through its comments.
<= could be linked with the "favorite" functionality of lemmy.
Thanks for adding another app to the diversity of lemmy.
I’m not sure what percentage of Lemmy users moderate, but I would likely prioritize features that benefit the most users. Moderation might come a little later, but my goal is to allow you to do everything through my app eventually, including moderation.
My goal is to store everything offline for a period of time. Likely, it will be more complicated than this, but let’s say for now everything you see will be automatically cached offline for 30 days. Instead of a number of days, I will probably set a max size for the offline cache and drop the oldest data in the cache as new data comes in.
The only issue here is I’m not sure how easy it will be to cache images offline. They will take up more storage, and I’m not as familiar with image caching mechanisms for apps.
Do you know if Lemmy tends to have good alt text for images? That would be easier to cache offline instead of images.
Maybe after the initial version, I can add the ability to pin a post to your cache so it doesn’t get cleaned up automatically.
It sounds really nice. Something to decide early on is whether to make it open source. Many people who use Lemmy specifically (more so than Reddit I am saying) will only use an app that is open source.
Not just open source. It needs to have a sustainable community of developers. I’m not interested in a project that dies when the one maintainer has other priorities (been there with another lemmy app) Open source just means anyone can fork it and carry on, but if nobody does, it still dies.
In that case, it would have been better if OP had offered the type of functionality that they wanted (e.g. cross-platform support, better responsiveness to tablet screens, etc.) to Voyager, as in like make a fork of Voyager and add in the new desired features. Elsewhere in this thread OP acknowledges that this would have been preferable... yet they are going to do their own thing regardless. Which isn't nothing imho, even if something else might have been more ideal.
It will be open source. I have no plans to profit from this. My goal is to keep my costs really low - as near $0 as possible - by not running any backend for the app. Everything will be local. I do hope to build a nice app with a lot of users to add to my portfolio, but other than that I mostly just want to see Lemmy succeed long term.
If PieFed had an API I would say to check it out, as many of us are looking to it as the future. It is extremely lightweight, requires sending ~25-fold less data per post, already has most of the heaviest requested features that Lemmy lacks (categories of communities, hashtags, showing of the community and instance data alongside - after - each post, labeling of users, e.g. newly created accounts, private voting, ability to democratize moderation e.g. a user can choose to auto-hide posts based on a downvote counter, allowing moderators to be looser in the strict decision to remove vs. not remove content, etc.), and much more. Like Mbin, it is another implementation of the ActivityPub Protocol that federates with Lemmy while not being Lemmy itself.
The caveat is that its web UI is horrible (lacks user tagging, many notifications don't actually take you to where it intends, replies aren't done in-line but on a separate page and then afterwards doesn't return you to where you were but to a generic view of the post whereupon you may have to dig through the complex navigation all over again to find where you were before, and most damning of all, it lacks a Preview feature so you may have to do all of that multiple times to get a post to look right, like a link or image embed).
But, as I mentioned, it lacks an API. So unless you wanted to make one first and do a more full-stack than front-end project, that makes it a nonstarter no matter how awesome and a perfect fit the idea would have been otherwise. I did want to mention it though, just in case, and also to plant the seed in your mind that perhaps when an API is available it would be awesome to be able to switch to PieFed or Lemmy (or Mbin?) rather than be locked solely into just "Lemmy". Especially if Lemmy.World switches to PieFed let's say 1-3 years from now, bc that one instance holds ~80% of all the users on it.
Lemmy UI is only one option, although it is the default for most instances. There are a lot of different web clients, some of which will preserve settings:
I’m very new to Lemmy and I need to read through their API. Whatever settings they allow me to save, I’m happy to lean on their API. I just want to avoid writing my own backend.
I kinda want to avoid building a backend for this if I can. That would also mean your app wouldn’t depend on any infrastructure that I own, preventing any centralization around my backend. And it would mean a very low cost for me to maintain this app.
One way to solve sync could be to have a QR code you scan to sync settings. But it might only sync when you scan it and not continually. I can also look into any Apple or Android APIs that might make this possible, but that would leave out web, and I really want feature parity between all platforms.
But this would fall under a nice-to-have feature that I would likely not prioritize. I really want to nail down the core functionality first.
Why not take an existing client like Voyager, and add the features that you are missing?
This is exactly what I am doing for "easier onboarding". I am working on a fork of Voyager, learning my way through React Native and ionic, and adding support for Fediverser to it.
That’s a great point! I kinda want to write my own client, but I haven’t ruled out contributing to Voyager. It’s very possible I totally fail, learn from my mistakes, and bring what I’ve learned to an existing app like Voyager.
At the same time... If this is your primary motivation I would feel like there is no point in you asking for "feedback" because you are essentially looking for validation.
I don't mean to pick on you, I just wish we collectively learned to stop this. So much effort is wasted by individuals who want to prove something to themselves and want to go out on their own, it feels like FOSS alternatives would be 20 years in the future if put worked together on 2-3 alternatives instead of 20-30 disparate projects.
If you are okay with reconsidering your position... go to Voyager's discussion pages on GitHub, there a few issues I opened there and would like to tackle:
make it offline-first (probably using something RxJS to store and sync application data and state through different apps)
add support to browse subreddits (won't require the API, and to ease the issue of network effects)
make it less dependent on the Lemmy API and substitute for straight ActivityPub whenever possible
use content-addressable storage for media (IPFS likely, but maybe also webtorrent)
If any of these things interest you, I'd love to have a longer chat and see if we can work together.
I’m a seasoned developer with experience in both React on the web and React Native. I’m looking for an excuse to dive into Tamagui, which is designed the tackle cross platform. So I’m excited to tackle this challenge.