I initially planned to release these work-in-public updates as a wonderful and glorious narrative. I wanted each blog post to describe a step along a journey, seamlessly coming together into a personal story. Nope. That is not at all representative of how the work been. Motivation comes in fits and starts. Progress too. And then the overall direction of the project has swung around like a compass at the north pole!
I don't have a consistent narrative for my work as I'm going. I have plans... but they morph and evolve. So instead of trying to tell a story, I'm going to give a quick background of what Birch is, a progress update, and then any extra thoughts I've got.
I'm building an app! It's called Birch.
It's a very simple platform-as-a-service with an integrated user interface.
Users can log in, create a 2-dimensional canvas called a space, and then add some functions or tables to the space.
Functions will be able to be run by the user, on an http request, or on a timer.
While running, they have access to and can edit the tables. Programming!
Progress update:
I have a backend! It's in ruby + sinatra + sqlite. I'm a little worried about scaling it, but it didn't take long to write and I figure I can improve it if/when (hopefully 😄) that becomes an issue.
I have a frontend! I'm using solidjs. I had to fall back to vanilla javascript for dragging the cards around, since it seemed too slow with solid, but perhaps I didn't know how to optimize it well enough.
The backend is hooked up to the frontend! People can sign up, create new spaces, add cards to those spaces, edit said cards, and then reload the page without losing anything.
None of this is hosted anywhere yet. I intend to get something up fairly soon.
Users can't actually run functions, but I do have this support for them on the backend. The functions are written in javascript and run server-side.
I'm using deno to run these functions, which comes with support for sandboxing. I intend to use bubblewrap as a secondary layer of security when I deploy to a linux server. (I'm developing on a mac and bubblewrap is linux-only.)
Undo/redo is working!
The "canvas" doesn't actually scroll yet. It's just whatever size your window happens to be. I'll have to tackle that soon!
Some additional notes:
Tables are persistent lists of json blobs. I thought about using a different name for them (list for instance), but I think table is the most widely-used term that implies persistence upfront. I guess "database" could work too.
I'm not trying to support any kind of real-time collaborative editing experience at the moment. In the future I would really like to integrate with git, so people could both share their code outside of Birch and also write code in their normal editor to use in Birch later.
No billing or pricing so far. I'd like to eventually make money from Birch so I can spend more time on it. I imagine orchestrating some sort of free tier, and then charge based on usage.
I'll try to post a new update towards the end up July. I'd love to connect if you have any thoughts or feedback, either on twitter or by email at [email protected].