PageSourceSearch

https://t90-os-v1-2.base44.app/assets/AppPrivacyDeclaration-WUlxSlZp.js

js t90-os-v1-2.base44.app collected 2026-10-03 03:10:31 UTC 15,019 bytes, 1 lines download raw bytes

1import{j as e,Q as o,K as l,a as d}from"./index-Bf5Dl9ga.js";import{A as c}from"./apple-Bmv86Vop.js";import{S as p}from"./smartphone-D0QIFdQ9.js";import{T as x}from"./trash-2-BvQzwyLF.js";import{B as m}from"./ban-D_gTP7_5.js";const g=[{id:"contact_info",title:"Contact Info & Personal Information",appleCategory:"Contact Info",googleCategory:"Personal info",dataPoints:[{field:"Email address",entity:"User",purpose:"Account authentication, password reset, notifications"},{field:"Name (full name)",entity:"User",purpose:"Profile display, personalization"},{field:"Display name",entity:"AthleteProfile / ParentProfile / CoachProfile",purpose:"In-app identity, relationship labels"}],applePurposes:["App Functionality"],googlePurposes:["Account management"],linkedToIdentity:!0,tracking:!1,encryptedInTransit:!0,canDelete:!0,notes:"Email is collected at registration. Users can update display name in Settings. Account deletion available in Settings → Privacy."},{id:"health_fitness",title:"Health & Fitness",appleCategory:"Health & Fitness",googleCategory:"Health and fitness",dataPoints:[{field:"Sleep quality (self-reported)",entity:"MorningCheckIn",purpose:"Readiness assessment, daily coaching context"},{field:"Hydration level (self-reported)",entity:"MorningCheckIn",purpose:"Readiness assessment"},{field:"Nutrition quality (self-reported)",entity:"MorningCheckIn",purpose:"Readiness assessment"},{field:"Energy level (self-reported)",entity:"MorningCheckIn",purpose:"Readiness state derivation"},{field:"Mental/emotional state (self-reported)",entity:"MorningCheckIn",purpose:"Readiness assessment, coaching personalization"},{field:"Readiness state",entity:"DailyReadiness",purpose:"Daily mission selection, coaching guidance"},{field:"Activity duration & intensity",entity:"ActivityRecord / MasteryActivity",purpose:"Mastery credit calculation, development tracking"}],applePurposes:["App Functionality","Analytics"],googlePurposes:["Health and fitness"],linkedToIdentity:!0,tracking:!1,encryptedInTransit:!0,canDelete:!0,notes:"All health/fitness data is self-reported by the athlete through morning check-ins and activity logs. No data is collected from HealthKit, Google Fit, or wearable devices. No diagnostic or medical data is collected."},{id:"identifiers",title:"Identifiers",appleCategory:"Identifiers",googleCategory:"Device or other IDs",dataPoints:[{field:"User ID",entity:"All entities (created_by_id)",purpose:"Linking data records to user account"},{field:"Device token (push notifications)",entity:"NotificationDeviceToken",purpose:"Sending push notifications"}],applePurposes:["App Functionality"],googlePurposes:["App functionality"],linkedToIdentity:!0,tracking:!1,encryptedInTransit:!0,canDelete:!0,notes:"User ID is a server-generated identifier, not an advertising ID. No IDFA/AAID is collected. No advertising SDKs are used. Device tokens are registered for push notifications and removed on logout."},{id:"user_content",title:"User Content",appleCategory:"User Content",googleCategory:"App activity",dataPoints:[{field:"Assessment responses (AOS/COS questionnaires)",entity:"Assessment",purpose:"Identity profile generation (Athlete/Competitive Operating System)"},{field:"Reflection notes & mission reflections",entity:"MissionReflection / MorningCheckIn.notes",purpose:"Athlete self-reflection, journey narrative"},{field:"Coach notes",entity:"CoachNote",purpose:"Coach observations about athlete development"},{field:"Activity logs & mastery notes",entity:"ActivityRecord / MasteryActivity",purpose:"Development tracking, session summaries"}],applePurposes:["App Functionality","Analytics"],googlePurposes:["App activity"],linkedToIdentity:!0,tracking:!1,encryptedInTransit:!0,canDelete:!0,notes:"All user content is self-generated by the athlete or their connected coach/parent. No third-party user content is collected. Coach notes are visible only to the coach who wrote them."},{id:"diagnostics",title:"Diagnostics",appleCategory:"Diagnostics",googleCategory:"App info and performance",dataPoints:[{field:"Crash data",entity:"Platform (not stored in app database)",purpose:"App stability monitoring"},{field:"Performance data",entity:"Platform (not stored in app database)",purpose:"App performance optimization"}],applePurposes:["App Functionality"],googlePurposes:["App info and performance"],linkedToIdentity:!1,tracking:!1,encryptedInTransit:!0,canDelete:!1,notes:"Diagnostics are handled by the platform infrastru
1cture, not stored in T90's database. Not linked to individual user identities."},{id:"other_data",title:"Other Data",appleCategory:"Other Data",googleCategory:"App activity",dataPoints:[{field:"Calendar context (upcoming events)",entity:"CalendarContext",purpose:"Practice/game context for coaching recommendations"},{field:"Consent scopes & relationship records",entity:"ConsentScope / Relationship",purpose:"Parent/coach data access permissions"},{field:"Privacy preferences",entity:"PrivacyPreference",purpose:"User data-sharing choices"},{field:"Notification preferences",entity:"NotificationPreference",purpose:"User notification settings"},{field:"Session management data",entity:"SessionManagement",purpose:"Authentication session tracking"},{field:"Audit events",entity:"AuditEvent",purpose:"Administrative action logging for governance"}],applePurposes:["App Functionality"],googlePurposes:["App activity"],linkedToIdentity:!0,tracking:!1,encryptedInTransit:!0,canDelete:!0,notes:"Calendar data is manually entered by the athlete (no Google Calendar/Apple Calendar sync in this version). Audit events record administrative actions only — no raw athlete data in audit logs."}],a={apple:{dataLinkedToYou:["Contact Info (Email, Name)","Health & Fitness (Sleep, Hydration, Nutrition, Energy, Mental State)","Identifiers (User ID, Device ID)","User Content (Assessment Responses, Reflections, Coach Notes)","Other Data (Calendar Context, Consent Records, Preferences)"],dataNotLinkedToYou:["Diagnostics (Crash Data, Performance Data)"]},google:{dataCollected:["Personal info (Email address, Name, User ID)","Health and fitness (Fitness, Sleep, Hydration, Nutrition)","App activity (User-generated content, App interactions)","App info and performance (Crash logs, Diagnostics)","Device or other IDs (Device ID)"],dataEncryptedInTransit:!0,canRequestDataDeletion:!0,dataShared:!1}};function r({children:t,color:s="slate"}){const i={slate:"bg-slate-500/10 text-slate-400 border-slate-500/20",red:"bg-primary/10 text-primary border-primary/20",green:"bg-green-500/10 text-green-400 border-green-500/20",amber:"bg-amber-500/10 text-amber-400 border-amber-500/20"};return e.jsx("span",{className:`inline-flex items-center gap-1 text-[10px] font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md border ${i[s]}`,children:t})}function n({value:t,label:s}){return e.jsxs("div",{className:"flex items-center gap-1.5",children:[t?e.jsx(d,{className:"w-3 h-3 text-green-400",strokeWidth:3}):e.jsx(m,{className:"w-3 h-3 text-muted-foreground",strokeWidth:3}),e.jsx("span",{className:"text-[11px] text-muted-foreground",children:s})]})}function b(){return e.jsxs("div",{className:"min-h-screen bg-background px-5 py-6 max-w-3xl mx-auto",children:[e.jsxs("div",{className:"mb-6",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("div",{className:"w-10 h-10 rounded-xl bg-primary/10 flex items-center justify-center",children:e.jsx(o,{className:"w-5 h-5 text-primary",strokeWidth:2.5})}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-xl font-heading font-extrabold text-foreground",children:"App Privacy Declaration"}),e.jsx("p",{className:"text-[12px] text-muted-foreground",children:"Reference for App Store Connect & Google Play Console"})]})]}),e.jsx("p",{className:"text-[12px] text-muted-foreground leading-relaxed",children:`This registry maps every data category T90 collects to Apple's App Privacy "Nutrition Label" and Google Play's Data Safety Form. Use it when filling out both store submissions. Keep it in sync with entity changes.`})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3 mb-6",children:[e.jsxs("div",{className:"rounded-2xl bg-card border border-border p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx(c,{className:"w-4 h-4 text-foreground",strokeWidth:2}),e.jsx("h2",{className:"text-[13px] font-heading font-bold text-foreground",children:"Apple Nutrition Label"})]}),e.jsxs("div",{className:"space-y-2.5",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1",children:"Data Linked to You"}),e.jsx("ul",{className:"space-y-0.5",children:a.apple.dataLinkedToYou.map(t=>
1e.jsxs("li",{className:"text-[11px] text-foreground/80 flex items-start gap-1.5",children:[e.jsx("span",{className:"text-primary mt-0.5",children:"·"})," ",t]},t))})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1",children:"Data Used to Track You"}),e.jsx("p",{className:"text-[11px] text-muted-foreground italic",children:"None — T90 does not track users."})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1",children:"Data Not Linked to You"}),e.jsx("ul",{className:"space-y-0.5",children:a.apple.dataNotLinkedToYou.map(t=>e.jsxs("li",{className:"text-[11px] text-foreground/80 flex items-start gap-1.5",children:[e.jsx("span",{className:"text-muted-foreground mt-0.5",children:"·"})," ",t]},t))})]})]})]}),e.jsxs("div",{className:"rounded-2xl bg-card border border-border p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx(p,{className:"w-4 h-4 text-foreground",strokeWidth:2}),e.jsx("h2",{className:"text-[13px] font-heading font-bold text-foreground",children:"Google Data Safety"})]}),e.jsxs("div",{className:"space-y-2.5",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider mb-1",children:"Data Collected"}),e.jsx("ul",{className:"space-y-0.5",children:a.google.dataCollected.map(t=>e.jsxs("li",{className:"text-[11px] text-foreground/80 flex items-start gap-1.5",children:[e.jsx("span",{className:"text-primary mt-0.5",children:"·"})," ",t]},t))})]}),e.jsxs("div",{className:"flex flex-wrap gap-x-4 gap-y-1.5 pt-1",children:[e.jsx(n,{value:a.google.dataEncryptedInTransit,label:"Encrypted in transit"}),e.jsx(n,{value:a.google.canRequestDataDeletion,label:"Can request deletion"}),e.jsx(n,{value:a.google.dataShared,label:"Data shared with 3rd parties"})]})]})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"t90-accent-line flex-1"}),e.jsx("h2",{className:"text-[12px] font-heading font-bold text-foreground uppercase tracking-wider",children:"Full Data Category Breakdown"}),e.jsx("div",{className:"t90-accent-line flex-1"})]}),g.map(t=>e.jsxs("div",{className:"rounded-2xl bg-card border border-border overflow-hidden",children:[e.jsx("div",{className:"px-4 py-3 border-b border-border",children:e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-[14px] font-heading font-bold text-foreground",children:t.title}),e.jsxs("div",{className:"flex flex-wrap gap-1.5 mt-1.5",children:[e.jsxs(r,{color:"slate",children:["Apple: ",t.appleCategory]}),e.jsxs(r,{color:"slate",children:["Google: ",t.googleCategory]})]})]}),e.jsxs("div",{className:"flex flex-col gap-1 items-end",children:[e.jsx(r,{color:t.tracking?"amber":"green",children:t.tracking?"Tracking: Yes":"No Tracking"}),e.jsx(r,{color:t.linkedToIdentity?"red":"slate",children:t.linkedToIdentity?"Linked to Identity":"Not Linked"})]})]})}),e.jsx("div",{className:"px-4 py-3",children:e.jsx("div",{className:"space-y-2",children:t.dataPoints.map(s=>e.jsxs("div",{className:"flex flex-col gap-0.5 py-1.5 border-b border-border/40 last:border-0",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("span",{className:"text-[12px] font-semibold text-foreground",children:s.field}),e.jsx("span",{className:"text-[10px] text-muted-foreground font-mono whitespace-nowrap",children:s.entity})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:s.purpose})]},s.field))})}),e.jsxs("div",{className:"px-4 py-3 bg-secondary/30 border-t border-border",children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-2 mb-2",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(l,{className:"w-3 h-3 text-muted-foreground",strokeWidth:2.5}),e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["Encrypted: ",t.encryptedInTransit?"Yes":"No"]})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(x,{className:"w-3 h-3 text-muted-foreground",strokeWidth:2.5}),e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["Deletable: ",t.canDelete?"Yes":"No"]})]})]}),e.jsxs("div",{className:"flex flex-wrap gap-x-3 gap-y-1 mb-2",children:[e.jsx("span",{className:"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider",children:"Apple Purposes:"}),t.applePurposes.map(s=>
1e.jsx("span",{className:"text-[10px] text-foreground/70",children:s},s))]}),e.jsxs("div",{className:"flex flex-wrap gap-x-3 gap-y-1",children:[e.jsx("span",{className:"text-[10px] font-semibold text-muted-foreground uppercase tracking-wider",children:"Google Purposes:"}),t.googlePurposes.map(s=>e.jsx("span",{className:"text-[10px] text-foreground/70",children:s},s))]}),t.notes&&e.jsx("p",{className:"text-[10px] text-muted-foreground/70 italic leading-relaxed mt-2 pt-2 border-t border-border/30",children:t.notes})]})]},t.id))]}),e.jsxs("div",{className:"mt-6 rounded-2xl bg-primary/5 border border-primary/15 p-4",children:[e.jsx("h2",{className:"text-[13px] font-heading font-bold text-foreground mb-3",children:"Submission Checklist"}),e.jsx("div",{className:"space-y-2",children:["Apple: Declare all 5 'Data Linked to You' categories above in App Store Connect → App Privacy","Apple: Confirm 'Data Used to Track You' = None (no tracking SDKs, no IDFA)","Apple: Add Privacy Policy URL (already linked in-app at /privacy)","Google: Complete Data Safety Form in Play Console → App Content → Data Safety","Google: Set 'Data encrypted in transit' = Yes for all categories","Google: Set 'Users can request data deletion' = Yes (account deletion in Settings → Privacy)","Google: Set 'Data shared with third parties' = No","Both: Ensure Privacy Policy page reflects this registry"].map((t,s)=>e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("div",{className:"w-4 h-4 rounded border border-muted-foreground/30 flex-shrink-0 mt-0.5"}),e.jsx("span",{className:"text-[11px] text-foreground/80 leading-relaxed",children:t})]},s))})]})]})}export{b 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.