# Privacy Policy — Beckify iOS **Product:** Beckify (bundle ID `com.beckify.toolbox`) **Platforms:** iPhone and iPad **Developer:** Trevor Beck **Contact:** trevorjohnbeck@gmail.com **Public URL:** https://beckify.com/privacy **Last updated:** 3 October 2026 This is the privacy policy for the native Beckify iOS and iPadOS app. It is hosted at https://beckify.com/privacy (and https://beckify.com/privacy/). It describes the app, not the beckify.com website. Sibling App Store products on the same team (`9TR6R5LV8M`) are **Kestrel Heavy** (`com.beckify.kestrelheavy`) and **Beckify Drive** (`com.beckify.drive`). Kestrel Heavy is a standalone arcade, not a Toolbox catalog game; v1 collects no play data. See `ios/KestrelHeavy/docs/PRIVACY.md`. Beckify Drive is a separate vehicle dashboard. OBD readings stay on that device and are not uploaded. See `ios/BeckifyDrive/docs/PRIVACY.md`. Apple’s App Privacy nutrition label for this app includes **Photos** (App Functionality) when you tap **Analyze** in Motor Nameplate OCR or Panel Directory, and **Other User Content** (App Functionality) when Crew Talk sends recognized or typed text to the Beckify translate API and, after a successful translation, the line Speak plays (the rewritten Spanish line for English → Spanish, or the in-character English line for Spanish → English; not the raw text field) to the Beckify speak API for neural TTS (on-device Apple Translation / Apple TTS fallbacks do not upload). Those uploads are user-initiated, not linked to an account, and not used for tracking. There is no always-on upload. Sensor readings and Saved Jobs stay on the device. ## What the app does not collect Beckify does not collect, sell, share, or transmit personal data for advertising, analytics, or tracking. - No analytics or crash-reporting SDKs - No advertising identifier (IDFA) and no tracking across apps or websites - No user accounts, sign-in, or cloud sync - No ads, store checkout, or Amazon links - The app does not wrap or load beckify.com in a web view - The app is a toolbox of field calculators, bench calculators, and sensors. It is not a website project gallery. Optional links the user may tap (https://beckify.com and `mailto:trevorjohnbeck@gmail.com`) open in the system browser or mail app. Those destinations are not part of in-app data collection. ## Sensors and permissions (on-device only) Permissions are requested only when the related tool is used, not at launch (except iOS may show the system sheet the first time that tool starts). | Permission | Tools | What happens | | --- | --- | --- | | Microphone | Noise Meter, Acoustic Imager, RigScope, Stillness Anomaly Watch, Crew Talk | Relative dBFS, an on-device audible spectrum, optional speaker test signals (pink noise, a sweep, or tone bursts) for a room and rig A/B, impulse marks, and speech recognition for Crew Talk. Mic capture for meters and speech recognition is not uploaded as audio and is not kept as a permanent recording library. Crew Talk may write a **temporary** audio file after Speak only so you can Copy Audio or Share Audio that clip (OS temp directory; not a saved recordings product). Crew Talk may send **recognized text** (not the waveform) to the Beckify translate API only when you stop recording, tap Translate, or tap Hey! and the Beckify AI path runs; after a successful translation it may also send the line Speak plays (rewritten Spanish for English → Spanish, the in-character English line for Spanish → English; not the raw text field) to `/api/speak` for neural TTS. On-device Apple Translation / Apple TTS fallbacks keep that text on device. Not a calibrated SLM, not absolute dB SPL, and not a leak position. RigScope is a relative listening check on this phone, not a lab measurement. Listening purpose (Music / Movies / Gaming) is stored on device for future score targets. Stillness does not save audio. | | Speech Recognition | Crew Talk | On-device speech-to-text for the words you speak into Crew Talk. Prefer on-device recognition when the system supports it. Mic audio for recognition is not kept as a permanent recording. After Speak, a temporary share file may exist only for Copy Audio / Share Audio. The resulting text may leave the device when you stop recording, tap Translate, or tap Hey! and Beckify AI is used (see cloud translate / speak below); on-device translation and Apple TTS fallbacks do not upload. | | Bluetooth | BLE Scanner, Stillness Anomaly Watch | Nearby BLE advertisements. The scanner shows name, identifier, RSSI, and advertised fields. Stillness uses advertiser IDs, count, and RSSI jumps only — not names as people, and not occupancy. Not uploaded. Device count is not a people count. | | Location (When In Use) | Position; Wi-Fi Path; Solar Design Wizard (optional latitude) | Coordinates, current SSID, Apple `signalStrength` 0…1, on-device heatmap samples, optional latitude for PV tilt advice. Not used at launch. Not uploaded. | | Local Network | Wi-Fi Path (optional); Cellular Path (optional) | TCP connect timing to a LAN or default-gateway host the user chooses. Used only when measuring **link quality (RTT)** to a private/LAN host. Not uploaded. Public hosts such as 1.1.1.1, and **Online / Captive** to `captive.apple.com`, do not need this permission. | | Camera | Motor Nameplate OCR; Panel Directory | A still photo. On-device Vision runs first. Taking or choosing a photo does not upload it. A photo leaves this device only after you tap **Analyze**. Photos are not kept as images in Saved Jobs. | | Motion & Fitness | Barometer; Bubble Level / plumb; Magnetometer (including Mag Sweep); g-Force Snapshot; Stillness Anomaly Watch; Coupled Vibration; Solar Design Wizard (optional panel aim) | On-device `CMAltimeter` pressure / relative altitude and `CMMotionManager` gravity, heading, and acceleration. Requested when you open those tools, not at launch. Not uploaded. Design aid only — not a calibrated instrument, not ISO 10816, and not surveyed elevation. If the barometer is missing or Motion & Fitness is off, Barometer shows an unavailable state instead of crashing. | Photo Library full access is **not** requested. Panel Directory and Motor Nameplate OCR can use the system photo picker (`PhotosPicker`) so you choose one or more images. They can also use the camera for a still photo. Taking or choosing a photo does not upload it. A photo leaves this device only after you tap **Analyze**. Structured nameplate fields and panel-schedule rows use the same honesty pattern (each value has a confidence and a reviewed flag). Human confirm sets reviewed. On-device Vision and the heuristic parser work offline and do not require the API. Optional cloud **Analyze** is user-initiated only — never automatic, and never at launch. The Wi-Fi / Cellular **Online / Captive** card in this app is a hotspot-detect probe. It sends no photo and no user content. **Crew Talk** (Toolkit → Reference; was Spanish Translator) uses the microphone and Speech Recognition on this device for English or Spanish, depending on the direction you pick. Mic audio for recognition is not uploaded and is not kept as a permanent recording library. When you stop recording, tap **Translate**, or tap **Hey!** (Get attention, English → Spanish only), the app prefers POSTing the recognized or typed text to `https://api.beckify.com/api/translate` (or a HTTPS endpoint you enter). The Beckify API may forward that text to OpenAI to produce Clean or Jobsite Spanish, or English when the direction is Spanish → English. For Spanish → English the app also sends which English helper you picked (a fixed character name, not personal data) so the API can return the same meaning in that helper's voice. For English → Spanish with Humberto Arismendi, it likewise sends that fixed helper name so the API answers in polished Venezuelan (Caracas) Spanish; Humberto is also one of the English helpers for Spanish → English, as is Dre Lacey; for either, only the fixed helper name is sent. The spoken line is the on-screen rewrite (dialect or other language), not the raw text field. For loud playback the app then POSTs that line to `https://api.beckify.com/api/speak` (`language` `es` or `en`), which may call ElevenLabs (Crew Talk voices, model eleven_v3) or OpenAI speech for older clients and return audio for on-device speaker playback. The provider API key stays on the server and is not in the app. After Speak, **Copy Audio** / **Share Audio** may write that clip to a temporary file in the OS temporary directory so you can paste into Messages or use the system share sheet — that is a share helper, not a recording library, and the file is not uploaded by Beckify. If speak fails, Apple AVSpeech plays on device without uploading (a Spanish voice or an English voice) and may similarly export a temporary shareable file for Copy/Share. If translate is unreachable, the app falls back to on-device Apple Translation on iOS 18+ in the same direction; text stays on this device for that path. Nothing is uploaded at launch or while you are only listening. **Crew Talk Conversation** (the people icon on Crew Talk) has two modes. On one phone, each line you say or type is translated and spoken exactly like the main screen. With two phones, you start a room or enter a six-character code. Beckify then relays the text you say or type to the other phone through `https://api.beckify.com/api/rooms`, and that phone translates and speaks it with the character its owner picked. Rooms are held in server memory only, hold two people, expire after about thirty minutes of inactivity, and nothing is written to disk or a database. There is no account, and the room code and a per-device secret are the only identifiers. Mic audio is never uploaded for either mode. It is free to use. It is not a certified interpreter and not a permanent recordings product. **Motor Nameplate OCR** and **Panel Directory** keep Apple Vision on this device as the default. Before that read, the photo can be perspective-flattened (when a page rectangle is found) and contrast-adjusted on this device so faded ink and glare are easier to read. That preprocessing does not leave the phone. Optional **Analyze** POSTs an upright JPEG to `https://api.beckify.com/api/analyze-nameplate` or `https://api.beckify.com/api/analyze-panel` (or a HTTPS endpoint you enter) only when you tap the button. The Beckify API may forward that photo to OpenAI and/or Anthropic. The JSON draft fills editable fields; you still confirm before Saved Jobs or demand numbers are treated as reviewed. A scan-quality score can ask you to retake. It is not uploaded. There are no ads. Optional tips in Settings are not required for these tools. Share on an engineer plot renders a PNG on this device and opens the system share sheet (Save Image, Files, AirDrop, and so on). The image is written to a temporary file, or held as an in-memory `UIImage` if that write fails. Nothing is uploaded. Choosing Save Image in the system sheet does not require the app to request Photo Library full access. CoreMotion tools use the Motion & Fitness (`NSMotionUsageDescription`) string on the generated Info.plist. Battery and thermal state are local diagnostics and do not use that key. Device Health also reads on-device free space and the time since boot (`systemUptime` and `kern.boottime`) so it can show a field snapshot. Those readings stay on the device and are not uploaded. iOS does **not** give third-party apps Wi-Fi RSSI in dBm. The Wi-Fi Path tool leads with **Online / Captive**: an HTTP GET to Apple’s public `http://captive.apple.com/hotspot-detect.html`. A `Success` body means no captive splash; a redirect or login page is called a captive portal; a satisfied path that cannot reach that host is “local only.” The request carries no user content and is not uploaded to Beckify. Optional **local IPv4** is the Network.framework `localEndpoint` of that probe when it is an IPv4 address — not a public-IP lookup and not RSSI. The tool also shows Apple’s public 0…1 `signalStrength` (percent and bars) when `NEHotspotNetwork` returns it, an on-device coverage sketch, and TCP **link quality (RTT)** to a gateway or chosen host. It does not invent dBm. App Store apps cannot send ICMP ping; a failed or permission-blocked probe stays blank. iOS does **not** give third-party apps cellular RSRP, RSRQ, SINR, RSSI, or dBm. The Cellular Path tool reuses the same Online / Captive probe on the default path, then reads on-device CoreTelephony radio identity (carrier name, MCC/MNC, ISO country, RAT, data-service id) and Network path flags. Optional TCP RTT runs only when you tap Start and only while the default path uses cellular. It does not invent field-strength numbers. Empty CTCarrier fields stay blank. ## What stays on the device Named **Saved Jobs** are lightweight on-device notes (bench or field snapshots of calculator inputs/results or sensor numbers the user chooses to save). They use Apple’s `UserDefaults`. They are not a project gallery and are not uploaded. Deleting the app removes them, subject to the user’s device backup settings. **Share link** on Voltage Drop or Conduit Fill, after you calculate, can POST a contractor or company name and that result snapshot to `https://api.beckify.com/api/share`. The API returns a `https://beckify.com/share/…` page you can text. Nothing is sent until you tap Share. Copy and Saved Jobs stay on this device. The hosted page is a snapshot, not another calculator. **Update check:** at most once a day, the app sends a plain GET to Apple's public `https://itunes.apple.com/lookup?id=6807908745` to read the current App Store version number. No account, device, location, or usage data is added to that request, and nothing is stored beyond the time of the last check on this device. If a newer version is listed, you see Update / Later; offline or failed checks are silent. Last-used calculator and sensor form values (the numbers and picker choices in each tool) also stay in on-device `UserDefaults` so a tool reopens where you left it. They are not uploaded and are not a projects product. Cable Ladder stores the same kind of on-device form values (tray size, cable rows, and the optional phase-color legend). It does not add a permission. Switchgear Logic Lab may autosave the current offline project JSON in on-device `UserDefaults` (and export JSON / CSV / HTML only when you share); those review packages are not uploaded by the app. Settings choices — electrical code (NEC or AS/NZS), preferred length units, appearance (system, light, or dark), and Language (System, English, or Español) — stay in on-device `UserDefaults` as well. They are not uploaded. ## Children’s privacy The app is rated 4+. It does not knowingly collect data from children. A hosted share sends the name and calculation snapshot only when you tap Share. ## Changes If this policy changes, the updated text will be published at https://beckify.com/privacy. ## Contact Questions: trevorjohnbeck@gmail.com