diff --git a/.gitignore b/.gitignore index c4b387a..f4a575c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .hugo_build.lock public/ +public.tar.gz +auth.txt diff --git a/Justfile b/Justfile new file mode 100644 index 0000000..62e2885 --- /dev/null +++ b/Justfile @@ -0,0 +1,13 @@ +serve: + hugo serve -D + +publish: + rm -f public.tar.gz + hugo build + cd public && tar czvf ../public.tar.gz * + curl \ + -XPOST \ + --fail \ + -H @./auth.txt \ + -T public.tar.gz \ + https://rustybever.be/_root diff --git a/content/dev/otter/0.1.0.md b/content/dev/otter/0.1.0.md new file mode 100644 index 0000000..c25c91b --- /dev/null +++ b/content/dev/otter/0.1.0.md @@ -0,0 +1,108 @@ +--- +title: "Otter 0.1.0" +date: 2025-06-12 +--- + +Although life's been busy with university, I've found some time to finish +things up with the current codebase and release a first version. This version's +been running on my Raspberry Pi for a couple of months without problems, so it +seems to be fairly stable. + +For context, Otter is a lightweight implementation of the [gpodder.net +API](https://gpoddernet.readthedocs.io/en/latest/), specifically the parts +required for synchronizing subscriptions between clients. Its goal is to be an +easy-to-install alternative to gpodder.net, allowing self-hosters to easily +use the various Gpodder-based clients available across devices. + +Version 0.1.0 has a fairly complete implementation of the parts of the Gpodder +API that's required for synchronizing clients. I've currently got no plans to +implement the more social media-related API routes, as these aren't necessary +for the goal of this project. + +## Supported features + +Otter 0.1.0 implements the following API sections: + +* Authentication +* Devices +* Subscriptions +* Episode actions +* Device synchronization + +This includes both the basic routes and the "advanced" sections, as described +in the API documentation. OPML and text output formats aren't supported yet, so +currently the API only supports JSON. I am planning on adding support for the +other output types later. + +In terms of client compatibility, Otter definitely works with AntennaPod and +Kasts. Kasts does have the strange bug where it crashes if you agree to the +"synchronize with all devices" popup when adding a new device. However, after +manually marking the devices as being synchronized on the server, all syncing +functionality works as expected. The Gpodder client also does not work, as it +strangely uses a different form of authentication. + +Both of these issues should get fixed in a following release, as I'd like Otter +to be generally usable with any client. + +### Ease of use + +Otter is distributed as a single binary configurable via a configuration file, +environment variables and CLI arguments. Everything can be set up via any of +these three methods (or a combination), allowing Otter to be easily used in +both Docker containers and directly as a background service. For fun, I've also +added support for listening on a Unix socket instead of a TCP socket. + +The goal is to always keep this setup, as a single binary is by far the easiest +way this type of software can be distributed. I currently publish binaries for +`x86_64` and `arm64`, as these are the platforms that I use. It should be +possible however to compile Otter for any build target supported by Rust. + +## Plans + +Before Otter reaches version 1.0, there are still some features I'd like to +add. + +### UI + +The biggest feature would definitely be a web UI. This UI will contain +everything required to manage an Otter server, both as a user and an admin. +Users should be able to see and remove sessions, manage their synced devices, +and view and edit their subscriptions and other stored data. Admins also +require the ability to add, remove and edit accounts, as well as seeing other +global service data. The goal is to have an easy-to-use UI that contains +everything you'd need to effectively use an Otter server. + +Important here is that I don't have any plans to recreate any of the social +media-related aspects of Gpodder. Otter is just a sync server; it's not meant +as a full-on replacement of the gpodder.net website. + +In terms of technology, I'm using [HTMX](https://htmx.org/) and +[PicoCSS](https://picocss.com/) to develop the frontend, combined with a +templating system in the backend. In my opinion, these two are the perfect +combination for developing simple frontends, especially for someone like me +that isn't the best at creating UIs. + +### CLI + +It's always useful to have a more technical CLI-focused way of accessing the +data of an application. For this, I want to add a full CLI interface that +allows an admin to interact with the server through the same abstractions used +by the API. There's already some very basic functionality available right now +on which I'd like to build to expose the full functionality of the API in CLI +form. + +### Database support + +Otter currently only support SQLite as it's easy to develop with and install on +the server. I do however know lots of people prefer running PostgreSQL, so +support for this will be added. Due to the way the codebase is structured, this +shouldn't be too hard, as all database-related functionality is hidden behind +an abstraction that can simply be implemented for PostgreSQL as well. + +Those are my plans for this project! I'm hoping I can keep up the development +pace, as I should be having a lot more free time the next couple of months. +I've grown quite fond of this project, as it solves a specific problem I had +while allowing me to screw around with some design patterns I hadn't used +before. I hope to continue developing it into a mature application. + +As always, thank you for reading, and have a nice day. diff --git a/content/dev/otter/devlog-2.md b/content/dev/otter/devlog-2.md new file mode 100644 index 0000000..cd49644 --- /dev/null +++ b/content/dev/otter/devlog-2.md @@ -0,0 +1,35 @@ +--- +title: "Working on Web UI & Admin Features" +date: 2025-06-29 +--- + +Last couple of weeks, I've started working on the web UI using HTMX and +PicoCSS. Development's been going pretty well, as I already had some experience +working with HTMX from a previous project. + +Currently, the login page is implemented, as well as a session management page. +I'm working towards building an initial version that can be used by multiple +users, complete with admin user management features and sign-up functionality. +Specifically, I'm prioritizing the following features: + +* Admin user management page +* Sign-up flow, including sign-up links for private instances +* Support for public instances (a.k.a. add a sign-up button and flow) + +These together would already make Otter a pretty nice Gpodder server, usable by +multiple people. After that, I can focus on the smaller features and bug fixes +(such as trying to make the Gpodder client work at all). I've released versions +[0.2.0](https://git.rustybever.be/Chewing_Bever/otter/releases/tag/0.2.0) and +[0.2.1](https://git.rustybever.be/Chewing_Bever/otter/releases/tag/0.2.1) +containing the login view and session management page. Ideally, I'm going to +keep releasing these smaller versions, so there's a relatively constant stream +of new features to try. + +While developing the sessions and user management page, I've noticed I'm +basically already implementing everything required for a RESTful API. Tables +are implemented using paginated API requests, so having these routes return +JSON instead of HTML depending on the `Content-Type` header wouldn't be a lot +of work. The Gpodder API isn't the greatest, so having this more standardized +API would be quite nice for third-party integrations. + +That's about it for this devlog, have a nice day.