Work

Six projects: what they do, what they are built with and what I measured. Where a client stays anonymous, I show a sketch instead of screens.

  1. Business portal for a car repair business

    In production

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

    InboxQuoteWork orderInvoiceBank matchingAccountingmail and WhatsApp, with AI draftsmatched automatically, never booked twiceMechanics clock in with a signed NFC tag.21 background jobs behind a lock: never twice,not even during a release.
    A sketch instead of screens: the client stays anonymous.

    Quotes, work orders, invoices, planning, a shared inbox and the accounting in one system. Used at the front desk, in the workshop and by the owner.

    data models in the schema
    158
    test files
    1,377
    How measured
    grep -c '^model ' prisma/schema.prisma
    git ls-files | grep -E '\.(test|spec)\.(ts|tsx)$' | wc -l

    Measured on 27-10-2026.

    Read the case
  2. Fyldd, field service platform

    In development, not live yet

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

    Step plan for boiler maintenance, 3 of 7 steps done, the next steps locked
    Capturing the customer's signature on the work order
    Generated work order PDF with hours, materials and signature
    Workflow, signature and the work order PDF that comes out of it. Demo data.

    A field service platform I am building for a client, from planning to invoice: an app for the technician, a back office for the office and a portal for the accountant.

    tables under Row-Level Security
    49
    screens in the mobile app
    57
    test files
    123
    How measured
    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)$'

    Measured on 27-10-2026 in the project's own repository.

    Read the case
  3. Riha, webshop on alsouq.nl

    Live

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

    alsouq.nl · product page
    Product page of an abaya with colour choice
    The live shop, captured on 27-10-2026.

    A modest fashion webshop for the Netherlands and the EU in eight languages, Arabic right to left among them, with VAT rules and discount promises in code.

    languages, Arabic among them
    8
    territories excluded at checkout
    10
    How measured
    storefront/src/i18n/config.ts
    EXCLUDED_TERRITORIES in backend/src/lib/excluded-territories.ts

    Measured on 27-10-2026 in the project's own repository.

    Read the case
  4. Driving theory practice app

    In development, not in the stores yet

    TypeScript / React Native / Expo / Fastify / PostgreSQL

    Home: level, streak, daily goal and the Play button
    Result of a round: points, hits, combo and XP
    Home and the result of a round. Demo data.

    Practising for the car theory exam as a game, with a pass chance that stays honest on purpose. Works offline.

    questions, merged and checked
    2,616
    screens in the app
    12
    test cases in app and server
    566
    How measured
    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

    Measured on 27-10-2026 in the project's own repository.

    Read the case
  5. Bluetooth app for a client

    For a client

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

    Every tap gets an answer.

    • sent
    • superseded
    • failed
    • busy
    • current
    • not-connected
    A button is sent, overtaken by a newer choice, or refused with a reason. Never silent.

    An iOS and Android app that controls lighting controllers over Bluetooth Low Energy, for end users who are not technical.

    test cases
    1,755
    lines of test code, against 27,114 lines of app
    33,977
    languages, Arabic among them
    9
    How measured
    git ls-files 'src/__tests__/*.test.ts*' | xargs grep -cE '^\s*(it|test)\(' (summed)
    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

    Measured on 27-10-2026 in the app's repository.

    Read the case
  6. Warehouse system for a parts trader

    In production

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

    WebshopOrder syncPicking listPhoto checkLabelPush messagewith the parts API, one workflowlabels for pickup and for fitting
    A sketch instead of screens: the client stays anonymous.

    Orders from webshop, marketplace and counter in one workflow, from picking to shipping. I set it up and built it alone in its first year; after that it was developed further together with a colleague.

    first commit: I set up the repository
    01-02-2025
    tables in the current schema
    31
    How measured
    git log --reverse --format=%ad --date=short | head -1
    grep -c 'mysqlTable(' app/server/db/schema.ts

    Measured on 27-10-2026 in the project's repository.

    Read the case

Client sites

Extensive informational sites for clients: fast, findable and hosted on infrastructure I run.

  1. superreiniging.nl

    An informational site for a cleaning company: 63 pages, an online booking wizard and a calendar for the owner.

    Next.js / PostgreSQL / drizzle-orm / Tailwind / Docker

  2. oabeveiliging.nl

    An informational site for a security company: twelve services and a page per city.

    Next.js static export / Tailwind / Base UI

  3. loodgietervoorjou.nl

    A brand and lead site for a plumber in the Rotterdam area, with a job form that stores the leads.

    Next.js / PostgreSQL / drizzle-orm / Tailwind / Docker

The live homepages, captured on 28-10-2026.

An assignment, a team that needs another engineer, or a question about my work?

info@bitvire.com