A Maintenance Tracking app for Nextcloud.
  • PHP 51.9%
  • JavaScript 27.4%
  • Shell 14.1%
  • Vue 4.5%
  • TypeScript 1.8%
  • Other 0.3%
Find a file
alan 3595c198d1
All checks were successful
CI / PHP 8.5 (push) Successful in 13s
CI / PHP 8.2 (push) Successful in 28s
CI / Frontend and generated assets (push) Successful in 28s
CI / Nextcloud 34 / sqlite (push) Successful in 2m55s
CI / Nextcloud 34 / pgsql (push) Successful in 3m12s
CI / Unsigned install candidate (push) Successful in 5s
Merge pull request 'Add CSV and ZIP fitment interoperability' (#14) from feature/fitment-csv-zip-v0.1.10 into main
Reviewed-on: #14
2026-09-09 10:30:00 +00:00
.forgejo/workflows Pin qualified PHP CI v2 images 2026-09-08 21:13:58 -04:00
.github Migrate project guidance and CI to Forgejo 2026-09-02 17:08:44 -04:00
appinfo Add CSV and ZIP fitment interoperability 2026-09-09 06:06:41 -04:00
ci/images Pin qualified PHP CI v2 images 2026-09-08 21:13:58 -04:00
css Add validated local profile installation 2026-09-07 16:07:36 -04:00
docs Add CSV and ZIP fitment interoperability 2026-09-09 06:06:41 -04:00
fitment Define portable fitment pack interoperability 2026-09-07 17:20:22 -04:00
img Build initial Maintenance Tracker foundation 2026-07-23 10:05:32 -04:00
js Add fitment pack runtime foundation 2026-09-08 15:26:02 -04:00
lib Add CSV and ZIP fitment interoperability 2026-09-09 06:06:41 -04:00
profiles Add validated local profile installation 2026-09-07 16:07:36 -04:00
schemas Define portable fitment pack interoperability 2026-09-07 17:20:22 -04:00
scripts Add CSV and ZIP fitment interoperability 2026-09-09 06:06:41 -04:00
src Add validated local profile installation 2026-09-07 16:07:36 -04:00
templates Build initial Maintenance Tracker foundation 2026-07-23 10:05:32 -04:00
tests Add CSV and ZIP fitment interoperability 2026-09-09 06:06:41 -04:00
.gitattributes Define portable fitment pack interoperability 2026-09-07 17:20:22 -04:00
.gitignore Build initial Maintenance Tracker foundation 2026-07-23 10:05:32 -04:00
.nextcloudignore Define portable fitment pack interoperability 2026-09-07 17:20:22 -04:00
.nvmrc Build initial Maintenance Tracker foundation 2026-07-23 10:05:32 -04:00
AGENTS.md Add CSV and ZIP fitment interoperability 2026-09-09 06:06:41 -04:00
CHANGELOG.md Add CSV and ZIP fitment interoperability 2026-09-09 06:06:41 -04:00
composer.json Migrate project guidance and CI to Forgejo 2026-09-02 17:08:44 -04:00
composer.lock Build initial Maintenance Tracker foundation 2026-07-23 10:05:32 -04:00
eslint.config.mjs Build initial Maintenance Tracker foundation 2026-07-23 10:05:32 -04:00
LICENSE Build initial Maintenance Tracker foundation 2026-07-23 10:05:32 -04:00
package-lock.json Add fitment pack runtime foundation 2026-09-08 15:26:02 -04:00
package.json Add fitment pack runtime foundation 2026-09-08 15:26:02 -04:00
README.md Add CSV and ZIP fitment interoperability 2026-09-09 06:06:41 -04:00
SECURITY.md Migrate project guidance and CI to Forgejo 2026-09-02 17:08:44 -04:00
stylelint.config.mjs Build initial Maintenance Tracker foundation 2026-07-23 10:05:32 -04:00
tsconfig.json Build initial Maintenance Tracker foundation 2026-07-23 10:05:32 -04:00
vite.config.ts Build initial Maintenance Tracker foundation 2026-07-23 10:05:32 -04:00

Maintenance Tracker

Maintenance Tracker is a self-hosted Nextcloud app for recurring maintenance, usage meters, service history, costs, vehicle mileage, and supporting documents.

The project is in its early 0.1-series implementation phase. The current vertical slices provide the Nextcloud 34 foundation plus inventory, relationships, meters, work definitions, activity history, due/forecast workflow, and validated local or bundled profile installation into canonical domain records. The architecture deliberately supports a future offline-first mobile client without making the first release depend on it.

Repository authority

The authoritative development repository is:

https://forgejo.argentwolf.org/alan/maintenance_tracker_for_nextcloud

GitHub is maintained as a downstream mirror. The private GitHub security advisory endpoint documented in SECURITY.md remains an explicit vulnerability reporting channel, but GitHub is not the source, CI, or release authority.

Platform targets

  • Nextcloud 34
  • PHP 8.2 through 8.5, with PHP 8.5 as the primary deployment target
  • nginx with PHP-FPM is supported by Nextcloud; the app adds no nginx routes
  • PostgreSQL, MariaDB/MySQL, and SQLite through Nextcloud's database APIs
  • Node.js 24 for frontend builds
  • Future mobile client: Vue offline-first PWA with Capacitor packaging for Android/iOS when native capabilities are needed

The repository directory may have any name. When installed in Nextcloud, the app directory must be named maintenance_tracker so it matches appinfo/info.xml.

Current foundation

  • Classic Nextcloud PHP app using only public OCP APIs
  • Vue 3 web shell based on the current Nextcloud app template
  • Authenticated, versioned OCS API under /ocs/v2.php/apps/maintenance_tracker/api/v1
  • Private workspace created lazily for each Nextcloud user
  • Asset records with stable UUIDs, revisions, timestamps, and tombstones
  • Custom categories, broad asset classes, nested component instances, and structured specifications
  • Typed class-compatible asset relationships and effective-dated assignments
  • Workspace-wide mutation serialization for invariants that span multiple members
  • Capability-based Owner/Manager/Contributor/Viewer workspace authorization
  • Shared-workspace membership API with lifecycle-safe grants and role changes
  • Append-only audit events for implemented domain and membership mutations
  • Asset/component meters with immutable distance, runtime, and usage-count readings
  • Work groups and common work definitions with explicit calendar, business-day, and meter schedules
  • Maintenance activity ledger with immutable performed-work items and meter snapshots
  • Configurable maintenance forecasting plus a materialized one-open-occurrence work queue
  • Bounded cursor pagination and account-lifecycle cleanup
  • Change journal foundation for future mobile delta synchronization
  • Validated profile-v2 installation from bundled or local JSON, with immutable SHA-256 revision provenance, source bindings, preview/conflict checks, and a generic starter profile
  • Common work-definition/scheduling foundation with required explicit schedule; schedule: none means unscheduled/ad-hoc work
  • Architecture, domain, API, security, licensing, and delivery roadmap

The UI and API are explicitly pre-release. Do not treat the current API as a stable third-party contract yet.

Maintenance due state is derived from schedules, completed activities, and effective meter readings; it is not persisted. Forecast/reminder policy may classify an upcoming item as due_soon, while occurrence rows materialize workflow attention without copying due truth into storage.

Development

Install PHP dependencies:

composer install

Install frontend dependencies and build:

npm ci
npm run build

Run the deterministic local checks:

composer validate --strict
composer test
npm run validate:project
bash tests/validate-project-selftest.sh
npm run validate:profiles
npm run typecheck
npm run lint
npm run stylelint
npm run build
git diff --check
git diff --exit-code -- js css

Run the disposable Nextcloud 34 integration suite when Docker is available:

NC_SMOKE_DATABASE=sqlite bash tests/integration/nextcloud34-smoke.sh
NC_SMOKE_DATABASE=pgsql bash tests/integration/nextcloud34-smoke.sh

The integration harness stages the runtime app and transfers it with docker cp; it does not require the Docker daemon to bind-mount the source checkout. This makes the same harness usable with a local daemon and with the isolated Docker daemon used by the Forgejo workstation runners.

Authoritative Forgejo CI repeats the PHP/frontend checks, exercises the app on Nextcloud 34 with SQLite and PostgreSQL, and publishes an explicitly unsigned install-candidate archive plus checksum. App Store releases need a separate integrity-signing step and must not treat that unsigned candidate as a published release.

Live package-registry advisory queries are intentionally separate from normal CI because registry availability and advisory state are external inputs. Run the Forgejo Dependency advisories workflow before release and investigate real findings without treating a registry outage as a product regression.

For development, clone or mount this repository at:

<nextcloud>/custom_apps/maintenance_tracker

Then enable it:

sudo -u www-data php occ app:enable maintenance_tracker

Production deployments should use Nextcloud's recommended system cron, not AJAX background jobs, before calendar synchronization and reminders are enabled. Environment-specific deployment details belong in infrastructure management, not this public application repository.

Documentation

License

The Nextcloud server app is licensed under AGPL-3.0-or-later. Profile data can carry a separate compatible data license and must declare its provenance.

v0.1.10 fitment foundation (in progress)

The current v0.1.10 checkpoint implements portable fitment compatibility packs through canonical JSON and a bounded normalized CSV/ZIP spreadsheet projection: standardized service-position slots, canonical parts, immutable import provenance, reasoned equipment matching with explicit Owner/Manager mapping, source export, and privacy-minimized community export. This does not complete v0.1.10: profile-v2 part materialization, activity parts-used records, vendor management/store-link editing, and the central cost ledger remain pending.