Live

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.

Rol
Alles, alleen gebouwd
Periode
Mei 2026 tot nu
Stack
TypeScript, Medusa 2, PostgreSQL, Next.js, next-intl, Mollie, Docker
Status
Live
alsouq.nl · home
Homepage van alsouq.nl op een laptop
Dezelfde homepage op een telefoon
De live winkel, vastgelegd op 27-10-2026.

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

Iets vergelijkbaars nodig, of een team dat zo'n systeem bouwt?

info@bitvire.com