Skip to content

lvnilesh/tohray

 
 

Repository files navigation

tohray

ತೊರೆ, 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.

Features

  • 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

Non-Features

  • 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 prints slug = about, so that you know what post you are about to re-edit.
  • There is no "user management"
  • There is no "password reset"

Technology Details

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.

Programming Notes

  • The views.nim file 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, .env files, 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.

Installation

  • Clone this directory
  • Have nim installed on your computer
  • copy example-consts.nim to consts.nim and 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 inviteCode you set in consts.nim along with your name and password
  • Click on Write to start writing. I recomment writing a post with slug about so that the about link on the top nav actually goes to the about page.
  • The data is stored in a sqlite databse given in the consts.nim file
  • NOTE: if you want to see how the blog looks with some entries in it, you can run sqlite3 tohray.db < test.sql to see some lorem ipsum content.

Installation on fly.io

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.

Todo

  • [] 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.

Someday, maybe

  • Edit Posts. Don't hold your breath.

Till then, Enjoy! and happy streaming.

About

Microblogging application for one person

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Nim 93.5%
  • CSS 4.2%
  • Dockerfile 1.6%
  • Makefile 0.7%