Rotterdam · 51°55′N · 4°28′O · Atelier nr. 004
1 plek · start Q4 2026Klantportaal →MMXXVI
CaseDemonstratie · Web app2025

Tap Receipt.
De bon in één tap.

Een web-app die de papieren kassabon vervangt. NFC-tag aan de kassa, klant tapt met de telefoon, bon staat op het scherm: zonder app, zonder account, zonder e-mailadres. Eigen product, gebouwd in twee weken.

Plan een gesprekBekijk de productsiteDie link gaat naar ons eigen product, niet naar een klantomgeving. De demo-omgeving achter de login draait op voorbeelddata; de rondleiding hieronder laat dezelfde flow zien zonder account.
Bestek
Type
Eigen product · Web app
Bewijs
Demonstratie
Jaar
2025
Rol
Concept, ontwerp, ontwikkeling en de NFC-koppeling
Stack
Next.jsNFCVercel
Doorlooptijd
2 weken
Gebouwd om een techniek te laten zien. Cijfers in het product zijn voorbeelddata, geen gemeten gebruik. Gebouwd om te laten zien wat web-API's zonder native app kunnen; de tijden komen uit eigen metingen.
2 wk
Van idee tot live
< 2 s
Van tap tot zichtbare bon
0
Apps te installeren, accounts aan te maken
1
NFC-tag per kassa
RondleidingZonder login

Wat een klant aan de kassa doorloopt.

De kassakant van de demo zit achter een login. Dit is de route die de klant aflegt, met het scherm dat we publiek tonen.

tap-receipt.vercel.app
Tap Receipt: digitale kassabon op een telefoon, verstuurd via één NFC-tap zonder app of e-mail
De bon op de telefoon, direct na de tapWeb app · live
  1. Stap 1

    Tappen op de tag

    De klant houdt de telefoon bij de NFC-tag. Op de tag staat een sessie-URL, dus de browser opent de web-app. Geen installatie, geen account.

  2. Stap 2

    De sessie wacht

    Het scherm toont dat de sessie open staat en op de kassa wacht. Tappen mag dus al voordat de betaling rond is.

  3. Stap 3

    De bon verschijnt

    Het kassasysteem sluit af en stuurt één webhook. De bon verschijnt in dezelfde sessie, in onze tests binnen twee seconden.

  4. Later

    Terugvinden

    De bon blijft aan de sessie gekoppeld, zodat hij bij garantie of retour terug te vinden is.

Van het kassascherm en het beheerdeel staan geen screenshots op deze site; die stappen staan hierboven in tekst. De bedragen en bonnen in de demo-omgeving zijn voorbeelddata.

Aanleiding

Papieren bonnen die niemand bewaart.

Aan elke kassa gaat een bon mee die vrijwel niemand houdt, behalve wie hem nodig heeft voor garantie, retour of de administratie.

Tap Receipt is een eigen product, geen klantopdracht. Het is gebouwd om één ding te bewijzen: dat een fysieke interactie aan de kassa met alleen web-technologie is op te lossen, zonder native app in de store en zonder dat de klant iets hoeft in te vullen. De bestaande alternatieven vragen een e-mailadres of een app; allebei een drempel die aan een kassa te hoog is.

  • 01Een NFC-tag aan de kassa met een unieke sessiecode.
  • 02Bij betaling tapt de klant de telefoon en opent direct een web-app.
  • 03Zodra het kassasysteem de transactie afsluit, verschijnt de bon in die sessie.
  • 04De bon blijft gekoppeld aan de sessie en is later terug te vinden bij garantie of retour.
AanpakDrie sleutelmomenten

Waar het product gewonnen werd.

Dag 1–3 · Sessie

De tag draagt een sessie, niet een bon.

De tag bevat geen bon maar een sessie-URL. Daardoor kan de klant al tappen vóórdat de betaling rond is, en verschijnt de bon vanzelf zodra het kassasysteem klaar is. De volgorde aan de kassa maakt dus niet uit, en dat is precies wat een kassa nodig heeft.

nfc-tagNDEF · URL
01Tag geschreven met sessie-URLtap-receipt.app/s/{sessiecode}
02Tap opent de web-appgeen installatie, geen login
03Sessie wacht op de kassastatus: open, nog geen transactie
OKBon verschijnt in de sessiezodra de POS afsluit
Dag 4–8 · Kassa-koppeling

Eén webhook vanuit het kassasysteem.

Het kassasysteem stuurt bij het afsluiten van een transactie één bericht. Tap Receipt zoekt de open sessie van die kassa, slaat de bon op en ververst het scherm van de klant. Sessies en bonnen staan in Postgres; er is geen queue of extra dienst nodig.

webhookPOS → Postgres
POST/api/pos/transactionregels, totaal, btw, tijdstip, kassa-id
01Sessie opgezocht op kassa-idde open sessie van die kassa
02Bon opgeslagenPostgres, gekoppeld aan sessie
OKScherm ververstzichtbaar in minder dan twee seconden
Dag 9–14 · Platforms

Android via Web NFC, iOS via de URL op de tag.

Web NFC werkt op Android en niet op iOS. Op een iPhone leest het systeem de tag zelf en opent het de URL die erop staat in de browser, dus dezelfde web-app komt in beeld zonder dat er iets geïnstalleerd wordt. De web-app is één codebase; alleen de eerste stap na de tap verschilt per platform.

Dat is iets anders dan een App Clip. Een App Clip is een deel van een echte app die je bouwt, ondertekent en via App Store Connect distribueert, met eigen eisen aan grootte, domeinkoppeling en review. Een NFC-tag met een URL is dat niet: die opent een webpagina. Allebei besparen ze de bezoeker een installatie uit de App Store, maar de distributie en de voorwaarden verschillen.

platformPWA
01Android: Web NFC APIlezen en schrijven vanuit de browser
02iOS: NDEF-URL opent de browserWeb NFC is daar niet beschikbaar
03PWA, installeerbaar maar niet verplichtwerkt ook als gewone webpagina
OKEén codebase voor beideverschil zit alleen in de tap-afhandeling
Resultaat

Wat het bewijst.

Een eigen product heeft geen opdrachtgever die een cijfer bevestigt. Wat wel meetbaar is: de tijd van tap tot bon, en de drempels die weg zijn.

< 2 s
Van tap tot zichtbare bon
Eigen meting op Android met Chrome; de ontwerpregel was één seconde, daarboven haakt een klant aan de kassa af.
0
Installaties, accounts of e-mailadressen
De enige handeling van de klant is de tap.
1
Webhook vanuit het kassasysteem
Geen aanpassing aan de kassa-software zelf.

Hoe die twee seconden gemeten zijn. Gemeten in eigen tests van tap tot zichtbare bon op 4G, op een Android-toestel met Web NFC. Geen productiemeting bij een keten.

Voor klanten laat dit zien wat er kan zonder native app: NFC, installeerbare web-apps en een koppeling met een bestaand systeem via één webhook. Dezelfde bouwstenen passen op toegangscontrole, check-ins of garantieregistratie.

Stack

Vijf lagen, geen app-store.

LaagKeuzeWaarom
FrameworkNext.js (App Router) op VercelWeb-app en API-routes in één project, preview per commit
NFCWeb NFC API, PWATappen vanuit de browser op Android; installeerbaar zonder store
iOSNDEF-URL op de tag, geopend in de browserZelfde web-app bereikbaar zonder Web NFC en zonder installatie
DataPostgresSessies en bonnen, gekoppeld op kassa-id
KassaWebhook vanuit het POS-systeemEén bericht per transactie, geen wijziging aan de kassa-software
Geleerd

Het belangrijkste inzicht ging niet over techniek maar over tijd: de bon moet vrijwel direct na de tap in beeld zijn, anders kijkt de klant al weg. Alles in de architectuur, van de sessie op de tag tot de webhook naar Postgres, staat in dienst van die ene seconde.

Eerstvolgende start: Q4 2026

Plan een vergelijkbaar project.
Een web-app in plaats van een native app.

Een gesprek van 45 minuten: je hoort of jouw idee zonder app-store kan, wat het kost en wat er in 1–6 weken live staat. Vaste offerte binnen 48 uur.

01Maatwerk websites: 1–6 weken, vaste prijs na gesprek.
02Code in jouw repo, infrastructuur op jouw accounts.
03Lighthouse 95+ bij oplevering, gemiddeld 98.
04Reactie binnen 24 uur.

Laatst bijgewerkt: 8 september 2026.