DEV Community

Cover image for RFID for cruise ships (Kenek soft)
Alex
Alex

Posted on

RFID for cruise ships (Kenek soft)

How KenekSoft and OrbitalIQ Engineered a Fully Offline-Capable RFID Payment System for MSC Cruises

In 2025, MSC Cruises faced a growing need: simplify and automate onboard purchases across their fleet. They needed a system that would eliminate the need for cash or cards and still work reliably without internet access in the middle of the ocean.

KenekSoft, in collaboration with OrbitalIQ, delivered exactly that: a fully edge-based RFID purchasing system that works independently of the cloud, scales to thousands of concurrent users, and prioritizes both reliability and passenger experience.

The Setup: Edge-First RFID Infrastructure

Each passenger receives an RFID wristband upon boarding. It’s waterproof, tamper-proof, and mapped to their internal cruise account. This one wristband gives them:

Cabin access
Personal ID for all ship systems
The ability to pay instantly for anything onboard
RFID readers are deployed across the ship—in every bar, restaurant, shop, spa, and lounge. They’re connected to local edge servers deployed per deck or zone. These edge nodes form a decentralized transaction mesh: no internet dependency, no central bottleneck.

How Transactions Work

When a guest taps their wristband, the nearest RFID reader reads the UID, authenticates it locally via edge-stored profiles, and processes the transaction immediately. The POS terminal calculates the amount (e.g., based on item, time, discounts), deducts the balance, and logs the transaction in a local queue.

No cloud needed. Everything—authentication, pricing, billing—is handled locally.

Once satellite connection is reestablished (usually daily), the edge nodes batch-sync all transaction logs to the main financial system via MQTT and gRPC.

Offline-First Architecture

All transaction logic runs locally: no dependency on the internet or main data center.
Redis and PostgreSQL handle local state and durable writes.
gRPC used for structured data exchange between edge services and POS units.
MQTT for lightweight, persistent delivery during sync.
Docker + Nomad used for edge service orchestration. Each node runs its own isolated services for billing, sync, and monitoring.
Resilience and Failover

The system is designed to never break the transaction flow:

If one edge node goes down, nearby ones take over (RFID readers are multi-linked).
Transactions are queued if even local storage is unavailable (e.g., fallback to RAM buffer).
In the worst case (RFID reader hardware failure), mobile POS terminals with NFC act as fallback.
Security Model

AES-128 encryption for wristband ID payload
Edge data encrypted at rest, sync data encrypted in transit
Strict RBAC on every POS terminal and admin panel
Wristbands can be disabled remotely in case of theft or loss
Device logs rotate and sync securely, enabling forensic audits if needed
Dev Experience

Most services are written in a mix of C++ (for real-time RFID middleware) and Node.js/TypeScript (for POS terminals and management UI). The system is modular—each service can be updated or replaced independently.

All components are dockerized, versioned, and deployable remotely via pre-loaded update images when ships are docked.

Outcome

MSC Cruises saw immediate operational and business impact:

Drastically reduced payment friction (most transactions under 1.2s)
Increased onboard revenue due to lower cognitive load and no card requirement
Zero downtime—even during long satellite blackouts
Full audit trail for every transaction, even offline
Final Thoughts

Designing for disconnected environments like cruise ships forces engineers to rethink assumptions: no real-time cloud, no central databases, and minimal support latency. This RFID system built by KenekSoft and OrbitalIQ shows that with the right architecture—edge-first, modular, resilient—you can deliver a seamless guest experience without ever relying on the internet.

If you're working on embedded systems, maritime infrastructure, or edge networks, this is a real-world example of how offline-first can outperform always-online.
Image description

Top comments (0)