In a Roni match, players compete in three rounds where the goal is to score as many points as possible, within the three-minute time limit, by forming words using letter tiles on a 9x9 board. In each round, both players have their own board but the same random 21 letter tiles, and we calculate the score according to rules similar to Scrabble.
For people who might prefer a less competitive style of play, we also built a single-player puzzle mode. It has 59 puzzle levels that you can solve more calmly by yourself. In hindsight, we should probably have packaged this as a separate app because now this mode doesn’t get as much attention as it deserves.
We elected to code the app(s) using Nativescript and Nativescript-vue. While I certainly don’t only have praise to say about it, I still think it was the right decision. Once you learn all the quirks, you have a platform where you can build a well-functioning app for both iOS and Android with a minimal amount of platform-specific code.
The backend is a Python/Django/Celery/Postgres/Redis stack. We use Rayter to calculate the player ratings and leaderboards. Rayter is an open-source Python tool/lib - created by my friend Peter Jaric and me - used to calculate ratings for players in different games.
Roni is my first mobile app, and it remains to be seen if the game will do well. So far, we’ve got a small number of active players playing every day, and we hope that we can increase the rate of new players joining. However, the app market game is new to us, and while I have a pretty good understanding of how to grow a website’s traffic, I feel somewhat lost when it comes to Apple and Google’s app stores. In any case, I’m delighted to have created a game that I myself enjoy playing a great deal.
If you want to challenge me in a Roni game, my username is
heyman. The game is available on both iOS and Android. If you want a slight competitive advantage :), I’d recommend you play on a tablet where you get the benefit of being able to drag multiple letters tiles at the same time (due to the size of the screen).