In development, not live yet

Work orders from planning to invoice, without anyone overwriting a colleague's work

Fyldd is a field service platform I am building for a client, for installation and service companies: an app for the technician, a back office for planning and the office, and a portal for the accountant.

Role
Everything, built alone
Period
June 2026 to now
Stack
TypeScript, Expo, Next.js, Fastify, PostgreSQL
Status
In development
Back office · work order WB-1042 (earlier house style)
Work order in the back office with status steps from draft to invoice
Work order in the app with workflow, hours, equipment, photos, signature and forms
Step plan with locked follow-up steps
The back office still shows the earlier house style. All screens show demo data.

The problem

Installation companies often still run their technicians on paper work orders, WhatsApp and outdated software. When two colleagues edit the same data at once, work quietly gets lost.

What I built

One system with PostgreSQL as the single source of truth. A change reaches every colleague within a second, and whoever saves an outdated version gets a warning instead of silently lost work.

The work order runs from draft through planning and execution (hours, materials, photos with location, the customer's signature) to the invoice. With the customer's consent the accountant gets access to the figures and exports them as CSV, PDF or UBL.

What matters technically

  1. Row-Level Security as a second lock

    Every request runs in a transaction that pins the company; policies in PostgreSQL filter 49 tables on it, and the API connects as a role without superuser rights. Companies can never see each other's data, not even after a mistake in a query.

  2. Live without refreshing

    Over Server-Sent Events the server only sends a signal that something changed, and only after the commit. The app fetches the new data itself through the normal, secured API.

  3. Never silently lost work

    Every row has a version number. Whoever saves an outdated version gets a conflict back with the current version: "Changed by someone else. Reload."

  4. Workflows and a form builder

    A company puts together a step plan per kind of job; required steps lock the next ones. App and server share one rule for "may this work order be completed", so they never disagree.

  5. Accountant portal with consent

    An accounting firm requests access, the customer grants or revokes it. Closed periods block changes to invoices; exports in CSV, PDF and UBL 2.1.

  6. Subscriptions per user

    Payments through Mollie: a base price plus a surcharge per extra employee. An extra seat in the middle of a period is invoiced pro rata.

  7. Routes and documents

    A day route optimised per technician, with a simple fallback when the routing server cannot be reached. Work order, quote and invoice PDFs are rendered on the server.

Measured

Counted in the repository, not estimated.

commits since 6 June 2026
502
database tables
82
tables under Row-Level Security
49
screens in the mobile app
57
test files
123
languages in the app
11
How measured
git rev-list --count HEAD
grep -rhc "= pgTable(" werkapp-server/src/db/schema | paste -sd+ | bc
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)$'
ls werkapp-app/src/i18n/locales | wc -l

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

Need something similar, or a team that builds systems like this?

info@bitvire.com