saILintis
Full-stack - desktop shell, interface, and data layer
saILintis runs a cruise ship. Not one part of it - the whole operation, from the front desk checking a passenger into a cabin to the engineering team logging fuel consumption and filing a technical incident.
It ships as a desktop application rather than a website because the people using it work aboard, and the app is built on Tauri v2: a Rust core with the interface written in React, which keeps the binary small and the system calls native without pulling in a whole browser runtime.
The interesting design problem is not any single screen but the role system. A housekeeping supervisor, a finance manager, and the captain all open the same application and should each land somewhere useful, seeing only what their role permits.
Built with
Desktop
Interface
Data
Pattern
What went into it
- Two audiences, one application
- The sign-in screen splits into Passenger and Employee before anything else, because the two paths share a binary but almost nothing else.
- Twenty-plus role-scoped areas
- Front Desk, Housekeeping, HR, Finance, Operations, Engineering, Entertainment, Restaurant, Safety, Security, Medical, Travel, IT Admin, and the Captain's bridge view each get their own screens.
- Permissions are administrable
- An IT Admin area manages roles and permissions and reads database logs, so access is data rather than something recompiled into the app.
- Rust core, web interface
- Tauri v2 keeps the UI in React while the privileged work happens in Rust - a much smaller install than the Electron equivalent.
- Cached where it counts
- PostgreSQL is the source of truth with Redis caching the reads that repeat, following the MVC separation the brief required.
Live Demo - Username: Test; Password: Test;
The real React interface from the Tauri app, running in the browser. Sign in from either the Passenger or Employee tab with the credentials above to reach the dashboard and its role-scoped departments. The Rust core, PostgreSQL, and Redis are not behind it, so each department shows its empty state instead of live ship data.
Open full sizeScreens
Captured from the running dev build in a browser. The departmental dashboards need an authenticated PostgreSQL session through the Tauri runtime, so the screens here are the ones that stand alone.
Sign in as a passenger - the default entry path. The Employee tab, which routes into the role-scoped side of the app. Passenger registration.