Compare commits
	
		
			3 Commits 
		
	
	
		
			df67adc3ee
			...
			dff01df7bb
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | dff01df7bb | |
|  | e75da51a19 | |
|  | 0618422b68 | 
|  | @ -1,2 +1,4 @@ | ||||||
| .hugo_build.lock | .hugo_build.lock | ||||||
| public/ | public/ | ||||||
|  | public.tar.gz | ||||||
|  | auth.txt | ||||||
|  |  | ||||||
|  | @ -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 | ||||||
|  | @ -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. | ||||||
|  | @ -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. | ||||||
		Loading…
	
		Reference in New Issue