Bitvire · freelance software engineer
I build software that runs in production.
Complete web applications, mobile apps and integrations, from database schema to deploy. On my own, or as an engineer in your team.
- TypeScript
- Next.js
- React Native
- PostgreSQL
- Fastify
- Docker
What you can hire me for
As an engineer in your team, for a complete application, or for the integrations and hardware around it.
Work
What it does, what it is built with, and what I measured. Where a client stays anonymous, a sketch stands in for the screens.



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.
Read the case- 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.
- alsouq.nl · product page

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.
Read the case- 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.


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.
Read the case- 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 -lMeasured on 27-10-2026 in the project's own repository.
Client sites
Extensive informational sites for clients: fast, findable and hosted on infrastructure I run.
- 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
- oabeveiliging.nl

An informational site for a security company: twelve services and a page per city.
Next.js static export / Tailwind / Base UI
- 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
Business portal for a car repair business
Since August 2024 I have been building the portal an automotive company runs its whole day on: quotes, work orders, planning, inbox, accounting and banking. Its schema holds 158 data models.
Read the caseHow I work
- 01
One point of contact, from schema to deploy.
I design the database, build the API and the screens, and put it into production myself.
- 02
I test my own work.
The business portal has 1,377 test files; the Bluetooth app has more test code than production code.
- 03
Rollouts nobody notices.
A new version starts next to the old one and only takes over once the health check reports exactly that version.
- 04
AI-assisted development.
I use AI as a tool alongside my own craft: building faster and testing more widely. Design, code review and responsibility stay with me.
About me
- Education
- Software Engineering (hbo bachelor), The Hague University of Applied Sciences (2025)
- Mbo 4 Application Development
- Company
- Freelance through Bitvire, since 2025
- Languages
- Dutch, English
For clients who stay anonymous
All casesA sketch instead of screens: the client stays anonymous. Business portal for a car repair business
In productionLead developer Since August 2024
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.
TypeScript / Next.js / tRPC / Prisma / MySQL / Docker / GitHub Actions
- 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.
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. Bluetooth app for a client
For a clientDeveloper of the app November 2025 to now
An iOS and Android app that controls lighting controllers over Bluetooth Low Energy, for end users who are not technical.
TypeScript / React Native / Expo / Bluetooth Low Energy / zustand
- 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 -lMeasured on 27-10-2026 in the app's repository.
A sketch instead of screens: the client stays anonymous. Warehouse system for a parts trader
In productionSet up, built alone in the first year Since February 2025
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.
TypeScript / Next.js / drizzle-orm / Bun / MySQL / Docker / GitHub Actions
- 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.tsMeasured on 27-10-2026 in the project's repository.
An assignment, a team that needs reinforcement, or a question about my work?
info@bitvire.com