Devices that think ahead. Stories that watch back.
i4Seer / Tick / Roadmap

What ships today. What’s next.

Honesty is a positioning advantage. We don’t list features as shipped until they actually ship. Here’s where things actually stand.

Shipping today.

If we say it on the main page, it works in production. Live at tick.i4seer.com.

Live Shipped

Cellular + WiFi

Both transports run continuously. WiFi-first dispatch with cell fallback, per send. Auto-recovery from outages without operator action. Modem-side TLS via SIM7028.

Live Shipped

Three deployment modes

Bring your own backend, an enterprise Tick Private Portal, or the i4Seer-hosted portal. Same firmware behind all three.

Live Shipped

Operator UI

Live device list over WebSocket, per-device panel with transport indicator, command queue, firmware OTA, audit. localStorage backfill on reconnect, exponential-backoff auto-reconnect.

Live Shipped

Remote commands

Queue commands from the portal; device executes on next chkin and returns the result. UUID-keyed replay cache, signed both ways, written to audit.

Live Shipped

Firmware OTA

Per-device targeting over WiFi or cellular. Kicked off from the portal (operator targets an image) or the device (ota go). Chunked download with compression and SHA verification, resume-on-crash via NVS, progress events sampled and rendered in the UI.

Live Shipped

Auto-provisioning

Factory-fresh devices land in the unclaimed pool on first HMAC-valid POST, with an auto-named label. Operator clicks Approve to bring it into service.

Live Shipped

Signed audit log

Every approval, label change, queued command, firmware target, OTA outcome — logged with operator identity. Per-device JSONL rotated monthly. Export via tick-cli audit --days/--device/--op.

Live Shipped

On-device error log

64KB flash partition, up to 1024 indexed entries. chkin v2 carries a breadcrumb; the UI renders a colored chip per device. Drill in with queued errlog show. Survives reboot and reflash.

Live Shipped

Offline readings queue

Dedicated 64 KB flash partition. 3,840-slot append-only ring — ~64 hours at one-minute records, ~26 days at ten minutes. Reboot-safe, CRC-16 per slot. Drains oldest-first as soon as the device gets back online.

Live Shipped

Bidirectional HMAC

HMAC-SHA256 of body + timestamp + nonce on device requests; signed responses back. Replay cache on command IDs. Salt rotation supported with overlap window.

Live Shipped

Frame-level AES-256-GCM

Opt-in FRAME_FLAG_ENCRYPTED bit on operator↔device frames. AES-256-GCM with 12-byte per-frame nonce. HMAC-verified before GCM tag check — defense in depth on top of TLS.

Live Shipped

Encryption at rest

Per-device HMAC secrets can be sealed with AES-256-GCM using a KEK loaded at boot. Opt-in via TICK_KEK_PATH. Plaintext fallback for development.

Live Shipped

Wrapped operator tokens

Operator HMAC token is wrapped in browser localStorage with AES-256-GCM, keyed by PBKDF2-SHA256 (600k iters) of a login passphrase. Plaintext in memory only during a session.

Live Shipped

Operator metrics

Per-op counters, queue depth, device counts, frame errors. Surfaced through OP_METRICS and rendered in the operator UI status header.

Live Shipped

Hardened wire + lifecycle

Strict CSP and security headers, HTTP-to-HTTPS redirect listener, graceful SIGTERM/SIGINT shutdown that drains in-flight requests, operator tokens with 14d idle / 90d hard expiry.

Building now.

Active priorities. These are the next features customers will see.

Later.

On the list, but waiting for a customer to ask. We don’t speculatively build.

Public read-only fleet

One operational fleet exposed unauthenticated, field-scrubbed and rate-limited — the demo as the product. Behind alerting and Routes in priority.

Self-service claim tokens

Customer enters a one-time token printed on the device label and the device joins their org. Today: a platform operator clicks Approve.

Charts on device detail

Trend lines, range pickers, threshold overlays. Most useful once alerting overlays its rules on the same chart.

Stripe billing

Per-device-per-month, billed to org owner. Won’t exist until someone’s offered to pay.

Device-went-dark detection

The other half of alerting: a device that should be reporting and isn’t. Same plumbing as threshold alerts, different trigger.

Scale to a real database

The current file-based store is fine to a few thousand devices. Beyond that, time-series indexing alongside. Files stay valid through the transition.

Won’t build.

Things that sound like good ideas but trade off against the design. Listed here so we don’t get asked twice.

Dashboard config UI for cadences

Editing reading cadences and send intervals from a browser form looks friendly but creates a misconfiguration surface that a typo can disable a fleet through. We’ll keep cadence changes in the command queue and the serial shell, where they go through audit and recover-from-typo paths the UI doesn’t have.

Interactive remote PTY / xterm session

A live shell over the modem looks good in a demo but doesn’t survive cellular jitter or device sleep. The queued-command model fits the device’s actual lifecycle: command goes in, runs on next chkin, result comes back — signed, auditable, and replay-proof.