Whacook

2026. jan. 12.3 perc olvasásCrossplatform Alkalmazás
KotlinKMPFullStack
Whacook

A motiváció

A félévben felvettem egy tárgyat, Kotlin alapú szoftverfejlesztés néven, ahol a Kotlin alapokról volt szó, és a célja azt volt, hogy tudjunk valami Kotlin alkalmazást készíteni. Ebben a tárgyban a tanár, aki Jetbrains Developer Advocate is, meghirdette hogy létezik a KotlinConf Multiplatform Contest nevű versenyt, ahol egy multiplatform alkalmazást kellett készíteni.
Ez a projekt lett az én versenyművem, amivel ugyan KotlinConf jegyeket nem nyertem, de tapasztalatot igen.

Elkezdtem gondolkodni, hogy mi lenne egy olyan alkalmazás, ami segíthetne a mindennapi életemben. Diákként távol élek a szüleimtől, magamnak kell főznöm, és gyakran nehéz eldönteni, mit készítsek a fellelhető alapanyagokból. Ebből született az ötlet: egy alkalmazás, amely segít kitalálni, mit főzzek aznap. A név pedig adta magát: Wha(t to)Cook.

Funkciók

  • Hozzávalók kezelése: Add hozzá és kezeld a konyhádban a jelenleg rendelkezésre álló hozzávalókat.
  • AI-alapú receptkészítés: Készíts kreatív és finom recepteket a Google Gemini AI segítségével, a rendelkezésre álló alapanyagokhoz igazítva.
  • Részletes receptek: Olvass részletes recepteket, amik tartalmazzák a főzési időt és a szükséges hozzávalókat is.
  • Értékelés és kedvenc receptek: A recepteket egyenként lehet értékelni és kedvencként megjelölni.
  • Receptek rendezése és szűrése: A recepteket értékelés szerint lehet rendezni, valamint kedvelés vagy értékelés szerint szűrni.
  • Receptek szerkesztése: A generált receptek bármikor szerkeszthetők, ha hibás lenne egy recept.
  • Multiplatform támogatás: Egységes, közös kódbázisnak köszönhetően zökkenőmentesen fut Androidon, asztali számítógépen (JVM) és a weben (Wasm) egyaránt.
  • Helyi tárolás: Az összetevők és a beállítások helyileg, a készüléken vannak tárolva.

Felhasznált technológiák

  • Kotlin Multiplatform: Logika megosztására Android, Desktop és Web között.
  • Compose Multiplatform: Egységes felhasználói felület létrehozása minden platformon.
  • Voyager: Navigációs könyvtár, amit egységesen lehet multiplatfromon használni.
  • Koin: Dependency injection támogatására.
  • Ktor: A hálózati lekérdezésekhez, és API híváshoz.
  • Room & SQLDelight:A lokális adattároláshoz. Room támogatja az Android és JMV platformot, viszont weben nincs, így ott az SQLDelight könyvtárat kellett használni.
  • Google Gemini AI: Receptgenerálás AI segítségével.

Tanulságok és tapasztalatok

Sok értelemben tanulságos volt számomra ez az alkalmazás, nem csak mitn egy új technológia megismerése miatt, hanem projekt menedzsment, időbeosztás, és a solo-dev projekt megtapasztalása miatt is.

Először is a technológiáról pár szó.

NAGYON MEGTETSZETT A KOTLIN ÉS A KOTLIN MULTIPLATFORM!

Eddig egyetemi tanulmányaim folyamán eddig nem volt alkalmam megismerkedni a Kotlin nyelvvel, de Java volt mint programozós fő tárgy. Sajnos ez a ,,Programozás alapjai 3. - Java" tárgy nem a lehető legjobban volt nekünk tanítva, bár maga a nyelv a C/C++ alacsony szintje után a Java JVM-es megoldása megtetszett, illetve a programozása is, így maga a Kotlin nyelv és a mögötte rejlő technológia (ami ugye maga a Java) nem volt újdonság. Nagyon tetszett a JetBrains motivációja a nyelv megalkotására, ami az volt (ha jól tudom a krónikákat), hogy jó a Java, meg szép, de nem eléggé. Így elkezdtek egy nyelvet fejleszteni, amit az ő saját eszközeik és IDE-ik fejlesztésére használhatnak, ami sokkal hatékonyabb, és kijavít olyan nyelvi és logikai hibákat (inkább csak idegesítő tulajdonságokat), amik a Java-ban előfordulnak.

Ezek után a Kotlin nyelv megértése nem volt nehéz, és a tavalyi, 2025-ös Advent Of Code-ot is Kotlin nyelven oldottam meg. (Erről blogbejegyzés is készült!)

A versenyt magát tanárom már a félév elején meghirdette, én pedig annyira motivált lettem magával a nyelvvel és technológiával kapcsolatban, hogy elkezdtem gondolkozni, mivel tudnék nevezni, ami érdekes is, engem is érdekel, és meg lehet valósítani Multiplatformosan.
Az előző évek nyertes pályázatait eddigre már szinte teljesen bemagoltam, és egy olyan alkalmazást akartam megvalósítani, amibe bele lehet tömködni valahogyan szöveg generációs modellt, mert azt ahogy láttam nagyon pontozták, de úgy, hogy még értelme is legyen, és ne csak bele legyen erőszakolva.

Egyébként magára a versenyre azért neveztem be, mert azt hittem, hogy a Kotlin és a Kotlin multiplatform ugyanaz, és mi a félévben KMP-t is fogunk tanulni, de kiderült, hogy az egy másik tárgy.
No mistakes, only happy accidents!

Ami egy nagy tanulsága a versenynek, hogy nem lehet összecsapni. Január 12 volt a határidő, és ugyan elkezdtem vele foglalkozni már korábban is, kb. októbertől ötleteltem, sajnos nem tudtam vala félév közben annyit haladni, a leadási határidő meg erősen vizsgaidőszakba esett. Így nem sikerült annyit dolgoznom vele, mint amennyit lehetett és kellett volna, és nagyon összecsapott lett a bemutató videó is. Elhatároztam, hogy jövőre időben kitalálok egy ötletet, és szépen, időben elkezdem, és viszem végbe a projektet. Sőt, az is segíteni fog, ha a határidőt nem a tényleges határidőre tűzöm ki, hanem annál pár nappal korábbanra, így ha meg is csúszok, akkor sincs baj, és lesz bőven idő dokumentálni, demó videót készíteni, Github Action-ökkel pepecselni, és egyéb kis apró dolgokra.

Összességében nagyon tanulságos projekt és verseny volt, jövőre is rész veszek, ha másért nem, tapasztalatért, meg Kotlinos merch-ért, ha sikerül megint egy elfogadható projektet összehoznom. :)