Skip to content

Ship Seek: Privacy Policy

This is a draft for legal review. It is not a finished, legally checked document. Do not treat it as binding until a solicitor has reviewed it and Josh has signed off on the final wording.

Last updated: 5 September 2026 (draft). <!-- DRAFT for Jack: set the date when you approve these changes -->

Who runs Ship Seek

Ship Seek is operated by Josh Hosking, an individual based in the United Kingdom, not a registered company. This section will be updated with a registered business name and address if Ship Seek incorporates. For now, contact Josh at the support address given at the end of this policy for anything covered here.

What this policy covers

This policy explains what personal data Ship Seek collects when you use the app or the website, why, how long it is kept, who it is shared with, and what rights you have over it. It applies to the mobile app (iOS and Android), the web app at app.shipseek.app, and the TV and host site at shipseek.app.

What we collect

Account information. When you sign up, we collect an email address (for email sign-in) or the identifier your chosen sign-in provider gives us (Sign in with Apple, Google). <!-- DRAFT for Jack: replaces "we only collect a display name and, optionally, a photo, no email required, until you choose to add one later." --> If you quick join as a guest, we collect a display name, an email address and, optionally, a photo. The email is kept as an unverified contact, separate from your sign-in details, until you confirm it with a code we send you. Until then it is not attached to your account. It lets you get back into your game if you lose your phone. A guest can later upgrade to a full account without losing their game history. Your email is visible only to you and to Ship Seek admins, never to other players.

Guest accounts. A guest account is deleted automatically 90 days after you last used the app, or 30 days if the guest never joined a game. A guest in a game that is still running is not deleted. Deleting a guest removes the profile, photo and any email you saved, and your name in past games becomes "Deleted player". Confirming your email, or linking Apple or Google, turns a guest into a full account, which is kept until you delete it. <!-- DRAFT for Jack: R2-25 guest clean-up, Docs/Audits/R2-25-Design.md; 30 days with no seat, 90 days with one, never a full account; supabase/migrations/20261009160000_ship_seek_guest_cleanup.sql. -->

<!-- Sources: apps/mobile/app/(auth)/quick-join.tsx and apps/web/components/auth/QuickJoinForm.tsx (email validated before joining, photo optional); supabase/functions/quick-join-contact/index.ts (saved in ss_guest_contacts with verified_at null, code sent by Supabase Auth); supabase/migrations/20260926120000_ship_seek_quick_join_recovery.sql; supabase/migrations/20261002140000_ship_seek_profile_email_privacy.sql (ss_profile_private, own-or-admin read); Docs/Testing/Bug-and-Feature-List.md FEAT-001, DEC-012, DEC-013 (upgrade is "add an email with a code"; Apple link was still to follow, so not mentioned). -->

Profile photo. Optional. Shown to other players in the games you join. <!-- DRAFT for Jack: added the next two sentences --> Profile photos are stored in a public location. Anyone who has the link to a photo can load it without signing in, though the photos are not listed anywhere.

<!-- Sources: supabase/migrations/20260902080000_ship_seek_schema.sql ("ss-avatars: public read" policy); supabase/migrations/20261006220000_ship_seek_plan_caps.sql header (the ss-avatars bucket stays public; only anonymous listing is closed). -->

Photos of other players. This is the one most worth reading carefully. Ship Seek is a hide-and-seek game: when you find another player, you take a photo as evidence of the capture. Some game features (wildcards, radars) also ask you to take a photo of yourself or your surroundings in response to a challenge. These photos are shared with the other players in that specific game so they can see the capture or the response. See "Photographing other players" below for the consent process around this.

<!-- DRAFT for Jack: new paragraph on short video clips (A1-3-011 item 1) -->

Short video clips. On the website, a wildcard or radar can ask for a short muted video clip instead of a photo. The clip is shared with the other players in that game, in the same way as a photo. It is stored privately, not in a public location, and it is deleted on the same schedule as photos (see "How long we keep it").

<!-- Sources: apps/web/components/game/VideoClipCapture.tsx (muted web clip); supabase/migrations/20261006150000_ship_seek_video_responses.sql (private bucket ss-response-videos; set_photo_expiry sets expires_at on video_path rows with the photo schedule). The iOS app does not record clips (Docs/Audits/A1-3-iOS-Privacy.md A1-3-011 item 1: web only). -->

Chat and other game text. Messages you send in a game's chat, radar text answers, dispute detail text, and anything else you type into the app during a game are stored and shown to the other players in that game as intended by the feature.

<!-- DRAFT for Jack: three new paragraphs, inserted before "Push notification token" -->

Points, stats and badges. For each game we record what is needed to score it: your captures, penalties and points and, in Capture the Flag games, your tags, captures and time carrying a Flag. These are kept as part of the game record and shown in the recap. Badges you earn are stored against your account. Players you share a game with, your accepted friends and the people in your crews can see your badges. A Flag player's identity stays secret while the game runs and is only shown in the end-of-game recap.

<!-- Sources: supabase/migrations/20261002120000_ship_seek_points.sql (stored per-player points); 20261004100000_ship_seek_ctf_stats.sql (private CTF tables, recap only after completion); 20261004200000_ship_seek_badges_social.sql (badge read policy: own, shared-game, friends, crew mates, admin; blocks stop the friend and crew branches only). --> <!-- DRAFT for Jack: new paragraph, Play again (R2-45). Source: supabase/migrations/20261007230000_ship_seek_play_again.sql (ss_play_again_interest; rows deleted with the game or your account) -->

Play again. After a game you can tap Play again. We record that you asked, so that when the host runs the game again we can send you an in-app notification (and a push, if you allow notifications) with a link to join. The host sees how many players asked, not who. The record is deleted with the game or your account.

Leaderboards. Ship Seek has a global leaderboard, crew boards and friends' boards. Appearing on the global board is on by default and you can turn it off at any time in your profile. Turning it off takes effect immediately. For players who are on the board we keep a copy of their display name with their board entry so others can see who they are. If you opt out, that copy is removed straight away.

<!-- Sources: supabase/migrations/20260918100000_ship_seek_leaderboard_opt_in_default.sql (default is ON, opt-out; the brief said "global opt-in", the code says opted in by default); 20261003180000_ship_seek_phase3_boards.sql (DEC-023 snapshots for opted-in users only, trigger clears them on opt-out; DEC-017 live opt-in check in the read policy); apps/web/components/profile/LeaderboardOptIn.tsx ("On by default; you can hide yourself any time"). -->

Voice notes. In a game's Everyone chat you can send a short voice note (up to 15 seconds). The microphone is used only while you hold the record button. A voice note goes to everyone in that game, who can listen to it, and anyone can report it. It is stored privately, not in a public location. The host can turn voice notes off for a game and can remove a note. The push notification names the sender and carries no audio.

<!-- Sources: packages/core/src/rules/voiceRecorder.ts VOICE_COPY (consentBody, micBody; the repo's VOICE_COPY is in voiceRecorder.ts, not voiceNotes.ts); packages/core/src/rules/voiceNotes.ts (VOICE_NOTE_MAX_MS 15000, Everyone channel only); supabase/migrations/20261005120000_ship_seek_voice_notes.sql (private bucket ss-voice-notes, ss_set_voice_notes_enabled, ss_remove_voice_note); supabase/functions/_shared/audience.ts (voice push body "<name> sent a voice note", Everyone channel only). --> <!-- DRAFT for Jack: new paragraph on game modes (A1-3-011 item 2) -->

Game modes and deck reports. Some game modes keep extra records, tied to your player in that game. Muster, Hot or cold, Secret Targets and Sardines record who started an action and who it affected. Secret Targets also keeps each player's private assignment and strikes, which are shown only as that mode's rules allow. In some modes a Hider or a Flag player can report which deck of the ship they are on. This is something you choose to tell the game. It is not read from your phone's location. We keep the latest deck report with the game record.

<!-- Sources: supabase/migrations/20261006140000_ship_seek_sardines.sql and 20261004100000_ship_seek_ctf_stats.sql (per-player records); Docs/Audits/A1-3-iOS-Privacy.md A1-3-004 (columns muster called_by, hot-cold fired_by, targets user_id); ss_hider_locations written by ss_set_my_deck (self-reported deck; packages/core/src/rules/captureTheFlag.ts CtfPlayerLocation, deckFreshness.ts); supabase/migrations/20261006160000_ship_seek_overnight_hardening.sql line 1010 (a player's row is cleared on a status change). No code deletes ss_hider_locations at game end today. --> <!-- DRAFT for Jack: new paragraph on abuse limits (A1-3-011 item 3) -->

Short-lived safety records. To stop abuse we keep a few short-lived records: how often a network address (stored as a scrambled, hashed value, not the address itself) has used quick join, and counts of recent seat-transfer and catch-code attempts. These are deleted after 24 hours.

<!-- Sources: supabase/functions/quick-join-contact/index.ts (ip_hash = sha256 of salt + address, upserted into ss_quick_join_ip_limits); supabase/migrations/20261006210000_ship_seek_retention_jobs.sql (ss_quick_join_ip_limits, ss_seat_transfer_attempts, ss_private.catch_code_attempts deleted after 24 hours). NOT VERIFIED: whether QUICK_JOIN_IP_SALT is set in production (A1-3-012); without it the hash can be reversed, so Jack to confirm. That migration must be applied for the 24 hour claim to be true. -->

Push notification token. If you allow notifications, we store a device token so we can send you game alerts (a wildcard or radar is played, someone found you, a capture is disputed or resolved, a game starts, pauses, resumes, is cancelled or ends, you are frozen, you are tagged or your team's Flag is captured, a deck is closing or locked, the host asks you to check your deck, a game, team or voice-note message arrives, a crew invite arrives, or a game you asked to play again opens) <!-- DRAFT for Jack: list extended. Sources: supabase/functions/_shared/audience.ts EVENT_SCOPE and EVENT_TITLES; supabase/functions/_shared/userNotifications.ts (crew joined, crew game invite) -->. Chat and voice-note alerts are not sent for messages from someone you have blocked or who has blocked you <!-- DRAFT for Jack. Source: supabase/functions/notify/index.ts loadBlocks (chat and voice only), audience.ts line 385 -->. This token identifies your device for push delivery, not you personally, though it is linked to your account so we know where to send things.

<!-- DRAFT for Jack: new, A1-3-011 item 7 -->

The text of a push notification, including the sender's name and the words of a chat message, passes through Expo's push service and then Apple's or Google's push service to reach your phone. Voice-note alerts carry the sender's name only, never audio.

<!-- Sources: supabase/functions/_shared/audience.ts (chat: title is the sender name, body is the message text; voice body is "<name> sent a voice note"); supabase/functions/_shared/expo.ts (sent through Expo's push API). -->

Purchase entitlements. If you buy Game Pass, Host Pro, or a library pack, our payments processor, RevenueCat, tells us which entitlement you now hold and until when. We do not receive or store your card details; the app stores (Apple, Google) or RevenueCat's web billing (Stripe) handle payment directly.

<!-- DRAFT for Jack: added -->

Web purchases through RevenueCat Web Billing are offered only when switched on, and only to a signed-in full account, not to a guest. Test (sandbox) purchases made by App Review or testers grant the same access as real ones, and each purchase record notes whether it was a test or a live purchase.

<!-- Sources: packages/core/src/rules/webCheckout.ts (DEC-024: needs the web key configured, a signed-in user, not anonymous); Docs/Testing/Bug-and-Feature-List.md DEC-026 (sandbox grants, environment recorded). -->

What we do not collect. We do not track your location. Ship Seek is rule-based and honour-based by design, not a location-tracking app. The only location-like item is the deck report described above, which you choose to give. <!-- DRAFT for Jack: last sentence added, A1-3-011 item 8. Source: no location permission in apps/mobile/app.config.ts; deck report is self-reported (ss_set_my_deck). --> We do not run advertising or sell data to advertisers, and we do not use any product analytics SDK as of this draft. If that changes, this policy will be updated first.

<!-- DRAFT for Jack: added. The old "Changes" section implied no crash reporting tool; Sentry is now in the apps and website -->

Crash and performance reports. The apps and the website send crash and error reports, and a small sample of performance timings, to Sentry so we can fix problems. They are set up not to include personal details, and screen recording (session replay) is off.

<!-- Sources: apps/web/instrumentation-client.ts and apps/web/sentry.server.config.ts (sendDefaultPii false, replay rates 0, tracesSampleRate 0.1); apps/mobile/package.json (@sentry/react-native); Docs/Store-Listing.md Diagnostics rows. Sentry only starts when a DSN is set; confirm one is set in the production builds. -->

Why we collect it

Everything above is collected to run the game you are playing: to identify you to your crew, to let you take part in captures, wildcards and radars, to let the host and other players see the outcome, to notify you when something happens, and to unlock what you have paid for. We do not use your data to build an advertising profile, and we do not sell it.

How long we keep it

Evidence and response photos (capture evidence, wildcard photo responses, radar photo responses) are deleted automatically after a retention period that depends on the plan the host used to run the game:

  • Free-tier games: 7 days after the game ends.
  • Games run with a Game Pass: 30 days after the game ends.
  • Games run under Host Pro: 90 days after the game ends.
<!-- DRAFT for Jack: added. The brief said Game Pass and Host Pro are both 30 days; the code seeds Host Pro at 90, so the list above is left as it was. -->

The clock starts when a game ends or is cancelled, so the photos from a cancelled game expire on the same schedule. The length is set by the plan recorded when the game started, and the figures are held in our plan settings, not in the app. <!-- DRAFT for Jack (R2-10): replaces "is kept until the report is resolved". Reports are never closed automatically; the file stays until a person reviews the report. -->A photo, clip or voice note that is part of an open report is kept until a moderator reviews the report, then deleted on the usual schedule.

<!-- Sources: supabase/migrations/20260905110000_ship_seek_hosts_entitlements.sql (ss_plan_limits recap_retention_days: free 7, game_pass 30, host_pro 90); supabase/migrations/20261005120000_ship_seek_voice_notes.sql set_photo_expiry (status completed OR cancelled; plan = games.retention_plan, else host plan; fallback 7 days) and ss_purge_expired_photos (a photo named by an open report stays out of the purge queue). ss_plan_limits is editable data, so check production values before publishing. --> <!-- DRAFT for Jack: new -->

Voice notes are not on that schedule. They are hidden when the game ends or is cancelled, earlier if the host removes them, or if you delete your account. <!-- DRAFT for Jack: next sentence added, A1-3-011 item 5 --> The audio file itself is then removed from storage by a clean-up job, usually within a day. <!-- DRAFT for Jack (R2-10): same wording as the photo paragraph above. -->A voice note that is part of an open report is kept, and hidden from players, until a moderator reviews the report, then deleted on the usual schedule.

<!-- Sources: supabase/migrations/20261005120000_ship_seek_voice_notes.sql (purge_voice_notes_for_game on completed and cancelled; ss_remove_voice_note; the voice block in ss_delete_my_account; held_by_report). I did not read how a resolved report then deletes a held note. -->

A recap of the game (who won, capture counts, timings) is kept longer so players can look back on it, but the underlying photos themselves are removed from storage once their retention period passes. This is enforced by an automated job, not a manual process, so it runs on schedule regardless of whether anyone asks.

Chat messages and other game text <!-- DRAFT for Jack: replaces "are kept for as long as the game history is kept" --> are deleted automatically on the same schedule as photos: 7, 30 or 90 days after the game ends, depending on the host's plan. <!-- DRAFT for Jack (R2-10): same wording as above. -->A message that is part of an open report is kept until a moderator reviews the report, then deleted on the usual schedule.

<!-- Sources: supabase/migrations/20261006210000_ship_seek_retention_jobs.sql (ss_game_messages deleted when the game ended more than recap_retention_days ago, default 7, except messages named by an open ss_reports row; daily at 03:50); recap_retention_days 7/30/90 from supabase/migrations/20260905110000_ship_seek_hosts_entitlements.sql. That migration must be applied before this is true. --> <!-- DRAFT for Jack: new paragraph, retention of logs and notifications -->

Game activity logs (the event feed that keeps phones in step, connection health checks, capture attempts and queued alerts for a game) are deleted 14 days after the game ends. In-app notifications you have read are deleted after 90 days. Unread ones are kept. A TV pairing is deleted when the host unpairs it, or 7 days after the game ends.

<!-- Sources: supabase/migrations/20261006210000_ship_seek_retention_jobs.sql (ss_sync_events, ss_client_health, ss_capture_intents, ss_targets_push_queue 14 days after the game ended; ss_user_notifications read more than 90 days ago; ss_private.tv_pairings revoked or game ended 7 days ago). -->

Account information is kept until you delete your account (see "Your rights" below), except that a guest account is deleted automatically as described under "Guest accounts" above. <!-- DRAFT for Jack: guest clean-up is built by R2-25 (guest accounts only; a full account is never deleted automatically). -->

Push tokens are removed automatically if the app store tells us the device is no longer reachable, or when you delete your account.

Who we share it with

Ship Seek is a small operation and relies on a short list of service providers to run:

  • Supabase, which hosts our database, authentication and file storage. Your account data, game data, and photos live here.
<!-- DRAFT for Jack: the list is checked against the repo. Sentry is added below because the code uses it. Resend is NOT in the code (sign-in codes go through Supabase Auth's own email); HANDOFF.md says Resend is the live email sender, so confirm in the Supabase dashboard before keeping that line. -->
  • Vercel, which hosts the web app (the TV display, host desktop, and public pages).
  • Expo's push notification service, which delivers push notifications to your device using your push token. Apple's and Google's own push services carry the message from there to your phone. <!-- DRAFT for Jack: Apple and Google push added. Source: supabase/functions/_shared/expo.ts -->
  • RevenueCat, which manages in-app purchases and entitlements, and, for web purchases, connects to Stripe to process payment.
  • Sentry, which receives crash and error reports and performance timings. <!-- DRAFT for Jack: added -->
  • Resend, which sends our sign-in and confirmation emails, such as one-time codes. <!-- DRAFT for Jack: added, unverified in code; remove if email goes only through Supabase. Resend is not referenced anywhere in the code or config (git grep), only HANDOFF.md D7 ('Resend is already live') and the Supabase dashboard SMTP setting, which this builder cannot see. Confirm in the dashboard. -->
  • Apple and Google, as the app stores through which iOS and Android purchases are made, and as sign-in providers if you use Sign in with Apple or Google.

None of these providers are permitted to use your data for their own purposes; they process it on Ship Seek's behalf to provide the service. We do not sell personal data to anyone, and we do not share it with advertisers or data brokers.

Other players in a game you join can see your display name, profile photo (which is also reachable by its link, as described above), chat messages, and any capture or response photo involving them, since that is the point of the feature. Other players cannot see your email address or any account information beyond your display name and photo.

<!-- DRAFT for Jack: added. Sources: supabase/migrations/20261002140000_ship_seek_profile_email_privacy.sql (email in ss_profile_private, readable by the user and admins only) -->

Players in your game can also listen to voice notes you send, and see your badges (as described above).

<!-- DRAFT for Jack: new paragraph about TV pairing -->

If a host pairs a TV or big screen to a game, that screen shows only public game information: players' names and photos, scores, deck and Flag status, game announcements and the Everyone chat. It does not show private chat or email addresses, and it is not signed in to any account. The pairing ends when the host unpairs it or the game ends.

<!-- Sources: supabase/migrations/20261003200000_ship_seek_badges_tv_pairing.sql and 20261004160000_ship_seek_deck_freshness.sql (ss_tv_snapshot; revoked by the host or when the game completes or is cancelled; captured Flags give team and time only). NOT VERIFIED: the snapshot returns capture rows minus notes, which may include the evidence photo URL, and it also returns voice-note rows (storage path, duration, waveform); the TV page filters voice out (apps/web/components/tv/TvDisplay.tsx) and the bucket is private, but I did not confirm the TV never shows a capture photo. Lead to check before this paragraph is approved. -->

Photographing other players

Taking a photo of another player, whether as capture evidence or a wildcard/radar response, is a core part of how Ship Seek works, and it involves photographing real people who have not necessarily read this policy themselves at the moment the photo is taken. We handle this in a few ways:

  • The app shows a consent prompt before your first capture in any game, explaining that you are about to photograph another player and that they will be able to see the photo (the exact wording is in Docs/Consent-Copy.md).
  • Anyone in a game can report a photo (or a message) they believe is inappropriate, and can block another player outright. Reports go to Ship Seek's moderation queue for review.
  • Photos and clips are only ever visible to members of the same game, never posted publicly or shown to anyone outside that game, and they are deleted automatically per the retention schedule above. <!-- DRAFT for Jack: clips added. The signed-out TV display does not receive capture photo paths: supabase/migrations/20261007100000_ship_seek_tv_snapshot_filter.sql removes evidence_photo_url and evidence_thumbnail_url. Profile photos are the exception, see above. -->

If you are photographed in a game and want a photo removed before its scheduled deletion, report it in-app (see Docs/Consent-Copy.md for the report flow) or contact the support address below and it will be actioned.

Your rights

  • Delete your account. You can delete your account entirely from inside the app, at any time, with no need to contact anyone. <!-- DRAFT for Jack: replaces "removes your photos". Deletion removes the profile photo and email only; photos taken in games follow the retention schedule. -->
<!-- DRAFT for Jack: R2-24 rewrite (supabase/migrations/20261009150000_ship_seek_account_erase.sql, ss_private.erase_user). Replaces the R1-31 text that said other players can still see your name. Decisions: DEC-A1-3-01 and Jack's 9 Oct answers (remove your own uploads at deletion; keep chat text, shown as Deleted player). -->

This changes your profile name to "Deleted player" and removes your profile photo and email address. In games you played, your name is replaced with Deleted player (including in game announcements such as "joined the game"), your deck reports and location history are removed, and your chat messages stay but no longer show a name. The photos and clips you took or answered with (capture evidence, wildcard and radar photos and clips), your voice notes and your profile photo are queued for removal straight away and are deleted from storage by a clean-up job, usually within a day; a file that has been reported is kept until the report is resolved. Your friends, blocks, crews you were the last member of, saved guest email and unverified venues are deleted. Records that only show an anonymous player number, such as scores and capture history, stay as "Deleted player". You cannot delete your account while you are hosting or playing in a game that is running (active or paused); finish or leave the game first. Deletion cannot be undone.

<!-- Sources: supabase/migrations/20261005120000_ship_seek_voice_notes.sql ss_delete_my_account (latest body: refusal while hosting or playing an active or paused game, display name 'Deleted player', email '', avatar_url null, voice notes queued, held ones kept); supabase/functions/purge-photos/index.ts section 2 (avatars of deleted users removed daily); Docs/Media-and-Chat-Plan.md line 390. -->
  • Export your data. <!-- DRAFT for Jack: R2-24 rewrite (DEC-A1-3-05): everything about you, plus links to your own photos and clips. Replaces the 11-section list. --> You can download a copy of your data from your profile, in the app and on the website. It covers your profile, games, captures, penalties, points, friendships, crews, badges, push tokens, purchases and messages, and also your saved guest email, blocks, who you have muted for game news (shown by display name and crew name only) <!-- DRAFT for Jack: announce mutes, supabase/migrations/20261019140000_ship_seek_announce_mutes.sql; the app stores whom you muted, includes it in your export and deletes it with your account -->, reports you filed, rules acknowledgements, notifications, leaderboard entries, wildcard and radar answers, deck reports, muster, hot or cold, target, sardines, bounty, capture the flag and seat transfer records. It also lists the photos, clips, voice notes and profile photo you uploaded, each with a link. These links are bearer links: anyone who has the link can open the file, so do not share the export file. The links stop working 24 hours after you export. Other people appear by display name only, and nothing of theirs is included. You can export once every 10 minutes. You can still contact the support address below if you need help.
<!-- Sources: packages/core/src/rules/dataExport.ts (EXPORT_MY_DATA_KEYS; EXPORT_RATE_LIMIT_MINUTES = 10); supabase/migrations/20261003220000_ship_seek_pre_release.sql ss_export_my_data; apps/web/components/profile/ExportMyData.tsx; apps/mobile/app/(app)/profile.tsx. Not checked: whether the export file includes the email held in ss_profile_private. -->
  • Correct your data. You can update your display name and profile photo yourself, at any time, in the app.
  • Leaderboard. <!-- DRAFT for Jack: added --> You can take yourself off the global leaderboard at any time in your profile, and it takes effect straight away.

If you are in the UK or EU, you have rights under UK GDPR and, where applicable, EU GDPR, including access, rectification, erasure, and objection to processing. This policy is drafted with those rights in mind but has not yet been confirmed by a solicitor; treat the mechanisms above (in-app deletion, contacting support) as the practical way to exercise them until the legal review is complete.

Children

Ship Seek is not directed at children under 13, and account creation requires either a supported sign-in method or a quick join <!-- DRAFT for Jack: "host-managed" replaced by "(which asks for an email address)" --> (which asks for an email address) intended for use at an event the host is running (for example, a group of adults on a cruise). Hosts are responsible for who they invite into a game they run, including whether any player is a minor and whether a parent or guardian is aware. If you believe a child under 13 has created an account or been added to a game without appropriate oversight, contact the support address below and we will act on it.

Changes to this policy

This policy will be updated as features change (for example, if an analytics tool is added, or if the retention periods change) <!-- DRAFT for Jack: "crash reporting or" removed because Sentry is now used -->. Material changes will be reflected in the "Last updated" date at the top of this document.

Contact

For anything in this policy, including data export requests, deletion questions, or a report about a photo, contact Josh Hosking at the support email address listed in the app and on shipseek.app. As this is a draft, that address is not yet finalised here; add it to this section before publishing.

Back