← Alt arbeid

Baby Suite: tre små apper, tre synkmodeller

Tre webapper for de første månedene med baby: en rietimer, en logg for mat, søvn og bleier og en bekkenbunnstrener. Hver av dem synkroniserer mellom telefoner med en konfliktmodell valgt ut fra dataene. Vi laget dem til eget bruk, og loggen er i daglig bruk.

Status
I daglig bruk
Frontend
Ren JavaScript, uten rammeverk eller byggesteg
Backend
Cloudflare Workers og KV, nå selvhostet på Node.js
Kildekode
Privat — gjennomgang på forespørsel
Baby Suite tracker
Trackeren: trykk for å logge, med tiden siden hver hendelse rett foran deg.

Hva den gjør

En synkmodell per app

Rietimeren synker hele tilstanden, og siste skriving vinner, siden det er én person som tar tiden. Loggen slår sammen oppføring for oppføring, med slettemarkører, så to som logger samtidig aldri mister et trykk. Treneren legger bare til nye økter.

Web Push uten avhengigheter

VAPID-signering og aes128gcm-kryptering av innholdet skrevet rett på WebCrypto, 87 linjer til sammen, og kontrollert med en frakoblet runde med kryptering og dekryptering.

Varsler når appen er lukket

Varslingsreglene sjekkes på serveren hvert femte minutt, per enhet, med fire hastenivåer fra et stille varsel til en alarm som ringer, og med stilletid.

Gratisnivået som designregel

Alt ble bygget for å holde seg innenfor Cloudflares gratisnivå. Da én cron-jobb brukte 87 % av den daglige KV-kvoten for listekall, samlet vi push-abonnementene i én post per synkgruppe, slik at cron-jobben ikke gjør et eneste listekall, og skrev kvoteregnestykket inn i repoet som en fast regel.

Frakoblet først

Loggen og treneren er installerbare PWA-er med en service worker som prøver nettet først: de åpner uten dekning, og en ny versjon lastes inn neste gang appen åpnes.

Øyeblikksbilder og arkiv

En daglig jobb tar øyeblikksbilde av hver synkgruppe, beholder 14 dager med sikkerhetskopier og flytter oppføringer eldre enn 35 dager til månedsarkiv, slik at den aktive tilstanden holder seg liten.

Aktuelt hvis du ser etter…

Baby Suite er et privat prosjekt som ikke kan lastes ned, så denne siden handler om hvordan det er bygget og hva vi kan lage for deg.

  • Babylogg-app som kan deles: loggen for mat, søvn og bleier slår sammen oppføring for oppføring med slettemarkører, så to som logger samtidig aldri mister et trykk.
  • Rietimer som synker mellom telefoner: timeren synker hele tilstanden, og siste skriving vinner, siden det er én person som tar tiden.
  • Push-varsler fra en webapp som er lukket: serveren sjekker varslingsreglene hvert femte minutt per enhet og sender Web Push, fra et stille varsel til en alarm som ringer, med stilletid.
  • En webapp som åpner uten dekning og synker mellom brukerne: vi lager små apper som dette for kunder, velger konfliktmodell ut fra dataene og regner på kvotene før lansering.

Vi bygger dette for kunder: Skreddersydd programvare og interne verktøy

Slik fungerer den

  1. 01

    Logg

    Hvert trykk lagres først på telefonen.

  2. 02

    Synk

    En jevnlig sjekk sender bare det serveren mangler.

  3. 03

    Slå sammen

    Hver app løser konflikter med modellen som passer dataene.

  4. 04

    Varsle

    En jobb på serveren sjekker reglene og sender et push-varsel, enten appen er åpen eller ikke.

Slik er den bygget

Hver app er én HTML-side i ren JavaScript, uten rammeverk og uten byggesteg. Synkroniseringen gikk via én Cloudflare Worker og ett KV-navnerom per app, og hver gjentakende operasjon ble budsjettert mot gratisnivået: pollingintervaller og cron-frekvens er regnet ut fra kvotene, pollingen stopper når fanen er skjult, og klientene hopper over skrivingen når serveren allerede har dataene.

Senere flyttet vi appene til vår private skyinfrastruktur, som en liten Node.js-tjeneste i Docker. Worker-koden kjører der uendret, oppå en filbasert erstatning for KV med atomiske skrivinger. Den gamle og den nye løsningen gikk side om side under flyttingen, og dataene ble kontrollert identiske, oppføring for oppføring, før noen enhet byttet over.

Ingeniørarbeidet

  • Web Push på 87 linjer WebCrypto, uten biblioteker
  • Listekall fra cron-jobben kuttet fra rundt 600 i døgnet til null
  • Varslingsregler per enhet, fire hastenivåer og stilletid
  • Worker-koden flyttet til egen server uten endringer

Spørsmål

Kan jeg laste ned Baby Suite?

Nei. Baby Suite er et privat prosjekt og er ikke tilgjengelig for publikum. Vi lager apper som dette for kunder.

Hvordan kan to telefoner logge i samme logg uten at noe forsvinner?

Loggen slår sammen hver oppføring for seg og merker slettinger i stedet for å fjerne dem, så trykk fra to telefoner i samme øyeblikk blir tatt vare på. Timer-appen bruker i stedet «siste skriving vinner», siden det bare er én som tar tiden.

Virker appene uten dekning?

Loggen og treneren er installerbare PWA-er med en service worker som prøver nettet først, så de åpner uten dekning. Hvert trykk lagres først på telefonen, og en jevnlig sjekk sender serveren bare det den mangler.

Vil du ha noe lignende?

Små apper fortjener samme ingeniørarbeid som store: velg konfliktmodell ut fra dataene, regn på kvotene før du leverer, og ta inn en avhengighet bare når den gjør seg fortjent til plassen.

Ta kontakt

← Alt arbeid · Programvare og KI for bedrifter