57 lines
3.4 KiB
Markdown
57 lines
3.4 KiB
Markdown
---
|
|
title: An introduction to Bulgur Cloud - simple self hosted cloud storage
|
|
date: 2022-03-29
|
|
---
|
|
|
|
> This post is day 8 of me taking part in the
|
|
> [#100DaysToOffload](https://100daystooffload.com/) 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".](/img/2022-03-29-00-17-38.png)
|
|
|
|
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.](/img/2022-03-29-00-16-13.png)
|
|
|
|
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.](/img/2022-03-29-00-20-48.png)
|
|
|
|
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".](/img/2022-03-29-00-22-48.png)
|
|
|
|
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.
|