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.

  1. Bedrijfsportaal voor een autobedrijf

    In productie

    TypeScript / Next.js / tRPC / Prisma / MySQL / Docker / GitHub Actions

    InboxOfferteWerkbonFactuurBankmatchingBoekhoudingmail en WhatsApp, met AI-conceptenautomatisch gematcht, zonder dubbele boekingenMonteurs klokken in met een ondertekende NFC-tag.21 achtergrondtaken met een lock: nooit dubbel,ook niet tijdens een uitrol.
    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.

    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.

    Lees de case
  2. Fyldd, werkbonnen­platform

    In ontwikkeling, nog niet live

    TypeScript / Expo / Next.js / Fastify / PostgreSQL / drizzle-orm / Docker

    Stappenplan CV onderhoud, 3 van 7 stappen afgerond, volgende stappen vergrendeld
    Handtekening van de klant vastleggen op de werkbon
    Gegenereerde werkbon-PDF met uren, materialen en handtekening
    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.

    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.

    Lees de case
  3. Riha, webshop op alsouq.nl

    Live

    TypeScript / Medusa 2 / PostgreSQL / Next.js / next-intl / Mollie / Docker

    alsouq.nl · productpagina
    Productpagina van een abaya met kleurkeuze
    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.

    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.

    Lees de case
  4. Theorie-oefenapp

    In ontwikkeling, nog niet in de stores

    TypeScript / React Native / Expo / Fastify / PostgreSQL

    Home: level, reeks, dagdoel en de knop Speel
    Uitslag van een ronde: punten, raak, combo en XP
    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.

    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 -l

    Gemeten op 27-10-2026 in de eigen repository.

    Lees de case
  5. Bluetooth-app voor een klant

    Voor een klant

    TypeScript / React Native / Expo / Bluetooth Low Energy / zustand

    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.

    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 -l

    Gemeten op 27-10-2026 in de repository van de app.

    Lees de case
  6. Magazijnsysteem voor een onderdelenhandel

    In productie

    TypeScript / Next.js / drizzle-orm / Bun / MySQL / Docker / GitHub Actions

    WebshopOrdersyncPicklijstFotocontroleLabelPushmeldingmet de onderdelen-API, één werkstroomlabels voor afhalen en voor montage
    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.

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

    Gemeten op 27-10-2026 in de repository van het project.

    Lees de case

Klantsites

Uitgebreide informatieve sites voor klanten: snel, vindbaar en beheerd op eigen infrastructuur.

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

  2. oabeveiliging.nl

    Informatieve site voor een beveiligingsbedrijf: twaalf diensten en een pagina per stad.

    Next.js static export / Tailwind / Base UI

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

De live homepages, vastgelegd op 28-10-2026.

Een opdracht, een team dat versterking zoekt, of een vraag over mijn werk?

info@bitvire.com