Werk
Zes projecten, met wat ze doen, waarmee ze gebouwd zijn en wat ik heb gemeten. Waar een klant anoniem blijft, laat ik een schets zien in plaats van schermen.
Schets in plaats van schermen: de klant blijft anoniem. Offertes, werkbonnen, facturen, planning, een gedeelde inbox en de boekhouding in één systeem. Gebruikt aan de balie, in de werkplaats en door de eigenaar.
Lees de case- datamodellen in het schema
- 158
- testbestanden
- 1.377
Hoe gemeten
grep -c '^model ' prisma/schema.prisma git ls-files | grep -E '\.(test|spec)\.(ts|tsx)$' | wc -l
Gemeten op 27-10-2026.



Workflow, handtekening en de werkbon-PDF die eruit komt. Demo-data. Een werkbonnenplatform dat ik voor een klant bouw, van planning tot factuur: een app voor de monteur, een backoffice voor kantoor en een portaal voor de boekhouder.
Lees de case- tabellen onder Row-Level Security
- 49
- schermen in de mobiele app
- 57
- testbestanden
- 123
Hoe gemeten
grep -c "werkapp_apply_tenant_rls('" werkapp-server/src/db/rls.sql find werkapp-app/src/app -name '*.tsx' ! -name '_layout.tsx' | wc -l git ls-files | grep -cE '\.(test|spec)\.(ts|tsx)$'Gemeten op 27-10-2026 in de eigen repository.
- alsouq.nl · productpagina

De live winkel, vastgelegd op 27-10-2026. Een modest-fashion-webshop voor Nederland en de EU in acht talen, ook in het Arabisch van rechts naar links, met btw-regels en kortingsbeloftes in code.
Lees de case- talen, waaronder Arabisch
- 8
- uitgesloten gebieden bij het afrekenen
- 10
Hoe gemeten
storefront/src/i18n/config.ts EXCLUDED_TERRITORIES in backend/src/lib/excluded-territories.ts
Gemeten op 27-10-2026 in de eigen repository.


Home en de uitslag van een ronde. Demo-data. Oefenen voor het theorie-examen auto als een spel, met een slaagkans die bewust eerlijk blijft. Werkt offline.
Lees de case- vragen, samengevoegd en gecontroleerd
- 2.616
- schermen in de app
- 12
- testcases in app en server
- 566
Hoe gemeten
python3: len(json.load(open('src/data/questions.json'))) find src/app -name '*.tsx' ! -name '_layout.tsx' ! -name '+*' | wc -l grep -rn "it(\|test(" server/test src --include=*.ts --include=*.tsx | wc -lGemeten op 27-10-2026 in de eigen repository.
Elke tik geeft antwoord.
- sent
- superseded
- failed
- busy
- current
- not-connected
Een knop wordt verstuurd, ingehaald door een nieuwere keuze, of afgewezen met een reden. Nooit stil. Een iOS- en Android-app die lichtcontrollers via Bluetooth Low Energy bedient, voor eindgebruikers die niet technisch zijn.
Lees de case- testcases
- 1.755
- regels testcode, tegen 27.114 regels app
- 33.977
- talen, waaronder Arabisch
- 9
Hoe gemeten
git ls-files 'src/__tests__/*.test.ts*' | xargs grep -cE '^\s*(it|test)\(' (opgeteld) git ls-files 'src/__tests__/*' | xargs wc -l git ls-files 'src/*.ts' 'src/*.tsx' 'app/*.ts' 'app/*.tsx' plugins | grep -v __tests__ | xargs wc -l ls src/i18n/locales | wc -lGemeten op 27-10-2026 in de repository van de app.
Schets in plaats van schermen: de klant blijft anoniem. Orders uit webshop, marktplaats en balie in één werkstroom, van picken tot verzenden. Ik heb het opgezet en het eerste jaar alleen gebouwd; daarna is het samen met een collega doorontwikkeld.
Lees de case- eerste commit: de repository zette ik op
- 01-02-2025
- tabellen in het huidige schema
- 31
Hoe gemeten
git log --reverse --format=%ad --date=short | head -1 grep -c 'mysqlTable(' app/server/db/schema.tsGemeten op 27-10-2026 in de repository van het project.
Klantsites
Uitgebreide informatieve sites voor klanten: snel, vindbaar en beheerd op eigen infrastructuur.
- superreiniging.nl

Informatieve site voor een reinigingsbedrijf: 63 pagina's, een online afspraakwizard en een agenda voor de beheerder.
Next.js / PostgreSQL / drizzle-orm / Tailwind / Docker
- oabeveiliging.nl

Informatieve site voor een beveiligingsbedrijf: twaalf diensten en een pagina per stad.
Next.js static export / Tailwind / Base UI
- loodgietervoorjou.nl

Merk- en leadsite voor een loodgieter in Rotterdam en omgeving, met een klusformulier dat leads opslaat.
Next.js / PostgreSQL / drizzle-orm / Tailwind / Docker
Een opdracht, een team dat versterking zoekt, of een vraag over mijn werk?
info@bitvire.com