All app changelogs

EstateMax

business · Last updated May 13, 2026

Changelog — EstateMax

[2026-05-13] — Three new toggleable modules: QR/barcode, business visitors, event-day mass codes

Every module is opt-in per estate via Settings → Special Access Modules. Estates that only want resident gate codes leave everything off and see no UI change. End-to-end functional + integration tests for the new code paths: 61/61 pass.

Module 1 — QR + 1D barcode (feature flag: barcode_scan)
Module 2 — Special-business visitors (feature flag: business_visitors)

For estates with a church, hotel, pharmacy, event centre or shop inside the gates. Solves the "I'm going to the hotel" cover-story problem.

Module 3 — Event-day mass codes (feature flag: event_mass_codes, requires business_visitors)

For churches running Sunday service, event centres hosting one-day events — one code, hundreds of guests, configurable window.

Audit log (universal)

Every new action calls em_audit():

All visible in /audit for admins to audit who came in, when, by which guard, via which business, and which phone — including failed phone-match attempts.

Schema additions (additive only — lazy migrator picks them up on existing installs)
Settings (admin-configurable)

New "Special Access Modules" collapsible section in Settings:

Files

New: api/businesses.php, views/businesses.php, views/business-detail.php, views/public/business.php. Modified: schema.sql, app.json, seeds/fresh.sql, seeds/demo.sql, helpers.php, api/portal.php, api/settings.php, views/public/login.php, views/public/_layout.php, views/public/security.php, views/public/code.php, views/public/guest-code.php, views/public/household.php, views/partials/settings-sections.php.

[2026-05-12] — Marketplace + affiliate copy refresh

Rewrote every piece of customer-facing marketing copy so it matches the real, gate-focused, Nigerian-context product instead of the generic placeholder that still said "run a residential estate end-to-end".

Fixes

[2026-05-12] — Migrator deep fix (platform-wide), Get Code subtitle

Platform — root-cause fix for "no such table: panic_events"

The lazy schema migrator had three compounding bugs that, together, left installs permanently stuck after any partial migration:

1. Unconditional hash stamping in _lazy_migrate_if_stale(). The function stamped the new schema hash after updater_apply_scope() returned, regardless of whether the apply had errors or skipped statements. So a migration that failed halfway through still stamped the hash, and every subsequent request saw $haveHash === $wantHash and skipped the retry — even after the migrator code itself was fixed. 2. No staleness self-check. The lazy migrator's only "is this DB stale?" signal was the schema hash. If the hash was wrongly stamped (per #1), the DB was permanently marked "up to date" even with missing tables. 3. updater_apply_scope() ran the whole schema as one big $db->exec($sql) call. A single failing statement (typically a partial UNIQUE INDEX that conflicts with pre-existing duplicate rows) would roll back the entire transaction — taking every new table in the same schema down with it.

Fixes:

End-to-end verified: an existing install with panic_events / dependents / diesel_log missing AND the new hash already stamped will self-heal on the next page request. Resident data, access codes (including any duplicates), and existing tables are preserved exactly as they were.

Polish

[2026-05-12] — Household passes, navigation polish, deeper bug fixes

Fixes
New
Polish
Internal

[2026-05-12] — Portal polish, PWA install, bug fixes

Fixes
Polish
New

[2026-05-12] — Security fixes, Nigerian polish, new features

Security
Reliability
Nigerian-market polish
New features
Internal

[2026-05-12] — Edit + Delete across every admin entity

Internal

[2026-05-11] — Standalone-apps pivot

Internal

[2026-05-11] — v1.1.0 (Phase 2)

Gate access — revoke + guest codes
Gate access — verifier improvements
Service charges — online payment
Settings additions
Internal

[2026-05-11] — v1.0.0

EstateMax is now a full app. The marquee surface is the one-tap gate-code flow; the rest of estate management sits behind it.

Resident-facing (no MyPancho account needed)
Security-facing
Admin-facing
Platform integration
Internal

[2026-05-11]

Internal

[2026-04-20]

Internal

[2026-04-18] — Renamed

All notable changes to this app are recorded here. Newest entries on top.

[0.1.0] — 2026-04-16