Som grafiker är jag van vid att nörda ner mig i typsnitt, pixelperfektion och färgkoder. Men IT-arkitektur, programmeringsspråk och ”best practices” för apputveckling? Där har jag absolut noll koll. Däremot har jag väldigt gott om idéer – och en förkärlek för att utforska nya saker. Det här är berättelsen om hur jag, utrustad med noll kodkunskaper men med AI som co-driver, byggde min egen app.
För 15 år sedan jobbade jag på ett företag som envisades med att använda tre(!) olika lösningar för tidredovisning. Jag förstod aldrig varför det skulle vara så krångligt. Borde man inte bara kunna låta telefonen logga när man ansluter till företagets Wi-Fi på morgonen och när man kopplar ner för dagen? Det skulle ge en helt automatisk, enkel och korrekt tidredovisning.
Jag bollade idén med några vänner som jobbade med programmering. Men på den tiden var en mobilapp ingenting man bara svängde ihop på en kafferast, så tyvärr stannade det vid allmänt
snack.
Åren gick, AI-revolutionen gjorde entré och en dag fick jag för mig att fråga min AI-kompis Gemini hur man egentligen bär sig åt för att skapa en app. Till min stora förvåning blev svaret i princip: ”Ska vi bygga den nu?”.
Sagt och gjort. Riktiga utvecklare pratar säkert om kravspecifikationer och versionshantering. Jag laddade bara ner Android Studio, fick steg-för-steg-instruktioner av Gemini för hur jag ens skulle ställa in min telefon och starta utvecklingsmiljön. Sedan körde vi igång på ren upptäckarlust.
Förvånansvärt snabbt hade jag en app som faktiskt fungerade. Men det visade sig snart att djävulen sitter i detaljerna. Appen saknade en hel del funktioner för att klara av den riktiga vardagen: Vad händer om jag stannar kvar och äter lunch på jobbet? Vad händer om jag går ner till företagets lager där Wi-Fi-signalen är stendöd? Och som grafiker – hur i all sin dar får jag appen att se ut och kännas exakt som jag vill ha den?
Låt mig vara ärlig: jag är ingen AI-expert. Innan det här projektet sträckte sig min användning av AI-tjänster mest till att få snabba svar på triviala frågor (som när GB egentligen lanserade 88:an).
Men under appbyggets gång fick jag en intensivkurs i hur AI faktiskt tänker och arbetar. Jag lärde mig ganska snart att Gemini har olika lägen för att resonera. Som standard jobbar den i ”Snabbt läge”, vilket fungerade klockrent i början. Men i takt med att appen blev mer avancerad började problemen hopa sig. Ett typiskt mönster uppstod: Jag bad Gemini fixa en bugg, vilket den löste blixtsnabbt – men i samma veva skapades ett nytt problem, eller så sabbades något som vi redan hade löst tidigare.
Det var då polletten trillade ner. Jag insåg att det berodde på hur modellen arbetade i just det läget. Den agerade som en akutläkare som bara tittade på det omedelbara problemet, men tappade helhetssynen. Den släckte den akuta branden men glömde helt enkelt bort att appen bestod av ett komplext ekosystem där alla andra delar också behövde fungera.
Dagar blev till kvällar, och kvällar blev till nätter. Eftersom jag inte kan något om hur man egentligen ”bör” strukturera kod, blev min arbetsmetod att helt enkelt prova mig fram och se vad som kraschade.
Vår chatttråd växte i rasande takt… Vår chatttråd växte i en rasande takt och förvandlades snabbt till en digital scroll av bibliska proportioner. Vi spottade ur oss kod, finslipade logik och löste problem på löpande band. Gemini kändes som den ultimata kodpartnern – en som dessutom aldrig behövde sova eller dricka kaffe.
Men efter en tids intensivt kodande stötte vi på nästa oväntade hinder: digital amnesi.
Plötsligt märkte jag att Gemini började ”glömma” överenskommelser vi hade gjort tidigare i veckan. Jag kunde be om en mindre justering i gränssnittet, och fick tillbaka en kodsekvens där den helautomatiska Wi-Fi-loggen – som vi slitit med i två dagar – plötsligt var helt bortblåst eller ersatt med gammal kod.
Diagnosen: Chatten hade helt enkelt blivit för stor för sitt eget bästa. Även en avancerad AI har ett begränsat ”arbetsminne” (det kallas tydligen på tech-språk för kontextfönster) i en och samma konversation. När tråden blir för lång börjar de tidiga delarna av samtalet att rullas ut i kulisserna för att ge plats åt det senaste vi pratat om.
För mig som glad amatör innebar det här en helt ny utmaning. Det räckte inte längre med att bara koda vidare i ett rasande tempo. Jag var tvungen att lära mig att hantera vår kommunikation på ett mer strukturerat sätt för att hålla min digitala kollega på banan.
Så, vad gör man när ens AI-kollega börjar få guldfiskminne? Jag gjorde det som kändes mest logiskt: jag frågade Gemini om råd. Hur skulle vi kunna fortsätta jobba utan att jag ständigt behövde påminna om hur koden såg ut och vad vi redan hade kommit överens om?
Svaret jag fick blev startskottet för en helt ny fas i utvecklingen.
Gemini förklarade lugnt att jag inte behövde sitta i en webbläsare och leka ”klipp-och-klistra-apa” längre. Istället tipsade den mig om att jag kunde integrera AI:n och jobba med den direkt inuti Android Studio.
Det var som att byta från en trehjuling till en sportbil. Att flytta in AI:n i själva utvecklingsmiljön förändrade hela dynamiken. Istället för en isolerad chatt där jag förtvivlat försökte förklara kontexten, satt nu min digitala kollega direkt i mitt kodprojekt.
Nu slapp jag oroa mig för att tråden var för lång. Gemini kunde titta på mina specifika filer, förstå hur olika delar av appen hängde ihop och hjälpa mig felsöka på plats. Om jag som grafiker ville pilla med en specifik layoutfil (XML eller Compose) kunde AI:n se exakt vad jag höll på med och ge förslag direkt i koden.
Jag hade gått från att vara en kille som ställde allmänna frågor i en chattbot, till att faktiskt sitta i en professionell utvecklingsmiljö med en inbyggd AI-assistent. Appen började plötsligt ta form på riktigt.
Det som började som en frustrerad tanke för 15 år sedan och fortsatte som ett trevande chattexperiment, landade till slut i en färdig app: ViRA (en smart, automatiserad tidsspårningsapp för Android).
Genom att flytta in i Android Studio och låta Gemini jobba med helheten istället för utspridda kodsnuttar, kunde vi äntligen knäcka de där svåra nötterna som krävde riktig logik. De där vardagsproblemen jag oroade mig för i början fick sina lösningar:
Problemet med lagerlokalen utan Wi-Fi: Löstes genom en robustare Wi-Fi-automatisering. Istället för att logga ut direkt när signalen dök, byggde vi in en smartare detektering i bakgrunden som förstår om jag bara har tillfällig skugga i lagret.
Problemet med jobblunchen: Det löste vi dels med automatiska lunchavdrag, men också genom funktionen Smarta rutiner. Om mina arbetstider avviker från det normala mönstret ställer ViRA helt enkelt en proaktiv fråga för att säkerställa att allt blir rätt.
Grafikerns design-ångest: Som grafiker ville jag ha full kontroll. Lösningen blev modern Android Material Design byggd med fragments och swipe-funktioner för en mjuk navigering. Dessutom la vi till Personliga teman så att man kan byta färgskrud efter humör.
Under huven snurrar nu ren Kotlin-kod i en modern MVVM-arkitektur med Room-databaser. Om du frågar mig vad det egentligen betyder? Ingen aning. Jag har fortfarande ingen djupare koll på varken Kotlin eller programmeringsmönster – men det magiska är att appen fungerar exakt så ändå.
Läs mer om vad jag lärt mig och mina tankar kring AI efter detta projekt.
