I'm excited to announce a new product I've been working on over the past few months: lists.sh.
It's a microblog for lists.
After seeing charm.sh a few months ago, I've been enamored by the idea of SSH apps. I decided that a blogging platform focused on developers could be the perfect use case for an SSH app.
Also, I love writing lists. I think restricting writing to a set of lists can really help improve clarity in thought. The goal of this blogging platform is to make it simple to use the tools you love to write and publish lists. There is no installation, signup is as easy as SSH'ing into our CMS, and publishing content is as easy as copying files to our server.
Check it out and let me know what you think!
How it's built #
The app relies on two different servers: ssh and web. The entire stack is written in golang.
SSH App #
The SSH app leverages the charm toolset:
These three technologies make it possible to build SSH apps that behave very
much like a traditional web app. The user doesn't need to install anything
besides SSH in order to use our content management system. All they have to do
is ssh lists.sh
and from there they can create an account.
SSH apps are a relatively new and exciting concept and I couldn't wait to build something leveraging it.
Under the hood I used wish
which leverages golang's implementation of the SSH
protocol but provides us with the flexibility to do something more than simply
logging into a remote computer and seeing a shell. It allows us to construct a
TUI app -- using bubbletea
and lipgloss
that the user interacts with.
Once the user creates an account and has some blog posts to upload to the
platform, all they have to do is use scp
to send the files to us.
In order for scp
to work, there needs to be a client and a server with the
command installed. In the case of lists.sh, we actually reimplemented the scp
and retooled it for our purposes. When a user runs
scp ~/blog/hello-world.txt lists.sh:/
, they don't actually copy a file onto
our server root directory. Instead, we read that file and save it into our
postgresql database.
Web app #
The web app simply uses net/http
and templates/html
to construct a minimally
designed, html+css only website. Some interesting features of the website:
- Semantic html
- Renders nicely in
w3m
- No javascript
- No tracking
- No authentication mechanism
- No cookies
Because we are using an SSH app and leveraging public-key cryptography, we don't need to worry about authentication inside the website. The website is effectively just a read-only portal.
Conclusion #
I've been using lists.sh for my own lists the past week
while I was testing the functionality. It's hard not to get excited because the
workflow is painless. Whenever I need to make a change to a list, I just open
vim
, edit the file, and then call scp
to publish the changes.
Because I'm leveraging SSH and public-key cryptography, there are a lot of technical considerations that I don't have to worry about. Authentication is handled for me, I don't have to implement an online editor, or worry about draft states.
This is just the first of many ideas I have leveraging SSH apps and I'm excited to build them!