Ampersand: A Developer's Perspective

Ampersand is the most ambitious project I’ve ever spent my time on. And I made other stuff before, like Glasscord (iykyk), the Linux port of r2modmanager, Android UI design and device tree maintainership, or other music-related stuff like Sunamu, a lyrics companion.

You may think that, since I got it so far, I must be proud of it, right?

Oh boy, do I have to tell you a story.

How it began

Ampersand was never meant to be an actual application, rather it was just a very primitive Figma design file for a UI design class I had: I had zero ideas, and my boyfriend was ranting about Simply Plural’s shitty UI design, so we just sat and thought about reimagining that app, but using the latest Material Design guidelines and with some quality of life stuff that could help more people to get around the app without reading a guide. And this was it, quite literally!

However, as time went on, I got to show this project to my teacher, and he was so impressed with my work he gave me top grades, and he was also so intrigued: the fact that the design, were it a real app, could help many people was enough for him to recommend me to not “abandon it”.

Now, how do I explain to you that if someone who’s an authority tells me to do something, that act creates a huge expectation within my brain that is enough alone to kill me in my sleep? And so, Ampersand had to become a real application. That, plus my boyfriend was having a hard time with SP’s servers being offline in that period, so I started researching how to do this app, and the rest is pretty much the Git history.

Ampersand as a development project

It never was easy. I am more of a web developer than an app developer, and while I know there are many tools available to web developers to start targeting mobile development, there’s not something akin to “Svelte Native” or “Vue Native” that could also ship to computers; and I knew about that stuff only, and also I so dearly wanted a full debug pipeline for 99% of the stuff that was on PC alone, given how comfortable was I at opening my browser and related tools and work about problems from that; so going PWA was the easiest choice for me personally. On the other hand, I wanted to have a comfortable codebase to work with, even by inexperienced people: something that could be the testbed to someone’s web design and development prowess.

In my head the plan was simple: make a PWA, then make it “sortof native” by slapping a service worker to it so that the system browser gives you a fullscreen view of the app, and sort the eventual bugs from there. Tons of people do just this, so why couldn’t I do it? The reasons why became apparent very soon, however.

Thing is, a PWA is never truly native, and even by using the latest tech available to you as a PWA developer, your app footprint and storage usage has to be very small - otherwise the system will inevitably purge your data without asking you twice, and that happens even if your PWA is packaged with a runtime (Capacitor, Tauri), and theoretically has its own data in the system.

Getting demotivated once

I knew by that time that whatever I did wouldn’t remove the elephant in the room: everyone who used Ampersand had to take daily backups and store them somewhere, just in case their systems delete the webapp data in a cache purge or low storage scenario which I have no control over.

This killed the Ampersand development once - you can see how, in the Git history, there’s hardly any commit between the time I started developing the application and January 2025, where I tried to solve the issue.

Friend comes to the rescue

In December 2024 I attended 38C3, and while there I tried my hand at embedding Tauri to the application, and also abstracting away the database interactions so that I could use native bindings if I wanted, therefore potentially solving the problem, at least in one version of the app that I wasn’t even ready to discuss before: a native application that had a truly native backend, and that only used the “PWA” to display information. The thing is, though, that following the official guides, if I shipped Ampersand with Tauri, a black screen would greet me afterwards, at all times, on all platforms. What the hell, I wondered? Thing is, I am a sucker in Rust, so a friend of mine, (Viola if you’re reading this you’re awesome) after helping me with a trigger I had in the room we were staying in (and cooking for two a pasta dish I hold very dearly to my heart even today,) decided to help me out because she knows Rust very well and I had a hard time doing anything of value while being guilt tripped by the sheer presence of tons upon tons of hackers at the convention we were going to… and I couldn’t make a Tauri sample application work. Heh.

We eventually got the app running, and I got motivated again! January to March was when the app had the most significant uplift in features ever - and we also got feature-nearly-complete! This did leave a ton of bugs just hanging around, though, and most of my time was spent, and is still spent, to clean up bugs and inaccuracies, big and small.

Getting demotivated twice

Honestly, if I had a bugfixing spree clearly laid out for me I hardly could say no to that. I love bug fixing, especially when the bug is not a simple one to fix. I love being nitpicky about inconsistencies and bugs. I love all of this, really I do.

What I don’t love is the amount of time between me fixing a bug and some user reporting another one. I cannot call myself done if I know there’s bugs out there that need to be fixed before I take things further, but I also cannot test my app because I would only test the obvious known working stuff I’ve been putting out.

This demotivated me the second time, and still, it is a huge demotivation factor.

I still got my boyfriend who’s really happy to daily drive Ampersand, so the majority of bugs I fix, I basically fix for him to continue having a good experience with the app; but there’s stuff I cannot fix if my sample size is one person only with the same phone I have.

Thing is, Ampersand crashed on launch on a bunch of Pixel phones, and also on other phones I would assume. The problem here is “I would assume”, because I never actually heard it being reported other than by another person using a Pixel phone. Now, I know that if it doesn’t work on a Pixel then it needs fixing, but I at least wanted to make sure it’s perfectly reproducible, because my Pixel didn’t even give me obvious logs about what was happening so I really really wanted someone else to look at this and say “hey chief this is whatever my phone generated for you, could you look at that?” But it never ever happened.

Ampersand stayed broken for months. My boyfriend had to roll a dice to have it working on his phone every time, and that alone ate me from the inside out. I had a subpar experience to Simply Plural, therefore I failed.

For the longest time I just wanted the app to be noticed from an usability standpoint, so that someone else who had better experience than me could look at it and say “hey I should take my own spin at this stuff!” and for that I actually really really liked Octocon, which was still doing its things in a similar way to Simply Plural but it felt refreshingly comfortable to use, to my designer eyes at least. But let’s be real, the Octocon developer sure wasn’t looking at some rando web app to take inspiration from - however if they read this post I’d be glad.

For the longest time I just wanted that - because all my efforts were in vain, and I was ready to let it go and go do something else.

Another friend comes to the rescue

Remember sela from the T60 Libreboot post? It helped me with another piece of Rust code that, for some reason, fixed the startup issues.

The way I assumed it works is that when you have Tauri on a phone, you really have to be careful about what you request to the Rust code, and how you request it. Thing is, if you request too much stuff at one time, the app will just crash or hang - so we have to request little from the web code and let the Rust part do the heavy lifting for the most part. For this there’s a problem though, we still need to read files on command from the web code, because the web code is used as the UI, so we need to pass the data forwards anyway. To this I still don’t have a way to reduce the overhead.

The third letdown

And the most important one.

It’s been a long journey for me personally - for me as a friend, as a girlfriend, and as a person.

Ampersand was never meant for me in the beginning, because even if I knew about all this stuff that is being plural, I could hardly apply it to myself and believe it was real. However, that changed, and it changed with my therapist outright spelling it out for me time and time again, in all the times when I was a trainwreck and I couldn’t really sit down and think straight.

I made Ampersand to help others - my boyfriend first and foremost - but I forgot someone else, that is, myself.

And this shows, because Ampersand is a better copycat of Simply Plural through and through. And Simply Plural only really covers plurality when it’s overt enough, clear, concise, and when all the system members know themselves and what is not them. I never sat down to turn my dissociation issues, which for the most part are influences and constant blurs, into patterns that could be tracked with an appropriate UI inside my own app. I failed at the most basic thing a developer should do: solve their own problems.

I couldn’t anticipate any of this, of course, and even if I could, because I did indeed suspect something when I started the project, it was too little for me to actually care. About myself.

Seeing others having it lined up (almost) perfectly

It’s always bad when you know you’re inside a group but you can’t help but feel like the outcast in the room. That’s me: I cannot talk about plurality at all, I still think about myself as mostly my own person, and even if I know I am not alone in my head, to this day it feels strange and alien - even when I am influenced, or in the rare times where a full switch happens and I am later dealing with whatever happened because I won’t even know unless my boyfriend (who’s been there everytime) tells me.

This clearly separates the developer from the audience, an audience made of people who seem to switch effortlessly, track their own stuff like it was going on a bike, and talking anecdotes like it was just life. I once thought it was for the better, but I feel alone. This is another thing that lets me down when I see Ampersand, both as an app on my phone, and as code on my computer.

I know it isn’t this easy for y’all too, but my thoughts are so incessant I am condemned to believe it like so.

I have to take action to be a better person myself. I’ve already lost countless occasions to make the difference for myself. This cannot be happening again.

Making changes

Lately I’ve started brainstorming ideas with the clear goal to make Ampersand feel good for me specifically. I want to use it too, damn it!

There’s plenty of ideas in my head, though I am still not implementing any of them because I really need to take care of myself in other areas first, and also because Ampersand is on life-support-before-doing-anything-stupid-again mode. It will take some time, but if you are an Ampersand user you will see things change, even drastically, from the “inspired by Simply Plural” take that my app has had up until now.

A bonus letdown: socials and publicity

I’ve been already called “pluralmisic” because the role tag is a default fillout for members within Ampersand. Where must I state that there are plural systems who requested that tag to be a default fillout? Where must I state that you can just leave it empty and it won’t even show as “empty role” anywhere?

Also, imagine being plural in a “black on white on an official medical document” way and also being “pluralmisic”. Imagine. IMAGINE!

But really, that one time I read that shit, it hurt. Lots. I have done everything I can to not be judgmental to literally nobody, even after being into the know of whatever system drama is cooking inside the plural spaces. I am here just to serve y’all an app and this is how you treat me. O-fucking-k.

Conclusion

I don’t know what else to say, really. This post had to be written, that’s how I am feeling about it. If I hurt someone by writing all of this I am sorry.

With love, and insomnia.
Your Dear Nao