Geist 👻 — Uploading made easy

Stefan M.
3 min readFeb 10, 2017

A few days ago I released Geist 👻. A simple uploading tool which uses Googles Firebase 🔥 as a backend. Specifically it uses storage, obviously for storing files and auth for security reasons. But Geist is a lot more than “just another upload tool”. But let’s start from scratch.

Why do I have to change some files and create a user first, before I can start using it?

The reason is simple. Before you can run Geist you need a Geist Server instance. The server will take care of the uploading and url shortening for the client. After you have created the instance you have to adjust the client to use these server instance.

The user is needed for security reasons. You don’t have to create an user but it is recommended. If you do so, you can restrict who can upload files to the storage. Which means no one other than you can upload files to Firebase!

You are using Electron. Why don’t you use the uploading and url shortening stuff directly in the client?

Because of security reasons. When you build an application with the Firebase JavaScript SDK you have to “open source” your browser key. Otherwise Firebase can’t initialize itself. But the browser key is used to accessing Google APIs and stuff. Which means it can, depending on the API you use and how much you use it, cause some cost.

If someone grab your browser key (simply via right click, display source code) and use it, it can cause cost for you! To prevent it you can setup “trusted domains”. So only your domains are allowed to use these APIs.

Because Geist Server uses the API (which have free quotas but cost if you reach that) we use a server instance with the restricted domains instead of putting all the logic inside the client. If we do so we have to setup the trusted domains to localhost. Which is obviously everyone with a computer.

Let’s start with the features. Obviously Geist can upload files to Firebase Storage (you can also just drop your file to the Tray):

Beside of that it have a shortcut to create screenshots which will be uploaded instantly after you have created it. Just press CMD+4 (not CMD+ALT+4. This will create a normal screenshot on macOS) select the area and release:

Gifs are the new PNG, right? RIGHT?
For these new century image format Geist provide two helpers. The first one converts a given video to a gif and upload it:

The second — in my opinion the more powerful — helper let you directly create gifs and, you get it, upload it:

To creating gifs you need ffmpeg installed first. Otherwise it is not possible to create or convert gifs from a video. But that is easy on macOS. You can just install it via Hombrew:

brew install ffmpeg

After a successful upload a link to the file will be directly copied to your clipboard. You can just paste it with CMD+V everywhere you like.

Currently the setup process of Geist and Geist Server is not that easy. I hope I can improve that process in the future. Meanwhile you can help me to improve Geist (Server) with creating issues to share your experience or improvements…