Changelog
What's new
One-command server setup & node scaling
Setting up a new production server or adding nodes to scale horizontally now requires a single command instead of manual steps.
New
- Zero-prompt setup — copy
.setup.env.example, fill in three fields (GitHub PAT, GHCR token, owner email), runsudo bash setup.sh. All seven steps run automatically: OS hardening, k3s, operators, runner, secrets, manifests, TLS. - Node join —
join-node.sh --print-joinon the master prints a ready-to-paste command for new nodes. The new server joins the cluster, installs the GitHub runner, and becomes schedulable in under 5 minutes. - Health check —
health-check.shverifies nodes, pods, database replicas, Redis, all secrets, GitHub runner, and TLS certificates. Exits non-zero if anything is missing. - OS bootstrap script — automates the manual steps previously described only in docs: package installs, user creation, SSH hardening (key-only, no root), UFW firewall.
- GHCR image pull secret —
07-ghcr-secret.shcreates theghcr-secretKubernetes secret automatically, eliminating the most common cause ofImagePullBackOffon fresh installs.
Platform hardening & GDPR compliance
A comprehensive security review covering authentication, secrets management, authorization, input validation, and data privacy.
Authentication
- JWT session verification — all API calls now require a signed JWT from the session cookie. User identity can no longer be spoofed via an unverified header.
- Rate limiting — login is limited to 10 attempts / 5 min per email and 30 / 5 min per IP. Registration is limited to 10 / hour per IP. Implemented via Redis.
- Password requirements — minimum 12 characters, at least 3 of 4 character classes (uppercase, lowercase, digits, symbols).
Secrets & Encryption
- AES-256-GCM encryption at rest — SSO credentials, VPP s-tokens, DEP server tokens, and webhook secrets are all encrypted before storage using a platform-level
ENCRYPTION_KEY. - Webhook secrets — plaintext is returned only once (on create or rotate). The stored value is always encrypted; HMAC-SHA256 signing decrypts at delivery time only.
Authorization
- Org deletion restricted to Owner — the
DELETE_WORKSPACEpermission grant can no longer bypass this; the check is now hardcoded tomemberRole === "OWNER". - Device metadata schema — arbitrary JSON is no longer accepted. Only explicit fields (
notes,assetTag,location,department,owner) pass validation. Command payloads are restricted to primitives.
Privacy (GDPR)
- Data transfer consent — activating DEP (Apple Business Manager), VPP (Apps & Books), or Android Management API now shows an explicit notice explaining what data flows to Apple / Google and under which legal basis before the token can be uploaded.
- Audit log cleanup — a daily Kubernetes CronJob deletes audit entries older than 90 days, in line with GDPR data minimization requirements.
- Device names removed from audit logs — rename operations no longer store the old or new device name in the audit
metadatafield. - Account deletion — users can now permanently delete their account. All memberships are removed first; deletion is blocked if the user is the sole owner of an organization.
Infrastructure
- Read-only container filesystems — all app containers now run with
readOnlyRootFilesystem: true. Ephemeral volumes cover/tmpand Next.js cache. - Worker network egress restriction — HTTPS egress is limited to non-RFC1918 addresses, preventing lateral movement to internal services.
Compliance violation email alerts
Admins are now automatically notified when devices fall out of compliance — no more polling the dashboard to spot violations.
New
- Admin email alerts — when a new compliance violation is detected, all org admins receive an email listing the affected device, rule, and current value.
- Hourly background scan — compliance rules are evaluated on a scheduled BullMQ job every hour, not only on check-in. Devices that go out of policy between check-ins are caught.
- Deduplication — alerts fire only on new violations, not on repeat scans of the same existing violation.
Webhooks
Connect ionvoy events to your own infrastructure — SIEM, ticketing, automation workflows, or any HTTP endpoint.
New
- Outbound webhooks — create endpoint URLs that receive signed POST requests when platform events occur (device enrolled, command completed, compliance violation, etc.).
- HMAC-SHA256 signing — every delivery includes an
X-Ionvoy-Signatureheader so recipients can verify authenticity without exposing the secret. - Secret rotation — webhook secrets can be rotated at any time. The new plaintext secret is shown once; after that it is stored encrypted and never exposed again.
- Audit trail — webhook creation and secret rotation are recorded in the org audit log.
Platform foundation
Initial release of the ionvoy MDM platform — multi-tenant, cross-platform device management for Apple, Android, Samsung Knox, and interactive displays.
Core
- Multi-tenant organizations — RBAC with Owner / Admin / Member / Viewer roles and per-user permission overrides.
- Custom authentication — email + password, bcrypt, JWT in httpOnly session cookie. No third-party auth dependency.
- Invite system — invite by email, by @domain wildcard, or via support agent link.
- Async command queue — BullMQ + Redis. Commands survive device offline periods and are delivered on next check-in.
- Audit log — every command, enrollment, and admin action is recorded with actor, timestamp, and status transitions.
- Partner portal — distributors can manage multiple customer orgs and issue license credits.
Apple MDM
- OTA enrollment via
.mobileconfig(Two-Phase Challenge/Response) - APNs wakeup push — real HTTP/2 session with persistent connection pooling
- Commands: Lock, Wipe, Restart, Shutdown, Clear Passcode, Remote Desktop, Install/Remove Profile, Install/Remove App, Device Information, Installed App List, Profile List
- VPP / Apps & Books integration (device-based licensing)
- DEP server token management (sync with Apple Business Manager)
Android & Samsung Knox
- Enrollment token generation + revocation
- Commands: Lock, Wipe, Reboot, Install/Remove App, Set Policy
- Samsung Knox API integration (parallel to Android Enterprise)
- Compliance rules with automated remediation (lock on violation)
Display Devices
- Newline & DTEN adapters — Volume, Brightness, Restart, Screenshot
- Range validation before queueing (0–100 for volume & brightness)
Dashboard
- Device table with real-time status updates via Server-Sent Events
- Device groups with policy assignment
- Compliance dashboard — open violations, per-rule breakdown, non-compliant device list
- App catalog — install / remove per group across all platforms
- Overview page with device stats and recent audit activity
- Dark / light mode
- Mobile companion app (React Native / Expo) — device detail, commands, groups