Compare commits

...

3 Commits

Author SHA1 Message Date
Jef Roosens dff01df7bb
otter: second devlog post
ci/woodpecker/push/woodpecker Pipeline was successful Details
2025-06-29 11:37:38 +02:00
Jef Roosens e75da51a19
chore: add Justfile for easy publishing 2025-06-12 12:14:00 +02:00
Jef Roosens 0618422b68
otter: 0.1.0 post 2025-06-12 12:05:26 +02:00
4 changed files with 158 additions and 0 deletions

2
.gitignore vendored
View File

@ -1,2 +1,4 @@
.hugo_build.lock
public/
public.tar.gz
auth.txt

13
Justfile 100644
View File

@ -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

View File

@ -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.

View File

@ -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.