Webapp · PWA
Enig
Swipe dere til enighet om middagen. Dere swiper hver for dere på middagsforslag, og når alle har sagt ja til samme rett, er det en match – og middagen er bestemt.
- Type
- Mobil-først webapp (PWA)
- Status
- Live, i aktiv utvikling
- År
- 2026
- Teknologi
-
- React
- TypeScript
- Hono
- PostgreSQL
- Realtime
- PWA
Problemet
«Hva vil du ha til middag?» «Vet ikke, hva vil du?» Når ingen vil bestemme, går samtalen i ring – og det blir det samme som sist.
Løsningen
Enig er laget for par og små husholdninger på 2–6 personer. Alle swiper hver for seg, uten å se hva de andre velger. Etterpå gir dere stjerner, retten havner i gruppens kokebok, og forslagene blir bedre jo mer dere bruker appen.
Slik fungerer det
-
1
Lag en gruppe
Registrer deg og del en invitasjonslenke eller kode med de du spiser med.
-
2
Swipe hver for dere
Høyre for ja, venstre for nei. Dere ser bare hvor langt de andre har kommet, aldri hva de har valgt.
-
3
Match i sanntid
Sier alle ja til samme rett, får alle beskjed med én gang. «Dette blir middagen», og etterpå gir dere stjerner.
Teknisk
-
Matching uten race conditions
En swipe er én transaksjon med radlås. En test med ekte samtidige tilkoblinger mot Postgres viser at to som sier ja i samme øyeblikk gir nøyaktig én match.
-
Rettferdige anbefalinger
En gjennomsiktig score, ikke maskinlæring. Smak måles mot hver persons egen grunnlinje, og gruppen scores som snitt pluss minimum – «begge liker den» slår «én elsker, én hater».
-
Sanntid
Server-Sent Events og Postgres LISTEN/NOTIFY. Hendelser sendes inne i transaksjonen og leveres bare hvis den committes.
-
Norske middager
Over 5 000 middager, de fleste fra Matprat, Meny, REMA, Godt og Gladkokken via schema.org-data. Importen følger robots.txt, filtrerer bort alt som ikke er middag og fjerner duplikater.
-
Sikkerhet
Passord med scrypt, sesjoner i httpOnly-cookie der bare hashen lagres, CSRF-beskyttelse og rate limiting. Allergier og «aldri» er harde krav i SQL.
-
PWA
Installerbar og åpner offline. Push-varsler sendes bare til de som ikke har appen åpen, og en ny versjon avbryter aldri en swipe-økt.
Testet med to ekte brukere
Server- og enhetstester kjører med Vitest mot ekte PostgreSQL, der hver testfil får sin egen database. Playwright-testene logger inn to brukere i hver sin nettleser, swiper til en match i sanntid og sjekker layouten på fem skjermstørrelser.
Hele stacken er TypeScript: React 19, TanStack Query og Tailwind CSS i frontend, Hono, Zod og Drizzle ORM i backend. Appen kjører på Vercel med Postgres hos Neon.
Status
Enig er i bruk og i aktiv utvikling. Arkitekturen er laget slik at den samme swipe-motoren senere kan brukes til for eksempel film og restauranter, men i dag finnes bare middag.