{"schemaVersion":1,"product":"STALKR","releaseChannel":"TestFlight beta","lastVerified":"2026-08-23","applicability":"App version 1.0.0; code through the current map-stabilization branch after TestFlight build 40","features":[{"feature":"account-authentication","name":"Account authentication","status":"BETA","platforms":["ios"],"summary":"Create an account, sign in, reset or change a password, sign out, and permanently delete the account.","userTasks":["register","sign in","reset a password","change a password","delete an account"],"permissions":[],"backgroundBehavior":"None.","offlineBehavior":"Authentication and account changes require the service.","realtimeBehavior":"Authentication state is observed by the app.","scope":"The signed-in account.","plan":"All plans.","limitations":["Email delivery and network access are required for password recovery."],"helpUrl":"/stalkr/help/getting-started/create-account","documentationUrl":"/stalkr/help/getting-started/create-account","aliases":["login","sign in","account","password reset"]},{"feature":"profile","name":"Profile and profile photo","status":"BETA","platforms":["ios"],"summary":"Edit display name, nickname or call sign, avatar, phone, and optional emergency medical information.","userTasks":["edit a profile","change a profile photo","set a call sign","manage medical sharing"],"permissions":["Camera or photo-library access only when choosing a photo"],"backgroundBehavior":"None.","offlineBehavior":"Saving profile changes and uploading an avatar require the service.","realtimeBehavior":"Updated member identity is refreshed for Crew views.","scope":"Profile identity is visible where the account participates; medical details are governed by the medical sharing setting.","plan":"All plans.","limitations":["A failed image upload leaves the previous photo in place."],"helpUrl":"/stalkr/help/settings/change-profile-photo","documentationUrl":"/stalkr/help/settings/change-profile-photo","aliases":["avatar","profile picture","call sign","nickname"]},{"feature":"crews","name":"Crews","status":"BETA","platforms":["ios"],"summary":"Persistent trusted groups for scoped location sharing, markers, statuses, and field coordination.","userTasks":["create a Crew","open Crew settings","switch Crews","share a Crew"],"permissions":[],"backgroundBehavior":"Crew membership persists; location behavior is described separately.","offlineBehavior":"Previously cached Crew membership may remain visible, but creating or changing a Crew requires the service.","realtimeBehavior":"Members, locations, events, markers, and zones use scoped realtime subscriptions.","scope":"Each Crew is an independent authorization and sharing scope.","plan":"Free: up to 2 Crews and 5 members per Crew. Pro has higher configured limits.","limitations":["A Crew list fetch failure is shown as unavailable, not as an empty account."],"helpUrl":"/stalkr/help/crews/what-is-a-crew","documentationUrl":"/stalkr/help/crews/what-is-a-crew","aliases":["group","team","party"]},{"feature":"crew-invites","name":"Crew invites, codes, and join requests","status":"BETA","platforms":["ios","web-invite"],"summary":"Share a Crew link or code; a new person asks to join and a Crew admin accepts or declines the request.","userTasks":["share a Crew","join with a Crew code","change a memorable code","approve a join request"],"permissions":["System share sheet when sharing a link"],"backgroundBehavior":"None.","offlineBehavior":"Submitting and deciding requests require the service.","realtimeBehavior":"Approved membership appears after Crew data refreshes.","scope":"Only Crew admins can see and decide pending requests; invalid and disabled codes intentionally look the same to outsiders.","plan":"Subject to the Crew membership limit.","limitations":["A shared SMS or email is not delivered until the user completes the system share flow."],"helpUrl":"/stalkr/help/crews/join-crew","documentationUrl":"/stalkr/help/crews/join-crew","aliases":["invite code","join code","Crew link","ask to join"]},{"feature":"live-sharing","name":"Live Crew location sharing","status":"BETA","platforms":["ios"],"summary":"Publishes the current authorized position, direction, accuracy, status, and available battery information to the active Crew scope.","userTasks":["go Live","check broadcast health","share with one Crew independently of another"],"permissions":["Precise or approximate foreground location"],"backgroundBehavior":"Background updates are implemented when Always location is granted; see Background Location.","offlineBehavior":"There is no durable offline outbox. Failed live writes are not queued for later delivery.","realtimeBehavior":"Crew-scoped broadcast and database subscriptions update member presence.","scope":"Per-Crew. Live in one Crew does not force sharing to every Crew or Journey.","plan":"All plans.","limitations":["LIVE can show a delivery warning when repeated writes are not reaching the Crew.","Stationary presence is refreshed by a heartbeat, subject to OS execution."],"helpUrl":"/stalkr/help/location-sharing/go-live","documentationUrl":"/stalkr/help/location-sharing/go-live","aliases":["Live","broadcast","share location","crew tracking"]},{"feature":"dark-mode","name":"Dark","status":"BETA","platforms":["ios"],"summary":"Stops current location sharing to the selected Crew scope; authorized viewers retain the last location row marked offline rather than receiving new fixes.","userTasks":["go Dark","resume Live sharing"],"permissions":[],"backgroundBehavior":"The selected state persists, but an offline change made without connectivity is not queued for the Crew.","offlineBehavior":"PARTIAL: the local choice changes, but the Crew may not receive that change until connectivity and execution resume.","realtimeBehavior":"The Crew receives an offline status/event when the write succeeds.","scope":"Per-Crew; it does not stop an independently shared Journey.","plan":"All plans unless the Crew enforces tracking.","limitations":["Dark is not a deletion of the last authorized location.","Dark cannot override Tracking Enforced."],"helpUrl":"/stalkr/help/location-sharing/what-does-dark-mean","documentationUrl":"/stalkr/help/location-sharing/what-does-dark-mean","aliases":["go dark","stealth","stop sharing","last-live mode"]},{"feature":"tracking-enforced","name":"Tracking Enforced","status":"BETA","platforms":["ios"],"summary":"A Crew rule that keeps every member, including the owner, Live in that Crew until enforcement is disabled in Crew settings.","userTasks":["create an enforced Crew","understand why Dark is unavailable"],"permissions":["Location permission remains required for truthful Live sharing"],"backgroundBehavior":"Uses the same background behavior as Live sharing.","offlineBehavior":"No durable offline outbox.","realtimeBehavior":"Crew policy is loaded with Crew state and applied to sharing decisions.","scope":"The specific Crew only.","plan":"Pro/admin-controls entitlement.","limitations":["The owner must turn enforcement off in Crew settings; the Live/Dark control cannot bypass it."],"helpUrl":"/stalkr/help/crews/tracking-enforced","documentationUrl":"/stalkr/help/crews/tracking-enforced","aliases":["enforced","required tracking","cannot go dark"]},{"feature":"member-markers","name":"Crew member markers and presence","status":"BETA","platforms":["ios"],"summary":"Shows authorized Crew members on the map with identity, facing direction when available, accuracy, status, battery when reported, and live/stale/unknown presence.","userTasks":["find a Crew member","open a member card","understand stale location"],"permissions":["Your own location is needed for distance-from-me calculations"],"backgroundBehavior":"Remote member updates arrive when the app can receive realtime events.","offlineBehavior":"Cached in memory only and lost when the app process ends.","realtimeBehavior":"Crew-scoped realtime subscription plus presence/broadcast updates.","scope":"Only members of the active Crew.","plan":"All plans within Crew size limits.","limitations":["A direction cone is omitted when the member has no trustworthy heading.","Stale data is labeled rather than presented as current."],"helpUrl":"/stalkr/help/map/find-a-crew-member","documentationUrl":"/stalkr/help/map/find-a-crew-member","aliases":["people on map","member location","direction cone","stale location"]},{"feature":"journeys","name":"Journeys","status":"BETA","platforms":["ios","web-watcher"],"summary":"A destination-based live travel session shared with selected watchers until arrival, cancellation, or manual completion.","userTasks":["start a Journey","choose a destination","add watchers","set an expected arrival","share a watch link","end a Journey"],"permissions":["Location","Contacts only when choosing phone contacts","Notifications for in-app alerts"],"backgroundBehavior":"Last position is persisted while location execution continues; arrival and overdue processing also rely on deployed server functions and schedules.","offlineBehavior":"PARTIAL: local progress can continue, but watcher delivery, server position persistence, arrival, and overdue escalation require connectivity.","realtimeBehavior":"Watchers receive live session position through scoped realtime access or the public capability link.","scope":"A separate Journey scope with chosen watchers; Crew and Journey sharing choices are independent.","plan":"Pro journeyMode entitlement.","limitations":["External SMS/email flows require the user to complete the composer.","A Journey requires a destination and service access to start."],"helpUrl":"/stalkr/help/journeys/start-journey","documentationUrl":"/stalkr/help/journeys/start-journey","aliases":["trip","safe arrival","watch link","destination sharing"]},{"feature":"journey-overdue","name":"Journey overdue escalation","status":"PARTIAL","platforms":["ios","server"],"summary":"When an expected arrival is set, STALKR can nudge the traveler, allow an ETA extension, and escalate to watchers if there is no response.","userTasks":["set an expected arrival","respond to an overdue prompt","extend an ETA"],"permissions":["Notifications"],"backgroundBehavior":"Depends on deployed scheduled/server functions and push/email configuration.","offlineBehavior":"Escalation cannot be guaranteed without server connectivity.","realtimeBehavior":"Updated overdue state is reflected in the Journey.","scope":"The Journey and its selected watchers.","plan":"Pro watcherNotifications entitlement.","limitations":["This is an aid, not a guaranteed emergency-service dispatch system."],"helpUrl":"/stalkr/help/journeys/expected-arrival-alerts","documentationUrl":"/stalkr/help/journeys/expected-arrival-alerts","aliases":["late alert","overdue","ETA alert","missed arrival"]},{"feature":"map","name":"Interactive map","status":"BETA","platforms":["ios"],"summary":"The primary field surface for self position, Crew members, markers, zones, trails, Routes, Checkpoints, Journeys, search, and map tools.","userTasks":["recenter","search for a place","change map type","show or hide layers","select an object"],"permissions":["Location for self position and nearby context"],"backgroundBehavior":"The visible map is foreground UI.","offlineBehavior":"Google map tiles may be opportunistically cached but no downloadable offline map is supported.","realtimeBehavior":"Visible scoped objects update from their stores and realtime subscriptions.","scope":"Active Crew plus personal/selected objects according to each object's ownership.","plan":"Core map on all plans; some layers contain paid features.","limitations":["No supported offline-region download.","Only one authoring/map tool can own the map at a time."],"helpUrl":"/stalkr/help/map/use-the-map","documentationUrl":"/stalkr/help/map/use-the-map","aliases":["map screen","layers","recenter","satellite view"]},{"feature":"self-marker","name":"Self marker","status":"BETA","platforms":["ios"],"summary":"Shows your current GPS fix, accuracy halo, identity, facing direction when trustworthy, and controls for recentering and self details.","userTasks":["find yourself","recenter the map","read direction and accuracy"],"permissions":["Foreground location","Motion/compass data supplied by the location API"],"backgroundBehavior":"The map representation is foreground; the location pipeline may continue separately.","offlineBehavior":"GPS can work without cell service, but the base map and server sharing are not guaranteed offline.","realtimeBehavior":"Local sensor updates are immediate and do not wait for the server.","scope":"Visible to you; the authorized fix may also be published to active sharing scopes.","plan":"All plans.","limitations":["Direction is omitted for an invalid compass fix.","Indoor or obstructed GPS may have a large accuracy halo."],"helpUrl":"/stalkr/help/map/self-marker","documentationUrl":"/stalkr/help/map/self-marker","aliases":["blue dot","my marker","heading arrow","accuracy circle"]},{"feature":"map-measure","name":"Measure tool","status":"BETA","platforms":["ios"],"summary":"Measures straight-line distance and bearing between map points without creating a saved object.","userTasks":["measure distance","clear a measurement"],"permissions":[],"backgroundBehavior":"None.","offlineBehavior":"The geometry calculation is local; useful map tiles are not guaranteed offline.","realtimeBehavior":"None.","scope":"Local, unsaved map state.","plan":"All plans.","limitations":["It measures point-to-point map distance, not a planned navigable Route."],"helpUrl":"/stalkr/help/map/measure-distance","documentationUrl":"/stalkr/help/map/measure-distance","aliases":["ruler","distance tool","bearing"]},{"feature":"markers","name":"Markers and waypoints","status":"BETA","platforms":["ios"],"summary":"Crew-scoped map points for waypoints, dangers, safe places, camps, vehicles, animal signs, evidence, supply caches, and custom notes.","userTasks":["create a marker","open a marker","edit details","move a marker","delete a marker"],"permissions":["Location only when using your self marker as the placement point","Camera/photo library for photos"],"backgroundBehavior":"Arrival monitoring can continue with background location permission.","offlineBehavior":"Existing loaded markers may remain in memory; create, move, edit, and delete require the service and are not queued.","realtimeBehavior":"Crew marker changes use scoped realtime subscriptions.","scope":"Active Crew; creation requires contributor authority and edits/deletes are ownership/role protected.","plan":"All plans.","limitations":["A move is saved only after pressing SAVE; a failed write restores the original position."],"helpUrl":"/stalkr/help/markers/create-marker","documentationUrl":"/stalkr/help/markers/create-marker","aliases":["pin","waypoint","map marker","POI"]},{"feature":"marker-arrival-alerts","name":"Marker arrival alerts","status":"PARTIAL","platforms":["ios"],"summary":"Optionally detects arrival within a configured marker radius and records/notifies the transition.","userTasks":["turn on a marker arrival alert","choose an arrival radius"],"permissions":["Always location for background or closed-app detection","Notifications for visible alerts"],"backgroundBehavior":"Background updates and iOS region monitoring are implemented; force-quit and OS scheduling constraints apply.","offlineBehavior":"The local transition ledger prevents duplicates, but Crew event/push delivery is not queued offline.","realtimeBehavior":"Successful events are written to the Crew timeline and can notify members.","scope":"The marker's Crew plus local device alerts.","plan":"Available with marker functionality; notification delivery depends on device/server setup.","limitations":["Poor GPS accuracy can delay a decision.","Departure from a marker is recorded but does not buzz."],"helpUrl":"/stalkr/help/markers/arrival-alerts","documentationUrl":"/stalkr/help/markers/arrival-alerts","aliases":["arrive at marker","camp alert","arrival radius"]},{"feature":"zones","name":"Zones","status":"BETA","platforms":["ios"],"summary":"Crew-scoped geographic circles or polygons with appearance, visibility, monitoring, and enter/leave alert settings.","userTasks":["create a circle Zone","draw a polygon Zone","resize or move a circle","edit a Zone","delete a Zone","hide Zones on the map"],"permissions":["Location for presence monitoring","Camera/photo library for Zone photos"],"backgroundBehavior":"Monitored Zones can be evaluated by background location and iOS region monitoring when Always access is granted.","offlineBehavior":"Loaded geometry may remain visible in memory; changes and remote alerts require the service and are not queued.","realtimeBehavior":"Crew Zone changes use scoped realtime subscriptions.","scope":"Crew, with configured visibility and applicable member IDs enforced by data policy and evaluation.","plan":"Free has a saved-place limit but polygon Zones and Zone alerts require Pro in the current plan matrix.","limitations":["Hiding the Zones layer changes drawing only; it does not disable monitoring.","Monitoring and arrival/leave notification toggles are separate settings."],"helpUrl":"/stalkr/help/zones/create-zone","documentationUrl":"/stalkr/help/zones/create-zone","aliases":["geofence","area alert","circle","polygon"]},{"feature":"tracks","name":"Tracks","status":"BETA","platforms":["ios"],"summary":"Records movement that actually occurred as a timestamped GPS breadcrumb trail with activity, duration, distance, movement/rest statistics, and quality diagnostics.","userTasks":["start a Track","pause a Track","resume a Track","finish a Track","save or discard a Track","open Track history"],"permissions":["Foreground location","Always location for reliable locked/background recording"],"backgroundBehavior":"The recorder uses the shared high-accuracy location pipeline; background location implementation is pending full physical-device validation.","offlineBehavior":"A Track cannot start offline because the server row must be created first. The active line is local while recording, but there is no durable offline point outbox.","realtimeBehavior":"Tracks are personal history with optional Crew association; they are not a substitute for Live Crew sharing.","scope":"Owned by the recording user; optional Crew association is recorded.","plan":"All plans in current UI.","limitations":["Pausing a Track pauses recording only; Crew Live sharing continues.","Do not force-quit during a recording if background continuity matters."],"helpUrl":"/stalkr/help/tracks/start-track","documentationUrl":"/stalkr/help/tracks/start-track","aliases":["recording","walk","hike recording","breadcrumb trail","GPS path","movement history"]},{"feature":"checkpoints","name":"Checkpoints","status":"BETA","platforms":["ios"],"summary":"Meaningful saved points captured at the current GPS fix; created during a Track they belong to that Track, otherwise they are standalone personal Checkpoints.","userTasks":["add a Checkpoint","add a photo","rename a Checkpoint","set arrival alert","delete a Checkpoint"],"permissions":["Location","Camera/photo library for photos"],"backgroundBehavior":"Checkpoint arrival alerts follow the marker/geofence background pipeline.","offlineBehavior":"Creation and edits require the service.","realtimeBehavior":"Not a general Crew realtime marker; ownership follows Track, Route copy, or personal library semantics.","scope":"User-owned. Saving a Track as a Route copies its Checkpoints so later Route edits do not alter originals.","plan":"All plans in current UI.","limitations":["A Checkpoint requires a current GPS fix.","Its coordinate is captured when the creation sheet opens, not when Save is pressed."],"helpUrl":"/stalkr/help/checkpoints/add-checkpoint","documentationUrl":"/stalkr/help/checkpoints/add-checkpoint","aliases":["flag","track point","saved spot","navigation anchor"]},{"feature":"routes","name":"Routes","status":"BETA","platforms":["ios"],"summary":"Reusable paths made deliberately from completed Tracks, displayed or followed later with progress and next-Checkpoint context.","userTasks":["save a Track as a Route","open the Route library","show or hide a Route","follow a Route","stop following","rename or delete a Route"],"permissions":["Location for progress while following"],"backgroundBehavior":"Following is foreground map guidance; no turn-by-turn background navigation service is implemented.","offlineBehavior":"Route geometry must have been loaded; there is no supported offline Route download/cache guarantee.","realtimeBehavior":"Personal Route library; Crew-route fetch support exists but public UI behavior is centered on owned Routes.","scope":"Owned by the user; Route Checkpoints are copies made during promotion.","plan":"All plans in current UI.","limitations":["A Route is not created automatically when a Track finishes.","The actively followed Route remains visible even if the global Routes layer is hidden."],"helpUrl":"/stalkr/help/routes/open-route","documentationUrl":"/stalkr/help/routes/open-route","aliases":["saved trail","follow path","course","reusable track"]},{"feature":"media","name":"Marker, Zone, Checkpoint, and profile photos","status":"BETA","platforms":["ios"],"summary":"Capture or choose photos, view them in a shared gallery/viewer, add captions where supported, and delete only with object-specific authority.","userTasks":["add a photo","view photos","save a photo","delete a photo","change a profile photo"],"permissions":["Camera","Photo library read","Photo library add when exporting"],"backgroundBehavior":"Uploads are foreground operations.","offlineBehavior":"Uploads and remote retrieval require connectivity; no upload queue exists.","realtimeBehavior":"Photo lists reload from object storage/database rather than acting as a chat stream.","scope":"Object ownership and Crew storage policies isolate media.","plan":"Marker photos are enabled on Free and Pro in the current plan matrix.","limitations":["Unsupported local URI schemes are rejected by upload normalization.","A failed image is suppressed rather than retried forever."],"helpUrl":"/stalkr/help/photos/add-photos","documentationUrl":"/stalkr/help/photos/add-photos","aliases":["pictures","camera","gallery","attachment"]},{"feature":"background-location","name":"Background location","status":"PARTIAL","platforms":["ios","android-implemented-not-released"],"summary":"Registers background location updates and iOS region monitoring for location sharing, Zone transitions, marker arrivals, and Track continuity when the OS permits execution.","userTasks":["grant Always location","keep sharing with the screen locked","receive background Zone alerts"],"permissions":["Foreground location","Always/background location","Android foreground location service permission"],"backgroundBehavior":"Implemented in code and configured in platform manifests; physical-device validation remains a release gate.","offlineBehavior":"Local transition baselines and a ledger persist, but remote writes are not queued for later delivery.","realtimeBehavior":"Successful background writes feed the same scoped current-state/event systems.","scope":"Only objects/scopes published to the local watchlist and authorized sharing states.","plan":"Permission behavior is common; paid feature gates still apply to Zones/Journeys.","limitations":["Force-quitting stops ordinary background updates; iOS region monitoring may still wake for eligible circle regions but is OS-controlled.","Background execution is never an emergency-service guarantee."],"helpUrl":"/stalkr/help/permissions/background-location","documentationUrl":"/stalkr/help/permissions/background-location","aliases":["screen locked","app closed","Always Allow","background tracking"]},{"feature":"notifications","name":"Notifications and activity","status":"PARTIAL","platforms":["ios","server"],"summary":"Local and push alerts plus an in-app notification center/activity feed for Crew, Zone, arrival, Journey, check-in, and SOS events.","userTasks":["allow notifications","open an alert","change alert preferences","read activity history"],"permissions":["Notifications"],"backgroundBehavior":"Push delivery depends on APNs/Expo/server configuration; local notifications depend on OS permission.","offlineBehavior":"Local alerts can be created from local detection; remote delivery and shared activity require connectivity.","realtimeBehavior":"Crew events and notification-center state update while subscribed.","scope":"Per user and Crew according to event routing and preferences.","plan":"Core local/push support; some watcher/timeline capabilities are Pro.","limitations":["The OS can suppress notifications.","A missing push token or server configuration prevents remote delivery."],"helpUrl":"/stalkr/help/notifications/manage-alerts","documentationUrl":"/stalkr/help/notifications/manage-alerts","aliases":["alerts","push","activity feed","inbox"]},{"feature":"sos","name":"SOS","status":"BETA","platforms":["ios"],"summary":"A deliberate press-and-hold emergency action on the map that creates a panic incident and attempts to alert the active Crew.","userTasks":["send an SOS","cancel an armed SOS before completion","find SOS history"],"permissions":["Location for the incident position","Notifications for alerts"],"backgroundBehavior":"The trigger is a foreground hold action; recipients may receive push alerts.","offlineBehavior":"PARTIAL: the app reports when it could not reach the server; SOS is not queued for later delivery.","realtimeBehavior":"Successful incidents appear to the Crew through events/notifications.","scope":"Active Crew.","plan":"Presented as a Pro safety capability in subscription UI.","limitations":["SOS does not contact public emergency services.","A failed network request means the Crew may not receive it."],"helpUrl":"/stalkr/help/safety/send-sos","documentationUrl":"/stalkr/help/safety/send-sos","aliases":["panic button","emergency alert","silent SOS","panic pin"]},{"feature":"check-in-timers","name":"Check-in timer and dead-man switch","status":"BETA","platforms":["ios","server"],"summary":"Arms a one-time check-in or repeating dead-man timer and escalates a missed acknowledgement to selected people.","userTasks":["start a check-in timer","arm a dead-man switch","acknowledge","cancel a timer"],"permissions":["Notifications"],"backgroundBehavior":"Server-side escalation depends on deployed scheduling/functions and notification infrastructure.","offlineBehavior":"Creating, resolving, and escalating timers require service connectivity.","realtimeBehavior":"Timer/event changes can update Crew safety views.","scope":"User, optional Crew, and selected notification recipients.","plan":"Presented as Pro in subscription UI.","limitations":["Not a substitute for emergency services; server and notification delivery are dependencies."],"helpUrl":"/stalkr/help/safety/check-in-timer","documentationUrl":"/stalkr/help/safety/check-in-timer","aliases":["check on me","dead man switch","missed check-in","safety timer"]},{"feature":"low-signal-monitor","name":"Low-signal and stale-risk monitor","status":"BETA","platforms":["ios"],"summary":"Labels location presence as live, stale, or unknown and can surface low-signal risk instead of pretending old data is current.","userTasks":["understand a stale badge","check last update time"],"permissions":[],"backgroundBehavior":"Relies on incoming location heartbeats and timestamps.","offlineBehavior":"Loss of connectivity naturally makes remote positions age to stale/unknown.","realtimeBehavior":"Presence updates as timestamps and events arrive.","scope":"Crew member visibility.","plan":"Current feature flag enabled.","limitations":["It detects stale information; it cannot restore missing connectivity."],"helpUrl":"/stalkr/help/troubleshooting/member-location-stale","documentationUrl":"/stalkr/help/troubleshooting/member-location-stale","aliases":["stale","offline member","last seen","low signal"]},{"feature":"rally-points","name":"Rally points","status":"BETA","platforms":["ios"],"summary":"Lets an authorized Crew owner set an active meeting point that members can see with bearing and distance.","userTasks":["set a rally point","view distance and bearing","clear a rally point"],"permissions":["Location for distance and bearing from the user"],"backgroundBehavior":"Foreground map coordination.","offlineBehavior":"Creating or changing the point requires connectivity.","realtimeBehavior":"Crew-scoped rally changes can propagate to members.","scope":"Active Crew; role protected.","plan":"Current feature flag enabled; admin authority required to set it.","limitations":["Bearing depends on a usable self position."],"helpUrl":"/stalkr/help/safety/rally-point","documentationUrl":"/stalkr/help/safety/rally-point","aliases":["meeting point","regroup","rally"]},{"feature":"emergency-contacts","name":"Emergency contacts","status":"BETA","platforms":["ios"],"summary":"Stores people who can be selected as Journey watchers or safety escalation recipients.","userTasks":["add an emergency contact","choose from phone contacts","remove an emergency contact"],"permissions":["Contacts only when opening the device contact picker"],"backgroundBehavior":"Contacts are referenced by safety workflows; no passive contact access.","offlineBehavior":"Saving changes requires connectivity.","realtimeBehavior":"None outside the workflows that use the selected contacts.","scope":"Private to the signed-in user.","plan":"Pro emergencyContacts entitlement.","limitations":["Selecting a contact does not itself send a message."],"helpUrl":"/stalkr/help/safety/emergency-contacts","documentationUrl":"/stalkr/help/safety/emergency-contacts","aliases":["ICE contact","safety contact","watcher"]},{"feature":"subscriptions","name":"Subscriptions and entitlements","status":"PARTIAL","platforms":["ios"],"summary":"Free and Pro capability/limit checks with RevenueCat purchase and restore integration when offerings are configured for the build.","userTasks":["view plan limits","upgrade","restore purchases"],"permissions":[],"backgroundBehavior":"Entitlements refresh from RevenueCat or the server.","offlineBehavior":"A persisted last-known plan may remain, but purchase/restore requires the store service.","realtimeBehavior":"Not realtime; refreshed on account/app lifecycle.","scope":"Signed-in account.","plan":"Free and Pro; a Crew database tier also exists for managed entitlements.","limitations":["Purchase UI reports that subscriptions are unavailable if the build has no configured offering.","Displayed fallback price is not proof an App Store product is available."],"helpUrl":"/stalkr/help/settings/subscriptions","documentationUrl":"/stalkr/help/settings/subscriptions","aliases":["Pro","upgrade","paywall","restore purchase","plan"]},{"feature":"approximate-location","name":"Approximate location","status":"BETA","platforms":["ios"],"summary":"Allows a location to be represented as approximate where the current sharing mode or OS accuracy requires it.","userTasks":["share approximate location","understand an approximate marker"],"permissions":["Location"],"backgroundBehavior":"Follows Live sharing.","offlineBehavior":"No durable delivery queue.","realtimeBehavior":"The approximate flag is carried with the current location row.","scope":"Per shared location scope.","plan":"Enabled on all current plan tiers.","limitations":["Approximation is not a promise of anonymity; authorized viewers still receive a location area."],"helpUrl":"/stalkr/help/privacy/approximate-location","documentationUrl":"/stalkr/help/privacy/approximate-location","aliases":["fuzzy location","reduced accuracy","privacy location"]},{"feature":"privacy-security","name":"Scoped privacy and security","status":"BETA","platforms":["ios","server"],"summary":"Uses Crew membership, object ownership, role checks, RLS, storage policies, and capability-scoped Journey watch tokens to limit access.","userTasks":["understand who can see data","delete an account","manage sharing scope"],"permissions":[],"backgroundBehavior":"Background tasks use a locally published authorized watchlist and authenticated/server-authorized writes where applicable.","offlineBehavior":"Cached data can remain on the device until app storage is cleared or account state resets.","realtimeBehavior":"Realtime channels are created and removed with active scope lifecycle.","scope":"Crew, Journey capability, object owner, and signed-in user depending on data type.","plan":"All plans.","limitations":["A Journey watch link is a capability: anyone who has the link may be able to view that Journey until it ends or the capability is revoked by product behavior."],"helpUrl":"/stalkr/help/privacy/who-can-see-my-location","documentationUrl":"/stalkr/help/privacy/who-can-see-my-location","aliases":["RLS","who can see me","data access","watch link privacy"]},{"feature":"android-release","name":"Android release","status":"IMPLEMENTED_NOT_RELEASED","platforms":["android"],"summary":"Android configuration, permissions, package identity, and internal-track submission settings exist, but repository evidence does not show a public Android release.","userTasks":[],"permissions":["Fine/coarse/background location","Foreground location service","Notifications","Contacts"],"backgroundBehavior":"Foreground-service configuration exists and still requires release/device validation.","offlineBehavior":"Same architectural limits as iOS.","realtimeBehavior":"Same Supabase implementation when built.","scope":"Not currently documented as available to users.","plan":"Not applicable until released.","limitations":["Do not tell users STALKR is available on Google Play based on current repository evidence."],"helpUrl":"/stalkr/help/getting-started/current-availability","documentationUrl":"/stalkr/help/getting-started/current-availability","aliases":["Android app","Google Play"]},{"feature":"offline-maps","name":"Downloadable offline maps","status":"PLANNED","platforms":[],"summary":"A designed future MapLibre/PMTiles offline map system; it is not in the current product.","userTasks":[],"permissions":[],"backgroundBehavior":"Not implemented.","offlineBehavior":"No downloadable regions or guaranteed offline basemap exist today.","realtimeBehavior":"Not applicable.","scope":"Roadmap only.","plan":"Not available.","limitations":["Google Maps cache behavior is opportunistic and must not be called offline map support."],"helpUrl":"/stalkr/help/limitations/offline-maps","documentationUrl":"/stalkr/help/limitations/offline-maps","aliases":["offline map","download map","PMTiles","MapLibre"]},{"feature":"offline-sync","name":"Offline-first sync and outbox","status":"PLANNED","platforms":[],"summary":"A future durable local database and store-and-forward design; current mutations are not queued for later sync.","userTasks":[],"permissions":[],"backgroundBehavior":"Not implemented.","offlineBehavior":"Current remote writes can fail and are not durably replayed.","realtimeBehavior":"Not applicable.","scope":"Roadmap only.","plan":"Not available.","limitations":["Do not promise that offline-created Tracks, markers, Zones, SOS messages, or Crew sharing changes will sync later."],"helpUrl":"/stalkr/help/limitations/offline-use","documentationUrl":"/stalkr/help/limitations/offline-use","aliases":["offline mode","sync later","outbox","store and forward"]},{"feature":"garmin-inreach","name":"Garmin and inReach integration","status":"PLANNED","platforms":[],"summary":"Investigated roadmap work only; there is no current Garmin or inReach connection in STALKR.","userTasks":[],"permissions":[],"backgroundBehavior":"Not implemented.","offlineBehavior":"Not implemented.","realtimeBehavior":"Not implemented.","scope":"Roadmap only.","plan":"Not available.","limitations":["No device pairing, MapShare ingestion, or satellite relay is present."],"helpUrl":"/stalkr/help/limitations/garmin-inreach","documentationUrl":"/stalkr/help/limitations/garmin-inreach","aliases":["Garmin","inReach","satellite messenger"]},{"feature":"satellite-transport","name":"Satellite transport","status":"NOT_SUPPORTED","platforms":[],"summary":"STALKR does not currently send Crew locations, SOS, or Journey data over Apple, Android, or third-party satellite transport.","userTasks":[],"permissions":[],"backgroundBehavior":"Not supported.","offlineBehavior":"Not supported.","realtimeBehavior":"Not supported.","scope":"Not available.","plan":"Not available.","limitations":["A phone's system satellite emergency features are separate from STALKR and must not be represented as app transport."],"helpUrl":"/stalkr/help/limitations/satellite-support","documentationUrl":"/stalkr/help/limitations/satellite-support","aliases":["satellite SOS","Apple satellite","Android satellite","off-grid messaging"]},{"feature":"expedition-mode","name":"Expedition Mode","status":"PLANNED","platforms":[],"summary":"A roadmap concept for off-grid and battery-aware operation; it is not a selectable current mode.","userTasks":[],"permissions":[],"backgroundBehavior":"Not implemented.","offlineBehavior":"Not implemented.","realtimeBehavior":"Not implemented.","scope":"Roadmap only.","plan":"Not available.","limitations":["Do not describe expedition battery modes as available."],"helpUrl":"/stalkr/help/limitations/expedition-mode","documentationUrl":"/stalkr/help/limitations/expedition-mode","aliases":["expedition","battery mode","off-grid mode"]},{"feature":"route-planning","name":"Route planning and route intelligence","status":"NOT_SUPPORTED","platforms":[],"summary":"Current Routes are created from completed Tracks; drawing, importing, optimizing, or turn-by-turn planning a new Route is not supported.","userTasks":[],"permissions":[],"backgroundBehavior":"Not supported.","offlineBehavior":"Not supported.","realtimeBehavior":"Not supported.","scope":"Not available.","plan":"Not available.","limitations":["Following a saved Route is not turn-by-turn navigation."],"helpUrl":"/stalkr/help/routes/route-planning-limitations","documentationUrl":"/stalkr/help/routes/route-planning-limitations","aliases":["plan route","draw route","turn by turn","route intelligence"]},{"feature":"mesh-networking","name":"Nearby mesh networking","status":"PLANNED","platforms":[],"summary":"Roadmap research only; phones do not currently exchange STALKR Crew data directly without infrastructure.","userTasks":[],"permissions":[],"backgroundBehavior":"Not implemented.","offlineBehavior":"Not implemented.","realtimeBehavior":"Not implemented.","scope":"Roadmap only.","plan":"Not available.","limitations":["No Bluetooth, Wi-Fi Aware, Nearby Connections, or cross-platform mesh transport exists."],"helpUrl":"/stalkr/help/limitations/offline-use","documentationUrl":"/stalkr/help/limitations/offline-use","aliases":["mesh","phone to phone","nearby sync"]},{"feature":"weather-overlay","name":"Weather overlay","status":"PLANNED","platforms":[],"summary":"A disabled future flag; there is no current weather layer in the map.","userTasks":[],"permissions":[],"backgroundBehavior":"Not implemented.","offlineBehavior":"Not implemented.","realtimeBehavior":"Not implemented.","scope":"Roadmap only.","plan":"Not available.","limitations":["Do not describe weather data as a current STALKR feature."],"helpUrl":"/stalkr/help/limitations/current-limitations","documentationUrl":"/stalkr/help/limitations/current-limitations","aliases":["weather map","radar","forecast layer"]},{"feature":"ai-assistant","name":"In-app STALKR AI assistant","status":"PLANNED","platforms":[],"summary":"The knowledge foundation is being prepared, but no in-app AI safety or help assistant is currently enabled.","userTasks":[],"permissions":[],"backgroundBehavior":"Not implemented.","offlineBehavior":"Not implemented.","realtimeBehavior":"Not implemented.","scope":"Roadmap only.","plan":"Not available.","limitations":["Public documentation is AI-answerable; that is not the same as an in-app assistant."],"helpUrl":"/stalkr/ai","documentationUrl":"/stalkr/ai","aliases":["Ask STALKR","AI help","AI safety assistant"]}]}