← All projects

Field maintenance · Application engineering

Offline service notes

A service-notes app that saves checklists and drafts on the device. It queues changes for sync and lets a technician review both versions when edits conflict.

Implemented with executed synthetic and operational validation

Recorded conflict and restore outcomes from concurrent synthetic service-note edits.
Recorded conflict and restore outcomes from concurrent synthetic service-note edits.

Implementation

The browser saves a note and its outgoing operation in one IndexedDB transaction. Attempted operations retain their ID and payload for retry.

The Node API checks visit assignments and base versions, then commits the record change and replay response together in SQLite. A repeated operation returns the original outcome without another version increment.

The interface shows pending, confirmed, conflicted, and rejected records. Conflict review retains both versions, and a JSON export includes saved records, pending operations, and history.

The shell cache handles connection loss and HTTP 503, upgrades its own scoped cache and reports eviction. Snapshot and restore commands verify SQLite integrity, row counts and file digests.

Inputs and assumptions

  • Three synthetic service visits and public demo identities are included. Sessions expire 24 hours after database creation.
  • A localhost Node.js 24 server and a modern browser with IndexedDB are required. The service-worker shell requires HTTPS or localhost.
  • The data model contains text notes and three Boolean checklist fields; it has no photo attachments.

Results

Recorded results for the included reference case
HTTP and SQLite checks passed15 / 15
Browser IndexedDB checks passed16 / 16
Observed application workflowsSave/sync and two-workspace conflict resolution
Extended validation outcomes matched39
Browser environment substituteExecuted worker lifecycle model
Report figures (2)
Dark service-notes interface showing the inspection checklist, saved note, and confirmed server version.
Application browser check: a synthetic inspection note confirmed as server version 2.
Sixteen IndexedDB and synchronization checks passed in the browser.
Sixteen IndexedDB and synchronization checks passed in the browser.

Open the full report ↗

Verification

15 HTTP/SQLite tests and 16 separately observed Chrome IndexedDB checks. Added 13 worker-source simulations, 11 real process/recovery checks, five snapshot CLI checks and 10 theoretical deployment cases.

node verify.mjs
Download the verification record ↓

Additional scenarios

39 outcomes checked through executed synthetic operations and theoretical deployment. The report lists the expected and observed outcomes for each check.

Read the validation report ↗

Project files

The ZIP contains the source, inputs, results, and instructions. These files are also available individually.

Download project ZIP · 233 KB
Archive checksum

SHA-256

2e0f53dcaf46a176ca227ee7dc9233eb8c150a9109ddee52c8bd1a2ed787f395
Original project scopeArchived brief PDF ↗

Run locally

Node.js 24 or newer / SQLite via node:sqlite / Modern browser with IndexedDB

Extract the ZIP and open a terminal in the offline-service-notes folder. The README includes setup and usage details.

node verify.mjs
node server.mjs
# Open http://localhost:8787
node complete.mjs

Limits

  • Public fixture tokens are a demonstration mechanism, not production authentication. The server is restricted to localhost.
  • Browser storage can be cleared or evicted. Saved records should be synchronized or exported when they must be retained.
  • The browser harness uses simulated transport failures; the separate API tests use real HTTP and SQLite. No physical-device or cross-browser test coverage is claimed.
  • Secure-context worker installation is represented by an executed lifecycle/cache model; an observed Chrome offline reload is not claimed.
  • Remote hosting and identity received a theoretical deployment assessment. The shipped application uses localhost and synthetic identities.