PageSourceSearch

https://trysteadier.app/assets/PrivacyPage-C85Gfbvr.js

js trysteadier.app collected 2026-10-02 15:59:46 UTC 8,479 bytes, 1 lines download raw bytes

1import{j as e}from"./vendor-motion-CrVg7028.js";import{L as s}from"./vendor-react-CMYciJPr.js";import{u as o,L as a,au as i,A as l}from"./index-B58eJlvC.js";import"./vendor-query-C4LcE4u2.js";import"./vendor-supabase-XOXmZWMk.js";const r=()=>e.jsxs("div",{className:"mx-auto max-w-2xl px-5 py-12",children:[e.jsxs(s,{to:"/",className:"mb-6 inline-flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground",children:[e.jsx(l,{size:16})," Back"]}),e.jsx("h1",{className:"font-display text-3xl font-bold text-foreground mb-2",children:"Privacy Policy"}),e.jsx("p",{className:"text-xs text-muted-foreground mb-8",children:"Last updated: August 7, 2026"}),e.jsxs("div",{className:"prose prose-sm max-w-none text-foreground/90 space-y-6 [&_h2]:font-display [&_h2]:text-lg [&_h2]:font-semibold [&_h2]:text-foreground [&_h2]:mt-8 [&_h2]:mb-3 [&_p]:leading-relaxed [&_ul]:list-disc [&_ul]:pl-5 [&_ul]:space-y-1 [&_li]:text-sm [&_p]:text-sm",children:[e.jsx("h2",{children:"1. Introduction"}),e.jsx("p",{children:'Ellen Haines LLC ("we," "us," or "our") operates the Steadier application ("the App") available at trysteadier.app. This Privacy Policy explains how we collect, use, disclose, and safeguard your information when you use the App.'}),e.jsx("h2",{children:"2. Information We Collect"}),e.jsx("p",{children:"We collect the following types of information:"}),e.jsxs("ul",{children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Account information:"})," Email address, first name, and password (stored securely using industry-standard hashing)"]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Usage data:"})," Listening history, favorites, completed sessions, streaks, and earned badges"]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Push notification tokens:"})," Device tokens for sending notifications, if you opt in"]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Safety event metadata:"})," Risk level classifications and safety flags only — we do ",e.jsx("strong",{children:"not"})," store the content of your messages"]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Payment information:"})," Processed securely by Stripe. We do not store your credit card details."]})]}),e.jsx("h2",{children:"3. AI Processing"}),e.jsx("p",{children:"The App includes an AI-powered audio recommendation feature. When you use this feature:"}),e.jsxs("ul",{children:[e.jsxs("li",{children:["Your messages are processed ",e.jsx("strong",{children:"in real-time"})," to generate personalized audio recommendations"]}),e.jsxs("li",{children:["Messages are ",e.jsx("strong",{children:"never stored"})," by us or our AI provider"]}),e.jsx("li",{children:"Only anonymized safety classification metadata (risk level and flags) is logged to ensure user safety"}),e.jsxs("li",{children:["We do ",e.jsx("strong",{children:"not"})," train AI models on your data"]}),e.jsx("li",{children:"AI processing is provided by Google Gemini, which does not retain user data from our API calls"})]}),e.jsx("h2",{children:"4. How We Use Your Information"}),e.jsx("p",{children:"We use the information we collect to:"}),e.jsxs("ul",{children:[e.jsx("li",{children:"Provide and maintain the App and your account"}),e.jsx("li",{children:"Process your subscription and payments"}),e.jsx("li",{children:"Personalize your experience with listening history and recommendations"}),e.jsx("li",{children:"Send push notifications you have opted into"}),e.jsx("li",{children:"Monitor and ensure user safety through anonymized safety classification"}),e.jsx("li",{children:"Improve and develop the App"})]}),e.jsx("h2",{children:"5. Third-Party Services"}),e.jsx("p",{children:"We use the following third-party services:"}),e.jsxs("ul",{children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Stripe:"})," For secure payment processing of web subscriptions and one-time guide and course purchases. Stripe's privacy policy governs their handling of your payment data."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Apple & RevenueCat:"})," For subscriptions purchased inside the iPhone or iPad app. Apple processes the payment and we receive only subscription status information."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Lovable Cloud:"}
1)," For hosting, database infrastructure, and authentication services."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Google Gemini:"})," For AI-powered audio recommendations and safety classification. Messages are processed in real-time and are not retained by Google from our API usage."]})]}),e.jsx("h2",{children:"6. Data Sharing"}),e.jsx("p",{children:"We do not sell, rent, or trade your personal information. We share data only with the third-party services listed above, and only as necessary to operate the App."}),e.jsx("h2",{children:"7. Data Retention"}),e.jsx("p",{children:"We retain your account data for as long as your account is active. Usage data (listening history, streaks, badges) is retained to provide a continuous experience. Safety event metadata is retained in anonymized form for safety monitoring purposes."}),e.jsx("h2",{children:"8. Data Deletion"}),e.jsx("p",{children:"You may delete your account and all associated personal data at any time from within the App via your Profile page. Upon account deletion, we will permanently remove your personal information, listening history, favorites, badges, and all other account-associated data."}),e.jsx("h2",{children:"9. Sensitive Information"}),e.jsxs("p",{children:["While the App processes message content in real-time for safety classification purposes, this content is ",e.jsx("strong",{children:"never stored"}),". Only anonymized metadata — specifically risk level and safety flag classifications — is recorded. No message text, personal disclosures, or sensitive content is retained."]}),e.jsx("h2",{children:"10. Security"}),e.jsx("p",{children:"We implement appropriate technical and organizational measures to protect your personal information, including encrypted data transmission, secure password hashing, and access controls. However, no method of electronic transmission or storage is 100% secure."}),e.jsx("h2",{children:"11. Children's Privacy"}),e.jsx("p",{children:"The App is not intended for children under 13 years of age. We do not knowingly collect personal information from children under 13. If you believe a child has provided us with personal information, please contact us so we can take appropriate action."}),e.jsx("h2",{children:"12. Your Rights"}),e.jsx("p",{children:"Depending on your jurisdiction, you may have the right to:"}),e.jsxs("ul",{children:[e.jsx("li",{children:"Access the personal data we hold about you"}),e.jsx("li",{children:"Request correction of inaccurate data"}),e.jsx("li",{children:"Request deletion of your data"}),e.jsx("li",{children:"Object to or restrict certain processing"}),e.jsx("li",{children:"Data portability"})]}),e.jsx("p",{children:"To exercise these rights, please contact us at the email address provided within the App."}),e.jsx("h2",{children:"13. Changes to This Policy"}),e.jsx("p",{children:"We may update this Privacy Policy from time to time. We will notify you of material changes by posting the updated policy in the App. Your continued use of the App after changes are posted constitutes your acceptance of the revised policy."}),e.jsx("h2",{children:"14. Contact"}),e.jsx("p",{children:"If you have questions about this Privacy Policy, please contact us at the email address provided within the App."})]}),e.jsxs("div",{className:"mt-12 border-t border-border pt-6 text-center text-xs text-muted-foreground",children:[e.jsx(s,{to:"/terms",className:"hover:text-foreground transition-colors",children:"Terms of Service"}),e.jsx("span",{className:"mx-2",children:"·"}),e.jsx(s,{to:"/support",className:"hover:text-foreground transition-colors",children:"Support"}),e.jsx("span",{className:"mx-2",children:"·"}),e.jsxs("span",{children:["© ",new Date().getFullYear()," Ellen Haines LLC"]})]})]}),x=()=>{const{user:n,loading:t}=o();return t?null:n?e.jsxs(a,{children:[e.jsx(i,{title:"Privacy Policy — Steadier",description:"How Steadier handles your data and protects your privacy.",path:"/privacy"}),e.jsx(r,{})]}):e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsx(i,{title:"Privacy Policy — Steadier",description:"How Steadier handles your data and protects your privacy.",path:"/privacy"}),e.jsx(r,{})]})};export{x as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.