Hey forum! I just started my new project in Nim. It's called StupidGreen, and will be a self-hosted music platform for independent artists/labels to share their music, sell merch and connect with fans. The code is not public (yet), but I wanted to share a preview of the README and ask for feedback on the concept and features.
I want StupidGreen to combine the best features of platforms like Bandcamp and Cargo.site, while being fully open-source and self-hosted, so that artists have complete control over their content, data, branding and monetization. Also, there will be a customizer component that will make it easy to customize the look and feel of the website.
StupidGreen will require a Postgres database to store all the music, merch and user data. The payment processing will be handled by LemonSqueeze or Stripe (I have an unstable OAPI 3.0 code generator somewhere in my private repos lol).
I'm thinking to use bbc/audiowaveform to generate the waveform peaks for each track (JSON format), and then feed the wavesurfer.js to render the waveform, but audiowaveform is written in C++ and doesn't have a C API. Ew.
Back to the beautiful world of Nim, the backend is powered by Supranim framework, which comes with zero-copy streaming support, making it perfect for serving audio files and handling file uploads. The frontend is written in Tim, with server-side rendering, and styled with Bootstrap 5. All the JS is plain old-school vanilla JS, with simple SPA-like navigation and interactivity (no FAANG bloated frameworks here!).
If you have any ideas or features you'd like to see, just let me know! If you know any other bandcamp-like platforms that have cool features, please share them with me.
These are features rarely appreciated by an "average listener" of a streaming service (because statistically most people don't really care about the music playing, they just need background noise) but for a service focused on building a relationship between a musician and a listener with music being the binding force these "premium" features fit it.
Good stuff! There is nothing better in offline mode than listening music you downloaded. SG will allow artists to offer their music for download in lossless quality.
@Col, Cool idea! The fastest way to get there would be to create a list of SG sites on StupidGreen.com (once ready). Also, another option would be to implement ActivityPub support in SG, which would allow users to follow SG sites through Mastodon or other ActivityPub-compat websites (new releases, events, etc) from all SG sites in one feed.
Good info, thanks!
Cool project. I was was seriously considering doing something similar a while back, but my focus was censorship resistance and autonomy, so i was going to use XMR/Monero for payments. Also, i'm in very early stages of a p2p suite, so if i worked on a similar solution it would be as a module/app in that overall effort. But for your project i agree that federation would be nice.
I don't understand the name.
It would be nice if one could use sqlite instead of postgresql, even if that meant disabling some features.
Good luck with your project.
Sure, Postgres or SQLite I think we can make it work with either. Regarding p2p, you can take a look at libdatachannel, there is a Nim wrapper for it at https://github.com/openpeeps/libdatachannel-nim
The name comes from Green song by Ken Nordine (from Colors, 1966 jazz album), which is a spoken word album describing colors in a... poetic way.
[...] a list of SG sites [...]
The one thing I miss in all the silo's is the lack of individuality of the pages/sites etc. Like browsing the web in the days of old, with webrings & stuff. The unexpected discoveries.
"Burgundy is fat"
The distributed nature [...] should be totally hidden from the end user.
I am thinking about doing something in this space as well, and I also reached that conclusion.
My solution idea was to have mutual monitoring. Say, artist A on server X has opted in to an algorithmically generated playlist playing after their playlist (to receive plays from related artists in return).
Server Y playing related artist B detects a tune from artist A is now in order, and checks the health of server X in realtime. Server Y notices health from X is insufficient, and plays a tune from artist C on server Z instead, and warns the admin of server X. This is all transparent to listener L.
Federated high availability- every host is a monitor.
Good to see some open-source references! Well, while the features may look similar on the surface, I can see that Mirlo is written in JavaScript with React and Node. So, this is where the main differences lie. There is no need to talk about SG base since we're on Nim's forum talking about the project. There is a Rust project on Codeberg, similar to Mirlo but with fewer features (can't remember the name), maybe someone can find it and share it here so we can analyze it as well.
@cmc I'm pretty happy with the name StupdiGreen, it has a nice ring, inspired from Ken Nordine's "Green" song, which is a classic in the world of spoken word and jazzy. The name has that deadpan humor that I find amusing is also easy to remember
I'm thinking to use bbc/audiowaveform to generate the waveform peaks for each track (JSON format), and then feed the wavesurfer.js to render the waveform, but audiowaveform is written in C++ and doesn't have a C API. Ew.
You nerd-sniped me: https://codeberg.org/SpotlightKid/audio2json