Self-hosted CMMS (GMAO) and maintenance ticketing software to declare incidents, auto-route work orders, run preventive maintenance, and track equipment, spare parts, costs and reliability — built with Next.js, Prisma and PostgreSQL.
FixFlow is a self-hosted, source-available CMMS (Computerized Maintenance Management System — GMAO in French) and maintenance ticketing platform. It is free for noncommercial use; commercial/business use requires a license (see License). Teams declare incidents, work orders are auto-assigned to the owning team, and the tool covers the full maintenance lifecycle: corrective and preventive maintenance, an equipment registry, spare-parts inventory, time and cost tracking, reliability KPIs (MTBF/MTTR), and configurable authentication (LDAP or Microsoft Entra ID) and email — all self-hosted.
- Category: CMMS / GMAO + maintenance ticketing / work-order management
- Deployment: self-hosted (Docker in dev, Node.js standalone in production)
- Stack: Next.js 15 (App Router) · React 19 · Prisma · PostgreSQL · NextAuth
- Status: actively developed · 10 GMAO modules delivered
- What is FixFlow?
- Key capabilities
- Who is it for?
- Roles & access control
- Tech stack
- Quick start
- Configuration
- Deployment, backups & hardening
- Documentation
- FAQ
- License
FixFlow is maintenance management software that combines a ticketing / help-desk workflow with a full CMMS (GMAO). A requester declares an incident on a piece of equipment; FixFlow generates a structured report, creates a work order (ticket), and auto-assigns it to the team that owns the equipment. From there, technicians handle corrective work, managers schedule preventive maintenance, and administrators track parts, costs, suppliers and reliability.
It is designed for organizations that outgrew spreadsheets and email threads but don't want a heavy, expensive SaaS: FixFlow is self-hosted, data stays in your PostgreSQL database, and everything is configurable from the admin backoffice.
GMAO vs CMMS: GMAO (Gestion de Maintenance Assistée par Ordinateur) is the French term for a CMMS (Computerized Maintenance Management System). FixFlow is both — a bilingual, source-available GMAO/CMMS.
- Incident declaration with an auto-generated report, attached to a specific piece of equipment.
- Automatic routing — each ticket is assigned to the team that owns the equipment.
- Kanban board with drag-and-drop status changes; statuses are customizable per team (order + final states).
- Priority & SLA — P1/P2/P3 priorities, first-response and resolution deadlines, corrective vs. improvement vs. preventive nature.
- Quotes & billing — request/track external quotes (devis), quote/invoice numbers, SLA on quote reception.
- Threaded chat on every ticket with photo/PDF attachments.
- Visibility control — subscriptions, user groups, and role-based access so each user only sees what they should.
- Requests workflow (demandes) — validation of access/declaration requests by site managers.
- Notifications — in-app bell + email, due-date reminders, and admin alerts for access requests.
Ten delivered modules cover the full maintenance scope:
| Module | What it does |
|---|---|
| Equipment registry | Assets with unique reference codes, categories, locations, photos, documents, and QR codes. |
| Preventive & regulatory maintenance | Recurring maintenance plans, schedules, regulatory controls, and certificate expiry tracking. |
| Spare parts & stock | Parts catalog, stock levels, reorder points, stock movements, and low-stock alerts. |
| Time & costs | Work logs, labor rate, cost lines, and per–work-order cost computation. |
| Reliability KPIs | MTBF, MTTR, availability, and preventive-maintenance compliance. |
| Technicians & skills | Internal technicians, skills/certifications, and work-order assignment. |
| Planning | Dispatch board to schedule interventions across technicians. |
| Hierarchy & meters | Equipment hierarchy, meter readings, and meter-based maintenance triggers. |
| Suppliers & contracts | External maintainers/contractors and maintenance contracts. |
| Mobile, QR & signature | Installable PWA, QR-code scanning, and on-site intervention signature capture. |
| Floor plans | Upload floor plans (incl. a DWG/DXF converter), place equipment, and open its kanban from the map. |
- Operational dashboards: ticket volume, resolution rate, average resolution time, open-backlog over time.
- Reliability dashboard: MTBF / MTTR / availability / preventive compliance per equipment and team.
- Breakdown by site, team, equipment, status and priority; quote-SLA and priority-change metrics.
- Manual CSV / PDF exports.
Everything below is configured from the admin backoffice — no redeploy needed for most changes:
- Authentication, your choice of SSO — LDAP / Active Directory or Microsoft Entra ID (Azure AD), switchable from the UI. A local admin account is always available as a break-glass login.
- Role management in the UI — roles (ADMIN / MANAGER / MAINTAINER / BASIC) are assigned in the backoffice, not derived from AD groups. New SSO users land in a pending-access state until an admin grants access.
- Email (SMTP) configuration — host, port, security (STARTTLS / SSL / none), authentication, and sender — with a "send test email" button. Password stays in environment variables.
- Teams, statuses & SLA, locations (sites), equipment categories & access rights, user groups, and global SLA/labor-rate settings.
- Security built in — CSP headers, HSTS in production, login throttling, strict per-ticket access control, and attachment validation (MIME, size, count).
FixFlow fits any team that maintains physical assets and wants a self-hosted, configurable CMMS/GMAO instead of paper, spreadsheets, or a per-seat SaaS:
- Facilities & building management — HVAC, elevators, access control, multi-site portfolios.
- Manufacturing & industrial maintenance — machines, preventive plans, spare parts, MTBF/MTTR.
- Property & real-estate management — incidents per site, external contractors, quotes.
- IT & equipment fleets — asset registry, QR tagging, corrective tickets.
- Internal maintenance / technical services — a shared ticketing + work-order backbone for a whole organization.
| Role | Can do |
|---|---|
| ADMIN | Full backoffice: statuses, roles & access, auth/email configuration, exports. |
| MANAGER | Backoffice (sites, equipment, groups), request validation, exports; sees everything. |
| MAINTAINER | Technician: handles the work orders they're subscribed to (chat, attachments). |
| BASIC | Declares incidents; sees only their subscriptions / group-accessible teams. |
Access is managed in the UI; new SSO users require admin approval before they can enter.
| Layer | Technology |
|---|---|
| Frontend | Next.js 15 (App Router), React 19, Tailwind CSS |
| Backend | Next.js Server Actions + Route Handlers |
| Database | PostgreSQL 15 + Prisma ORM |
| Auth | NextAuth.js — LDAP / Microsoft Entra ID + local accounts |
| Dev environment | Docker Compose (app, PostgreSQL, Adminer, Mailpit) |
| Production | Node.js standalone (no Docker required) |
# 1. Configure the environment
cp .env.example .env
# Edit .env (database, NEXTAUTH_SECRET, BOOTSTRAP_ADMIN_PASSWORD, SSO/SMTP as needed)
# 2. Start the services (app, PostgreSQL, Adminer, Mailpit)
docker compose up --build -d
# 3. Initialize the database
docker compose exec app npm run prisma:generate
docker compose exec app npm run prisma:migrate
docker compose exec app npm run prisma:seed
# 4. Open the app
# http://localhost:3000 — FixFlow
# http://localhost:8080 — Adminer (database UI)
# http://localhost:8025 — Mailpit (dev email inbox)The seed creates a single local admin account (admin@example.com, password from BOOTSTRAP_ADMIN_PASSWORD) plus demo sites and a sample work order. Sign in, then configure SSO, email and roles from the backoffice.
Most configuration lives in the backoffice (auth, email, teams, statuses, SLA, locations, categories, groups). Secrets and infrastructure settings live in .env:
| Variable | Purpose |
|---|---|
DATABASE_URL |
PostgreSQL connection string |
NEXTAUTH_SECRET / NEXTAUTH_URL |
Session signing + base URL |
BOOTSTRAP_ADMIN_EMAILS |
Emails auto-promoted to ADMIN on first SSO login |
BOOTSTRAP_ADMIN_PASSWORD |
Seeded local admin password (break-glass) |
LDAP_BIND_PASSWORD |
LDAP service-account secret (non-secret LDAP settings are in the UI) |
ENTRA_CLIENT_SECRET |
Microsoft Entra client secret (tenant/client IDs are in the UI) |
SMTP_PASSWORD |
SMTP password (host/port/from/security are in the UI) |
See docs/AUTHENTICATION.md for the full SSO, roles and troubleshooting guide.
Production deployment (no Docker) — the included script syncs app/, builds, runs prisma migrate deploy, prepares the Next.js standalone runtime, restarts the systemd service, and runs a security preflight:
sh scripts/deploy-remote.sh --helpBackups — timestamped pg_dump with checksums:
npm run db:backup # create a backup
npm run db:backup:list # list backups
npm run db:restore -- ./backups/db/<file>.dumpWAN hardening (recommended for internet exposure):
DEV_AUTH_BYPASS=false
NEXT_PUBLIC_DEV_AUTH_BYPASS=false
ALLOWED_HOSTS=fixflow.example.com
FORCE_HTTPS=true
NEXTAUTH_URL=https://fixflow.example.com
NEXTAUTH_SECRET=<long-random-secret>Already applied by the project: security headers (CSP, HSTS in prod, no-sniff, frame-deny), login throttling, strict ticket access control, and attachment validation.
| Doc | Content |
|---|---|
| docs/AUTHENTICATION.md | SSO (LDAP / Microsoft Entra), roles, bootstrap, troubleshooting |
| docs/DATA_MODEL.md | Prisma data model + setup |
| docs/DB_SCHEMA.md | Database schema reference |
| docs/PWA_TECHNICIEN_SECURITY.md | External maintainer PWA security model |
FixFlow is a source-available CMMS (GMAO) and maintenance ticketing platform. It manages incident tickets, work orders, equipment, preventive maintenance, spare parts, costs and reliability KPIs, and is self-hosted on Next.js, Prisma and PostgreSQL.
None — GMAO (Gestion de Maintenance Assistée par Ordinateur) is simply the French term for a CMMS (Computerized Maintenance Management System). FixFlow is a bilingual GMAO/CMMS.
FixFlow is source-available under the PolyForm Noncommercial license: free to use, modify and self-host for noncommercial purposes (personal, nonprofit, educational, research). Commercial or business use requires a commercial license — contact contact@kcastrec.com. Your data always stays in your own PostgreSQL database.
Yes. Docker Compose is provided for development, and a production deployment script builds a Node.js standalone runtime and manages a systemd service — no Docker required in production.
Yes. You choose the active SSO method — LDAP / Active Directory or Microsoft Entra ID (Azure AD) — from the admin backoffice. A local admin account is always available, and roles are managed in the UI.
Yes. It supports recurring preventive and regulatory maintenance plans, schedules, certificate-expiry tracking, and meter-based maintenance triggers, in addition to corrective (incident) tickets.
Yes. There is a parts catalog with stock levels, reorder points, stock movements, and automatic low-stock alerts, plus parts consumption on work orders.
It computes MTBF (mean time between failures), MTTR (mean time to repair), availability, and preventive-maintenance compliance, per equipment and per team.
Yes. FixFlow ships an installable PWA, QR-code scanning to jump to an asset, and on-site intervention signature capture.
Next.js 15 (App Router) and React 19 on the front/API, Prisma ORM with PostgreSQL 15 for data, NextAuth for authentication, and Docker Compose for the dev environment.
FixFlow is source-available, not open-source.
- PolyForm Noncommercial 1.0.0 (see LICENSE) — you may use, modify and self-host FixFlow for noncommercial purposes (personal, nonprofit, educational, research) free of charge.
- Commercial / business use requires a commercial license. Any use by or for a for-profit organization, or in a commercial context, is not covered by the noncommercial license and needs an explicit agreement. Contact contact@kcastrec.com.
Copyright © 2026 Killian CASTREC. All rights reserved except as expressly granted by the PolyForm Noncommercial License.
Contributions: external contributions may require signing a Contributor License Agreement (CLA). Open an issue before large contributions.