Een webshop in acht talen die zijn beloftes in code afdwingt
Riha is de hijablijn van alsouq.nl, een modest-fashion-webshop voor Nederland en de EU, gebouwd op Medusa 2.0 met een eigen Next.js-storefront en betalingen via Mollie.


Het probleem
De doelgroep, moslimvrouwen in Nederland en de rest van de EU, kent de grote merken en haakt af op goedkoop ogende shops die meer beloven dan ze waarmaken.
Wat ik bouwde
Een merkwinkel op een headless Medusa 2.0-backend met eigen workflows en een eigen module, en een op maat gebouwde Next.js-storefront in plaats van de standaard-starter. Verzending naar 25 EU-lidstaten met één btw-inclusieve prijs per land.
Juridische en commerciële regels, zoals btw-gebieden, kortingsbeloftes en kleurclaims, staan als code en tests vast in plaats van als tekst op een pagina.
Wat er technisch toe doet
Afrekenen weigert tien gebieden
Gebieden zoals de Canarische Eilanden en Åland horen bij een EU-land, maar vallen buiten het btw-gebied: de btw-inclusieve prijs klopt daar niet. De winkel weigert er af te rekenen bij het aanmaken, wijzigen en afronden van de winkelwagen, ook als een adres in delen binnenkomt.
Een e-mailwijziging die niet half kan slagen
Het wijzigen van het login-adres is een workflow met compensatie. Alleen de hash van het token staat in de database en het token wordt verbruikt voordat het account verhuist, dus twee klikken op dezelfde link kunnen niet allebei slagen. Gaat er verderop iets mis, dan krijgt de klant het token terug.
Acht talen, Arabisch van rechts naar links
Nederlands, Engels, Arabisch, Frans, Duits, Zweeds, Spaans en Italiaans. De code scheidt drie begrippen: de standaardtaal, de brontaal van de catalogus en de juridisch bindende taal voor voorwaarden en privacy.
Kleurclaims met bewijs
Elke kleur in de catalogus draagt een bewijssoort: gemeten van een productfoto, zelf geverfd of alleen een gedrukte naam. Een kleur die echt verkocht wordt mag niet alleen op een naam rusten, en een test bewaakt dat de lijst met uitzonderingen alleen kan krimpen.
Winkelconfiguratie als code
Regio's, btw, voorraadlocatie en verzendopties staan in één script dat de database bij elke run naar die toestand brengt, met eigen integratietests. Niets is met de hand in een admin geklikt.
Een welkomstkorting die dichtvalt
De welkomstaanbieding spiegelt precies één echte promotie in de backend. Ontbreekt of verloopt een waarde, dan toont de winkel niets: een korting aankondigen die de kassa weigert is een misleidende handelspraktijk (art. 6:193c BW).
Meetstaat
Geteld in de repository, niet geschat. Het aantal leveringslanden komt uit de deploydocumentatie.
- talen, waaronder Arabisch
- 8
- EU-lidstaten als leveringsland
- 25
- uitgesloten gebieden bij het afrekenen
- 10
- pagina's in de storefront
- 33
- testbestanden
- 26
Hoe gemeten
storefront/src/i18n/config.ts docs/DEPLOY-STATE.md EXCLUDED_TERRITORIES in backend/src/lib/excluded-territories.ts git ls-files 'storefront/src/app/*page.tsx' | wc -l git ls-files | grep -E '\.(test|spec)\.tsx?$' | wc -l
Gemeten op 27-10-2026 in de eigen repository.
Schermen



Iets vergelijkbaars nodig, of een team dat zo'n systeem bouwt?
info@bitvire.com