ತೊರೆ, pronounced "toh-ray" (with a dental 't' sound), is a microblogging application to capture stream of thoughts inspired by Linus Lee's Stream
The word ತೊರೆ in Kannada has multiple meanings, but most commonly as rivulet, forego, divest; which are indeed appropriate description for the intent.
You can see this in action at https://tohray.fly.dev.
- Write new posts
- In markdown
- Click on the date to see posts written during that month.
- Delete posts
- Supports multiple users, but I really wrote it for myself.
- You can allow users to sign up by giving them the
inviteCode
- There is no edit button. If you wan to edit a post, you first make a copy of the content. Say
you want to edit the post with the slug
about. So, go to https://yoursite.com/about?format=md and copy the whole text. The first line printsslug = about, so that you know what post you are about to re-edit. - There is no "user management"
- There is no "password reset"
Linus wrote his stream app using a language he created himself - Oaklang. I wanted an excuse to use Nim for something "useful", so I used Nim, and it was a great experience.
Nim is a fast, and friendly language that is statically typed, while looking like Python in Syntax. It compiles the source code into C (or C++, or Javascript), which allows the programs written in it to be very fast, small, and quite portable.
- Programming Language: Nim
- Framework: Prologue, which in turn uses Karax.
- Database: Sqlite
- CSS: Terminal
- Cloud: Tested on https://fly.io
- Editor: eh.. didn't know you cared, but it was written on Zed which has decent support
for editing Nim with
nimlangserver.
- The
views.nimfile way too long, but I'm not ashamed of it. It's app I wrote for myself, and it fits into myhead perfectly fine. - The decision to compile secrets into the binary was made after realizing that managing secrets in
the environment,
.envfiles,consts.nim.. multiple places is just busy work. Not how I would write a "production" application.. but this is a "hobby" application. And, whatever makes me happy to keep writing code will remain.
- Clone this directory
- Have nim installed on your computer
- copy
example-consts.nimtoconsts.nimand set the variables - NOTE: The config is compiled into the binary. There is no "config file"
- Compile the app with
$ nim compile toray.nim - Launch the program with
./tohray, and the program will start on port:8080- http://localhost:8080 - Go to http://localhost:8080/register (not visible on the web page itself)
- Use the
inviteCodeyou set inconsts.nimalong with your name and password - Click on
Writeto start writing. I recomment writing a post with slugaboutso that theaboutlink on the top nav actually goes to the about page. - The data is stored in a
sqlitedatabse given in theconsts.nimfile - NOTE: if you want to see how the blog looks with some entries in it, you can run
sqlite3 tohray.db < test.sqlto see somelorem ipsumcontent.
I wrote this so that I can run it fly.io. Study the Dockerfile and fly.toml.
Observe how I copy fly-consts.nim to consts.nim in the Dockerfile. This allows you to have a
local copy (on the computer) with the secrets etc, but will be compiled into the binary on deployment.
To create the volume where the database is stored (/mnt/db in fly.toml), you have to use this
command: fly volumes create db -r atl. Here, atl stands for Atlanta, where I launched the app.
The app and the volume should be in the same zone.
- [] RSS Feed
- [] Export all the posts in a JSON file
- [] Deploy on other PaaS platforms like unicraft etc.
- [] Make a static build of this docker image. Currently, it is using a full sized Ubuntu Normal image. bleh.
- Edit Posts. Don't hold your breath.
Till then, Enjoy! and happy streaming.