Memento

En selvhostet læringsplattform med adaptiv repetisjon, iPad-apper, Chrome-utvidelse og apper for smartbriller.

Type
Webapplikasjon
Periode
aug.–okt. 2026
Min rolle
Design og utvikling
Status
I bruk – tilgang etter invitasjon
Teknologi
Nettside
memento.mikaelnihongo.com
Startsiden til Memento med teksten «Learn the words. Keep the context.» og et eksempelkort med en japansk setning.

Memento er en læringsplattform for japansk som jeg utvikler og drifter selv. Kjernen er en personlig ord- og tegnbank med planlagt repetisjon. Rundt den har jeg bygget verktøy for lesing, undertekster, nettleser og smartbriller.

Prosjektet handler om å knytte læringen til situasjonene der språket brukes. Et ord i en tekst og det samme ordet i en repetisjonsøkt skal kunne forstås som deler av samme læringsarbeid, samtidig som innhold og personlig fremdrift holdes fra hverandre.

Utfordringen: ordforråd på tvers av flere verktøy

Å samle ord er én oppgave. Å huske dem, kjenne dem igjen og vite hva som trenger mer arbeid, er flere andre. En ordliste alene sier lite om hva brukeren kan, eller hva som bør repeteres neste gang.

Japansk legger også til noen konkrete behov. Et tegn kan inngå i flere ord. Betydning og lesemåte er forskjellige sider av det samme læringsstoffet. En tekst må kunne deles opp i ord før systemet kan vise hvordan de henger sammen med ordforrådet.

Jeg ville arbeide med disse behovene som én produktmodell, og gjøre modellen nyttig i flere grensesnitt. Det krevde en tydelig grense mellom innholdet, opplysningene brukeren legger til selv og historikken fra repetisjonen.

Løsningen: Memento som læringsplattform og verktøykasse

En ord- og tegnbank med struktur

Innholdet er organisert rundt komponenter, japanske tegn og ord. Delene har sammenhenger som systemet må ta hensyn til når innhold opprettes og endres.

Det gir et mer presist grunnlag enn en samling uavhengige tekstfelter. Et ord kan bygge på tegn som allerede finnes i banken, og tegnene kan igjen ha sine egne bestanddeler. Valg rundt denne strukturen påvirker både redigering, visning og læring.

Memento har også delte biblioteker. Innhold kan være felles, mens brukeren beholder egne merknader og sin egen fremdrift. Å dele et læringselement skal ikke innebære at andre får den samme personlige historikken.

Repetisjon som skiller mellom betydning og lesemåte

Planlagt repetisjon skal hjelpe brukeren å vende tilbake til innholdet over tid. Jeg bruker FSRS gjennom biblioteket ts-fsrs til repetisjonsplanleggingen.

Betydning og lesemåte behandles som separate minner. Det passer et konkret læringsproblem: det er mulig å kjenne igjen hva et ord betyr, men fortsatt være usikker på hvordan det leses. De to delene trenger derfor ikke å ha identisk fremdrift.

I produktet betyr dette at én enkel merkelapp på ordet ikke er nok som intern modell. Grensesnittet kan gi en forståelig oversikt, mens systemet bak må beholde forskjellene som brukes i planleggingen.

Lesing og undertekster på iPad

Jeg har utviklet en EPUB-leser og et verktøy for arbeid med undertekster på iPad. Ordene kan fargekodes etter brukerens kjennskap til dem. Slik blir ordforrådet relevant i selve lesingen, ikke bare på en egen side med oppgaver.

For å få dette til må tekst analyseres, ord gjenkjennes og resultatet kobles til læringsdataene. Det er også en grensesnittoppgave: markeringene må støtte lesingen, og opplysningene om et ord må være tilgjengelige der brukeren møter det.

Nettleserutvidelse og små skjermer

Prosjektet omfatter også en Chrome-utvidelse for YouTube og små apper for Even Realities G2-smartbriller. De gir andre rammer enn en vanlig nettside eller en iPad-skjerm.

En utvidelse må fungere i en side den ikke selv eier. Smartbriller har begrenset plass til informasjon og betjening. Disse delene av prosjektet gjør det nødvendig å prioritere hva brukeren trenger i øyeblikket, og hvordan det kan presenteres på den aktuelle flaten.

Under panseret

Webapplikasjonen er bygget med Next.js, React og TypeScript. Data lagres i PostgreSQL, med Drizzle som verktøy for databasearbeidet. Applikasjonen kjøres med Docker og er satt opp på en egen server.

Innloggingen bruker Better Auth, og tilgang til registrering styres med en tillatelsesliste. Tofaktorautentisering med en autentiseringsapp er en del av innloggingen. Memento er derfor ikke en åpen tjeneste der hvem som helst kan opprette en konto.

Jeg har særlig arbeidet med disse grensene i datamodellen:

  • Innhold: tegn, ord og avhengigheter mellom dem.
  • Deling: hvem som har tilgang til et bibliotek eller et innholdselement.
  • Personlige tillegg: merknader og tilpasninger som hører til én bruker.
  • Læringstilstand: historikk og fremdrift som skal forbli personlig.

iPad-verktøyene er bygget i SwiftUI og bruker en delt Swift-pakke. Tekstanalyse med MeCab og ordboksdata fra JMdict inngår i arbeidet med å gjenkjenne japanske ord. Den delte pakken samler funksjoner som flere av verktøyene trenger.

Chrome-utvidelsen bruker nettleserens utvidelsesmodell. Den er en egen del av løsningen, med andre tekniske rammer enn webapplikasjonen. Samlet viser prosjektet hvordan et produkt kan få flere grensesnitt uten at innhold, tilgang og personlig fremdrift blir samme problem overalt.

Resultat og avgrensning

Memento er i bruk som en invitasjonsbasert læringsplattform, med tilknyttede verktøy for ulike situasjoner. Resultatet er både en webapplikasjon og erfaring med hvordan én innholdsmodell kan brukes i flere produkter.

Den viktigste tekniske læringen ligger i å holde grensene tydelige. Felles innhold, personlige merknader og repetisjonshistorikk kan vises tett sammen i grensesnittet, men har forskjellige regler for eierskap og tilgang. Det må gjenspeiles i datamodellen.

Prosjektet viser også at valg i grensesnittet får konsekvenser videre i systemet. Når et ord markeres i en tekst, ligger det arbeid med språkdata, gjenkjenning og personlig tilstand bak den enkle visningen. Når det skal fungere på flere typer skjermer, må informasjonen prioriteres på nytt.

Relevant for dere hvis …

Dere trenger en applikasjon med personlige data, forskjellige tilgangsnivåer eller en arbeidsflyt som går på tvers av flere verktøy. Memento viser arbeid med datamodellering, innlogging og samspillet mellom det brukeren ser og reglene bak.

Jeg bruker denne erfaringen i webapplikasjoner for bedrifter. Fortell hva brukerne deres skal kunne gjøre, så er det et godt utgangspunkt for å planlegge funksjonene og den første leveransen.