3 minute read

TL;DR
AssetTrack is no longer just tracking assets โ€” it now proves custody. With acknowledgment enforced, a human-readable report added, and a clear path to PDF + email receipts, the system now shows who had what, when, and under what responsibility.

Project page: AssetTrack.

Context

Early versions of AssetTrack answered a simple question:

Where are the assets?

That was useful, but not enough.

In real operations, especially in government or controlled environments, the real question is:

Who is responsible for the asset right now, and can you prove it?

That is the difference between:

  • tracking inventory
  • and proving custody

This milestone focused on closing that gap.

What changed

1. Acknowledgment is now enforced

Before, issuing or returning assets could happen without a clear responsibility checkpoint.

Now:

  • the operator runs the workflow
  • the holder must acknowledge responsibility
  • the system blocks commit if acknowledgment is missing

This is simple, but powerful.

Think of it like a tool room:

  • You donโ€™t just take a tool
  • You sign for it

AssetTrack now enforces that โ€œsign for itโ€ moment.


2. The system records responsibility, not just movement

Each event now captures:

  • who performed the action (operator)
  • who accepted responsibility (holder)
  • when it happened
  • what assets were involved

This matters.

The operator executes the action.
The holder owns the responsibility.

That separation is what makes the audit meaningful.


3. Human-readable admin report

We added a new admin-only report at:

/admin/report

This is not a backup.
It is a readable view of the system.

It includes:

  • assets
  • holders
  • organizations and buildings
  • current custody
  • recent active events
  • location and case data

Why this matters:

The raw SQLite backup is correct, but not usable in the field.

This report answers:

What is happening in the system right now?

Without requiring a database tool.


4. Clear separation of concerns

We now have three clean layers:

  1. Event system (truth)
    • append-only
    • audit record
    • source of truth
  2. Workflow UI (operations)
    • issue
    • return
    • queue โ†’ preview โ†’ commit
  3. Inspection layer (visibility)
    • admin report
    • readable system state

This separation is intentional.

It prevents confusion between:

  • what happened
  • what the operator is doing
  • what leadership needs to see

5. Preparing for PDF and email receipts

We also defined the path forward for receipts.

Real-world workflow:

  • Bob (operator) issues assets
  • Sally (holder) accepts responsibility
  • Jonah (authority) must be notified

The system now:

  1. records the custody event first
  2. will later generate a receipt from that event
  3. will send it when connectivity is available

Key rule:

The event is the truth.
Email is just a notification.

Upcoming work:

  • PDF export of the report (shareable receipt)
  • deferred email queue (offline-first delivery)
  • attaching PDF receipts to those emails

What I learned

1. Words matter more than code

The shift from:

  • โ€œstock out / stock inโ€

to:

  • โ€œissue / returnโ€

seems small.

But operators donโ€™t think in database terms.
They think in actions.

Clear language reduces mistakes.


2. Responsibility must be explicit

Before acknowledgment enforcement, responsibility was implied.

That is not good enough.

Now:

  • no acknowledgment โ†’ no commit

That makes the system trustworthy.


3. Offline-first changes everything

You cannot assume:

  • email works
  • network exists
  • systems respond immediately

So the design became:

  • store first
  • send later

That keeps the system reliable under real conditions.


4. Keep the system small, then layer up

We did not jump straight to:

  • PDF generation
  • email delivery
  • queue retries

Instead:

  1. enforce acknowledgment
  2. add readable report
  3. define future layers

This keeps each step testable and safe.


Next

Next steps are already defined:

  • Add PDF export for the admin report
  • Build a deferred email queue
  • Attach PDF receipts to outgoing messages

Each step builds on the last, without breaking the core system.


Bottom line

AssetTrack has crossed an important line.

It is no longer just:

โ€œWhere is the asset?โ€

It is now:

โ€œWho is responsible for this asset, and can you prove it?โ€

That is the difference between tracking and accountability.

Updated: