FireSafety Inspections Mobile App
An offline-first Apache Cordova application for recording fire safety and first-aid equipment inspections on Android. Fourteen ready-made checklists, digital signatures, automatic due-date tracking, scheduled reminders and printable reports — with no server, no account and no internet connection required.
Built for the people who actually walk the building: basements, plant rooms, stairwells and warehouses where mobile coverage does not reach. Everything runs on the device. Nothing is uploaded anywhere.
Please read first — interface language
The application interface is in Italian, because the fourteen checklists follow Italian workplace fire-safety and first-aid regulations (D.Lgs. 81/2008, D.M. 388/2003, D.M. 01/09/2021 and related decrees).
All documentation is in English, and the download includes a complete Italian → English UI glossary that maps every on-screen label, button, status and toast message to its English meaning. Every user-facing string is a plain literal in two files, so translating the app to your own language is a search-and-replace job, not a refactor. Chapter 4 of the documentation walks through it step by step.
If you need an English-language product out of the box, please factor this translation work in before purchasing.
Key features
- 14 ready-made inspection modules — escape routes, fire doors, extinguishers, hydrants and hose reels, storage and plant rooms, first-aid cabinet, medication pack, fire detection, automatic suppression, smoke and heat exhaust, safety signage, emergency lighting, flammable containers, and equipment maintenance records.
- Works 100% offline. No network requests at runtime whatsoever. Icons, styles and generated reports are all bundled locally.
- IndexedDB storage. A real transactional local database with indexes — not the 5 MB localStorage ceiling.
- Digital signatures captured on a canvas pad, stored as binary Blobs and embedded into reports.
- Automatic due dates. Each module carries its own inspection interval; overdue and expiring records are highlighted throughout the app.
- Real Android notifications scheduled through the operating system, so reminders fire even when the app is closed.
- Printable HTML reports — print, share, or save as PDF through the native Android dialog.
- JSON backup and restore, signatures included, with a merge-or-replace choice on import.
- Product expiry tracking for first-aid consumables, kept separate from inspection cycles.
- Searchable archive with instant filtering by text, module and status.
- No framework, no build step. Plain HTML, CSS and vanilla JavaScript. Open a file, edit it, rebuild the APK.
The inspection workflow
- Pick one of the fourteen checklists from the home screen.
- Fill in the header: date, building, facility, floor, area, inspector — plus an asset/device ID for individually tracked equipment such as extinguishers and hydrants.
- Answer each item Yes / No / N-A. Answering No reveals fields for the non-conforming area and a free-text note, with a full-screen editor for long notes.
- Sign on the device.
- Save as a draft and resume later, or save as completed.
- Generate the report and print, share or archive it.
Inventory-style modules (first-aid cabinet and medication pack) switch to a Present / To reorder answer mode with an expiry-date field per item.
Built for the field
Offline capability here is not a marketing line, it is an architectural constraint the whole app is built around.
- Zero remote dependencies. The icon set is extracted at build time from Font Awesome Free into a 62 KB local stylesheet — no CDN, no webfont download. Icons render identically in airplane mode, including inside shared reports.
- Strict Content Security Policy with
script-src 'self' and object-src 'none'. No inline scripts, no external origins. - Transactional writes. A record and its signature are committed in the same IndexedDB transaction, so they can never diverge.
- Explicit failure. If local storage cannot be opened, the app says so instead of silently starting with an empty archive.
- Automatic migration. Archives from earlier localStorage-based builds are imported on first launch, with the original data retained as a recoverable safety copy.
Due dates and reminders
Every module declares its own interval — daily for escape routes, monthly for equipment, and anything you configure for your own modules. From the inspection date the app computes what is overdue, what is approaching, and surfaces it in five places: a home banner, a KPI tile, a badge on the navigation bar, colour-coded archive cards, and a grouped detail list you can tap straight through to the affected inspection.
Reminders are handed to the Android alarm scheduler rather than kept in a JavaScript timer, so they are delivered by the operating system even when the app is not running. A notification channel is created so users can tune or mute them from Android settings, and the Android 13+ notification permission is requested properly.
Reports
Each inspection produces a self-contained HTML document: header and metadata, the due-date notice, a summary bar, the full checklist table with highlighted non-conformities, any detected product expiries, and the inspector’s signature.
The report is completely standalone — styles inlined, icons inlined, signature inlined — so it renders identically on a phone with no connectivity, on a desktop, or attached to an email. The in-app preview runs inside a sandboxed iframe, so report styling can never leak into the application UI.
Made to be customised
Checklists are plain data. Adding one is a single object plus a one-line interval entry, and it immediately appears everywhere: home screen, archive, filters, reports and reminders.
{ id: 'lift-emergency', code: 'Modulo 14', title: 'Citofono di emergenza ascensore', frequency: 'Mensile', icon: 'fa-bell', asset: true, checks: [ 'Il pulsante di chiamata di emergenza funziona?', 'Il citofono bidirezionale è udibile in cabina?' ] }
The entire colour scheme comes from CSS custom properties, so rebranding is a handful of variables. There is no bundler, no transpiler and no npm build step for the app itself — the optional Node scripts only regenerate the icon set, the documentation and the marketing screenshots.
What you get
- Complete, commented Cordova project source (HTML, CSS, vanilla JavaScript).
- A lean web layer of roughly 240 KB in total.
- 14 chapters of English documentation covering setup, project structure, configuration, checklist customisation, the IndexedDB storage layer, due dates and notifications, reports, backup and restore, theming, release builds, troubleshooting and licensing.
- A self-contained HTML documentation bundle that opens offline in any browser.
- An Italian → English UI glossary for translation and navigation.
- An automated browser test suite (76 checks) covering storage migration, persistence, due-date maths, backup parsing, report isolation and signature safety.
- Developer tooling: local dev server, offline icon generator, documentation generator, and reproducible screenshot and preview-image generators.
- A detailed changelog.
Requirements
- Node.js 18 or newer
- Apache Cordova CLI 12.x
- cordova-android 15.x
- Java JDK 17
- Android SDK Platform and Build-Tools 36
- Minimum device: Android 7.0 (API 24), target SDK 36
You need a working Cordova and Android SDK toolchain to build the APK. If you have never built a Cordova app before, chapter 1 of the documentation walks through the full setup, and the project can be previewed in a desktop browser without any Android tooling at all.
Please note
Everything below is stated openly so you can judge fit before buying.
- Android only. The web layer is platform-agnostic and the plugin wrapper already prefers iOS paths where relevant, but iOS is not tested or supported out of the box.
- No backend, no cloud sync, no admin panel, no multi-user accounts. This is a standalone offline app by design. Each device holds its own archive; consolidation is done through JSON export and import.
- The interface is Italian. See the language note at the top.
- This is a source-code item, not a compiled app or an app-store-ready binary. You build, sign and publish it yourself under your own developer account.
- The checklist content is a starting point, not legal advice. It is derived from Italian workplace safety legislation and must be verified against current regulations and your own risk assessment before operational use. Requirements differ by building type, occupancy and jurisdiction.
- OEM battery optimisation on some devices (Xiaomi, Huawei, Samsung and others) can delay or suppress scheduled reminders. This is an Android platform behaviour, not an app defect; the documentation explains how to advise users.
Documentation and support
The download includes both the Markdown chapters and a single self-contained HTML page you can open straight from disk. Every non-obvious design decision is documented in the code itself, and the troubleshooting chapter covers the issues real users hit: notifications not arriving, storage errors, missing icons, export behaviour on modern Android, and importing older backups.
Support covers bug fixes and questions about the item as delivered. Customisation work, translations and third-party integrations are outside its scope.
Credits
Full third-party licensing details are in chapter 12 of the documentation.
Changelog
Version 1.1.1
- Fixed: a daily check saved today was immediately reported as due, so the reminder badge never cleared. The advance-warning window is now capped below the inspection interval.
- Fixed: non-conformity details (area, expiry, note) survived changing an answer from No back to Yes or N-A, and were saved and printed on a compliant row.
- Fixed: “Open inspection” in the due-date detail list set the record but left the view on the Info page, so the button appeared to do nothing.
- Added: further regression coverage, bringing the automated suite to 76 checks.
Version 1.1.0
- Migrated persistence from localStorage to IndexedDB, with automatic one-time import of existing archives and Blob storage for signatures.
- Rewrote the Cordova integration layer: corrected notification API and option names, 31-bit notification IDs, OS-scheduled reminders instead of a foreground timer, Android 13+ permission handling, and scoped-storage-compatible file export.
- Bundled the icon set locally, removing the CDN dependency that broke every icon offline.
- Added a strict Content Security Policy and moved report previews into a sandboxed iframe.
- Corrected inspection completion status, asset-field rendering, due-date calculation and draft counters.
- Added hardware back-button handling, storage diagnostics, validated backup import, and the full English documentation set.
Version 1.0.0