diff --git a/NOTES.md b/NOTES.md new file mode 100644 index 0000000..35d15a4 --- /dev/null +++ b/NOTES.md @@ -0,0 +1,63 @@ +# 2026-02-22 +## 2200 + +Requirements: +- Need a better Revolt client that's cross-platform native + - Ideally macOS / iPadOS / iOS / Windows / Linux / Android / Web +- Need the UI / UX to be top-notch and feel good in the hands, otherwise people won't use it + - On top of this, it should also be _fun_ and _cute_ +- Accessibility should be considered, but I do not have experience in this area, will need to do research +- Currently Revolt has a (now deprecated) web app and a native app that doesn't support custom endpoints + - We're forking from Revolt, so don't need to worry about breaking changes on their end + - Sticking with the name ermine cause I like it (stylized `ermine` all lowercase to be cool) +- Decided to try using Slint + Rust for a more bare-bones low-level approach +- Licensing + - Slint requires GPLv3 without a paid license - fine with this + - Revolt is also AGPLv3 + - Code I write will be MIT as I don't want to hinder people re-using anything for any reason +- Have already spent a number of hours 100% vibe coding a prototype + - Used Flutter + Dart (was considered for this iteration) + - It worked okay, had a UX close to what I want as a starting point, so we know what we want is possible, we just need to build it + - There are just too many bugs and there's no way to trust the code written underneath + - Feel awful and ashamed of vibe coding, giving away my agency and creativity to an LLM and to big tech, rotting away my ability to create +- This is a project to push myself outside of my comfort zone towards something I've not done before, to grow beyond the limitations I've placed upon myself + - Having seen what other people've worked on, over months, and the kind of dedication they have towards software quality, I know this is something that will take time to craft instead of something I can bang out in a few hyperfixated days + +Resources: +- Slint + - https://docs.slint.dev/latest/docs/slint/ +- Rust + - https://docs.rs/http/latest/http/ + - https://docs.rs/sqlite/latest/sqlite/ + - https://docs.rs/json/latest/json/ + - https://docs.rs/websocket/latest/websocket/ + - https://doc.rust-lang.org/rust-by-example/testing/unit_testing.html +- Revolt + - https://developers.stoat.chat/developers/endpoints/ + - https://developers.stoat.chat/api-reference + - https://stoat.chat/api + - https://revolt.handmadecities.com/api + - https://github.com/livekit/livekit +- HMC + - https://git.handmadecities.com/HMC/handmade-revolt + +Notes: +- Slint reminds me a lot of when I tried messing with SwiftUI +- Trying to make things look pretty early on is a fools errand + - Need to remember to make things work, then make them look nice +- Have not used Rust before so this should be interesting +- HMC Revolt seems to be on version 0.8.2 while Stoat is now on 0.11.5 + - Have an OpenAPI spec for the latest stoat, but no historical ones + - Need to figure out what differences exist, if any, and how to support different server versions cleanly +- Seems like there's an `/api` endpoint with information about the server (if it's a revolt server) + - App version + - autumn endpoint (file server) + - january endpoint (media server) + - voso ? + - livekit ? + - livekit seems to be what's used for voice / video support + - Currently not supported by HMC Revolt instance + - main websocket +- Trying to use progenitor + openAPI spec to generate rust code, not going that well, and Gwen said it may be better to write these by hand + - progenitor didn't work due to it operating under the assumption that endpoints only return one type, which this spec violates (https://github.com/oxidecomputer/progenitor/issues/950) +- Read through documentation mostly, taking it slow and making sure I understand how things are working, being patient with myself