Stapel

EN

Wat er per versie veranderde

Nieuwste bovenaan, geschreven voor een mens. Wat er veranderde, wat er stukging en wat er nog ontbreekt.

De tekst die in de Play Store bij “wat is er nieuw” staat, komt letterlijk uit dezelfde bestanden als deze pagina, dus ze kunnen niet uit elkaar lopen.

Wil je op de hoogte blijven? Er is een Atom-feed met elke versie, met per release dezelfde korte tekst als in de Play Store. Geen nieuwsbrief en geen adres om achter te laten: je feedlezer haalt een bestand op, en niemand hier weet dat je dat deed.

1.0.1

Voor iedereen · de link in Over wijst naar stapel-app.nl

Stapel staat nu op stapel-app.nl. Tot deze versie wees de link naar de releasepagina, onderaan het scherm Over, nog naar het adres waar de site stond voordat hij een eigen domein had. Die link wijst nu naar het nieuwe adres.

Verder is er niets veranderd. Het oude adres blijft werken, dus op 1.0.0 is er niets kapot.

1.0.0 Play Store

Voor iedereen · Stapel staat in de Play Store

Stapel staat in de Play Store. Geen testerslijst meer, geen mail naar mij: je zoekt hem op en installeert hem.

Aan de app is niets veranderd. Dit is dezelfde versie als de laatste gesloten test, met hetzelfde versienummer in alles behalve de naam. Wat verandert is wie hem kan installeren: tot nu moest ik je e-mailadres aan een testerslijst toevoegen, en dat hoeft niet meer.

Ik heb bewust niets toegevoegd voor deze versie. Een 1.0 die nieuwe dingen meeneemt is een 1.0 die niemand heeft getest. Dit is de build die een testronde heeft doorstaan, en precies die build gaat nu naar buiten.

Geen advertenties, geen tracking, geen account. Je kaarten staan op je eigen telefoon en nergens anders. Stapel is gratis en blijft gratis.

0.9.13 Gesloten test

Alleen voor testers · Aankomstdetectie weet weer welke kaarten je hebt

Deze versie voegt niets toe. Het zijn vijftien reparaties, en ze hebben allemaal dezelfde vorm: de app deed stil iets anders dan je verwachtte, en zei er niets over. Dat is de vervelendste soort fout, omdat er niets is om op te reageren.

Met aankomstdetectie aan worden de winkels om je heen ingesteld op basis van de ketens van je kaarten, maar alleen het scherm waarop je een kaart wijzigt vroeg om een nieuwe ronde. Een kaart erbij scannen, koppelen vanuit een winkel, verwijderen of importeren deed dat niet. Dus: een Albert Heijn-kaart erbij, die middag een AH binnengelopen, en er gebeurde niets. Van een verwijderde kaart bleven de winkels juist ingesteld staan. Dat is nu alle vijf. Zet je je locatie uit en weer aan, dan vraagt Stapel ook om een nieuwe ronde, zolang hij op dat moment nog draait: staat hij 's nachts uit, dan gebeurt het pas als je de app weer opent.

De kaart die op je vergrendelscherm verschijnt bleef daar staan nadat je hem niet meer nodig had. Vergrendel je de kaart, verwijder je hem, of zet je de instelling uit, dan gaat hij nu weg. En je telefoon draaien verliest niets meer: de code die je aan het scannen was, de ontgrendeling voor een export, een import die nog bezig was en een winkeldatabase die aan het bijwerken was overleven het draaien allemaal.

Verder bewaarden twee snelle tikken op Opslaan de kaart twee keer, en nam je je kaarten over uit een andere wallet-app, dan werd een cadeaubon die Stapel aan een bekend merk kon koppelen als klantenkaart opgeslagen. Een cadeaubon gaat standaard achter je schermvergrendeling en een klantenkaart niet, dus zo'n bon lag open. Nu blijft hij dicht.

0.9.12 Gesloten test

Alleen voor testers · De kaart van de winkel waar je staat, gaat naar boven

Deze versie is bijna helemaal uiterlijk, leesbaarheid en gevoel. Ik heb de app drie keer op rij nagelopen op ontwerp en bruikbaarheid, en alles wat daaruit kwam zit hierin. Er komt geen functie bij: wat er al was, staat nu waar je het zoekt, is te lezen als je slecht ziet, en beweegt mee in plaats van te springen.

Sta je in een winkel die Stapel kent en heb je daar een kaart van, dan stond die kaart gewoon ergens in Alles, op alfabet. Met dertig kaarten betekent dat zoeken terwijl de rij achter je wacht. Die kaart gaat nu naar boven, onder het kopje Hier. Hij wordt verplaatst, niet gekopieerd: in de eerste opzet stond dezelfde kaart twee keer op één scherm.

In 0.9.11 kwam onder de streepjescode de vraag of je in deze winkel stond. Dat was precies de verkeerde plek. Je houdt je telefoon omhoog bij de kassa, en één duimbeweging naast Liggend legde de kaart vast aan een keten, zonder bevestiging en zonder weg terug. Die vraag is weg bij de kassa, en een kaart die aan de verkeerde winkel hangt kun je nu losmaken.

Het grootste deel van deze versie is het minst zichtbaar als je het niet nodig hebt. De uitleg over het schermslot stond grijs op grijs, precies de zin die vertelt waarom je kaart niet beschermd kan worden. De kleur van de tekst op een tegel wordt nu per merk uitgerekend, zodat hij op elke merkkleur leesbaar is. TalkBack zegt of een kaart een favoriet is, en leest de streepjescode nog één keer in plaats van twee. Op lettergrootte 2.0 braken de cijfers van de code over twee regels en dekte de toevoegknop een kaart af. Dat is op orde.

En op een tablet, een opengeklapte vouwtelefoon of een telefoon in liggende stand gebruikte Stapel de breedte niet: één kolom in het midden, de rest leeg. Nu staat de kaart naast je overzicht.

0.9.11 Gesloten test

Alleen voor testers · Een kaart zonder winkel verdwijnt niet meer

Allebei de veranderingen komen uit één melding. Een tester stond in een winkel met de kaart van die winkel in de app, en het Winkels-scherm liet alleen de twee buren zien. De kaart was er, de winkel was er, en niets verbond ze. Het vervelende was niet dat het misging, maar dat er nergens stond dát het misging.

Open je nu een kaart waar geen winkelketen aan hangt, en kan je toestel je op dat moment in een winkel plaatsen die Stapel kent, dan staat er onder de streepjescode één regel: sta je nu bij deze winkel? Eén tik koppelt hem, en alleen de keten wordt vastgelegd. Zeg je "Nu niet", dan blijft die vraag dertig dagen weg voor die kaart. De regel staat onder de code en niet erboven, want een kaart die je in een winkel opent gaat meestal zo de kassa over.

De kaart Spaarkaart open op zijn streepjescode. Daaronder staat de regel
  1. De code houdt de bovenkant van het scherm. De vraag staat eronder, zodat er niets overheen komt van wat bij de kassa gescand moet worden.
  2. Stapel ziet in welke winkel je staat en vraagt het één keer. Eén tik koppelt hem, en alleen de keten wordt vastgelegd. Zeg je "Nu niet", dan blijft deze winkel dertig dagen stil voor deze kaart.
Een kaart die bij geen enkele keten hoort, geopend in een winkel. Opgenomen op 0.9.11. De plaatsbepaling is ingevoerd, niet gelopen.

En een kaart waarvan de keten geen enkele winkel binnen het zoekbereik heeft, verdween daarvóór uit allebei de helften van het Winkels-scherm. Er staat nu bij dat er geen winkel binnen het doorzochte bereik ligt, met waar je dan naar moet kijken: een kaart die aan het verkeerde merk hangt ziet er precies zo uit.

De onderkant van het Winkels-scherm: een Kruidvat op 8,0 km, en daaronder de kop
  1. De winkels waar je naartoe kunt, op afstand gesorteerd.
  2. Daaronder staat nu wat eerder wegviel: een kaart waarvan de keten geen winkel binnen het doorzochte bereik heeft. De regel eronder zegt waar je dan naar moet kijken, want een kaart die aan het verkeerde merk hangt ziet er precies zo uit.
Het Winkels-scherm in Maastricht. De dichtstbijzijnde IKEA staat op 18,9 km, buiten het bereik dat is doorzocht. Opgenomen op 0.9.11.

0.9.10 Gesloten test

Alleen voor testers · Je ziet nu welke widget je kiest

Stapel heeft twee widgets: een kaart over de volle breedte, en een kaart met je recente kaarten eronder. In de lijst waarin je er een uitkiest waren ze niet uit elkaar te houden, want allebei stonden ze er als hetzelfde grijze vlak met een draaiend rondje. Elke widget laat nu zichzelf zien, dus je kiest op het verschil. Dat werkt op Android 12 en nieuwer.

In een winkelstraat liggen de cirkels van aankomstdetectie over elkaar heen, en dan meldt de telefoon ze allemaal tegelijk. Er was niets dat de volgorde bepaalde, dus won de winkel die toevallig achteraan stond en kon je de kaart van de buren krijgen. Nu wint de dichtstbijzijnde winkel waar je een kaart voor hebt, met de locatie die al bij de melding zat. Staat aankomstdetectie uit, en zo begint hij, dan verandert er niets.

0.9.9 Gesloten test

Alleen voor testers · Datums in je eigen taal, en een gesloten kaart blijft dicht

Elke datum op het scherm stond in de Nederlandse volgorde, in alle achttien talen. Wie de telefoon op Engels heeft staan leest 03-04-2027 als 4 maart, terwijl het 3 april is, en dat zat op de vervaldatum van een bon. Datums volgen nu de taal van de lezer, en het veld waarin je zelf een datum typt doet dat ook.

Een kaart die je zelf had gesloten kwam open terug uit een back-up van voor 0.9.8, omdat zo’n bestand niets over sloten zegt en dat werd gelezen als “neem de standaard”. Een herstel opent nu geen kaart meer die dicht stond, en het scherm zegt dat het bestand het niet vermeldde. Een kaart die je iemand overhandigt krijgt de regel van de telefoon die hem ontvangt.

Een nummer dat een cijfer te kort is wordt nu ook bij wijzigen geweigerd, niet alleen bij toevoegen. Nu bijwerken werkt ook de lijst met landen bij, dus een land dat die ochtend is gepubliceerd is te vinden zonder op wifi te wachten. Een land dat niet meer wordt gepubliceerd blijft zichtbaar met jouw kopie erbij, in plaats van te verdwijnen terwijl zijn winkels blijven meetellen. En een lange PDF zegt hoeveel pagina’s zijn gelezen.

0.9.8 Gesloten test

Alleen voor testers · Bijwerken vindt nu de winkels bij jou in de buurt

Nu bijwerken keek alleen naar een locatie die Android al vasthield, en die is er meestal niet. Voor een land waarvan de winkels in delen om je heen komen haalde de app daardoor de landelijke lijst op en niets dichtbij, precies op de telefoon waarvoor die knop bedoeld is. De app vraagt nu zelf een locatie op als er geen recente is, en laat zien dat hij bezig is zolang dat duurt.

Een kaart intypen is strenger geworden. Een nummer dat een cijfer te kort is voor zijn streepjescode wordt geweigerd in plaats van stil aangevuld met een cijfer dat niet op je kaart staat, en een Amerikaanse kaart wordt als UPC-A getekend. Een vergrendelde kaart laat zijn nummer niet meer zien in de lijst.

Omdat die knop nu zelf een locatie opvraagt, staat dat ook in de privacytekst. Wat automatisch bijwerken leest en wat de knop vraagt staan er los bij, in alle achttien talen en op beide privacypagina’s.

0.9.7 Gesloten test

Alleen voor testers · Een land erbij zonder nieuwe app

Deze versie verandert vooral iets wat je vandaag nog niet ziet. Tot nu toe stond de lijst met landen waarvan winkels bekend zijn in de app zelf, en kwam er pas een land bij als er een nieuwe versie uitkwam. Nu leest de app die lijst zelf op, ondertekend, en biedt aan wat erin staat.

Op het moment dat deze versie uitkomt staan er precies de achtentwintig landen in die de app al kende, dus er komt vandaag geen land bij. Het gaat om het volgende land: dat heeft geen nieuwe app meer nodig. Dat verzoek noemt geen land en draagt geen locatie, en zet je het bijwerken van de winkellijst uit, dan gaat ook dit verzoek niet meer.

Daarnaast krijgt een kaarthouder zonder kaarten de vraag over aankomstdetectie nu ook, met een tekst die zegt waarom hij er staat: het gaat om de voorbeeldkaarten die Stapel zelf meebrengt. En de releaselijst hieronder zet vanaf deze versie de datum waarop een versie daadwerkelijk uitging, in plaats van de datum van de laatste wijziging ervoor.

0.9.6 Gesloten test

Alleen voor testers · De cirkel die te wijd bleef staan

Deze versie is voor de helft reparatie en voor de helft een app die ruim 4 MB kleiner is geworden. Na 0.9.5 is de code van aankomstdetectie nagelopen, en daar kwamen drie fouten uit die niemand op een scherm ziet gebeuren.

Om jou heen ligt één cirkel, en die is het enige dat de app laat herkijken welke winkels in de buurt zijn. Als de app opnieuw keek en dezelfde winkels uitkwam, sloeg hij het opnieuw aanmelden over. Alleen keek die vergelijking naar de winkels en niet naar de cirkel, dus een cirkel die op een oude positie anderhalve kilometer breed was gemaakt, bleef liggen zodra er een verse positie was die zei dat een paar honderd meter genoeg was. Dat is precies de verkeerde kant op: binnen zo’n te wijde cirkel loop je nergens meer een grens over, dus wordt er nooit meer gekeken, dus krijgt elke winkel waar je langs komt geen cirkel meer. De cirkel telt nu mee in die vergelijking, met een speling van honderd meter.

De marge voor een oude positie werd bovendien uitgerekend met de gewone klok van je toestel, en dat is de klok die verspringt als je netwerk de tijd bijstelt of je de datum zelf goedzet. Springt hij terug, dan lijkt een oude positie vers en wordt de marge niet opgeteld; springt hij vooruit, dan wordt de cirkel voor niets anderhalve kilometer breder. Android heeft daar een tweede klok voor die sinds het opstarten doorloopt en die niemand kan verzetten, en die wordt nu gebruikt.

En de controle die merkt dat Play Services de cirkels alsnog geweigerd heeft, werd alleen gedaan als de positie minder dan twee minuten oud was. Dat was het juiste getal voordat 0.9.5 de marge invoerde, en het is daarna blijven staan, terwijl de rest van de app inmiddels met een positie van maximaal ongeveer achttien minuten rekent. Bij alles daartussen werd er niets verwacht en dus ook niets gemist. Die grens is nu afgeleid van de marge zelf, zodat de twee niet opnieuw uit elkaar kunnen lopen.

Alle vensters zijn te scrollen bij grote letters

In 0.9.5 werden twee vensters aangepakt. Er zijn er vijftien, en twaalf ervan hadden hetzelfde probleem: bij grote letters werd de tekst afgekapt, zonder dat er iets op het scherm stond dat er meer was. De knoppen zijn nooit weggevallen, maar de zin die zegt wát er weggegooid wordt stond wel onder de rand. Bij het venster dat vraagt of je een kaart wilt verwijderen is dat de hele waarschuwing.

De uitleg noemt nu ook de andere cirkels

Het scherm dat uitlegt wat aankomstdetectie doet, sprak alleen over winkels van ketens waarvan je een kaart hebt. Een paar van die cirkels liggen om winkels waarvan je er juist geen hebt, zodat zo’n winkel je bij aankomst een voorbeeldkaart kan aanbieden. Dat is het scherm waarop je beslist of je dit aanzet, dus staat het er nu bij, in alle achttien talen.

Pathé staat in de winkellijst, en dubbele winkels staan er niet meer dubbel in

Pathé kende de app wel als kaart, maar niet als winkel. Je kon een Club Pathé-kaart bewaren en laten scannen, alleen wist de app van geen enkele bioscoop waar die kaart bij hoort, dus kon hij ook nooit merken dat je er aankwam. Er staan er nu 31 in, evenveel als Pathé er zelf noemt. Het is de eerste keten in de lijst die geen winkel is maar een bioscoop. Kinepolis staat er nu ook in, met 16 bioscopen in Nederland en 10 in België: je Movie Club-kaart geldt aan beide kanten van de grens, dus het zou raar zijn als de app alleen de ene helft kende.

Bij het opnieuw opbouwen van die lijst kwam er nog iets uit. De reparatie die elke winkel nog maar onder één keten zet kwam een week na de Nederlandse lijst, dus die lijst had hem nooit gehad. Daardoor stond elke SPAR express, SPAR city, AVIA XPress, OK express, Tamoil Express en TotalEnergies Express er twee keer in: een keer onder zijn eigen naam en een keer onder de moederketen. Dat waren 595 winkels die je dubbel zag staan en die twee van je twintig cirkels kostten in plaats van een. Ze staan er nu een keer in, en geen enkele kaart verliest er een winkel door.

Diezelfde reparatie is daarna over dertien landen gegaan die je erbij kunt downloaden, waar samen 1.061 winkels dubbel stonden. Wat je daarvan zag was veel kleiner dan hier: acht plekken in die dertien landen samen kostten je twee cirkels in plaats van een. Het is vooral een schoner bestand om te downloaden. In Tsjechië kwam er iets bij in plaats van af: 322 Coop- en Jednota-winkels die in de vorige lijst helemaal ontbraken staan er nu wel in.

De logo’s zitten niet meer allemaal in de app

Tot nu toe droeg elke installatie de logo’s van elke keten in elk land. Een Nederlands toestel had dus de Britse, Italiaanse en Japanse logo’s ook, en gebruikte die nooit. Dat waren 554 plaatjes. Er zitten er nu 111 in: precies de logo’s die een kaart in Nederland kan tegenkomen, plus de handvol die bij geen enkel land horen. De andere 443 reizen mee met het land waar ze bij horen. Zet je België aan, dan komen de 60 Belgische logo’s mee met de winkeldata van België. Er zijn 22 landen die zo’n pakketje hebben.

Samen met het omzetten van de plaatjes naar een kleiner formaat, zonder dat er iets aan de beeldkwaliteit verandert, is de app daarmee 4.048.727 bytes kleiner geworden: van 32,3 MB naar 28,3 MB, gemeten aan dezelfde bouw van 0.9.5 en van deze versie. Wat je van Google Play binnenhaalt is kleiner dan dat en verschilt per toestel, dus het verschil is het getal dat klopt, niet die twee.

Dit is één netwerkverzoek meer dan de app tot nu toe deed, en het vraagt om een bestand met de landcode erin. Het privacyscherm noemt het daarom als vierde verzoek, met zijn eigen kopje, en op deze site staat het er ook bij. Het pakketje is ondertekend en wordt op dezelfde manier gecontroleerd als de winkeldata zelf: komt de handtekening niet uit, dan wordt er niets geïnstalleerd. Het gaat mee met het bijwerken van de winkellijst, dus op onbeperkte wifi tenzij je mobiele data toestaat, en alleen voor landen die je zelf hebt aangezet. Een logo dat nog niet binnen is, is geen fout: dan staat er het symbool voor het soort winkel, en dat is wat ongeveer een derde van alle ketens toch al doet omdat er voor die ketens geen logo is dat vrij te gebruiken is.

Een gedownload logo staat nu ook op het beginscherm en in de melding

De widget, de melding als je een winkel binnenloopt en het snelmenu op je startscherm tekenen hun merkje anders dan de app zelf, en die drie keken alleen in de app. Zolang elk logo in de app zat maakte dat geen verschil. Sinds de logo’s meereizen wel: een Belgische kaart droeg zijn logo in de app en op die drie plekken het kale winkelsymbool. Ze kijken nu allemaal op dezelfde plek.

De namen van landen komen nu van je toestel

De landen in de lijst hadden hun naam in 28 keer 17 met de hand geschreven regels staan. Android weet die namen zelf al, in elke taal die je toestel kent, dus worden ze daar nu opgehaald. Voor bijna alle landen verandert er niets aan wat er staat. In Brazilië wel: daar stond de Portugese spelling van Portugal in plaats van de Braziliaanse, en dat is nu goed. Groot-Brittannië houdt zijn eigen naam, want Android noemt dat land het Verenigd Koninkrijk, en de winkellijst gaat niet over het Verenigd Koninkrijk: Noord-Ierland zit er niet in. Die naam zou iemand in Belfast vertellen dat zijn land erin staat.

Twee schermen zeiden iets over de app dat niet klopte

Op het scherm van de winkeldatabase zit een knop “Wat er precies gebeurt”. Daar stond dat Stapel per land één openbaar bestand ophaalt en dat er niets meegaat: geen kaarten, geen codes, geen locatie. Twee tikken verderop staat op het privacyscherm het omgekeerde, en dat is het scherm dat gelijk heeft. Een land wordt in delen opgehaald, en welke delen worden opgevraagd volgt uit waar je toestel het laatst was. De app deed wat het privacyscherm zegt; het andere scherm ontkende het, in achttien talen, op de plek die aanbiedt om precies uit te leggen wat er gebeurt. Alle achttien zeggen nu hetzelfde als het privacyscherm en verwijzen ernaar voor de rest, en er is nu een controle die van elke taal eist dat ze het toegeeft.

Over het ophalen van logo’s stond op het privacyscherm: nooit een eigen run, en helemaal niet zodra je het bijwerken van de winkellijst uitzet. Dat klopte niet. Het ophalen van een logo wacht nergens op, en wachten is precies wat een lus nodig heeft om te merken dat hij moet stoppen. Zette je het bijwerken uit terwijl er een run bezig was, dan liep die lus alle landen af die nog over waren. De andere helft van diezelfde zin is erger, want daar hoeft niemand een schakelaar voor om te zetten: Android stopt een run zodra de verbinding niet meer is wat er gevraagd was, dus liep je halverwege een run de wifi uit, dan ging de lus door over de mobiele data waarvan diezelfde zin zegt dat de app die niet gebruikt. De lus stopt nu wel, en er is een test die faalt zodra dat weer niet zo is.

Bijwerken deed zijn handtekeningcontrole op de schermdraad

“Nu bijwerken” haalt eerst een lijstje op van welke stukken winkeldata er voor jouw land zijn. Dat lijstje wordt ondertekend geleverd en de handtekening werd gecontroleerd op dezelfde draad die het scherm tekent. De stukken zelf gingen al ergens anders heen, alleen het lijstje niet.

Wat hier niet is getest

De stap van een geofence naar een melding gaat op een emulator nog steeds niet af, dus dat is nog altijd alleen in een echte winkel te zien. De vensters zijn niet op een toestel met grote letters bekeken: de tests die er zijn meten of er gescrold kán worden, niet hoeveel er zonder scrollen wegviel. Van de logo’s is het downloaden en installeren wel nagelopen, maar niet op een toestel met een ander land aangezet, en de widget, de melding en het snelmenu zijn helemaal niet op een toestel bekeken. Bijwerken van 0.9.5 naar deze versie is wel op een toestel gedaan, op een emulator met API 36: twee zelf ingetypte kaarten stonden er daarna nog precies zo in, er viel niets te migreren, en aankomstdetectie stond nog steeds uit.

0.9.5 Gesloten test

Alleen voor testers · Aankomstdetectie die aan blijft

Na een herstart van je toestel kon aankomstdetectie voorgoed stilvallen, zonder melding en zonder dat er iets in de app op stond dat er iets mis was. Stapel geeft Google Play Services de ongeveer twintig dichtstbijzijnde winkels, plus één cirkel om de plek waar je bent: verlaat je die, dan wordt er opnieuw gezocht. Er is geen klok die dat uit zichzelf doet. Vlak na een herstart heeft Android geen laatst bekende positie liggen, en de app mag er zelf geen ophalen, want dat zou de gps aanzetten op een moment dat jij niets gevraagd hebt. Er werd dus opnieuw geprobeerd, met een wachttijd die kon oplopen tot vijf uur, en dan kwam de cirkel om een positie van uren eerder te liggen. Je stond er vanaf het eerste moment buiten, dus binnenkomen werd nooit gemeld en naar buiten lopen ook niet.

De cirkel wordt nu ruimer naarmate de positie waar hij omheen ligt ouder is: 1,4 meter per seconde, wandeltempo, tot maximaal anderhalve kilometer erbij. Dat dekt ongeveer achttien minuten lopen. Ben je binnen die afstand gebleven, dan sta je nog in je eigen cirkel, loop je er een keer uit, en kijkt de app opnieuw. Ben je verder weg, thuis herstart en inmiddels op je werk, dan helpt die marge niet: daar is geen cirkel voor die niet meteen een halve stad afdekt. Wandeltempo en niet autosnelheid, precies om dat te voorkomen.

Bij grote letters waren twee vensters niet meer helemaal te bedienen

Zet je de tekstgrootte op het maximum, dan werd het venster om een winkel vast te zetten en het venster om een map te kiezen hoger dan het scherm. Schuiven ging niet, dus alles onder het invoerveld viel weg: bij het vastzetten de knop om het adres op te zoeken, bij de map de melding dat die naam al bestaat, het enige dat uitlegt waarom je niet kunt opslaan. De knoppen onderaan bleven wel bereikbaar, want die staan buiten het schuivende deel. Nu schuift dat deel. De test die dit had moeten vangen kon niet falen: hij zocht alleen in bestanden die al een schuifbalk hadden.

De app legt de cirkel nu zelf uit

Wat die cirkel om jezelf is en hoe groot hij kan worden stond op de privacypagina op deze site, maar niet op de privacypagina in de app, terwijl dat de pagina is die je meeneemt. Daar staat het nu ook, in dezelfde woorden, in alle achttien talen. De getallen erin worden voortaan nagerekend: die alinea is vier keer gecorrigeerd omdat een constante in de code verschoof en de zin die hem citeert bleef staan, en er is nu een test die de ondergrens, de cirkel zonder winkel, de halve breedte van het zoekvak, de marge voor een oude positie en de bovengrens uitrekent zoals de app dat doet.

De voorbeeldkaart van Albert Heijn doet het weer

Sta je in een Albert Heijn zonder eigen Bonuskaart, dan biedt Stapel er een aan met een Voorbeeld-label erop. Die kaart is alleen iets waard zolang de kassa hem aanneemt, en het nummer dat er stond was verlopen. Er staat nu een nieuw nummer in, bewust gedeeld, zodat iedereen zonder eigen kaart hem kan gebruiken. Een nummer hier gaat mee naar iedereen die de app installeert, dus het kan alleen een nummer zijn dat de eigenaar er met opzet neerzet, en nooit dat van iemand anders.

Wat hier niet is getest

De stap van een geofence naar een melding gaat op een emulator nog steeds niet af, dus dat is nog altijd alleen in een echte winkel te zien. Het herstartscenario hierboven is in tests nagebouwd, niet op een toestel dat echt opnieuw is opgestart.

0.9.4 Gesloten test

Alleen voor testers · Griekenland erbij

Griekenland is het achtentwintigste land waarvan Stapel de winkels kent, en Grieks is de achttiende taal waarin de app zelf staat. Zet je het land aan onder Instellingen, Winkeldatabase, dan komen er 10 056 winkels over 98 ketens bij, en loop je Griekenland binnen terwijl grensdownloads aanstaan, dan biedt de app het zelf aan. Wat er niet bij zit is een Grieks spaarprogramma in de catalogus: dat een paar Griekse ketens er een hebben is wel vastgesteld, maar van geen enkele was de kaart zelf te achterhalen, de kleur en het streepjescodeformaat, en raden is erger dan het gat. Lidl Griekenland doet wel mee, want dat is Lidl Plus, en dat kende Stapel al.

Het brede widget noemde je portemonnee leeg

Had je precies één kaart, dan tekende het brede widget die kaart en zette er “Nog geen kaarten. Tik om er een toe te voegen.” onder. Onder de kaart die er stond. Het smalle widget deed dit al goed. Die regel verschijnt nu alleen nog als er echt niets in zit.

In een druk centrum keek de app niet opnieuw

Stapel geeft Google Play Services de ongeveer twintig dichtstbijzijnde winkels om in de gaten te houden, plus één cirkel om jezelf: verlaat je die, dan zoekt de app opnieuw. Die cirkel was altijd drie kilometer, en dat is in een stadscentrum veel te ruim. Op de Dam liggen de twintig dichtstbijzijnde winkels uit de catalogus binnen 153 meter, terwijl er 462 staan binnen die drie kilometer; stond je in zo’n winkel, dan zat er geen hek omheen en kwam er ook nooit een. De cirkel wordt nu om de winkels getrokken die echt een hek kregen, en kleiner dan 500 meter wordt hij nooit.

De privacypagina zei iets dat niet meer klopte

Daar stond dat die cirkel drie kilometer is. Dat is hij sinds deze versie niet meer, en de pagina waar de app zelf naar verwijst hoort niet het enige te zijn dat achterloopt. Er staat nu wat de app doet, inclusief de bovengrens: de app zoekt in een vak van twaalf kilometer naar elke kant, dus een winkel bij een hoek daarvan zet de cirkel ruim zeventien kilometer verderop. De eerste poging om die zin te herstellen zette er twaalf kilometer neer, de halve breedte van dat vak, en is voor publicatie gecorrigeerd.

0.9.3 Gesloten test

Alleen voor testers · weggeklikt is niet meer voorgoed

0.9.2 zette drie dingen op de lijst voor de volgende versie. Dit is die versie, en ze staan er alle drie in. Daarnaast is de grootste scherpe rand eruit: een kaartaanbod dat je wegklikte kwam nooit meer terug. Voorgoed, op dat toestel, zonder knop om het terug te draaien, terwijl de app bij correcties juist zegt dat je die wél kunt terugdraaien. Onder Instellingen, Winkeldatabase staat nu een lijst van de ketens die je hebt weggeklikt, met per keten een knop om het aanbod weer aan te zetten.

Elke knop zegt bij welke winkel hij hoort

In de winkellijst heetten de knoppen “navigeren” en “correcties”, zonder te zeggen bij welke winkel. Staan er twee Kruidvatten in de lijst, en dat komt voor, dan las een schermlezer twee keer precies hetzelfde voor. Nu staat de straat erbij. Tikte je op de knop om een winkel op de kaart te openen terwijl er geen enkele kaart-app op je toestel stond, dan gebeurde er niets; nu zegt de app wat er aan de hand is.

Wat er in de winkelvermelding stond klopte niet

De tekst in de Play Store zei in alle veertien talen dat de broncode openbaar is. Dat is niet zo, en dat blijft voorlopig zo; de winkeldata is wél openbaar, en de zin wijst nu naar wat er echt open staat. Het scherm “Over Stapel” noemde een adres voor de releasenotities dat nergens op uitkwam. Er is ook een openbare plek gekomen om iets te melden, en het scherm Licenties opent sneller: dat las de lijst van 620 logo’s op de hoofddraad in en tekende alle 677 regels tegelijk, ook de regels die niemand zag.

0.9.2 Gesloten test

Alleen voor testers · de winkellijst wijst de weg

0.9.1 ging over waar Stapel winkels kent. Deze gaat over wat je met die lijst kunt doen zodra je ervoor staat. In de winkellijst zit per rij een knop die de winkel opent in de kaart-app die al op je toestel staat, en een menu voor correcties als een winkel verhuisd of dicht is. Stapel kiest die kaart-app niet voor je: het geeft de coördinaten door en je telefoon beslist wie ze krijgt. Staat er geen kaart-app op, dan staat de knop er niet.

Twee rijen uit de winkellijst: Kruidvat op 148 m en Albert Heijn op 217 m, elk met een logo, een adres, een pijlknop en een menu met drie puntjes.
  1. De pijl opent deze winkel in de kaart-app die al op je toestel staat. Stapel kiest die app niet voor je: het geeft de coördinaten door en je telefoon beslist wie ze krijgt. Staat er geen kaart-app op, dan staat de knop er niet.
  2. Het menu is voor correcties, als een winkel verhuisd of dicht is.
Twee rijen uit de winkellijst. Zo ziet het er nu uit, opgenomen op 0.9.11.

Eén balk in plaats van losse meldingen

Stond je bij meerdere winkels waarvoor je nog geen kaart hebt, dan kreeg je daar tot nu toe een losse melding per winkel voor. Dat is er nu nog maar één: een balk die zegt hoeveel kaarten Stapel kent voor winkels waar je nu staat, en die opengaat als je erop tikt. De winkelnaam werd in die rijen soms afgeknipt achter de knoppen ernaast, en dat is rechtgezet.

Meer logo’s en meer kaarten

Er zitten 382 logo’s bij, van 238 naar 620, dus een keten zonder logo komt een stuk minder vaak voor. Waar elk logo vandaan komt en onder welke voorwaarden het meekomt staat in de app onder Licenties. De merkencatalogus gaat van 910 naar 927 rijen, waarvan dertien Canadese kaarten: onder andere Aeroplan, SAQ Inspire, Journie Rewards, RONA VIPpro en Guardian / I.D.A. Rewards. De streepjescode van die Canadese kaarten is een aanname en geen meting, dus klopt er een niet, dan is dat te melden en wordt het rechtgezet.

Deze tekst staat er in jouw eigen taal

Tot en met 0.9.1 werd de "wat is er nieuw"-tekst alleen in het Nederlands en het Engels geschreven. Vanaf deze release schrijft elke versie een blok in elke taal die de winkelpagina spreekt, veertien op dit moment, afgeleid uit de landen die de app ondersteunt. Het scherm "Over Stapel" in de app kiest hetzelfde blok op basis van de taal van je toestel.

0.9.1 Gesloten test

Alleen voor testers · elf landen erbij

0.9.0 ging over de widget. Deze gaat over de kaart eronder: waar Stapel winkels kent, welke klantenkaarten het herkent, en in welke taal het je aanspreekt. Oostenrijk, Ierland, Polen, Canada, Australië, Nieuw-Zeeland, Zwitserland, Tsjechië, Slowakije, Mexico en Argentinië komen erbij, samen goed voor 250.544 winkels. De winkeldatabase staat daarmee op 1.213.080 winkels in 27 landen. Winkellijsten komen los van de app binnen, dus hier hoef je geen update voor af te wachten.

Kaarten en talen

Zes van die landen kregen hun eigen klantenkaarten, met de coalitiekaarten die er het meeste dekken — één kaart die bij tientallen ketens werkt. Mexico kwam daarna: Spin Premia, dat bij OXXO en OXXO GAS werkt, Soriana YA!, Monedero del Ahorro en Benavides Recompensas. Zwitserland ligt wel in de winkeldatabase maar heeft geen kaartrij, en de reden daarvoor staat opgeschreven in plaats van stilgehouden. Verder spreekt Stapel nu ook Pools, Tsjechisch en Slowaaks: zeventien talen, geen half vertaalde schermen.

Wat er lekte

Een kaart die je had gesloten, kon nog te zien zijn in het overzicht van recente apps. Android maakt daar een schermafdruk voor op het moment dat je de app verlaat — precies het moment waarop Stapel de kaart weer op slot doet. Dat is nu dicht op alle drie de schermen waar een code staat: het kaartscherm, het deelscherm en het bewerkscherm. Het vastzetten van een winkel schreef daarnaast je precieze GPS-positie mee in de tijdelijke opslag van het scherm; daar staat nu helemaal geen positie meer in.

Kleinere dingen die opvielen

Zette je de systeemletter groter, dan knipte de brede widget de streepjescode aan de boven- en onderkant af, omdat hij de ruimte voor zijn tekst in vaste eenheden rekende terwijl die tekst meegroeit. Drukte je op "Nu bijwerken", liep je weg en kwam je terug, dan begon een tweede druk een tweede download van hetzelfde land, tegelijk met de eerste; er start er nu nog maar één. En op een drukke straat weigert de widget een winkel te noemen, maar zette die winkel daarna wél als eerste chip neer. Dat gebeurt niet meer.

Wat hier niet is getest

Of Android de afdruk in het recente-apps-overzicht werkelijk achterhoudt, is het antwoord van het besturingssysteem en niet van Stapel. De tests bewijzen dat Stapel het vraagt, op beide manieren die Android sinds versie 8 kent, niet dat het lek daarmee dicht is. De kleuren van de vier Mexicaanse kaarten komen van het app-icoon van de keten zelf; twee van die vier sites laten geen enkele bezoeker binnen, ook geen gewone browser.

0.9.0 Gesloten test

Alleen voor testers · de widget is de kaart geworden

De widget liet zien welke kaart klaarlag. Nu is hij die kaart: de kleur van de keten, het merkteken van de winkel, en de streepjescode zelf, groot genoeg om vanaf je startscherm te laten scannen. De kleine widget is niet langer een blok van drie bij twee maar één rij van rand tot rand. De brede widget toont de code van de kaart die klaarligt, met daaronder drie chips in de kleur van hun eigen keten.

Codes die geen streepjes zijn

Een QR-code, een Aztec-code en een Data Matrix zijn vierkant, en een PDF417 is een blok van gestapelde regels. Stapel rekte ze alle vier uit tot de vorm van een streepjescode, en zo uitgerekt leest een scanner ze niet. Ze houden nu hun eigen vorm, op alle vier de plekken waar Stapel een code laat zien. Rossmann geeft bovendien geen plastic pasje uit maar een QR-code, terwijl Stapel er een EAN-13 neerzette: een symbool dat deze keten nooit heeft gebruikt, en dat pas bij de kassa opviel.

De Verenigde Staten, en een land dat stilletjes ophield met bijwerken

De Amerikaanse ketenlijst gaat van 70 naar 200 ketens: van 134.902 naar 358.619 winkels, en van 26 naar 64 procent van alles wat in de kaartgegevens een merknaam draagt. Winkellijsten komen los van de app binnen, dus daar hoef je geen update voor af te wachten.

Een telefoon accepteerde tot nu toe hoogstens 200 ketens in één winkellijst, en Japan stond op precies 200. Eén keten erbij en de telefoon wees de hele lijst af, hield wat er al stond, en meldde de update als geslaagd. Zes van de andere vijftien landen zaten binnen 35 ketens van die grens. De grens staat nu op 5.000.

Wat hier niet is getest

De widgets zijn op een emulator gemaakt en bekeken, niet op een echt toestel. Wat er gebeurt met een widget die al op je startscherm staat als deze update binnenkomt, is daarmee niet gemeten: een nieuw geplaatste kleine widget is één rij hoog, maar of een bestaande meekrimpt bepaalt je launcher.

0.8.0 Gesloten test

Alleen voor testers · de winkellijst haalt nog maar op wat in de buurt is

Tot nu toe haalde je telefoon per land de hele winkellijst binnen. Heel Frankrijk, heel Groot-Brittannië, alles. Dat is veel data voor winkels waar je nooit langsloopt, en het werd erger bij elk land dat erbij kwam. Vanaf deze versie haalt Stapel per land alleen de winkels op die binnen 25 kilometer van je liggen, plus een landelijke basislijst waarin elke keten één keer voorkomt.

Ook de kant die minder goed uitpakt

Er is één geval dat slechter uitpakt: ga je een paar honderd kilometer verderop zonder tussendoor bij te werken, dan heb je daar alleen de landelijke basislijst. Daarom vertelt Stapel dat nu ook. Sta je ergens waar je winkelgegevens niet over gaan, dan zegt het scherm dat, met een knop om ze meteen op te halen. Zeg je "niet nu", dan blijft dat zo totdat er echt iets verandert.

Veel meer winkels

Groot-Brittannië stond op 12 ketens tegen bijna 1.600 in de kaartgegevens, en staat nu op 190. Spanje ging van 69 naar 183. De Nederlandse lijst die in de app zelf meegeleverd wordt ging van 36 naar 173, dus ALDI, Action, Zeeman en McDonald's zitten er nu gewoon in. België ging van 62 naar 177, Italië van 75 naar 175 en Portugal van 60 naar 166. In Frankrijk ontbraken ongeveer 3.400 tankstationwinkels doordat één categorie niet werd gelezen.

Er kwamen zeven landen bij: Denemarken, Zweden, Noorwegen, Finland, IJsland, Brazilië en Japan. Daarmee staat de teller op zestien. De app spreekt nu ook Deens, Fins, IJslands, Japans, Noors en Zweeds, dus het is niet alleen de winkellijst die meekomt.

De lijst met landen was een platte opsomming van alles wat Stapel kent. Het eerste scherm toont nu het land waar je bent, de landen waarvoor je al winkels hebt en de buurlanden; de rest staat achter Meer landen, met een zoekveld dat een landnaam vindt in jouw taal, in het Engels en in de taal van het land zelf.

Bijwerken ging altijd al alleen over wifi, maar dat stond nergens als keuze. Nu staat het in Instellingen als een schakelaar die uit staat: laat je hem uit, dan wordt er niets geweigerd, de download wacht gewoon op wifi. Één land loopt in de tientallen megabytes, dus dat is een keuze die je zelf hoort te maken.

Het ziet er nu uit als een app

Stapel had geen type- en vormsysteem, en dat zag je. Dat is er nu, en daarmee zijn het kaartscherm, de tegels, de lege schermen en het aankomstscherm opnieuw gedaan. Op de Winkels-lijst staan de merktekens van de keten in plaats van overal hetzelfde blauwe vierkant. Zoeken vindt nu ook op de naam van de keten en op de laatste vier cijfers van de code.

Er is ook beweging en trilling bijgekomen, maar zo min mogelijk: een korte trilling als een scan lukt, als je iets opslaat en als je een favoriet aanzet, en een langere voordat je een kaart weggooit. Zet je in Android de animaties uit, dan speelt Stapel er geen enkele.

Het merk van een kaart kon je alleen bij het toevoegen kiezen. Nu kun je het bij het bewerken ook veranderen of weghalen, en het scherm zegt erbij wat dat betekent: zonder merk let aankomst voor die kaart op geen enkele winkel.

0.7.2 Gesloten test

Alleen voor testers · drie dingen die stil misgingen

"Nu bijwerken" antwoordde vaak met "Bijwerken geweigerd, de vorige winkellijst blijft staan". Dat is woord voor woord de zin die je krijgt als een gedownload bestand niet klopt, en er was niets mis. De meegeleverde Nederlandse lijst heeft nog geen kenmerk om mee te vragen of er iets veranderd is, dus haalt de telefoon het hele bestand op en vergelijkt daarna pas de versie. Was die gelijk, dan viel er niets te installeren, en dat werd gemeld alsof het geweigerd was. Er staat nu dat de lijst al de nieuwste versie was. Eén land dat al bij was verborg bovendien het nieuws van elk ander land.

Een winkel vastzetten die niet werd opgeslagen

Zei je ja op de vraag of Stapel een winkel bij je kaart mocht onthouden, dan verdween het venster en werd het opslaan op dat moment tegelijk afgebroken. Of het schrijven het haalde, hing van de timing af, en haalde het het niet, dan kwam er geen melding. Het opslaan hangt nu aan het scherm eronder, dat blijft staan.

Een streepjescode die niet te tekenen was

Op het scherm dat verschijnt als je bij een winkel aankomt, stond bij zo'n kaart altijd een leeg wit vlak boven de cijfers. Het scherm kon niet zeggen dat de code niet te tekenen was, want "nog bezig" en "gaat niet lukken" zagen er hetzelfde uit. Nu staat er dezelfde uitleg die het kaartscherm al gaf.

0.7.1 Gesloten test

Alleen voor testers · ruimte vrijmaken met bijwerken uit

Wat 0.7.0 bij het nalopen opleverde. Zet je bijwerken uit, dan gaan de schakelaars per land op slot, en de knop "Opschonen" stond alleen bij Nederland. Wie Duitsland had gedownload en daarna bijwerken uitzette, hield bijna zestigduizend winkels op de telefoon zonder er nog iets aan te kunnen doen. De knop staat nu bij Nederland, en bij elk ander land dat winkels op de telefoon heeft zolang bijwerken uit staat.

Een zin die niet meer klopte

Bij die knop hoort een bevestiging. De tekst voor andere landen dan Nederland bestond al, en tot en met 0.6.0 was hij ook gewoon te zien: de knop stond toen nog bij elk land. In 0.7.0 verdween hij overal behalve bij Nederland. Nu komt hij terug, maar alleen met bijwerken uit, en daar klopte hij niet meer voor: er stond dat de winkels bij de eerstvolgende keer bijwerken op wifi terugkomen, en die keer komt dan niet. De tekst is in alle acht de talen herschreven.

Een land kwijtraken door weg te lopen

Opschonen wiste eerst de winkels en schreef daarna pas op dat het land er niet meer stond. Liep je tijdens het wissen van het scherm weg, dan gebeurde alleen het eerste. Het land was leeg terwijl Stapel dacht dat het bij was, en kwam daar nooit meer uit. De twee stappen staan nu andersom, zodat de eerstvolgende keer bijwerken het rechtzet.

0.7.0 Gesloten test

Alleen voor testers · elk merk een logo

Deze versie gaat vooral over de twee lijsten die de app van buiten haalt: welke merken Stapel kent, en waar hun winkels staan. In 0.6.0 werkten die lijsten zichzelf voor het eerst bij, en dat maakte meteen zichtbaar wat er in stond. Bij 44 van de 230 merken stond geen logo maar een gekleurde letter. In de winkellijst stond een tankstation twee keer, en de winkel bij datzelfde tankstation stond er juist helemaal niet in. Daarnaast kun je nu zelf kiezen hoe ver de winkellijst kijkt, en leest een telefoon die in mijlen rekent voortaan ook mijlen.

Zes kaarten in een raster, elk in de kleur van haar keten met het logo van die keten linksboven. De kaart Spaarkaart heeft geen keten en draagt een algemeen winkelpictogram.
  1. Een kaart zonder keten houdt een algemeen pictogram en de kleur die je zelf koos.
  2. Elke keten die Stapel kent draagt nu haar eigen logo. Je herkent de kaart aan hoe hij eruitziet, niet aan het lezen van de naam.
De portemonnee met zes kaarten. Zo ziet het er nu uit, opgenomen op 0.9.11.

Elk merk heeft nu een logo

  • 230 merken, 44 zonder logo. Nu 231 merken en geen enkele zonder. Elk bestand dat meegaat staat met zijn licentie in catalogue/logos/ATTRIBUTION.md; wat daar niet in staat, gaat niet mee.
  • De volgorde waarin een logo wordt gezocht ligt vast: eerst Wikimedia Commons, waar de licentie bij het bestand staat, dan de site van de keten zelf, en pas daarna iets wat met de hand is aangeleverd, en dan alleen als erbij staat waarom het rechtenvrij is.
  • Één rij is weggehaald. AKO bestaat niet meer als winkelketen, dus een kaart aanbieden voor een programma dat nergens meer werkt is geen dienst.
  • Biocoop droeg een jubileumbadge voor veertig jaar. Die badge veroudert, het merkteken eronder niet.

TGJones

  • WHSmith verkocht in 2025 zijn winkels in de hoofdstraat en die heten sindsdien TGJones. De stations en vliegvelden houden de naam WHSmith. Dat zijn nu twee merken in Stapel, want het zijn twee bedrijven.
  • Van de ongeveer 470 TGJones-winkels staan er 216 in de winkellijst. De rest draagt in de openbare kaartgegevens nog de oude naam, omdat iemand ter plaatse het bord moet hebben zien veranderen. Die lijst werkt zichzelf maandelijks bij, dus die winkels komen erin zonder dat er een nieuwe versie van de app voor nodig is.

Twee fouten in de winkellijst

  • Een tankstation stond er twee keer in. In de openbare kaartgegevens is een tankstation vaak twee dingen op bijna dezelfde plek: de pompen, en de shop. Stapel zette er twee spelden op de kaart, een paar meter uit elkaar. Nu wordt een shop binnen 125 meter van de pompen van dezelfde keten als dezelfde winkel gezien.
  • En de shop bij een tankstation stond er juist helemaal niet in. Een winkel kan in de kaartgegevens meer dan één soort tegelijk zijn, gescheiden door een puntkomma: shop=convenience;gas betekent gemakswinkel én tankstation. Stapel las dat als één onbekende soort en gooide de winkel weg. Dat trof 3.372 shops bij tankstations, verdeeld over 50 ketens.
  • Samen maken die twee de lijst korter en tegelijk vollediger. TotalEnergies in Frankrijk ging van iets meer dan een derde van zijn stations naar bijna tweederde. In de Verenigde Staten verdwenen ruim negenduizend dubbele rijen.

Hoe ver “in de buurt” is, kies je nu zelf

De winkellijst keek altijd tien kilometer ver. Dat werkt in Nederland, waar binnen tien kilometer tientallen winkels staan. Het werkt niet in een land waar je overal heen rijdt. Een tester in de Verenigde Staten kreeg een lege lijst: op het platteland van Kansas staat binnen tien kilometer geen enkele winkel van een keten waarvan je een kaart hebt, en binnen vijftig kilometer elf.

In de instellingen staat nu “Wat telt als in de buurt”, met tien, vijfentwintig of vijftig kilometer. Tien blijft de standaard, dus wie niets aanraakt merkt er niets van. Het verandert alleen de lijst: aankomstmeldingen houden hun eigen bereik, want hoeveel plekken je telefoon tegelijk bewaakt is wat ze aan batterij kosten.

Mijlen waar mijlen horen

Stapel schreef elke afstand in kilometers, in alle acht talen, ook op een telefoon in de Verenigde Staten of Groot-Brittannië. Die twee landen zitten sinds 0.6.0 in de app. Een telefoon die in mijlen rekent leest nu mijlen, en voeten voor de laatste meters. De komma in “1,5 km” volgde altijd het Nederlands, op elke telefoon in elke taal; nu volgt hij de taal van de telefoon.

Verder in 0.7.0

  • Giant Food komt erbij, met 320 winkels aan de Amerikaanse oostkust.
  • Drieëndertig kaarten droegen een kleur die niet de kleur van het merk was. Meestal kwam dat aan het licht toen het echte logo ernaast kwam te staan.
  • Drie logo’s waren wit op wit en dus onzichtbaar: U, Globus en JBC. Ze staan nu op de merkkleur, waar ze horen. Voortaan wordt bij elke bouw nagemeten op welk vlak een logo thuishoort.
  • De winkellijst gaat niet meer mee in de back-up van je telefoon. Hij is tientallen megabytes groot en de app haalt hem toch opnieuw op, dus hij hoorde daar nooit te staan.
  • In de instellingen staat elk land nu op één regel in plaats van op drie.
  • Kotlin, Compose en de rest van het gereedschap zijn bijgewerkt, en de laatste zes compilerwaarschuwingen zijn weg. Aan de app verandert dat niets.

0.6.0 Gesloten test

Alleen voor testers · de grens over

Stapel was een Nederlandse app die toevallig ook in België werkte. Deze versie maakt er een app van die in negen landen werkt en acht talen spreekt. De helft van het werk zat in het weghalen van aannames die nergens opgeschreven stonden, omdat ze in Nederland altijd klopten: een postcode had de Nederlandse vorm, een land was één omtrek dus Terschelling lag erbuiten, en een grens bestond niet dus Dover kon zich scherpstellen op Calais.

Negen landen, acht talen

  • Nederland, België, Duitsland, Frankrijk, Spanje, Italië, Portugal, Groot-Brittannië en de Verenigde Staten. Je zet per land aan of je de winkels ervan wilt. Een land dat je niet aanzet kost je niets: geen download, geen ruimte, geen batterij.
  • De Verenigde Staten zijn te groot voor één bestand. Dat land wordt in stukken gepubliceerd en je telefoon haalt alleen de stukken in de buurt op, plus één klein stuk dat elke keten één winkel geeft zodat de app ook werkt voordat je telefoon weet waar hij is.
  • Nederlands, Engels, Duits, Frans, Italiaans, Spaans, Portugees en Braziliaans Portugees. Alle teksten in elke taal, ook de foutmeldingen en de meldingen.

De code van een bon zit achter je vergrendeling

  • Een cadeaubon is geld: wie de code leest, kan hem uitgeven. Een bon is daarom standaard gesloten en een klantenkaart standaard open, en je kunt dat per kaart omzetten.
  • Gesloten betekent niet verborgen. De naam, de kleur, het saldo en de vervaldatum blijven zichtbaar. Alleen de streepjescode en de code in cijfers vragen om je vingerafdruk of pincode.

De lijsten werken zichzelf bij

  • De merkenlijst zat alleen in de app, dus een keten die haar spaarprogramma hernoemde bleef onder de oude naam staan tot er een nieuwe versie in de winkel lag. Zes Nederlandse programma’s zijn in 2025 of 2026 hernoemd. Stapel haalt die lijst nu één keer per maand ondertekend op, langs dezelfde weg als de winkellijst: geen account, geen extra toestemming, geen nieuwe server.
  • Draagt een kaart van jou de oude naam nog, dan gaat die mee. Heb je hem zelf een naam gegeven, dan blijft die staan. Op het scherm Merken staat wanneer jouw lijst voor het laatst is bijgewerkt.
  • De winkellijst kón zichzelf niet bijwerken. De telefoon deed het goede en weigerde een bestand dat niet nieuwer was, maar de kant die publiceert zette het versienummer nooit hoger, dus stond elke gepubliceerde lijst op versie 1. Rechtgezet: de volgende winkellijst is de eerste die je telefoon ook echt installeert.

Verder in 0.6.0

  • Je kunt één kaart aan een andere telefoon geven via een QR-code op je scherm, of als bestand. Dat gaat van telefoon naar telefoon, er komt geen server aan te pas.
  • Een cadeaubon die je als pdf kreeg, importeer je nu zonder hem eerst af te drukken of te fotograferen.
  • Sta je in een straat waar meerdere kaarten werken, dan krijg je één melding in plaats van een melding die steeds van kaart wisselde. Loop je één winkel uit terwijl je nog in een andere staat, dan verdwijnt de melding niet meer.
  • De app beweerde dat aankomstdetectie 1 tot 2 procent per dag kostte. Dat getal was nooit gemeten en staat er niet meer, in geen enkele taal.

0.5.0 Gesloten test

Alleen voor testers · minder vragen stellen

Stapel vroeg te veel. Deze versie beantwoordt op twee plekken zelf wat de app eerder vroeg terwijl hij het al wist: in welke winkel je staat als je scant, en welke kaart je nodig hebt als je naar binnen loopt.

Een deel van wat hieronder staat zit al in 0.4.1, de versie die testers nu hebben. Die release ging over één ding, de scanner die vastliep, en de rest kwam er zonder aankondiging in mee. Daarom staat er hier bij welke versie wat heeft gedaan.

Wat al in 0.4.1 meekwam, zonder dat het ergens stond

  • De eerste keer opstarten vraagt niet meer om locatie, meldingen en aankomstdetectie voordat er één kaart in staat. Aankomstdetectie bied je zelf aan als je hem wilt, en hij staat nog steeds uit tot je hem aanzet.
  • Vier tabbladen zijn er drie geworden en vijf filters zijn er drie. “Bonnen” is nu een filter in je kaartenlijst, met dezelfde vervaldatums en saldo’s als eerst.
  • “Soort” en “Codetype” zijn van het kaartscherm af. Codetype, Kleur en Notitie zitten achter “Meer details” bij toevoegen en bewerken.
  • Een winkel die op de verkeerde plek staat kun je verplaatsen naar waar je staat. Die correctie blijft op je telefoon en overschrijft de oorspronkelijke winkel niet.

Nieuw in 0.5.0

  • Scan je een kaart terwijl je in de winkel staat, dan vult Stapel het merk alvast in en bevestig je met één tik. Alleen bij een keten waarvan de kaart een QR-code is, en waar geen andere bekende winkel in de buurt ligt, bewaart hij hem meteen. Een streepjescode uit het schap nooit: in een supermarkt lijkt die te veel op een klantenkaart. De app vraagt tijdens het scannen nooit om je locatie.
  • Aankomstmeldingen kunnen de streepjescode op je vergrendelscherm zetten, op volle helderheid, zonder te ontgrendelen. Dat staat uit tot je het zelf aanzet.
  • Op drie plekken stond er in woorden bij of iets aan of uit stond, naast een pijltje, een schakelaar of een knop die dat al zei. Die woorden zijn weg. Voorleessoftware hoort de stand nog steeds.

Wat de laatste ronde op een telefoon opleverde

  • Een bon zonder vervaldatum toonde een kalender met “geen vervaldatum” ernaast, en daarnaast nog “onbeperkt geldig”. Nu staat er alleen “onbeperkt geldig”. Met een datum blijft de kalender staan.
  • Vroeg je om een bon en typte je de code daarna zelf in, dan werd het toch een klantenkaart. Nu blijft een bon een bon.
  • “Meer details” sprong bij handmatig toevoegen open zodra je begon te typen. Het blijft nu dicht tot je het zelf opent.
  • De vraag of Stapel de kaart alvast mag klaarzetten zei altijd “Je hebt nu twee kaarten”, ook boven een stapel van negen na het terugzetten van een back-up. Er staat nu het echte aantal.
  • Dichtbij zonder bekende locatie zette onder zijn eigen uitleg ook nog het algemene “niets gevonden”. Dat tweede blok is weg.

En wat de controle voor het uitbrengen daarna nog vond

  • De scanner mocht een kaart meteen bewaren zodra er één bekende keten om je heen stond en de code bij het vastgestelde codetype van dat merk paste. Bij de grootste supermarktketen is dat een gewone streepjescode, en die heeft elk product in het schap ook. Een pak hagelslag kon zo als klantenkaart in je stapel komen. Nu vraagt Stapel het bij zo’n code altijd.
  • Het venster dat vraagt of je een kaart die je al hebt nog eens wilt toevoegen, voegde hem toe als je het wegtikte of op terug drukte. Nu voegen die twee niets toe.
  • Een tweede aankomstmelding liet de kaart van de eerste winkel staan. Nu wisselt hij mee.
  • Op een lichte kaartkleur stond de naam in wit, op het kaartscherm en op het vergrendelscherm. De kleur van de letters volgt nu de kaart.
  • Voorleessoftware las bij “Meer details” nog de oude naam voor. En de privacypagina zei zeven toestemmingen, terwijl er in het scherm van Android tien staan. De pagina noemt nu allebei de aantallen en waar de andere drie vandaan komen.

0.4.1 Gesloten test

Alleen voor testers · scannen werkt nu echt

In de release notes van 0.4.0 staat de zin “Scannen werkt gewoon”. Dat klopte niet. In de versie die testers kregen sloot de app zichzelf zodra je “Kaart scannen” opende. Niet op één telefoon, niet bij één soort kaart: altijd, bij iedereen. Die zin blijft staan waar hij staat; deze release is de correctie.

Wat er mis was

Voordat de app naar Play gaat wordt hij kleiner gemaakt: alles wat nergens gebruikt lijkt te worden gaat eruit. De scannerbibliotheek van Google wordt echter niet op de gewone manier aangeroepen, die zoekt zichzelf op aan de hand van een naam. Het opschoongereedschap kon dat niet zien en haalde een stuk ervan weg. Dit zat niet alleen in 0.4.0, maar in elke versie die ooit naar Play is gegaan. Dat het nooit gemeld is, komt doordat niemand die versies ooit geopend heeft.

Wat eraan gedaan is

  • De scanner wordt met rust gelaten bij het opschonen, en een controle in de bouwstraat laat de bouw mislukken als dit stuk er ooit opnieuw uit verdwijnt.
  • De app kon ook afsluiten als je hem opende via de snelkoppeling “Scannen” of via een melding. Dat hing van de timing af, dus het gebeurde niet altijd, en het raakte ook de melding die je krijgt als je een winkel binnenloopt.

Werk je bij naar 0.4.1, dan kun je gewoon scannen. Kaarten die je met de hand had ingevoerd staan er nog.

0.4.0 Gesloten test

Alleen voor testers · de eerste versie die testers echt krijgen

De vorige versies stonden wel in Play, maar niemand kreeg ze onder ogen. Dit is de eerste release die daadwerkelijk bij testers terechtkomt, en daarom is hij grondiger nagelopen dan de vorige bij elkaar. Er is meer weggehaald dan bijgebouwd.

Wat er weg is

De scannerbibliotheek van Google stuurde uit zichzelf gegevens over je toestel naar een server van Google zodra je de camera opende: merk en model, je provider, je land, je taal en je tijdzone. Dat deed ik niet, maar het gebeurde wel in mijn app, en de privacypagina beweerde ondertussen dat er geen analytics in zat. De officiële manier om dat uit te zetten blijkt bij deze variant niet te werken, dus is het onderdeel dat het versturen regelt uit de app gehaald. Gemeten: daarna wordt er niets meer klaargezet. Scannen werkt gewoon, en een controle in de bouwstraat houdt het eruit.

Wat er nieuw is

  • Een seintje dertig dagen voordat een bon verloopt of een betaald abonnement wordt verlengd, zodat opzeggen mogelijk blijft. Dit staat aan; je kunt het uitzetten.
  • Een winkel die je zelf hebt vastgelegd kun je nu ook weer weghalen of opnieuw vastleggen.
  • Een winkel die niet meer bestaat kun je melden, en die melding kun je terugdraaien als je je vergist. Beide staan bij elkaar onder “Jouw correcties”.

Wat er stuk was

  • Het kleine widget liet nooit een kaart zien. Het toonde alleen iets bij aankomst in een winkel, en aankomstdetectie staat standaard uit, dus in de praktijk bleef het leeg.
  • Twee pictogrammen werden helemaal niet getekend: de map in Instellingen en het greepje om kaarten te slepen. Op een echt toestel waren het lege plekken.
  • Een back-up terugzetten kon meer geheugen vragen dan een goedkope telefoon heeft. Het bestand wordt nu stukje bij beetje gelezen.

Wat er niet klopte op deze website

  • De back-up werd op vier pagina’s “versleuteld” genoemd. Dat is hij niet en is hij nooit geweest: het is gewone JSON, expres, zodat je hem over tien jaar nog kunt openen. Het back-upscherm in de app zei dat al wel gewoon.
  • De functiepagina zei dat er geen merklogo’s in de app zitten. Er zitten er 119 in, ze staan aan, en ze komen van Wikimedia Commons onder vrije licenties.
  • De privacypagina noemde foto’s van je kaart als opgeslagen gegeven. Die functie bestaat niet.

0.3.0 Gesloten test

Alleen voor testers · nog niet openbaar

Stapel kende tot nu toe alleen Nederlandse winkels. Wie in België tankt of in Duitsland boodschappen doet, had niets aan de winkellijst. Nu kent Stapel er zes landen bij, en je kiest zelf welke je downloadt.

Wat er nieuw is

  • Winkels in België, Duitsland, Frankrijk, Spanje, Italië en Portugal. Samen ruim 164.000 winkels, naast de 9.152 Nederlandse die al in de app zitten.
  • 130 buitenlandse spaarprogramma’s erbij, van Colruyt Xtra en PAYBACK tot Cartão Continente. Waar één kaart bij meerdere ketens werkt, weet Stapel dat: de Xtra-kaart geldt bij Colruyt, OKay, Bio-Planet, Spar, Dreamland en DATS 24.
  • Je kiest per land of je die winkels wilt. Alleen Nederland staat aan; de rest download je zelf, alleen op wifi.
  • Kom je binnen twintig kilometer van een land dat je niet hebt gekozen, dan biedt Stapel aan het alsnog te downloaden. Dit staat uit, en gaat alleen aan als je het zelf aanzet.
  • Een land dat je niet meer nodig hebt, gooi je er weer uit. Wat dat aan ruimte scheelt, staat erbij.
  • 150 van de 179 ketens hebben nu hun eigen logo op de kaart, in plaats van het symbool voor het soort winkel. Ze zitten in de app zelf, dus er wordt niets opgehaald om ze te laten zien. Onder Instellingen staat per logo waar het vandaan komt en onder welke licentie het valt.

Wat je niet merkt, en zo hoort

  • De app blijft Nederlands. Dit is voor Nederlanders die op reis zijn of in het buitenland wonen, niet een vertaalde app voor het buitenland.
  • Stapel vraagt nog steeds nergens om een account, en stuurt nog steeds niets over jou weg. Het downloaden van een land is een gewoon bestand ophalen, zonder dat er iets over jou meegaat.
  • De grenscontrole gebeurt op je telefoon en alleen terwijl de app openstaat. Geen achtergrondlocatie, geen nieuwe rechten.

0.2.0 Gesloten test

Alleen voor testers · nog niet openbaar

Tot nu toe kon een kaart alleen de app in via de camera, en eenmaal binnen stond alles vast. Allebei niet meer.

Wat er nieuw is

  • Een kaart zelf intypen. Voor de kaart die te versleten is om te scannen, de code die te klein gedrukt staat, of het nummer dat je ergens hebt opgeschreven. Typ je een keten die Stapel kent, dan staan de kleur, het logo en het codetype er meteen bij.
  • Een kaart bewerken. Het potlood op de kaart opent naam, soort, code, codetype, kleur, notitie en de velden die bij een bon of lidmaatschap horen.
  • Een code die niet te tekenen is, kun je niet opslaan. Stapel zegt wat er mis is: “EAN-13 heeft 13 cijfers, je typte er 11.” Een kaart die niets laat zien, faalt bij de kassa met de rij achter je.

Wat er is gerepareerd

  • Tikken op een aankomstmelding sloot de app af in plaats van de kaart te openen.

0.1.1 Gesloten test

Alleen voor testers · nog niet openbaar

Eén versie na de eerste, en meteen op de functie waar de app om draait.

Wat er is gerepareerd

  • Tikken op een aankomstmelding sloot de app af in plaats van de kaart te openen. De code die op zo'n melding reageert begon te navigeren voordat het scherm waar ze naartoe navigeert bestond. Dat ging goed tot de introductiewizard erbij kwam: sindsdien wacht dat scherm eerst op een instelling die van schijf moet komen, en in dat gaatje van een fractie van een seconde liep elke koude start vanaf een melding vast.

Wat er niet veranderd is

  • Verder niets. Geen nieuwe functies, geen nieuwe rechten, geen wijziging aan je kaarten.

0.1.0 Gesloten test

Alleen voor testers · vervangen door 0.1.1

De eerste regel van het logboek staat er met opzet voordat er iets uit te brengen valt.

Wat er staat

  • De kaartopslag op het toestel: klantenkaarten, cadeaubonnen en lidmaatschappen, met mappen en een eigen volgorde. Kaarten sleep je naar een andere plek of map.
  • Streepjescodes tekenen op het toestel, met een controle op de controlecijfers. Een EAN-13 met een fout cijfer wordt geweigerd in plaats van scheef getekend, bij het tekenen en bij het importeren.
  • De kaartenlijst en het kaartscherm, met een liggende weergave voor aan de kassa.
  • Scannen met de camera, met herkenning van de keten.
  • Importeren uit Catima en uit Apple Wallet, en een eigen back-up die je zelf wegschrijft en weer terugzet.
  • Aankomstdetectie met meldingen als je bij een winkel staat, en winkels die je kunt vastzetten.
  • Twee widgets, een tegel in de snelle instellingen en snelkoppelingen onder het app-icoon.
  • De winkeldatabase: 9.153 winkels van 36 ketens uit OpenStreetMap, gecontroleerd tegen gepubliceerde aantallen, ondertekend en byte-voor-byte reproduceerbaar. Cijfers per keten staan op de winkeldatapagina.
  • De maandelijkse synchronisatie van die winkellijst.
  • De merkencatalogus: 49 Nederlandse ketens onderzocht, 39 met een spaar- of lidmaatschapsprogramma, 43 met een logo.

Wat er nog niet staat

  • Schermafbeeldingen van de widgets. De schermen van de app zelf staan er echt op; de widgetafbeeldingen op de functiepagina zijn nog schetsen, en dat staat erbij.
  • De app is nog door niemand anders dan de maker gebruikt.

Wat ik al weet dat niet klopt

  • Van 488 winkels ken ik geen straatnaam en van 558 geen postcode. Aankomstdetectie heeft daar geen last van, want die werkt op coördinaten. Zoeken op postcode wel.
  • DA en Pets Place zijn de zwakste ketens in de database: ik vind 71% en 75% van wat er volgens de gepubliceerde cijfers zou moeten staan. Etos zit op 94%, dat scheelt ongeveer 29 winkels.
  • Albert Heijn komt op 118% uit. OpenStreetMap telt vestigingen mee die in de Locatus-lijst als één punt staan. Te veel winkels is hier minder erg dan te weinig, maar het is geen schoon cijfer.
  • Van de 49 ketens in de catalogus is het voorkeursformaat van de streepjescode bij 6 geverifieerd. Bij de andere 43 is het een aanname of een gok. Daarom is het gedegradeerd tot een hint voor met de hand ingetikte nummers; wat de scanner meldt wint altijd.

In de Play Store

Stapel staat in de Play Store. Gratis, zonder account, en je hoeft nergens voor op een lijst te staan.