Privacy Policy

Rainbeam: Harbor Watch

Effective date: 2026-11-04

This policy explains how this application handles information and how to contact us about privacy.

Information we process

Rainbeam: Harbor Watch stores your current shift, vessel discoveries, completed routes and results, pending result uploads, language, sound, accessibility and reminder preferences locally on your iPhone. An automatically issued random installation secret is stored in the iOS Keychain for this device; there are no user accounts or login details. When the app connects for results or standings, the backend stores a hash of that secret, an internal random installation identifier and creation time. Completed-shift uploads contain a random round identifier, coast and shift numbers, duration and stop count; the server adds a completion timestamp. Route drawings, journal discoveries and preferences are not uploaded. The app caches anonymous standings locally. Network requests necessarily disclose network metadata such as an IP address and request timing to Cloudflare, the public HTTPS proxy, and Railway infrastructure. The application server uses temporary hashed network-address counters for rate limiting and logs stable operational error codes, not secrets or submitted result bodies. The app does not use advertising, analytics, location, contacts, camera or microphone SDKs.

How we use information

Local data lets you continue an interrupted shift, keep progression and the vessel journal, retain preferences and play the complete game offline. The installation secret authorizes access and deletion for the results associated with that installation. Server results provide a casual anonymous top-ten leaderboard and support retry-safe synchronization after an offline session. Temporary rate limits and operational events help protect service availability and diagnose failures. Optional reminders are scheduled locally only after you enable them and grant notification permission.

Service providers and sharing

The backend and its PostgreSQL database are hosted on Railway, which processes data and infrastructure request metadata to operate the service. Cloudflare terminates HTTPS for the public API and website and forwards requests over HTTPS to the pinned Railway service. Cloudflare processes network metadata, including IP addresses, and request contents as needed to provide that proxy service. The leaderboard exposes only rank, duration and stop count to other installations; it does not expose installation identifiers, secrets or route drawings. Native Apple system services provide Keychain, local storage and local notifications. Device backups are governed by your Apple and device settings. No advertising, analytics, email-delivery or external support service is integrated. We do not sell personal information. Information may be disclosed when legally required. If you choose to email the public privacy contact, your email provider and the contact's mail provider will process that correspondence outside the app.

Data retention

Local progress and preferences remain on the device until removed with the app or through device storage controls. Keychain storage may outlast app removal; uninstalling is not a reliable way to delete server records. Pending results remain locally until successfully uploaded or until online data deletion succeeds. Cached standings remain until replaced or cleared by online data deletion. Active server installations and results have no automatic expiry configured; they remain until deletion is requested using the installation secret. Temporary rate-limit counters are held in process memory in hourly buckets and disappear on process restart or bucket cleanup. We do not specify a fixed retention period for Cloudflare infrastructure logs or Railway infrastructure logs or backups because their configured lifecycle is controlled by the infrastructure providers. Deleted active rows may remain in infrastructure backups until those backups expire under the hosting configuration.

Deleting your information

In Settings, choose Delete online results and confirm while connected. The backend removes the installation and all associated active result rows, revokes its secret, and the app clears its saved secret, pending upload queue and cached standings after success. If the response is lost, retrying recognizes the revoked secret; ordinary connection failures keep the data and show a retry message. This operation preserves local game progress. New completed shifts can later create a new anonymous installation and sync again. Remove the app's data through iOS storage controls to remove local progress. We cannot recover or reliably identify installation-scoped server records after the secret is lost, and deleting the app alone does not send a server deletion request. Backup copies are not individually rewritten by the app and follow the hosting backup lifecycle.

Permissions and your choices

Notifications are optional and requested only when you enable unfinished-shift reminders in Settings. Reminders are local; the app does not register for remote push notifications. Turning reminders off cancels the app's pending reminder. You can also withdraw notification permission in iOS Settings at any time; the game continues to work. No geographic location, camera, microphone, contacts or photo-library permission is requested. Network access is used for result synchronization, standings and opening this policy; the core game remains available offline.

Your privacy rights

You may request information, correction or deletion concerning your data by contacting CuthwineMerewyn@icloud.com. The in-app deletion control is the direct way to remove installation-scoped server data without disclosing the secret. Do not send your installation secret by email. We may need enough information to verify a request without exposing another installation's data. Depending on your jurisdiction, you may also have rights to access, portability, restriction or objection and to complain to an applicable data-protection authority. We cannot link an anonymous installation to a name or email unless you independently provide information that establishes that link.

Security

Connections to the public API and policy website use HTTPS terminated by Cloudflare, which proxies requests over HTTPS to the pinned Railway service. Each installation receives its own cryptographically random secret, stored in a device-only Keychain item. The server stores a SHA-256 hash rather than the raw secret and verifies it before result operations. Database transactions, scoped queries and cascading deletion isolate installations. Request size limits, validation, timeouts and rate limits protect the service. Local saves use atomic writes and iOS file protection after first unlock. Server database credentials remain on the hosting service and are not shipped in the app. No storage or transmission method can be guaranteed completely secure. Losing the installation secret prevents restoration of access to its server records.

Children’s privacy

The game is designed for players aged sixteen and older and is not directed to children under sixteen. It does not ask for a player's age, name or contact information. If you believe a child has provided personal information through this service, contact CuthwineMerewyn@icloud.com. Anonymous result deletion is available from the installation that submitted the records.

Changes to this policy

This page describes the current app and backend practices as of the effective date above. We will update this policy and its effective date when processing changes. The Privacy Policy link in app Settings opens the current public page. Material changes will be described in the updated policy and relevant app release information. The public privacy contact is CuthwineMerewyn@icloud.com.