Third generation: A drastic rework

The third generation of the project involved a lot of changes, both in the design and in the functionality. The main idea was to create a new unique design that allowed users to choose any color they wanted as the overall style. This was a challenging but rewarding task that took several months to complete.

Design drafts and implementation

The first step was to create some mockups for the new design. There were a few iterations of the drafts, as shown in the screenshots below.

Draft of third generation 01 Draft of third generation 02 Draft of third generation 03
Iterations of mockup for a new design

After the drafts were finalized, the implementation phase began. It took a couple of months to finish, during which I also had to work on the server development. The screenshots below show the progress of the development over time. These screenshots were taken in the span of roughly three months.

Third generation screenshot 00 Third generation screenshot 01 Third generation screenshot 02 Third generation screenshot 03 Third generation screenshot 04 Third generation screenshot 05 Third generation screenshot 06
Development of new design

Color customization and server-side experiments

The idea of allowing users to choose any color they wanted as a style was not easy to implement. Android uses XML styles1 that are compiled when the application is built, and many libraries do not support programmatic style changes2. To overcome this limitation, I had to go through all the views3 that make up the layout and change the colors at runtime. Each special type of view needed a custom configuration.

The server also underwent some major changes, such as adding HTTPS with encryption, security headers, tokens, and other security-related features. It also scored A’s on many server test suites. I also decided to save some money and migrate to ARM4, which enabled me to run the server on lower-end hardware such as Raspberry Pi5. This caused some problems, especially with the database. I had to switch from MongoDB6 to RavenDB7, which is a solid alternative. The rewrite of all the database calls took a lot of time, but it was worth it.

Third generation screenshot 01 Third generation screenshot 02
Design completed and a support for a new language?

Conclusion and future plans

The third generation of the project was a huge undertaking that resulted in a new and improved design and functionality. However, it also made me realize that this project was too large for a single person to maintain. If I ever wanted to release it, I had to make some changes. This led me to the fourth generation, which I will write about in a future post.

Third generation screenshot 03 Third generation screenshot 04 Third generation screenshot 05
Final look at third generation in development.

Fourth generation

Read on about the fourth generation. In the fourth generation it was time to say goodbye to the server. It was becoming very difficult to maintain and simply too much work for a single person.


  1. XML stands for Extensible Markup Language, which is a way of defining the structure and appearance of data. In Android, XML styles are files that contain information about how different elements of the user interface should look, such as colors, fonts, sizes, margins, etc. ↩︎

  2. Programmatic style changes means changing the appearance of the user interface elements at runtime, that is, when the application is running. This can be done by using code to modify the properties of the views, such as background color, text color, visibility, etc. ↩︎

  3. Views are the basic building blocks of the user interface in Android. They are objects that represent graphical elements on the screen, such as buttons, text fields, images, etc. ↩︎

  4. ARM stands for Advanced RISC Machine, which is a type of processor architecture that is widely used in mobile devices and embedded systems. ARM processors are known for being energy-efficient and low-cost. ↩︎

  5. Raspberry Pi is a small and affordable computer that can run various operating systems and applications. ↩︎

  6. MongoDB is a popular database system that stores data in JSON-like documents. JSON stands for JavaScript Object Notation, which is a way of representing data as key-value pairs. ↩︎

  7. RavenDB is another database system that also stores data in JSON-like documents. RavenDB offers some features that make it stand out, such as ACID transactions, full-text search, automatic indexing, and data replication. ACID stands for Atomicity, Consistency, Isolation, and Durability, which are properties that ensure the reliability and integrity of the data. ↩︎