About this software
About Fixora — Field Service Management SaaS
Fixora is a zero-dependency Node.js and vanilla JavaScript web app backed by Supabase (PostgreSQL), built for one business per installation. Owners manage jobs, technicians, customers, appliances, invoices, inventory, expenses and reminders. Technicians sign in to see and update only the jobs assigned to them. A public booking form at /book creates unassigned jobs, and a public QR page shows an appliance's service and warranty history. Business rules such as the job lifecycle, invoice math and stock limits are enforced server-side. The source includes a demo mode, a test suite, SQL migrations and setup guides. There is no mobile app and no payment gateway; invoices are records and payments are logged manually.
Why Fixora — Field Service Management SaaS
What makes it better
than the alternatives
- 01
Zero npm dependencies
The server and frontend need no npm install and no build step, which keeps auditing and self-hosting simple.
- 02
Server-enforced roles
Owner and technician roles are checked in the API; technicians see only their own jobs and get 404 on owner-only areas.
- 03
Appliance QR and warranty tracking
Each appliance gets a QR target page, and jobs carry warranty months with in-warranty alerts.
- 04
Stock tied to invoices
Parts lines on invoices adjust inventory, manual changes go through audited movement records, and low-stock flags are shown.
- 05
Collected-basis P&L
Dashboard and P&L figures count money actually collected minus expenses, with a six-month revenue trend.
Jobs & Dispatch
- Create jobs with customer
- service type
- price
- schedule and optional location pin and appliance note
- Assign technicians; Waiting for Confirmation status is derived one minute after assignment
- Lifecycle New
- Running
- Success or Canceled with owner override
- Daily schedule board grouped by technician plus an Unassigned section
Technician App (web)
- Technicians see only their assigned jobs
- with a today filter
- Owners create technician accounts with skills and service area
- Technicians confirm and update job status
Public Booking
- Public booking form at /book with no login
- Service list drawn from the active catalog
- Booking creates the customer record and an unassigned job
- and returns a reference
Customers & Services
- Owner-only customer list and detail with job history
- Services catalog with category and base USD price
- Job price prefills from the linked service
Appliances & Warranty
- Appliance records (type
- brand
- model
- serial) linked to customers
- Public QR history page that hides customer contact details
- Warranty coverage check per device or customer appliance
Invoices & Payments
- One invoice per Success job
- with auto-numbering
- Parts lines
- discount and recalculated totals
- Multiple payments per invoice with owner-defined payment methods
- Share URL for invoices
Inventory
- Parts with price
- stock count
- van or shop location and low-stock threshold
- Audited stock adjustments and movement history
- Parts on invoices cannot be deleted
Expenses, P&L & Dashboard
- Expense CRUD by date and category
- P&L by day or month
- Dashboard with today's jobs
- waiting-confirmation jobs
- revenue aggregates and a trend chart
Reminders & WhatsApp
- Service reminder rules by device or service type with interval in months
- Overdue and upcoming due list in the app
- Owner-supplied WhatsApp Cloud API settings
- templates
- toggles and send logs for booking
- dispatch and reminders
- Token is never returned by the API
Demo & Setup
- Demo mode with seeded business
- demo accounts and owner-only reset
- Guided tour
- SQL migrations 001-008 and a seed script
- Buyer setup docs and test suite
| Language | Version | Framework | Used for | Share of code |
|---|---|---|---|---|
| JavaScript | — | — | Front-end | 71.6% |
| SQL | — | — | Database | 11.3% |
| CSS | — | — | Styling | 10.9% |
| HTML | — | — | Front-end | 6.2% |
- Primary language
- JavaScript (Node.js 20+, no npm packages)
- Framework
- None: zero-dependency Node.js server, vanilla JS frontend, no build step
- Database
- Supabase (PostgreSQL); no minimum version stated in the digest
- Authentication
- Supabase Auth email + password, bearer token; owner and technician roles enforced server-side
- Licence
- Single-site
- Screens
- 14
- Database tables
- 14
- Supported languages
- English only (UI and docs); USD prices; no RTL support
- Browser support
- Modern browsers running classic ES scripts; no tested browser matrix in the digest
| Minimum | Recommended | |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 1 GB (estimate) | 2 GB (estimate) |
| OS | Node.js 20+ on any OS; Dockerfile and docker-compose.yml included | Node.js 20+ on any OS; Dockerfile and docker-compose.yml included |
| Est. monthly hosting | $5 | $5 |
```sh cp .env.example .env # set SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY in .env # run supabase/migration-all.sql once in the Supabase SQL editor docker compose up --build ``` Open http://localhost:3003 and create the first owner account.
```sh git clone <your-copy-of-the-source> fixora && cd fixora cp .env.example .env # fill SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY npm test # full suite, no Supabase needed npm start # serves app and /api on PORT (default 3003) ``` Run it under systemd rather than nohup so it survives SSH session closure.
```sh FIXORA_STORE=memory node server.js ``` Data resets on restart; for development and demos only.
Quality report
Manually reviewedHow to read the quality report
What this is. Every project on Vibe96 goes through an automated audit of its source code before a reviewer in Dubai checks it by hand. The score is out of 100; 75 is the minimum to be listed, and any single failing check blocks a listing regardless of the score.
- Security
- No real credentials in the code, every data-changing route protected, admin areas role-gated, no SQL built from user input.
- Code structure
- A developer can navigate and extend it: clear module boundaries, no giant files, little copy-paste.
- Docs & completeness
- The setup guide, example config, schema and required files the builder committed to are actually in the archive.
- Dependency health
- Packages pinned, no known critical vulnerabilities, no abandoned libraries in production paths.
- Build & deploy
- A clean machine can restore, build and start it by following the shipped instructions.
Warnings are problems that didn't block the listing; they stay visible here until a later version clears them. The audit reads the code — it does not run it — so always try the live demo before you buy. Lines of code are counted from the same audited archive.
Reviewer notes (3 minor)
No real credentials found; demo passwords hardcoded in tests are weak defaults; zero-dependency node app is mostly reproducible; dockerfile and setup docs have small gaps; database access cannot be verified: schema, migrations and query code were not in the excerpts; authz design looks sound, but most routes and password handling are not visible, so it cannot be confirmed; layered layout is sensible, but server.js and app.js are oversized and the release duplicates migrations and docs. None of these stop the software from working; the developer has been told and improvements come in a future update.
Versions & updates
No updates yet. New versions appear here with a changelog.
Buyers receive updates free for 1 year.
What you get
- </>Full source codeThe complete audited source, delivered as a download from your account. No obfuscation.
- ▤DocumentationSetup guide, architecture notes, CLAUDE.md and AGENTS.md.
- ↻One year of updatesEvery new version the builder publishes, free for 12 months.
- ♧30 days of supportInstallation and defect support through Vibe96 tickets.