Whacook

January 12, 20263 min readCross-platform App
KotlinKMPFullStack
Whacook

The motivation

This semester, I took a course called "Kotlin-Based Software Development," which covered the basics of Kotlin and aimed to teach us how to build a Kotlin application. In this course, the instructor, who is also a JetBrains Developer Advocate, announced the KotlinConf Multiplatform Contest, a competition where we had to build a multiplatform application.
This project became my contest entry; while I didn't win KotlinConf tickets, I did gain valuable experience.

I started thinking about what kind of app could help me in my daily life. As a student living away from my parents, I have to cook for myself, and it's often hard to decide what to make with the ingredients I have on hand. That's how the idea was born: an app that helps me figure out what to cook that day. And the name came naturally: Wha(t to)Cook.

Funkciók

  • Managing ingredients: Add and manage the ingredients currently available in your kitchen.
  • AI-powered recipe creation: Create creative and delicious recipes with the help of Google Gemini AI, tailored to the ingredients you have on hand.
  • Detailed recipes: Read detailed recipes that include cooking times and the necessary ingredients.
  • Rating and favorite recipes: You can rate recipes individually and mark them as favorites.
  • Sorting and filtering recipes: Recipes can be sorted by rating and filtered by likes or ratings.
  • Editing recipes: Generated recipes can be edited at any time if a recipe contains an error.
  • Cross-platform support: Thanks to a unified, shared codebase, it runs seamlessly on Android, desktop computers (JVM), and the web (Wasm).
  • Local storage: Ingredients and settings are stored locally on the device.

Used technologies

Lessons learned and experiences

In many ways, this project was a learning experience for me—not only because I got to learn a new technology, but also because of the project management, time management, and the experience of working on a solo-dev project.

First, a few words about the technology.

I REALLY LIKED KOTLIN AND KOTLIN MULTIPLATFORM!

So far in my university studies, I haven't had the opportunity to learn the Kotlin language, but Java was my main programming course. Unfortunately, the course "Fundamentals of Programming 3 - Java" was not taught to us in the best possible way, although after learning low-level C/C++, I liked Java's JVM-based approach and its programming style, so the Kotlin language itself and the technology behind it (which is, of course, Java) were not new to me. I really liked JetBrains' motivation for creating the language, which was (if I recall the history correctly) that Java is good and nice, but not good enough. So they began developing a language they could use to build their own tools and IDEs, one that is much more efficient and fixes the language and logical errors (or rather, just annoying quirks) that occur in Java.

After that, understanding the Kotlin language wasn't difficult, and I also solved last year's 2025 Advent of Code in Kotlin. (I even wrote a blog post about it!)

My teacher announced the competition at the beginning of the semester, and I became so motivated by the language and the technology that I started thinking about what I could submit - something that's interesting, that I'm passionate about, and that can be implemented across multiple platforms.
By this point, I had practically memorized the winning entries from previous years, and I wanted to create an app that could somehow incorporate a text generation model - since I'd seen that it was highly valued—but in a way that actually made sense, rather than just being forced into it.

By the way, I signed up for the competition because I thought Kotlin and Kotlin Multiplatform were the same thing, and since we're going to be studying KMP this semester, but it turned out that's a different course.
No mistakes, only happy accidents!

One of the main lessons I learned from the competition is that you can't rush things. The deadline was January 12, and although I had started working on it earlier — I'd been brainstorming ideas since around October—unfortunately I wasn't able to make much progress during the semester, and the submission deadline fell right in the middle of exam season. So I wasn't able to work on it as much as I could have and should have, and the presentation video ended up being very rushed. I've decided that next year I'll come up with an idea in time, start working on it early, and see the project through to completion. In fact, it will also help if I set the deadline not for the actual due date, but a few days earlier, so that even if I fall behind, it won't be a problem, and I'll have plenty of time to document, make a demo video, tinker with GitHub Actions, and take care of other little things.

All in all, it was a very educational project and competition. I'll definitely participate again next year - if only for the experience, and for the Kotlin merch, provided if I manage to put together another eligible project. :)