Christer logger pistolskudd på fritida

- Jeg lærer best om jeg har noe som driver meg, forteller Nordbø. Slik bygger han Shotlog-appen i React Native.

Slik ser det ut når Christer Nørdbø utvikler appen Shotlog. 📸: Privat
Slik ser det ut når Christer Nørdbø utvikler appen Shotlog. 📸: Privat Vis mer

Det sies at måten å lykkes med apputvikling er å finne en nisje som trenger digitalisering.

I 2019 er det ikke så mange slike nisjer igjen, men den 27 år gamle utvikleren Christer Nordbø har funnet én av dem.

Han har nemlig fridd til skytemiljøet, med appen sin Shotlog.

#1. Hva har du bygd?

Jeg har laget en app for å holde styr på egentrening, bruk av eget våpen, og tilgang til historiske data innen konkurranseskyting.

Prosjektet er noe jeg har grublet på i lengre tid - egentlig siden jeg selv startet med skyttersport for et par år siden. Etter hvert følte jeg at jeg hadde fått nok kunnskap om hvordan sporten funket, og hvordan jeg kunne gjøre appen mest mulig «global» på tvers av konkurransetyper.

«Hvorfor» er todelt. Vi skulle igang med et React Native-prosjekt gjennom jobben, og jeg hadde ikke vært borti rammeverket tidligere. React kjente jeg, men ikke React Native. Appen ble i første omgang startet for egenlæring. Jeg lærer best om jeg har noe som driver meg, heller enn en simpel «to-do»-app som alle guider online peker til for å komme igang.

Christer jobber som utvikler i et Devops-miljø i Bouvet til vanlig. 📸: Privat
Christer jobber som utvikler i et Devops-miljø i Bouvet til vanlig. 📸: Privat Vis mer

Problemstillingen for skyttersporten er at dagens system er helt manuelt, hvor man skriver ned poengene man får på gjennomtrykks-ark som man får utlevert etter konkurransene.

Ved hjelp av appen kan man føre inn egne poeng selv etter hvert som konkurransen pågår, og se hvordan man selv ligger an. Også slipper man å dra frem kalkulatoren i slutten av konkurransen for å regne sammen sin kopi av resultatet - dette viser appen hele tiden!

Jeg gikk selv og tok vare på disse rosa lappene, hjemme, for å kunne se hvordan min egen utvikling var over tid. Det ble fort rot i systemet, og ga meg ikke svaret når jeg trengte det - som ofte er under den hyggelige praten man har i lag når man møtes til trening.

Etterhvert fikk jeg også for øret at det fantes dem som gikk med loggbøker for å telle antall skudd som var avfyrt med eget våpen. Dette er gjerne noe som brukes ved salg, eller for å beregne tid til neste våpenpuss.

Så dette ble et bonusmarked som enkelt kunne tilfredsstilles.

#2. Hvor lenge har du jobbet med dette hobbyprosjektet?

Om jeg skal se tilbake på Github, så er første commit gjort 2. desember 2018, men kodingen startet en god måned før den tid igjen.

Prosjektet er bare gjennomført på kveldstid, og har ofte okkupert hele helger og lange netter om jeg først har følt meg «i sonen». Appen ble lansert i desember til en lukket, men utrolig dedikert, brukergruppe.

Tilbakemeldinger her har nok gjort at appen har styrt unna noen dårlige reviews på de respektive flatene. Den gikk så live til AppStore og Google Play 13. januar 2019 - hvor den har blitt veldig godt mottatt.

#3. Hvordan henger prosjektet sammen?

  • Hovedrammeverket er React Native, som skrives ved hjelp av JavaScript.
  • Realm database brukes til lokaldatabase, for å holde på de nødvendige data. Realm lar meg spørre mot en lokal database direkte, istedenfor at jeg må hente ut alt i minnet fra en JSON-string, og kjøre en masse filtrering og søk i dette. Noe som ville vært tilfellet dersom jeg brukte AsyncStorage. Dette lot meg implementere statistikk og filtrering langt enklere.
  • AsyncStorage som var/er en del av React Native brukes for visse lokale innstillinger, blant annet in-app kjøp.

Appen er i første omgang laget med «offline» i tankene, ettersom skyttere ofte befinner seg i dype grotter / fjellhaller, kjellere, eller et godt stykke borte fra tettbebygde områder. Slike områder har ofte manglende dekning eller trådløse internett tilgjengelig.

Jeg bruker Firebase for å se hvordan appen brukes, noe som ble valgt ettersom Google Analytics gikk ut og ga beskjed om at appstøtte avsluttes i 2019, og at brukere bes om å flytte over til Firebase.

I prosessen av integrasjon kom jeg også over Remote Config fra Firebase, noe som passet godt med tanke på muligheten for å fjernstyre funksjonalitet i appen. Med Remote Config har jeg muligheten til å slå av og på in-app purchases og visse områder i appen, samt aktivering og deaktivere av reklame.

AdMob er brukt som leverandør av reklame, men er ikke noe jeg har slått på foreløpig, i et håp om å ikke skremme bort kundene nå i startgropen.

i18n brukes for å oversette appen, er foreløpig bare oversatt mellom engelsk og norsk. React-native-localize brukes for å finne ut hvilket språk vi skal vise til brukeren.

Appen i seg selv er gratis, og kan brukes i stor grad uten å kjøpe «pro» versjonen, som er et in-app-purchase, bygd med react-native-iap.

Pro-versjonen som man kan oppgradere til, lar deg veldig enkelt eksportere alle dine data fra telefonen og over til .CSV format. På denne måten kan du selv sette opp din egen statistikk.

Pro-versjonen fjerner også reklame, men dette er ikke en drivende effekt idag, ettersom reklame aldri har vært påslått. Og sist, men ikke minst, så vil du få tilgang til noen pene grafer som kan gi deg en indikasjon på egen fremgang og statistikk, hvor brukere

Selv kan filtrere ned statistikken basert på tagger dem legger inn på øktene sine, og datoperiode.

Noen D3 moduler og react-native-svg er brukt for å vise frem grafisk statistikk.

Fastlane brukes for å release og bygg til Google Play og Apple Appstore. Da trigges en release med 1 enkel terminalkommando `fastland ios/android beta/prod`. Så slipper jeg å bruke Xcode / Android Studio, og manuell opplasting.

Figma ble brukt for å sette opp det initielle designet for appen etter at noen veldig grove skisser ble tegnet med penn og papir.

Slik ser iPhone-versjonen av Shot-log ut. 📸: Privat
Slik ser iPhone-versjonen av Shot-log ut. 📸: Privat Vis mer

#4. Hva har vært den største utfordringen hittil?

Det har vært et par punkter. Største utfordringen jeg støtte på var nok forsøket på å automatisere skjermbilder som kunne brukes i AppStore og Google Play.

Ettersom appen er oversatt, og det var en ide å legge til flere språk, så hadde det vært greit å kunne automatisere dette med skjermbilder. Det er ganske tidkrevende. Og om man da oppdaterer appen, så må gjerne skjermbildene også oppdateres for å ikke avvike for mye.

Utfordringen her ble så stor, at det foreløpig ligger på is, i påvente av at Fastlane får litt bedre støtte for dette i React-Native.

#5. Hva er du mest stolt av i forbindelse med prosjektet?

Egentlig hele appen. Det er utrolig gøy å få høre hvor fornøyde brukerne av appen er. Helt ukjente folk kommer bort og takker, og deler gledelig sine erfaringer.

Det at det hele startet som et læringsprosjekt, og endte opp i butikken hvor kundene smiler over produktet i etterkant er ganske gøy!

Skal vi se på det tekniske, så må det være noe rundt UX og Design. Ikke nødvendigvis fordi det er det beste designet sånn synsmessig, men fordi brukeren forstår seg på det med en gang.

Statistikkbiten er heller ikke til å stikke under en stol - grafer uten Canvas, det har vært artig å få til.

#6. Hvordan brukes prosjektet i dag?

Statistikken for produktet i dag viser at vi har hatt rundt 2.000 nedlastinger siden januar - og cirka 40 til 80 unike aktive brukere hver dag.

Det er loggført over 150.000 skudd i appen. 76% av dem som har lastet ned appen er fra Norge. 1/10 av brukerene (11%) er kvinner. Og forholdet mellom iOS og Android installasjoner er forbausende likt.

Til å være en app som kun har basert seg på å ligge i AppStore og Google play, og jungeltelegrafen, så er det gøy å se at skytterne finner frem.

#7. Har du noen planer for prosjektet ditt fremover?

Ta i mot bruker-input, forbedre statistikkbiten, og se på designet igjen etter hvert.

Jeg vurderer også å legge til online-backup-muligheter, da knyttet mot subscription-tjenester for å dekke inn serverkostnader.

Appen er tilgjengelig for Android og iOS, andre plattformer er ikke i planene.

Appen har en oppgraderingsmulighet som kan genererer litt inntekt på sikt, men når Apple tar 30%, den norske stat tar 25%, og man så skal skatte i tillegg av det man sitter igjen med, så lenge man ikke er MVA registrert, så er det ikke mye man sitter igjen med per salg.

#8. Hva er fordelene med å ha et hobbyprosjekt?

Man lærer nye ting, og har mulighet for å luke bort egne "barnesykdommer" og "not-so-best-practices" dersom man driver med dette profesjonelt også.

Dette bidrar til mer fornøyde kunder, en mer stabil løsning, og ofte en arkitektur som gjerne lar deg jobbe raskere enn hva man gjerne bruker første gang man bruker noe nytt i ett prosjekt.