I’m excited to present my recent pet-project that has finally arrived! Here I will describe how it works and which technologies are used internally.

What is it?

It is a Telegram bot 🛫 that stores your links and provides simple management interface. I had been looking for something like that for a long time because I usually use Telegram to quickly store or sync something between devices. Although there are many bookmark managers available, as well as the “Saved Messages” chat with a “Links” menu, they are uncomfortable for me for various reasons.

What does it can and how to use it?

The application’s functionality is pretty simple. As for now you can:

  • Save a link by sending it to the chat.
  • List all saved links by typing either /ls or /list command.
  • Remove a stored link by selecting it from the /ls output and pressing the Remove button.

In the future, I also plan to add some simple category management and improve the user-friendliness of the /ls output. After that, I believe the project will be complete as long as I don’t want to bloat the application with dozens of functions. Let it be simple, but still quite useful.

Tech overview

This project is not very serious and more of a starting point. It served as a playground for new technologies:

  • Code is written in Scala using zio, bot4s/telegram, slick, and flyway.
  • The build is adjusted to be GraalVM-compatible and produces native, statically linked binaries.
  • The entire project is wrapped with nix, which provides a reproducible environment and is responsible for building docker images.
  • GitLab CI runs build on commit and pushes the docker image to the GitLab registry.
  • The flux-powered k8s cluster listens to the GitLab registry and re-deploys newly pushed images.

There is still room for improvement, but for now, I’m quite satisfied.

Conclusion

I’m open to any feedback and suggestions for features and/or changes.

Thank you for reading this little article, I hope it will be useful to someone. Feel free to reach me if you have something to say.

And also take a look on the posts on similar topics: