Hopp til hovedinnhold

Fra eksperimentering til praktiske løsninger – og litt kaos! LettVet er et journalsystem for veterinærer, bygget med moderne teknologi og nysgjerrighet.

Hva er LettVet?

LettVet er et journalsystem spesielt utviklet for veterinærer. Som veterinær i Norge er du lovpålagt å føre journal over dyrehelsehjelpen du gir. Så hvorfor ikke bruke et verktøy som gjør det enklere å følge loven?

I dag fører mange veterinærer journal på en av to måter: enten i omfattende og komplekse programmer som er laget for å håndtere alt en større klinikk-kjede trenger, eller ved hjelp av penn og papir – enkelt, men tidkrevende.

Men hva med de som befinner seg midt imellom? De som trenger litt digital hjelp til journalføringen, men ikke ønsker en tungvint løsning for klinikkstyring? Her kommer LettVet inn i bildet. LettVet er skreddersydd for veterinæren som kun ønsker en enkel, brukervennlig løsning som gjør jobben lettere – uten unødvendig kompleksitet.

I dag har LettVet snaue fem brukere, men de virker i hvert fall fornøyde. Så nå gjenstår bare én liten detalj for meg: å finne ut hvordan markedsføring egentlig fungerer.

Hva inspirerte deg til å lage det?

Jeg kommer fra en familie med over gjennomsnittlig mange veterinærer, så veterinærmedisin er et tema som ofte dukker opp rundt middagsbordet. Etter hvert som samtalene har gått, har jeg – enten jeg vil det eller ikke – plukket opp stadig mer domenekunnskap om faget.

Da søsteren min var ferdig med veterinærutdanningen og skulle starte sin egen klinikk, klaffet det perfekt med at jeg selv trengte et passende prosjekt for å prokrastinere masteroppgaven min. Hvorfor ikke slå to fluer i én smekk? Jeg bestemte meg for å lage journalsystemet til klinikken hennes. Hvor vanskelig kan det egentlig være?

Hva er tech-stacken?

Gjennom prosjektet har tech-stacken gått gjennom mange iterasjoner, men til slutt har jeg landet på en solid kombinasjon: Next.js + Tailwind CSS + shadcn/ui + Drizzle + Turso + Clerk + Resend + Sentry + Mixpanel. Litt flere verktøy enn jeg først så for meg, men de har alle sin plass. Selv om det blir for mye å gå i detalj om alt, skal vi dykke litt ned i det mest interessante.

Brødet og smøret

I hjertet av LettVet finner du Next.js!

Jeg er en stor tilhenger av Next.js, så dette prosjektet har også vært en ypperlig unnskyldning for å leke med det nyeste som ramler ut dørene hos Vercel. Veterinær-Norge måtte så klart introduseres for server components, actions og annet snacks som fulgte med Next.js v13 tidlig. Noe av det kanskje litt før det var helt modent – men det har gått overraskende bra!

Og kjenner jeg meg selv rett, tar det nok ikke lang tid før veterinærene får smake på "use cache" også. Hvorfor stoppe nå?

Database

Som mye annet i applikasjonen har jeg valgt en databaseteknologi som virkelig er framoverlent, og valget falt naturligvis på Turso.

Turso er en distribuert databaseleverandør basert på libSQL (en SQLite-fork). De har et genialt oppsett for multi-tenant arkitektur, nemlig database-per-bruker. Som navnet tilsier, handler dette om å gi hver bruker (eller organisasjon) sin egen isolerte database. Måten det fungerer på, er enkel og elegant: du setter opp en schema-database med tabellene dine. Deretter arver hver "brukerdatabase" dette skjemaet, slik at du kun trenger å migrere én gang. Alle endringer forplantes automatisk til alle "barna", uten ekstra styr.

I LettVet har jeg tatt dette i bruk på organisasjonsnivå, der hver organisasjon har sin egen database. Dette oppsettet gir meg flere fordeler helt gratis:

  • Sikkerhet: Hver organisasjon har sin egen isolerte database. Dermed slipper jeg mye av autorisasjonsarbeidet, siden det rett og slett ikke finnes data i databasen som ikke skal være tilgjengelig for brukeren.
  • Fart: Med mindre data i spørreområdet, går også spørringene raskere. Dette har riktignok ikke vært et problem ennå, men det skader ikke å være forberedt.
  • Portabilitet: Om noen av kundene mine ønsker å ta med seg dataene sine, er det så enkelt som å eksportere organisasjonsdatabasen. Jobben er gjort på et blunk!

Hva er en ting du har lært?

Å ta i bruk Turso sine schema-databaser mens de fortsatt var eksperimentelle – og samtidig stole blindt på at de tok seg av backupene – var nok ikke det smarteste valget jeg har gjort. En helg satt jeg for å gjøre noen enkle migreringer i schema-databasene mine, men det viste seg raskt at helgen skulle bli alt annet enn enkel.

Etter å ha kjørt migreringen oppdaget jeg at jeg ikke lenger hadde tilgang til noen av databasene knyttet til Turso-kontoen min. Selv utviklingsdatabasen, som jeg jobbet med, hadde dratt med seg produksjonsmiljøet i fallet. Appen min kunne ikke koble seg til databasen, CLI-et til Turso var låst ute, og web-grensesnittet nektet også enhver tilgang. Jeg sto med andre ord helt uten mulighet til å hente ut noe data.

Heldigvis fikk jeg rask hjelp fra Turso-teamet, som fikk databasene mine opp og kjøre igjen. Ifølge loggene mine skal ingen brukere ha merket noe til nedetiden, så jeg slapp heldigvis unna med skrekken denne gangen. Men det kunne fort blitt totalt datatap.

Siden den gang har jeg lært at backups ikke er en selvfølge. Nå har jeg satt opp egne eksterne backups av alle databasene mine. Skulle noe lignende skje igjen, kan jeg raskt opprette en ny konto og spinne opp nye databaser med all data intakt.

Selv om opplevelsen var skremmende, var hjelpen fra Turso så god at jeg valgte å bli værende. Nå som multi-DB schemas har gått fra eksperimentell til beta, og jeg ikke har opplevd flere problemer siden den gangen, føler jeg meg tryggere på løsningen igjen.

Å ha et hobbyprosjekt å prokrastinere med er utrolig givende. Her får du prøvd deg i alt fra designer til selger, lærer masse – og har det gøy på veien! Har du ikke allerede et hobbyprosjekt, anbefaler jeg på det sterkeste å finne deg et!

Liker du innlegget?

Del gjerne med kollegaer og venner