Dertien vlakken, één set rijen.
De landingspagina toont er vijf als tabbladen op één blad, en dat is het argument en niet de opmaak: de deurlijst, de mandjes, de afrekening en de rapporten zijn dezelfde rijen, anders geteld, dus ze kunnen elkaar niet tegenspreken. Hier staat wat elk vlak doet, en waar het ertoe doet, waar het ophoudt.
Het verkoopt ook dingen in dozen. Een evenement, een menukaart en een winkel draaien op dezelfde tabellen, want het verschil tussen een ticket en een zending blijkt vrijwel volledig presentatie te zijn: de een vraagt een leeftijd aan de deur, de ander een adres, en de derde opent met een foto. Alles hieronder geldt voor alle drie, tenzij er iets anders staat.
Evenementen en categorieën
Een evenement is een catalogus met een mandje erachter. Categorieën zijn producten in die catalogus met een eigen prijs, oplage en verkoopvenster: daarom heeft een uitverkochte early bird geen ander soort object nodig dan een tafel van tweeduizend euro.
Drie standen, geen vinkje. Uit betekent dat de link 404 teruggeeft. Concept betekent dat iedereen met de link mag kijken en niemand kan kopen, want naar een pagina moet gekeken worden voordat hij gepubliceerd wordt, en kijken naar een pagina betekent hem laden. Live betekent verkopen. De weigering is dubbel uitgevoerd: een met de hand geschreven verzoek om uit een concept te kopen krijgt hetzelfde antwoord als de widget.
| Categorie | Uitgegeven | Verkocht | Prijs | Stand |
|---|---|---|---|---|
| Early bird | 300 | 300 / 300 | € 25,00 | Uitverkocht |
| Voorverkoop | 400 | 392 / 400 | € 32,00 | In verkoop |
| Laatste ronde | 200 | 186 / 200 | € 38,00 | Nog 14 |
| Late ronde | 100 | — | € 44,00 | Opent 20.00 |
| Gastenlijst | 60 | 48 / 60 | € 0,00 | Geen fee |
Extra's, maten en tafels
“Groot”, “zonder brood”, “extra kaas”, “+1 drankje bij het ticket” zijn vier namen voor één vorm: een kleine beslissing over één regel, die de prijs kan verschuiven en die de keuken of de deur moet weten. Een keuze hoort dus bij de regel en niet bij het product: twee burgers in één mandje, één met kaas en één zonder, zijn twee verschillende dingen tegen twee verschillende prijzen.
Een menukaart herhaalt zichzelf, dus een groep keuzes hoort bij de verkoop en wordt gekoppeld aan zoveel producten als hem willen. “Kies een maat” per product opnieuw intypen is hoe een kaart eindigt met drie verschillende prijzen voor groot.
| Groep | Leest als | Getekend als | Voorraad |
|---|---|---|---|
| Tafelgrootte | Kies er precies één | Keuzerondje | — |
| Garderobe | Hooguit één | Keuzerondje, wisbaar | 400 |
| Add-ons | Zoveel je wilt | Vinkjes | — |
| Welkomstdrankjes | Kies er twee | Vinkjes | 200 |
De kassa
Al het andere in dit systeem is gewoon aanmaken-lezen-wijzigen-verwijderen. De kassa is de enige samengestelde handeling, en die gebeurt volledig of helemaal niet: het mandje wordt vergrendeld, een verlopen reservering wordt geweigerd, de voorwaarden worden gelezen, voorraad wordt afgeboekt, de korting wordt ingewisseld, btw wordt over het bedrag ná korting berekend, het bestelnummer wordt aangemaakt en de grootboekregels worden weggeschreven: in één transactie.
Een client mag een aantal voorstellen. Nooit een bedrag. Prijzen, kosten en btw-tarieven worden op de regel gekopieerd op het moment dat die wordt vastgehouden, zodat een prijswijziging van morgen niet kan herschrijven wat iemand vandaag heeft afgesproken.
| Tijd | Wat er gebeurde | Erin | Waarde |
|---|---|---|---|
| 10.54.40 | geopend | — | € 0,00 |
| 10.54.41 | toegevoegd: 3 × Voorverkoop | 3 | € 179,70 |
| 10.55.28 | betaling gestart | 3 | € 179,70 |
| 10.56.04 | betaling mislukt: kaart geweigerd | 3 | € 179,70 |
| 10.56.26 | — volgend mandje — | — | — |
| 10.56.32 | gekocht | 2 | € 119,80 |
Tickets en de deur
Er is geen tickettabel. Een regel met aantal vier is vier tickets, en elk daarvan krijgt een eigen code en een eigen vierkant, zodat een gezelschap er ieder één kan doorsturen en apart kan aankomen, en in elke doorgestuurde mail de stoel staat waar de houder ervan zit.
De laatste tekens van een ticketcode zijn een handtekening, geen controlegetal. Zonder dat zou de nummering elk ticket op een bestelling afleidbaar maken uit elk ander: een gefotografeerd vierkant zou iemand ook de codes van de rest van het gezelschap geven, en de eerste die bij de deur staat zou op andermans ticket naar binnen lopen.
Eén bestelling, vier tickets, drie aankomsten
Bestelling
K7M2-9PQR
- 1K7M2-9PQR-1H4TC320.14
- 2K7M2-9PQR-2Q9MC420.14
- 3K7M2-9PQR-3H4TC521.06
- 4K7M2-9PQR-4X2PC6Verwacht
Het bestelnummer staat bovenaan de mail en is de enige referentie die iemand citeert. De gemarkeerde drie tekens zijn de handtekening, en die houden tegen dat een gefotografeerd vierkant de rest van het gezelschap weggeeft.
De bevestiging, en de code erop
Er is geen aparte ticketmail. De bevestiging is wat iemand in een deuropening omhooghoudt, dus is hij geordend naar wat iemand in een rij het eerst nodig heeft: de code en zijn vierkant, dan waar en wanneer, dan wat ze kochten en wat het kostte. Een bon wordt één keer van boven naar beneden gelezen. Een ticket wordt opnieuw geopend onder een zaklamp, met iemand achter je die staat te wachten.
De code is acht tekens uit een alfabet waar de verwarrende uit gehaald zijn. Geen nul tegenover O, geen één tegenover I of L, want dit wordt over een toog heen voorgelezen en ingetypt door iemand die staat. Streepjes en hoofdletters worden er bij binnenkomst afgehaald, zodat een slordig ingetypte code de bestelling nog steeds vindt.
De dertig die een bestelnummer mag gebruiken
De vijf die er bewust niet in zitten
Om die vijf gaat het. Nul en O zijn hetzelfde teken voor wie een telefoonscherm voorleest aan een collega bij de deur. Eén, I en L zijn hetzelfde teken voor wie het intypt. Ze weglaten kost een beetje entropie en haalt een hele categorie supportgesprekken weg.
Mandjes, geteld als reizen
Een mandje is een sessie, en een sessie is geen verhaal. Wie een mandje vult, wegloopt en twee dagen later terugkomt om te kopen is als drie losse rijen twee keer afhaken en een verkoop: drie getallen, alle drie misleidend. Aan elkaar geregen is het één klant die drie bezoeken nodig had om te beslissen, en dat is een volstrekt ander feit over de zaak.
Iets dat later alsnog betaald is, is geen verlies, en wie dezelfde twee tickets twee keer neerlegde heeft je één verkoop gekost en geen twee. Wat verloren ging is daarom de grootste poging over het hele verhaal, nooit de som van de pogingen, anders lezen de hardnekkigste kopers als de duurste.
Waar 1.867 mandjes strandden, en wat elke stap kostte
Mandje geopend
1.867
Voorraad vastgehouden · 263 legden nooit iets in
1.604
Bij betalen gekomen · 424 stopten hier, met € 6.180 erin
1.180
Gekocht
1.102
De breedste val is de enige regel waar iets over te zeggen valt, en dus de enige die in de merkkleur staat. Aantallen en geld komen bewust samen: "je verloor 22,7% van de mandjes tussen het mandje en de kaart" is een statistiek, en "met € 6.180 erin" is een beslissing. Elke balk wordt gemeten tegen de top van de trechter en niet tegen de regel erboven, zodat je de vorm van het verlies ziet in plaats van vier regels die er altijd hetzelfde uitzien.
Vorig jaar naar binnen krijgen
Een gedropte spreadsheet, gelezen door een model, toegepast door een mens. Er wordt niets aangemaakt tot iemand op Goedkeuren drukt, en wat Goedkeuren aanmaakt is een inactieve verkoop, dus er staat nog een tweede bewuste stap tussen jou en iets dat te koop is. Tussen een rommelige export en een live evenement staan twee beslissingen, en allebei zijn ze van jou.
Elke waarde die het model nergens aan kon koppelen komt leeg en gemarkeerd binnen, nooit ingevuld met iets aannemelijks. Bij elke voorgestelde waarde staat de broncel ernaast. Een prijs die niemand kan herleiden is een terugbetaling die staat te wachten, dus vraagt het scherm liever dan dat het gokt.
| Veld | Voorgesteld | Gelezen uit |
|---|---|---|
| Naam | Kollektiv Nacht | Blad 1, B4 |
| Deuren | 14 mrt, 20.00 | Blad 1, C4 |
| Capaciteit | 1.000 | Blad 1, E4 |
| Prijs voorverkoop | Leeg, vragen | Nergens stond een prijs |
| Zaal | Maassilo | Gevonden in de zalenlijst |
| Wat het aanmaakt | Inactieve verkoop | Een tweede stap voor de verkoop |
Geld
De betaling wordt aangemaakt op je eigen account bij je eigen betaalprovider, het geld komt op jouw saldo, en onze fee gaat daar vanaf. Jouw bedrijf staat op het afschrift van de koper, en dat is wat iemand die naar “de betaalpagina van de verkoper” wordt gestuurd ook verwacht te zien. Wij hebben één geheime sleutel en dat is die van het platform; er staat nergens in dit systeem een inloggegeven van jou.
Terugkomen van de betaalpagina is geen bewijs van betaling. Dat adres is een gewone link die iedereen kan intypen, dus er wordt bij aankomst niets afgerond. Het dekt ook de koper die betaalt en het tabblad sluit: die krijgt zijn bestelling en zijn bon gewoon, want niets daarvan hing af van een browser die terugkwam.
| Stand | Wat het betekent | Het mandje |
|---|---|---|
| Open | Aangemaakt; ze zijn nog niet klaar | Vastgehouden |
| Voltooid | Betaald, en erachter afgerond | Besteld |
| Verlopen | Onbetaald gesloten. Niemand is geweigerd | Krijgt zijn eigen klok terug |
| Geannuleerd | Ze kwamen terug en annuleerden: de enige die zij kozen | Ongemoeid |
| Mislukt | Betaald, en de afronding weigerde het. Volledig terugbetaald | Ongemoeid |
Afrekening, en het grootboek eronder
Eén onveranderlijke regel per regel geld die bewoog. Alles wat een cijfer meldt leest hem, en niets anders doet dat. Een terugbetaling is een negatieve regel, zodat elk rapport een gewone optelling is en geen enkele query hoeft te onthouden dat er iets af moet: precies de fout waarvoor het gebouwd is: terugbetalingen werden vroeger als positieve regels van een andere soort weggeschreven, en een tot nul terugbetaalde verkoop meldde nog steeds zijn volledige omzet.
Alleen toevoegen, en dat wordt afgedwongen en niet afgesproken. Het is de enige tabel hier die niet gewijzigd of verwijderd kan worden, en dat is juist wat de andere tabellen wél bewerkbaar laat zijn. Een correctie is een compenserende regel.
| Regel | Aantal | Verkoop | Kortingen | Netto verkoop |
|---|---|---|---|---|
| Early bird | 300 | € 7.500,00 | € 0,00 | € 7.500,00 |
| Voorverkoop | 392 | € 12.544,00 | € 384,00 | € 12.160,00 |
| Laatste ronde | 186 | € 7.068,00 | € 0,00 | € 7.068,00 |
| Tafels en extra's | 5 | € 9.640,00 | € 0,00 | € 9.640,00 |
| Je betaalprovider, over 612 kaartbetalingen | — | — | — | −€ 698,52 |
| Komt op je eigen saldo | 931 | € 36.752,00 | € 384,00 | € 35.669,48 |
Rapporten, en het vak waaruit je ze opvraagt
Een gesloten set rapporten, en één vak dat ertussen kiest. Het model leest de vraag en kiest welk rapport gedraaid wordt, op welke verkoop, over hoeveel dagen, en zet daarna de uitkomende cijfers in een zin nadat het uitsluitend die cijfers te zien heeft gekregen. Elk getal in die zin wordt er vervolgens tegenaan gehouden, en een zin met een getal dat er niet tussen staat gaat de prullenbak in: je krijgt de cijfers dan gewoon zo, en de kaart zegt dat.
In de bevindingen zit helemaal geen model. Patronen die het waard zijn om iets mee te doen zijn opmaakregels over benoemde queries, dus twee mensen die ze op dezelfde data draaien krijgen dezelfde woorden, en elke detector heeft een ondergrens waaronder hij niets zegt in plaats van gokt.
| Rapport | Beantwoordt |
|---|---|
| Omzet | Wat een verkoop heeft opgehaald, per valuta, na terugbetalingen |
| Methoden | Hoe het geld binnenkwam, en welk aandeel elk daarvan nam |
| Trechter | Waar mandjes stranden: geopend, voorraad vastgehouden, bij betalen gekomen, gekocht |
| Publiek · Herkomst | Wie er kocht, en de landen en steden die ze opgaven |
| Verliezen · Gemiste verkopen | Wat er wordt opgegeven, wat erin zat, en of het erger wordt |
| Beslistempo · Timing · Producten | Hoe lang mensen erover deden, wanneer ze kochten, welke categorieën teruggelegd worden |
| Dagstand · Live | Vandaag tegen gisteren, en wat er op dit moment in een mandje staat |
| Advies | Patronen om iets mee te doen, met het bewijs achter elk daarvan |
De winkel die je op je eigen site zet
Twee regels HTML zetten de kassa op je pagina. Het is een custom element achter een shadow root, en die grens is de hele bedoeling: jouw stylesheet kan er niet in reiken en de kassa slopen, en de kassa kan er niet uit reiken en jouw site herstijlen. Kleuren komen binnen als gewone CSS-eigenschappen, dus je stijlt hem met een stylesheet in plaats van met kleurcodes in je HTML.
Elke maatbeslissing vraagt de ruimte die hij kreeg, niet het venster. Dat is wat dezelfde build juist maakt in een zijbalk van 380 pixels op een 27-inch scherm én schermvullend op een telefoon: één component die dezelfde vraag twee keer goed beantwoordt, in plaats van twee builds en een omleiding die op de browser afgaat.
| Gegeven | Wat het tekent |
|---|---|
| onder ~48rem | Eén kolom, plakkende actiebalk, mandje als paneel |
| ~48rem en meer | Twee kolommen, mandje altijd in beeld, geen actiebalk |
| ~56rem en meer | Producten ook in twee kolommen |
| Geen eigen site | Een gehoste pagina, artistiek vormgegeven boven de winkel en bewust doodgewoon bij de winkel zelf: niemand vult een kaartnummer in onder schreeuwerige kapitalen |
Het draaien als je eigen platform
Een tenant is tegelijk een white-label omgeving en een operationele eenheid: een franchise, een buitenlandse dochter, een zaalgroep. Hij heeft een eigen naam, logo en basisthema, de identiteit waaruit zijn mail vertrekt, en eigen personeel. Elke afgebakende rij in het systeem krijgt een stempel van de tenant waar hij bij hoort, gezet door de database en niet door de code die hem toevallig schreef.
Het verkeerde soort account zijn en een rij opvragen die je niet mag zien zijn met opzet twee verschillende weigeringen. De eerste zegt dat gewoon; de tweede antwoordt alsof de rij niet bestaat, want een rechtenfout zou bevestigen dat hij er wél is.
| Rol | Bereikt |
|---|---|
| Platformeigenaar | Elke tenant, en de tenants zelf |
| Tenantbeheerder | Eén tenant, alles daarbinnen |
| Organisator | Eén tenant, de eigen rijen daarbinnen |
| Deurpersoneel | Eén tenant, en alleen de verkopen waaraan ze zijn toegewezen |
| Koper | De eigen bestellingen: inclusief alles wat vóór het inloggen gekocht is |
Zaalplannen Pro
Een zaal is één document dat generatoren bewaart in plaats van stoelen: een blok zegt “38 rijen van 26, 50cm uit elkaar, 60cm gebogen, geletterd vanaf de voorkant”. Een kuip met 90.000 stoelen is een paar duizend daarvan, en een paar honderd kilobyte: tegenover een stoelentabel die elke bestelling die ooit geplaatst is in het niet zou laten vallen en alleen bestaat om in één keer opgehaald en getekend te worden.
Wat een stoel kost en of hij vrij is, staat nooit in het plan. Allebei zijn feiten over één avond en niet over de zaal: beschikbaarheid verandert per minuut, en een prijs verschilt tussen een matinee en een zaterdag. Een plan wordt een heel seizoen hergebruikt, dus een prijs erin zou een seizoen lange onwaarheid zijn die pas voor de neus van een koper opduikt.
| Vraagt | Schrijft |
|---|---|
| Waar zitten deze mensen | De stoelen van de bestelling |
| Voor welke stoelen wordt dit ticket verkocht | De stoelenlijst van het product |
| Welke van deze stoelen zijn weg | Helemaal niets |
| Waar wil je zitten | De reserveringen van het mandje: de naad die nog gekoppeld wordt |
Zie het tegen een seizoen van je eigen cijfers.
Dertig minuten. Stuur de export van vorig jaar, dan sturen wij terug wie er opnieuw kocht, wat er te redden viel en wat dat waard was, en hoeveel van die mensen je rechtmatig mag benaderen.
Een rondleiding inplannen De inbouwdocumentatie (EN) Wat het kost