
- 25.6.2025
* Todellisuudessa meni neljä viikkoa koska sovelluksen hyväksyntä Google Play -kauppaan kesti kaksi viikkoa.
Lataa Metasmoke Google Play -kaupasta
Kuulun niihin 1,25 miljardiin ihmiseen joilla on nikotiiniaddiktio ja jotka tupakoivat. Olen tupakoinut jo vuosikymmeniä, ja lopettamista yrittäessä en ole onnistunut.
Tätä vasten hahmottelinkin reilut kaksi vuotta sitten metodin joka toivottavasti toimisi minulle: asteittainen vähentäminen.
Ainoa ongelma oli että miten pysyn kärryllä että olenko ylipäänsä oikealla tiellä koska en todellakaan aio kirjata joka päivä johonkin Exceliin savukkeitani joita saattaa palaa päivässä jopa 25 kappaletta.
No mobiilisovellushan tuohon olisi oikein hyvä ratkaisu. Ainoa vaan että jos reilu kaksi vuotta sitten tuollaisen olisi halunnut, olisi tarvinnut vähintään kolme henkilöä, kuusi kuukautta, ja 100 000 euroa rahaa.
Sillä välin kun pyörittelin eri vaihtoehtoja (kuten että opettelisin itse koodaamaan mobiilisovelluksia), markkinoille tuli yksi sovellus joka tämän ominaisuuden tarjosi.
Mutta se oli sanalla sanoen kauhea ja huono. Ulkokuori nätti, toiminnallisuus ruma.
Fiiliskoodaus pelastamaan
Tämän vuoden alussa alkoi trendaamaan fiiliskoodaus, ja itsekin tuota lähdin kokeilemaan. Ja samalla tajusin että tässä on minulle ratkaisu: enää ei tarvita 100 000 euroa mobiilisovelluksen tekoon koska tekniikka kehittyy. Tekkistäkiksi valikoitui pääsääntöisesti Googlen ekosysteemi koska pystyvät kokonaisvaltaisesti tarjoamaan lähes kaiken mitä tarvitsin tässä projektissa:
- Firebase Studio frontin fiiliskoodaukseen
- Firebase Console sovelluksen julkaisemiseen
- Google Cloud sovelluksen hostaamiseen
- Google Analytics sovelluksen tilastoinnin keräämiseen
- Google Admob sovelluksen mainospaikkamyyntiin
- Google Gemini sovelluksen tekoälypohjaiseen analysointiin ja motivoinnin tueksi
Ainoa asia jota en ottanut Googlelta tekkistäkkiin mukaan, oli itse sovelluksen wrapper. Firebasella on tarjolla joku työkalu myös tähän, mutta koin sen liian hankalaksi nähden siihen tosiasiaan että haluan käytännössä vain Web View joka menee Google Play -kaupassa (ja myöhemmin myös App Storessa) läpi.
Tätä varten valitsin siis AppMySite joka on varta vasten suunniteltu muuntamaan web-näkymä applikaatioksi ja jonka käyttöönotto oli todella helppoa. Vielä kun huomioi sen että onnistuin haalimaan yritykselleni reilu vuosi sitten muutaman elinikäisen lisenssin tähän alustaan kustannustehokkaalla hinnalla, oli valinta selvä.
Iso kuva
Jo alusta alkaen päätin että noudatan yritykseni slogania: No-nonsense Nordic Code.
Tämä tarkoitti sitä että ominaisuudet pidetään minimissä jolloin myös käyttöönotto on helppoa, ja appi keskittyy tekemään vain yhtä asiaa, ja yhtä asiaa hyvin.
Suunnitelma? Yksi nappi jota painamalla voi kirjata savukkeen ylös. Yksi ajastin joka näyttää paljonko on kulunut aikaa viimeisestä savukkeesta. Ja yksi tavoite, joka näyttää mihin minuuttimäärään minun tulisi tähdätä että pystyn asteittain vähentämään tupakointiani.
Kun on paatunut tupakoitsija kuten minä, ei ole intoa syöttää omaa pituutta, painoa, tupakointimäärää, savukkeiden hintaa, horoskooppimerkkiä ym. vain että pystyisi aloittamaan tupakoinnin lopettamisen. Kaikki tällainen tulisi loistamaan poissaololla minun appissa. Paatunut tupakoitsija ei lopeta tupakointia siihen että joku appi kertoo että savukkeisiin palaa 376 euroa kuukaudessa. Eikä kukaan paatunut tupakoitsija vähennä tupakointia jos joku appi kertoo että on säästänyt 4,77 euroa viimeisen 30 päivän aikana.
Appi puhelimeen ja seuraamaan tupakointia. Ja kun viikko vaihtuu ja jos on riittävästi dataa, appi laskee edellisen viikon tupakointivälin mediaanin ja lisää siihen viisi minuuttia.
Ja KUN epäonnistun tavoitteessa (kuten tätä artikkelia kirjoittaessa: tavoitevälini on 42 minuuttia, mutta sorruin tupakoimaan jo 37 minuuttia edellisen savukkeen jälkeen), viimeisin asia jonka appista haluan lukea on se että menetin kaikki rahani ja kuolen nyt tämän päätöksen vuoksi 10 minuuttia aikaisemmin.
Pitkän tähtäimen edistyminen täydellisyyden sijaan. Kukaan meistä ei ole täydellinen. Kaikkein vähiten nikotiiniaddiktiosta kärsivä.
Jos toivottavasti onnistun noudattamaan tätä ”viisi minuuttia viikossa”, saan vähennettyä tupakointimääräni 8 viikossa puoleen entisestä.
Testausta, tuunausta, ja tuskallisia tekoälyhetkiä
Nyt kun suunnitelma oli valmis niin ei kun töihin! Aluksi tein perustoiminnallisuuden, löin koko hoidon AppMySite kiinni ja testasin tosielämässä.
No ensimmäiseksi huomasin että entä jos en haluakaan tupakoida? Tehdään siis peruutusmahdollisuus.
Toisena asiana huomasin että on todella tylsää käyttää appia kun se on vain englanninkielinen. Eli käännökset tulille! No tästähän se hupi sitten alkoikin.
Firebase Studion tekoäly osasi alkuun tehdä hommia oikein moitteettomasti. Mutta jossain vaiheessa kieliä oli niin monta että tekoäly päätti tehdä dynaamisen ratkaisun.
Ja hommat räjähti täysin. Korjausprompti yksi: ei toiminut. Prompti kaksi: ei toiminut. Eikä toiminut kolmaskaan yritys.
Koodaajahenki oli siis herätettävä ja avattava vanha kunnon Google! Ja noin tunnin seikkailtuani dokumentaatiossa tajusin missä vika: tekoäly oli kyllä tehnyt asiat oikein, mutta vanhanmallisesti oikein. Uuden plugarin uusi tapa oli erilainen.
Yritin tätä tapaa opettaa tekoälylle monesti, mutta se ei suostunut tätä oppimaan. Joten lopulta korjasin bugit artesaanisti käsipelillä.
Nyt hommat toimi mutta tarvitsin vielä paljon kieliä. Joten promptia rakentamaan. Ensimmäiset viisi promptia rikkoi aina koodin kun lisäsin kielen koska jostain syystä Next.js ei suostunut hyväksymään dynaamista lähestymistapaa middlewaressa.
Promptasin tästä tekoälylle ja mikä oli sen ratkaisu?
// This dynamic approach should be static enough
Hngh! Loppujen lopuksi kielenlisäyspromptini kuudes kohta näytti seuraavalta:
6. To `src/middleware.ts` Add language code to the `config.matcher` separated by pipe `|`. Middleware cannot use dynamic functionality but requires static functionality so these languages need to be added separately. DO NOT try to change this to any sort of dynamic but just add `|<language code>` to the end of `matcher` language list
Tällä sain lisättyä loputkin kielet projektiin ja olin tyytyväinen.
”Valmis”
Kun olin jokusen illan ja yhden viikonlopun puuhaillut projektin parissa, ja projekti oli mielestäni ”valmis”, oli varsinaisen testauksen vuoro. Tähän sain apua alan pitkän linjan osaajalta @InhimillinenE, joka paneutuikin appiin perusteellisesti, niin toiminnallisuuden, käytettävyyden kuin ex-tupakoitsijan näkökulmasta. Hän koosti monisivuisen testausraportin, josta sain todella paljon uutta näkökulmaa projektista!
Raportista nousi esiin monia loistavia käytettävyyteen liittyviä parannuksia joten implementoin vielä ne ja sitten homma oli oikeasti valmis!
Rekisteröidyin Googlen Play Consoleen devaajaksi, tein nopeat testit, ja kun hommat oli valmiit, rullasin appin tarkastettavaksi. Ja tämä olikin projektin aikaa vievin osuus. Etenkin kun en ensimmäisellä kerralla lähettäessäni appia arvioitavaksi älynnyt ruksittaa kohtaa ”Henkinen hyvinvointi”, jonka vuoksi appi tuli viikon päästä bumerangina takaisin arvioinnista.
Vaikka lopputulos ei ole silmäkarkkia, niin lopputulos silti miellyttää itseäni. Simppeli, käytettävä, ja tekee juuri sen mitä pitääkin. Ilman ihme säätämisiä.
PS: appi tulossa myös Applen kauppaan heti kun olen selvinnyt Apple Developer-hakemuksesta. Jostain syystä ajokorttini ei nyt järjestelmälle kelpaa…







Kuinka vähällä yrittäjä pystyy kuittaamaan omat kulunsa yhteiskunnalle? Tulos saattaa yllättää.
Kuinka Suomi saataisiin kasvun uralle helpolla poliittisella päätöksellä?

Jouni Tuovinen
Kirjoittaja on yrittäjä, ohjelmistokehittäjä, sekä Liberaalipuolueen jäsen. Kiinnostuksen kohteina on luonnollisesti politiikka, mutta myös pienyrittäjien arki ja heihin kohdistuva lainsäädäntö, sekä jossain määrin myös matematiikka ja ei-niin-mainstream harrastukset (kuten 3D-printtaus)