Skip to content
GuardCore · the security module of YC IMSS · live now

The scan says the guard was there.
Who checked?

GuardCore is security guard management software where the server grades the evidence: a checkpoint scan judged against the tag’s own secret and the distance, welfare and duress escalated by a background worker rather than by somebody watching, and every write hash-chained so an edited record shows as one.

Guards, patrols, incidents, access and the back office behind them · Australian data, hosted in AWS Sydney.

Why this exists

Security is sold on trust and renewed on evidence.

Nobody notices a quiet site. They notice the night you cannot account for. Every part of GuardCore exists to answer one of three questions a security contract eventually asks.

Prove the guard was there

Every guard tour product records scans. Almost none of them can tell you whether the scan was real, because the device decided and the server stored what it was told.

Notice when nobody is watching

A welfare check that lapses at 3am, an alarm nobody acknowledges, a licence expiring between reports. Each of those fails in the only situation it exists for if a person has to trigger it.

Answer the question afterwards

When you knew, what you did, who signed it off, and whether the record has been edited since. A register that cannot answer the last one is not evidence.

The proof

Four numbers you can count yourself.

These are properties of the code, not statistics about a customer — each one is countable from the file named below in under a minute, and we would rather publish a number you can check than one you have to believe.

6

checks on every scan

The checkpoint, the guard, the patrol, the tag secret, the distance and the duplicate window — all on the server. The seventh part of the breakdown, a per-checkpoint time window, is not implemented and we say so.

5

escalation levels

Each naming a role, a delay and its channels, advanced by a background sweep when a level goes unacknowledged.

12

sweeps with nobody watching

Welfare, escalation, incident SLA, tour compliance, access correlation, visitor overstay, licence expiry, roster generation and gaps, compliance, signals and policy re-acknowledgement.

57 of 62

capabilities live

Counted from the same registry this page renders. The other 5 are named below, with what they actually are.

Counted from src/server/imss-checkpoint-scan-rules.ts · imss-escalation.ts · src/lib/imss-estimator-security.ts · src/server/imss-jobs/index.ts

Every capability

The full list, grouped by what you came here for.

57 of 62 are in the product today and are written here in the present tense. The rest carry a badge saying what they actually are. Each group has its own page with a worked example.

The server grades the scan, not the phone

Live

Every checkpoint scan is judged on the server against the checkpoint, the guard, the tag secret, the distance and the duplicate window — and the result the device claims is ignored.

The device never learns the answer

Live

A checkpoint’s secret, its coordinates and its radius are excluded from every read a phone can reach, and the comparison is constant-time, so the tag cannot be cloned from the app that scans it.

A refused scan is kept, not discarded

Live

A fabricated or out-of-place scan is refused as proof and kept as an attempt, with an alert raised for someone to acknowledge — because the interesting thing about a bad scan is that somebody tried it.

NFC, QR or the printed code

Live

The phone reads the tag itself — NFC on Android, the camera anywhere, or the printed code typed by hand on iPhone, where the browser has no NFC — and captures a high-accuracy fix with it.

The tour nobody started

Live

A scheduled tour that produced no patrol leaves no row to notice, so a background sweep grades every settled occurrence on time, late or missed and notifies the site’s supervisors and the customer’s own portal users.

Patrol log register

Live

Every patrol with its site, its guard, its start and finish and the exceptions raised against it, filterable and exportable — the register someone opens when a client asks about last Tuesday.

Geofences that act, not just draw

Live

Circles and polygons per site, typed as boundary, restricted, patrol or parking, each with its own entry and exit action — and an exit set to escalate starts the escalation chain rather than writing a line nobody reads.

Building a tour route on screen

Roadmap

Sequencing checkpoints into a route with an expected offset and a window per stop. The table exists and only the data importer writes it, so a route can be migrated in and not yet built on screen.

On the roadmap. It is not built, not scheduled, and not something to plan a contract around.

Welfare checks with a lapse that is noticed

Live

A check-in interval per guard from five minutes to four hours, and a background sweep that picks up every overdue timer, counts the miss and starts the escalation chain. The timer begins at the first check-in or when operations sets one.

Duress that reaches a person

Live

An SOS stores the fix, fires the organisation’s duress rules and writes a critical notification that keeps re-sending every five minutes until somebody acknowledges it — and it lands at the top of the command centre, above everything else.

The clip the alarm carries

Live

The server tells the device how many seconds to record, and the audio or video comes back as evidence filed against the alert itself — so the control room hears what happened rather than reading that something did.

Five escalation levels that advance themselves

Live

Each level names a role, a delay and its channels; level one fires at once and a level left unacknowledged is advanced by a background sweep, so an alarm nobody answers climbs rather than sitting.

Location only while on shift

Live

A guard’s position is accepted only while they have an active shift today, resolved from their session rather than from the request — off duty the fix is refused and nothing is stored.

Escalation by SMS or push

Roadmap

The channel vocabulary carries SMS and push and both default to off, because there is no provider behind either. In-app and email are what actually deliver today.

On the roadmap. It is not built, not scheduled, and not something to plan a contract around.

A native app for the guard

Roadmap

The field runner is a mobile web page today. Native iOS and Android is an accepted architecture decision and not shipped code — which is also why background location and a background welfare prompt are not claimed anywhere on this site.

On the roadmap. It is not built, not scheduled, and not something to plan a contract around.

Incident register

Live

Every incident with its severity, site, status and the guard who raised it, over quick filters and a saved-view expression — and a client role is served a narrower column list in the query rather than a hidden column in the page.

Incident numbers that cannot collide

Live

INC-0001 upward, sequential per organisation, allocated under the organisation’s own row lock in the same transaction as the incident and its audit event — so two control-room operators cannot mint the same number.

Two SLA clocks, scaled by severity

Live

An acknowledgement clock and a response clock, each scaled by severity — a critical incident gets half the time, a low one four times — measured against the site’s own response minutes rather than one organisation-wide number.

Acknowledgement by the person it was given to

Live

Only the assigned investigator, the guard it belongs to, or an administrator may acknowledge — anybody else is refused, a second acknowledgement is harmless, and an incident already resolved cannot be acknowledged at all.

A closed incident stops changing

Live

Nine fields of the account of record are refused once an incident is closed, and it cannot be moved back out of closed — only the flag deciding whether the customer sees it stays editable.

Photographs and files, served once

Live

Evidence is uploaded to a server-only directory behind a type allowlist, EXIF stripped, and read back only through one authenticated route scoped to the organisation — never from a public path a link could leak.

The incident report, and the shift’s own

Live

A letterhead PDF per incident and a filtered summary built from the same filters as the register, plus the Daily Activity Report that compiles a whole shift — the patrols, the welfare check-ins, the pass-down and any duress.

Countersigned incident closure

Roadmap

A named approver signing off a closed incident. The fields exist and the record page shows them unfilled, because the approval step itself is not built.

On the roadmap. It is not built, not scheduled, and not something to plan a contract around.

One screen for the shift in progress

Live

Unresolved duress first, then who is on duty from the roster, the open incidents, the patrols under way and a counted summary — refreshed on its own rather than when somebody remembers to reload.

Dispatch with a lifecycle, not a status field

Live

Pending, dispatched, acknowledged, en route, arrived, completed — each transition stamping its own time, each refusal named, and order numbers sequential per organisation per year. The available-guards list excludes anyone already on a live order.

Live map

Live

On-duty guards on a map, with the latest fix per guard inside a fifteen-minute freshness window, and an on-duty list beside it that works when the map cannot.

Signals: a rule over every write

Live

Every domain write already lands in an event outbox; a signal rule watches it for a named event and a set of conditions, and raises a reviewable item — dismissed, or turned into an incident, by hand or automatically.

Pass-down the next shift can read

Live

Handovers, occurrences, visitors, alarms, maintenance and instructions entered by the guard on the phone, and compiled into the shift’s Daily Activity Report rather than left in a notebook at the desk.

Outbound webhooks that retry properly

Live

Five attempts on a one, five, thirty, one-hundred-and-twenty, seven-hundred-and-twenty minute ladder, signed, then dead-lettered — with private addresses and the cloud metadata endpoint refused on every attempt, not only the first.

Visitor sign-in and sign-out

Live

Name, company, purpose, host, vehicle registration and badge on the way in; signed out, no-showed or denied on the way out. Pre-registration requires an expected arrival, so a booked visitor is a row rather than an email.

The visitor still on site

Live

Judged against the expected departure when one was given and against the site’s maximum hours when it was not, by a sweep that notifies once per visit — so the evacuation list is the list of people actually here.

Zones, credentials and an event log

Live

Access zones with their own rules, credentials issued as card, fob, PIN or mobile to a guard, a contractor worker or a visitor, each suspended or revoked with the time it happened — and an ingested event that matches a rule can raise an incident by itself.

The pattern one event cannot show

Live

Repeated denials on one credential inside a window, and the same credential granted at two zones closer together than anyone could travel — two sequences a single access event cannot reveal, found by a sweep and raised for review.

A live feed from the access-control head end

Roadmap

Events arrive today through an authenticated call carrying the head end’s own event id, which is how a middleware or a scheduled push feeds them. A shipped adapter for a named panel vendor is not built, and every provider starts as not connected.

On the roadmap. It is not built, not scheduled, and not something to plan a contract around.

Recurring rosters that leave the shift open

Live

A weekly template generates shifts across a horizon you set, overnight shifts included, and generates them unassigned — because deciding who works is a person’s job and generating a name is how a roster stops being trusted.

The roster refuses an unlicensed guard

Live

Eligibility is worked out live for the shift date from the licences on file, never from a stored score that could be stale — and where the shift asks for a licence class, the guard must hold that class and not merely a licence.

Double-booking, rest and onboarding, refused at the save

Live

Five configurable rules — double booking, which is always on; minimum rest; expired licence; required licence class; incomplete onboarding — refusing the save, with a warning-level rule overridable only with a reason the audit event then carries.

Open shifts and swaps

Live

An unfilled shift offered to a group, applied for, and filled — and a swap between two guards written as one transaction where both legs are checked against the gates before either is saved.

Rostered, actual and approved, all kept

Live

Three windows per shift, separately retained, so a correction changes what will be paid without overwriting what happened — and the variance between rostered and actual is typed per direction rather than flagged as "different".

Hours leave once, and are locked behind them

Live

Approved hours export to a nine-column CSV under a lock: the period can only export once, each hour is marked exported in the same transaction, and every line keeps its own snapshot. There is no award interpreter — this records time worked and hands it over.

No clock-on with an unread post order

Live

A guard cannot clock on at a site with an approved post order they have not acknowledged. The refusal names the document, so the fix is reading it rather than finding a supervisor.

Security licence register

Live

Every licence with its number, issuer, class and expiry, and a dashboard that counts what has expired and what expires inside thirty, sixty and ninety days — filterable to the site the guards are rostered at.

Australian licence classes, by jurisdiction

Live

A platform-wide catalogue of security licence classes across eight Australian jurisdictions, named against their actual regulators — and any entry whose code could not be confirmed is marked as a placeholder to correct, not stated as fact.

Ninety, sixty, thirty, seven days out

Live

Four exclusive bands swept in the background, one notification per item per band, idempotent — so a licence expiring is noticed four times before it lapses rather than once after.

Nine kinds of evidence, one evaluator

Live

Licences, qualifications, training, police checks, working-with-children checks, right to work, vehicle registration, contractor insurance and site certificates all satisfy a requirement through one evaluator — and a requirement marked blocking is the one the roster enforces.

Induction register that covers everybody

Live

Organisation, site, client, role, contractor, refresher and return-to-work inductions in one register covering employees, contractor workers and office staff alike, each with its coverage state rather than a tick.

SWMS sign-on, and the honest distinction

Live

A safe work method statement and a safe work procedure are carried apart, because most security work is not construction work — and a new version moves the pointer, so yesterday’s sign-on stops satisfying today’s requirement.

Controlled documents and what was actually shown

Live

Policies, procedures and post orders versioned, issued, acknowledged — and the receipt records a hash of the object the person was shown rather than the label they signed, so "I signed a different version" is answerable.

Pre-start checks a driver cannot pass

Live

A patrol vehicle’s walk-around filed from the phone, where the pass or fail is derived on the server from the answers rather than sent by the client — and a failed safety-critical line raises a work order in the same transaction.

Hash-chained audit trail

Live

Every write sequenced and chained per organisation under a uniqueness constraint that makes a forked chain impossible, with the actor and the credential inside the hash — so an attribution cannot be rewritten afterwards either.

Reading an employment file is itself recorded

Live

Nineteen tables holding employment, pay, recruitment and background-check records log who read them, enforced in the data layer rather than per screen — so a privacy question has an answer that is not "probably nobody".

A portal the customer opens themselves

Live

Who is on site, the patrols and tours, their incidents, their visitors — and the service line is enforced at the door rather than in the menu, so a customer who buys only cleaning cannot reach a security screen by typing its address.

The customer books their own visitors

Live

A visitor pre-registered by the customer in their own portal lands in the same register the gate works from, so reception is not transcribing an email at eight in the morning.

Reports that know who is reading them

Live

Six datasets, each fixing its own field allowlist and its own client profile: incidents are filtered to the client-visible ones with the narrative and the guard removed, and timesheets and licences are not client-readable at all.

Reports that arrive without being asked for

Live

Daily, weekly, fortnightly, monthly or quarterly, at a time you set, rendered by the background worker — and the run row survives the retention window even after its output is deleted, so the history of what was sent stays.

GuardCore Estimator

Live

Nine security calculators over one build-up — guard hours by day type, a static post, a mobile patrol run allocated across its sites, alarm response, event crowd control, control-room monitoring, equipment, mobilisation and a licence-class premium.

A security estimate is not a cleaning one

Live

One engine, two domains, and an estimate must declare which — the line types differ, and an accepted security estimate writes a static-guard contract on the security service line rather than something a person retypes.

Rates that know a static post from a patrol

Live

Contract rates typed by service — static guard, mobile patrol, alarm response, event — and by rate type, effective-dated and overridable per site, so a rate rise is a new row rather than an edit to history.

Invoices built from approved hours

Live

Approved hours priced by rate type, one line per rate, with the rate resolved site, then contract, then organisation — and an unresolvable rate producing a named refusal rather than a line that quietly costs nothing.

An hour bills once

Live

Each invoice line keeps the hours it was built from, and an attempt to bill them again is refused with the instruction to raise a credit note against the earlier invoice — which is the difference between a billing system and a spreadsheet.

Recurring billing on the contract

Live

One schedule per contract, in the same cadence vocabulary the report schedules use, drafted by the background worker — so a monthly invoice is not a recurring diary entry for a person.

Export to Xero, MYOB or plain CSV

Live

The import layouts those two products actually accept, column for column, with the account and tax codes resolved from your own mapping — a file you upload, not a connection we do not have credentials for.

What backs every claim on this page

Each capability names the decision record, module, route or table it is built on. Ask us for any of them in an evaluation and we will walk you through the code.

The server grades the scan, not the phone
src/server/imss-checkpoint-scan-rules.ts validateScan · src/server/api/imss/checkpoints/scans.ts createScan · POST /api/imss/checkpoints/scans
The device never learns the answer
ADR 0012 · src/server/api/imss/mobile/GET.ts CHECKPOINT_COLUMNS · src/server/imss-checkpoint-scan-rules.ts tokensMatch
A refused scan is kept, not discarded
src/server/api/imss/checkpoints/scans.ts listMissedAlerts · GET /api/imss/checkpoints/missed-alerts · imss_checkpoint_scans
NFC, QR or the printed code
src/lib/checkpoint-scan.ts readNfcTag readBarcodeFromVideo capturePosition · ADR 0038
The tour nobody started
ADR 0050 · src/server/imss-tour-compliance.ts gradeTour · src/server/imss-jobs/tour-compliance.ts sweepTourCompliance · GET /api/imss/tour-compliance
Patrol log register
GET /api/imss/patrol-logs · /imss/patrol · OpsPatrol.tsx · imss_patrol_logs
Geofences that act, not just draw
src/server/imss-guard-safety.ts containsPoint · src/server/api/imss/v3/safety-cases.ts geofenceEventCreate · /imss/geofencing · imss_geofences
Building a tour route on screen
imss_tour_checkpoints · src/scripts/imss-maintenance/migration-import.ts
Welfare checks with a lapse that is noticed
src/server/imss-guard-safety.ts welfareOverdue parseInterval · src/server/imss-jobs/welfare.ts sweepWelfareTimers · imss_welfare_timers · /imss/mobile-app
Duress that reaches a person
ADR 0046 · src/server/imss-duress.ts notifyDuress · imss_sos_alerts · /imss/command-centre
The clip the alarm carries
ADR 0046 · POST /api/imss/sos-recording · src/lib/duress-recording.ts · src/server/imss-duress.ts fileDuressRecording
Five escalation levels that advance themselves
src/server/imss-escalation.ts escalate MAX_LEVELS · src/server/imss-jobs/escalation.ts sweepEscalationLevels · POST /api/imss/escalation-events · /imss/escalation · imss_escalation_rules
Location only while on shift
ADR 0022 · src/server/api/imss/guard-locations/POST.ts · imss_guard_locations
Escalation by SMS or push
src/server/imss-notification-resend.ts · src/server/imss-channel-settings.ts
A native app for the guard
ADR 0038 · docs/adr/0038-react-native-field-app.md · imss_mobile_offline_actions · v3 mobile_device · v3 offline_action
Incident register
GET /api/imss/incidents · /imss/incidents · OpsIncidents.tsx · imss_incidents
Incident numbers that cannot collide
src/server/imss-incidents.ts allocateIncidentNumber · POST /api/imss/incidents
Two SLA clocks, scaled by severity
ADR 0047 · src/lib/incident-sla.ts slaDeadlines breachedLevel · src/server/imss-jobs/incident-sla.ts sweepIncidentSla
Acknowledgement by the person it was given to
ADR 0047 · src/server/imss-incident-acknowledge.ts isAssignee · POST /api/imss/incidents/:id/acknowledge
A closed incident stops changing
src/server/imss-incident-closure.ts LOCKED_AFTER_CLOSURE incidentMutationGuard
Photographs and files, served once
ADR 0009 · ADR 0016 · ADR 0023 · src/server/imss-incident-evidence.ts · imss_incident_evidence
The incident report, and the shift’s own
src/server/imss-incident-pdf.ts · src/server/imss-dar.ts · GET /api/imss/dar/:shiftId
Countersigned incident closure
src/server/imss-incident-closure.ts LOCKED_AFTER_CLOSURE
One screen for the shift in progress
GET /api/imss/command-centre · /imss/command-centre · OpsCommandCentre.tsx
Dispatch with a lifecycle, not a status field
src/server/imss-dispatch.ts refuseAction nextOrderNumber · POST /api/imss/dispatch · imss_dispatch_orders · /imss/dispatch
Live map
ADR 0022 · src/pages/imss/ops/OpsLiveMap.tsx · GET /api/imss/guard-locations/live · /imss/map
Signals: a rule over every write
ADR 0031 · src/server/imss-signals.ts matchesConditions convertToIncident · POST /api/imss/signal-rules · imss_signals · /imss/signals
Pass-down the next shift can read
src/server/imss-passdown.ts PASSDOWN_ENTRY_TYPES · src/server/imss-dar.ts · imss_passdown_entries
Outbound webhooks that retry properly
src/server/imss-automation.ts RETRY_LADDER_MINUTES · src/server/imss-jobs/deliveries.ts · imss_deliveries
Visitor sign-in and sign-out
POST /api/imss/visitors · /imss/visitors · OpsVisitors.tsx · imss_visitors
The visitor still on site
ADR 0040 · src/server/imss-jobs/visitor-overstay.ts
Zones, credentials and an event log
src/server/imss-access-control.ts ruleMatches severityFor · src/server/api/imss/v3/access-cases.ts credentialRevoke · imss_access_zones · imss_credentials · v3 access_credential · /imss/access-control
The pattern one event cannot show
ADR 0040 · src/server/imss-jobs/access-correlation.ts correlateAccessEvents · imss_access_events
A live feed from the access-control head end
imss_access_providers · src/server/api/imss/v3/access-cases.ts
Recurring rosters that leave the shift open
ADR 0021 · src/server/imss-roster-recurrence.ts plannedDates · src/server/imss-jobs/roster-generation.ts · POST /api/imss/roster-templates · imss_roster_shifts
The roster refuses an unlicensed guard
ADR 0004 · src/server/imss-roster-rules.ts evaluateRosterability assertGuardRosterable · src/server/imss-licence-classes.ts resolveRequiredLicenceClass
Double-booking, rest and onboarding, refused at the save
src/server/imss-roster-conflict-rules.ts · imss_conflict_rules · /imss/roster
Open shifts and swaps
GET /api/imss/open-shifts · POST /api/imss/shift-swaps · POST /api/imss/mobile/shift-swaps · imss_open_shifts · /imss/shift-swaps
Rostered, actual and approved, all kept
src/server/imss-timesheet-entry.ts payableHours · src/server/imss-timesheet-variance.ts · imss_timesheets · /imss/timesheets
Hours leave once, and are locked behind them
ADR 0018 · src/server/imss-payroll-export.ts lockApprovedTimesheets · imss_timesheet_exports · /imss/payroll-export
No clock-on with an unread post order
src/server/imss-post-order.ts outstandingAtSite · src/server/api/imss/mobile/POST.ts · POST /api/imss/mobile/post-orders
Security licence register
src/lib/imss-lookups-licences.ts · imss_licences · /imss/licences · GET /api/imss/licences/expiry-dashboard
Australian licence classes, by jurisdiction
src/server/imss-licence-classes.ts seedLicenceClasses licenceClassSeedRows · imss_licence_classes
Ninety, sixty, thirty, seven days out
ADR 0040 · src/server/imss-jobs/expiry.ts EXPIRY_WINDOWS
Nine kinds of evidence, one evaluator
src/server/imss-compliance-evaluator.ts EVIDENCE_SOURCES evaluateRequirements · imss_compliance_requirements · imss_work_rights
Induction register that covers everybody
ADR 0053 · src/server/imss-inductions.ts · GET /api/imss/inductions · POST /api/imss/mobile/onboarding · /imss/inductions
SWMS sign-on, and the honest distinction
ADR 0053 · src/server/imss-swms.ts signOnState · /imss/swms · POST /api/imss/mobile/swms
Controlled documents and what was actually shown
ADR 0053 · src/server/imss-controlled-documents.ts assertVersionStored · POST /api/imss/mobile/policies · imss_controlled_documents
Pre-start checks a driver cannot pass
ADR 0050 · src/server/imss-vehicle-checks.ts deriveOutcome workOrderFor · POST /api/imss/vehicle-checks · POST /api/imss/mobile/vehicle-check · imss_vehicle_checks · /imss/vehicle-checks
Hash-chained audit trail
src/server/imss-audit.ts verifyChain appendAuditEvent · uq_imss_audit_events_org_sequence · /imss/audit-trail
Reading an employment file is itself recorded
src/server/imss-data-scope.ts HR_SENSITIVE_TABLES logHrSensitiveReads · imss_permission_access_logs
A portal the customer opens themselves
ADR 0064 · src/server/imss-client-portal.ts requireServiceLine · client-portal/on-site · client-portal/patrols · client-portal/incident
The customer books their own visitors
client-portal/visitors · src/pages/imss/client/guardcore/ClientVisitors.tsx · src/server/api/imss/client-portal/POST.ts
Reports that know who is reading them
src/server/imss-report-executor.ts · GET /api/imss/reports · /imss/reports
Reports that arrive without being asked for
src/server/imss-report-schedule.ts nextRunAt · src/server/imss-jobs/report-schedules.ts
GuardCore Estimator
ADR 0051 · src/lib/imss-estimator-security.ts priceGuardHours priceMobilePatrolRun · /imss/guardcore-estimator · imss_estimates
A security estimate is not a cleaning one
ADR 0051 · src/server/imss-estimating.ts ESTIMATE_DOMAINS · src/lib/imss-estimator-core.ts computeEstimate
Rates that know a static post from a patrol
imss_contract_rates · /imss/contracts · GET /api/imss/contracts
Invoices built from approved hours
src/server/imss-invoice.ts buildInvoice resolveRate · POST /api/imss/invoices/generate · imss_invoice_lines
An hour bills once
ADR 0027 · ADR 0029 · src/server/imss-invoice-payments.ts · src/server/imss-invoice-credit-notes.ts
Recurring billing on the contract
ADR 0019 · src/server/imss-billing-schedule.ts · imss_billing_schedules
Export to Xero, MYOB or plain CSV
ADR 0028 · src/server/imss-invoice-export.ts xeroRow myobRow · /imss/accounting-export

Not built yet

What GuardCore does not do, said before you ask.

A feature page that reads as complete is the easiest way to lose an evaluation later. These are the gaps, in the same words we use in a tender response.

Building a tour route on screen

Roadmap

Sequencing checkpoints into a route with an expected offset and a window per stop. The table exists and only the data importer writes it, so a route can be migrated in and not yet built on screen.

On the roadmap. It is not built, not scheduled, and not something to plan a contract around.

Escalation by SMS or push

Roadmap

The channel vocabulary carries SMS and push and both default to off, because there is no provider behind either. In-app and email are what actually deliver today.

On the roadmap. It is not built, not scheduled, and not something to plan a contract around.

A native app for the guard

Roadmap

The field runner is a mobile web page today. Native iOS and Android is an accepted architecture decision and not shipped code — which is also why background location and a background welfare prompt are not claimed anywhere on this site.

On the roadmap. It is not built, not scheduled, and not something to plan a contract around.

Countersigned incident closure

Roadmap

A named approver signing off a closed incident. The fields exist and the record page shows them unfilled, because the approval step itself is not built.

On the roadmap. It is not built, not scheduled, and not something to plan a contract around.

A live feed from the access-control head end

Roadmap

Events arrive today through an authenticated call carrying the head end’s own event id, which is how a middleware or a scheduled push feeds them. A shipped adapter for a named panel vendor is not built, and every provider starts as not connected.

On the roadmap. It is not built, not scheduled, and not something to plan a contract around.

And plainly, what is absent

  • There is no man-down or no-motion detection. Not built, not modelled, not on the roadmap — a phone in a browser cannot do it, and the native app that could is a decision rather than shipped code.
  • Patrol compliance scoring exists in the API and nothing in the console closes a patrol, so no patrol is scored today. The tour sweep is what actually catches a walk that did not happen.
  • There is no award interpreter and no pay run. GuardCore records hours worked — rostered, actual and approved — and exports them; what anyone is owed is computed by your payroll system, not this one.
  • The competency matrix is a register and not a roster gate. Licences and blocking compliance requirements are what the roster enforces; a competency gap on its own does not stop a shift being saved.
  • Watchlist screening is an operator’s assertion at sign-in, not an automated check against a list.

What it costs

We have not published a GuardCore price.

CleanCore is sold per site per month because a site is already the unit it is switched on by. Security is not: a contract might be one static post or forty mobile patrol runs a night, and a per-site figure would be wrong in both directions. Rather than put a number on this page that nobody has decided, we would rather you told us the shape of the work.

Where it runs

Hosted in AWS Sydney, with every organisation’s data separated in the database itself rather than only in the application. Yarning Crescent is Indigenous-owned and Supply Nation registered, so what you already spend on guarding counts as Indigenous procurement. How the whole platform fits together.

See it refuse a scan it should refuse.

The parts worth twenty minutes: a fabricated scan turned away, a welfare lapse escalating on its own, the command centre with duress at the top, and the roster refusing a guard whose licence expired yesterday.