Self-contained web apps?

Let’s assume we want to develop a web app called Blog. With Blog people are able to write and publish blog posts in a visual editor. We want to make this app available to everyone, not just software people who know how to use Git, SQL databases, and deploy to a web server. In other words:

How can we enable Susan to download Blog and start writing posts at iamsusan.com?

Self-contained software architecture

It doesn’t really matter what technology we’ll use. It could be PHP, or some Node.js-based setup. Ideally, something that runs on any Linux machine. What’s important though is that we don’t rely on any external services. I mean zero. No AWS S3, no service for sending emails, no external database. Instead, imagine your app could be represented as a simple .zip file with certain conventions, containing the source code and the data (SQLite file).

1-click deployments and backups

Now imagine you could send that .zip file to Susan. She could go to a service provider that supports the format, register a domain and simply upload the web app, which instantly becomes available at iamsusan.com. 🎉 At any time she can download the current state of the app as a .zip file and run it locally, or move it to another domain.

Privacy and ownership

The service provider must not have access to Susan’s data. They just provide an interface to the hardware the portable web app runs on. Only Susan has access to the data through the web interface the app provides. So she’ll create/edit/delete blog posts there. Since she really owns the webspace (like she would own a root server), she can also go to app settings and enter her SMTP credentials. This way, emails to subscribers can be sent as the person themselves. Which makes it more personal, and emails will less likely end up in the spam folder.

Self-contained Svelte Apps

Talk is cheap, so let’s turn this idea into reality. Together with Tom Atkins, I’m working on an little app called PostOwl (released as open source).

The app is built with Svelte and uses an SQLite database for storage. We can already deploy it with a few steps via Fly.io. A cool next step would be to provide an interface that lets you:

  1. Create a domain

  2. Upload a .zip file containing the PostOwl app and data

  3. Login into your PostOwl with your secret password

What do you think about self-contained web apps? If the internet goes black, will the server in your basement still serve your website? :)

Published by Michael Aufreiter on Jun 23, 2023
Revised on Sep 6, 2023
Respond to the author

On Ken, we're trying to figure out how the world works — through written conversations with depth and substance.

Your response will be public, and the author will be notified.