Hopp til innholdet

Personvern er ikke et vedlegg. Det er arkitekturen.

Dette er ikke siden juristen ba oss lage. Det er en liste over hva plattformen ikke kan gjøre — ikke fordi vi har lovet å la være, men fordi den er bygget slik at den ikke kan.

Det plattformen aldri ser

  • Navn, e-post, telefonnummer. Det finnes ingen felt for dem. Ikke i databasen, ikke i API-et. Sender appen din dem likevel, avvises innsendingen.
  • Bruker-ID. Appen din utsteder et pseudonym — en nøkkelbasert hash av ID-en — og pseudonymet er alt vi får. Vi kan ikke regne oss tilbake.
  • IP-adresse. Brukes i minnet til å begrense misbruk. Lagres aldri. Det finnes ingen kolonne for den.
  • Enhets-ID, install-ID, annonse-ID. SDK-et har ingen stabil identifikator. Sletter brukeren appen, er hun en ny for oss.
  • Push-tokens. Vi sender aldri push. Svaret går til deg som webhook; du sender.
  • Innholdet i det som sendes ut. Webhooken sier *at* noe skjedde, aldri *hva* som ble skrevet. Teksten finnes bare i panelet.

Hvordan det henger sammen

Brukeren logger inn hos deg, som før. Når hun åpner Innspel, spør appen din serveren din om et token: signert av deg, gyldig i høyst 15 minutter, adressert til Innspel, og med pseudonymet som eneste subjekt. Innspel verifiserer signaturen mot din offentlige nøkkel.

Hvorfor ikke bare sende appens egen innloggings-JWT? Fordi den bærer navn og e-post, og fordi den er en nøkkel til ditt API. Den skal ikke ut av huset. Det er derfor tokenet er et eget, smalere token — og derfor Innspel heller ikke tilbyr innlogging med Google eller Apple: et ID-token forteller hvem du er, og det skal vi ikke vite.

Anonym modus finnes også. Da får vi ikke engang et pseudonym, og innsendingen teller ikke i noen statistikk om hvor mange som er rammet.

Appen → din server → token → Innspel. «Hvem» blir igjen hos deg.

Skjermbilder

  • Tas bare når brukeren trykker. Aldri automatisk, aldri i bakgrunnen, aldri som opptak.
  • Forhåndsvises på enheten. Brukeren maskerer det hun vil. Det du har merket som privat i appen din, er maskert før hun ser bildet.
  • Forlater enheten først etter maskering. Metadata (EXIF, posisjon) fjernes på serveren i en isolert prosess som ikke har tilgang til noe annet.
  • Slettes med saken, og uansett etter 90 dager.

For apper med brukere under 16 er skjermbilder slått av. Det er en bryter hos deg, og den strammer også tekstlengde og betaprogrammets form.

Maskering i forhåndsvisningen, før bildet forlater telefonen.

Hvor dataene bor

Komponentene, leverandørene og regionene
HvaHvorRegion
DatabaseSupabase, eget prosjektFrankfurt
API og bakgrunnsjobberRailwayAmsterdam
VedleggCloudflare R2, med EU-jurisdiksjonEU — bindingen kan ikke endres etterpå
FeilrapporteringSentry, egen organisasjonEU (Frankfurt)
Adminpanel og portalCloudflare PagesStatiske filer, servert fra Cloudflares nett

Det siste punktet er ikke i EU, og vi sier det: panelet og portalen er JavaScript og stilark uten personopplysninger i seg, servert fra nærmeste Cloudflare-node. Det som behandler data, kjører i EU. Cloudflare ser IP-adressen din i transitt, som enhver leverandør av nett gjør; vi lagrer den aldri.

Ingen komponent hviler på EU-US Data Privacy Framework. Faller det, faller ikke Innspel.

Isolasjon mellom kunder

Hver rad i databasen bærer kundens ID, og databasen selv håndhever at ingen spørring ser en annen kundes rader — ikke bare applikasjonskoden. Rollen API-et kobler til med, eier ingen tabell og kan ikke omgå regelen. Spør noen etter en sak som ikke er deres, finnes den ikke.

Sletting

En bruker som vil bli slettet, sier det til deg. Du kaller ett endepunkt med pseudonymet. Alt hun har sendt inn — tekst, vedlegg, svar, deltakelse i betaprogram — er borte innen 24 timer, og du får en kvittering med tidspunkt. Det er sletting, ikke anonymisering.

Alt annet har også en utløpsdato. Skjermbilder lever 90 dager. Målehendelser 90 dager. Ingenting lever evig fordi noen glemte å rydde.

Hvem hos dere ser hva

Kundens eier har alt. Alle andre er medlemmer og ser bare de rommene de har fått tilgang til: som leser ser de sakene, som behandler svarer de og setter status. Rollen står i databasen, ikke i innloggingen, så den kan ikke forfalskes med et token. Dere betaler ikke per person — legg til alle som skal svare.

Tofaktor kan kreves for alle panelbrukerne. Det er av når kunden starter, og bare eieren slår det på eller av. En sesjon varer uansett maks åtte timer, og det finnes ingen «husk meg». Hver statusendring, hvert svar og hver sletting skrives til en logg som bare kan legges til — aldri endres, aldri slettes.

Det vi ikke har

Innspel har ingen SOC 2-rapport og ingen ISO 27001-sertifisering. Det er én person og en kodebase, og sertifiseringer koster mer enn plattformen gjør i dag.

Det vi har i stedet: hver tabell har en test som feiler hvis isolasjonen mangler. Hver vei ut av systemet — logg, feilrapport, metrikk, webhook — har en test som planter en innsending og krever at ingenting av den finnes igjen. Driftsmanifestet over hver instans, med region og hvordan den er verifisert, får du på forespørsel. Det samme får du med testene.

Papirene

  • Databehandleravtale med underdatabehandlerliste og 24-timers bruddvarsling. Utkastet er skrevet; det er til juridisk gjennomgang. Be om det.
  • Personvernerklæring for adminbrukere. Gjelder deg som logger inn i panelet. Publiseres her når den er gjennomgått.
  • Denne sidens egen erklæring. Kort, fordi siden gjør lite. Les den