This post is day 8 of me taking part in the #100DaysToOffload challenge.

I’ve been recently working on Bulgur Cloud, a self hosted cloud storage software. It’s essentially Nextcloud, minus all the productivity software. It’s also designed to be much simpler, using no databases and keeping everything on disk.

The software is still too early to actually demo, but the frontend is at a point where I can show some features off. So I wanted to show it off.

A white web page with the words “Bulgur Cloud”. Below is “Simple and delicious cloud storage and sharing”. Under that are two fields titled “Username” and “Password”, and a black button titled “Login”.

I’ve been going for a clean “print-like” look. I think it’s going pretty well so far.

A web page with 3 files listed, “sprite-fright.mp4”, “test.txt”, and “sprite-fright.LICENSE.txt”. There are pencil and thrash bin symbols to the right of the file names. A leftward arrow is grayed out on the top left, and top right says “kaan”. On the bottom right there’s a symbol of a cloud with an up arrow.

I’m not sure about the details of how the directory listing will look. I don’t think I like the upload button in the corner, and the rename and delete icons feel like they would be easy to mis-press. There is a confirmation before anything is actually deleted, but it still would be annoying.

A pop up that says “Delete file “text.txt”, with the buttons “Delete” and “Cancel” below it.

Something I’m pretty happy with is the file previews. I’ve added support for images, videos, and PDFs. Video support is restricted by whatever formats are supported by your browser, the server doesn’t do any transcoding, but I think it’s still very useful for a quick preview. I’m also planning on support for audio files. The server supports range requests, so you can seek around in the video without waiting to download everything (although I’ve found that Firefox doesn’t handle that very well).

A page with the text “sprite-fright.mp4”, and a video player below showing a frame from the movie. Below the player is a link that says “Download this file”.

This is a web interface only so far, but I’m planning to add support for mobile and desktop apps eventually. I’ve been building the interface with React Native so adding mobile/desktop support shouldn’t be too difficult, but I’ve been finding that “write once, run everywhere” isn’t always that simple. I ended up having to add web-only code to support stuff like the video and PDF previews, so I’ll have to find replacements for some parts. Mobile and desktop apps natively support more video and audio formats too, and with native code you usually have the kind of performance to transcode video if needed.

The backend is written in Rust with actix-web, using async operations. It’s incredibly fast, and uses a tiny amount of resources (a basic measurement suggests < 2 MB of memory used). I’m pretty excited about it!

After a few more features (namely being able to move files), I’m planning to put together a demo to show this off live! The whole thing will be open source, but I’m waiting until it’s a bit more put together before I make the source public. The source will go live at the same time as the demo.