Laeli Privacy Policy
Who we are
Laeli is a dog-training coaching app developed by [Legal Entity Name], contactable at [email protected].
What data we collect
| Data | Source | Purpose | Stored | Shared with |
|---|---|---|---|---|
| Owner name (optional) | User input in Profile | Personalize coaching responses ("Hi Aurelien") | Locally on device + Supabase Auth profile | OpenAI (in coaching prompts only, not for training) |
| Dog profile (name, breed, age, weight, energy, training level, goals, behavior issues) | User input in onboarding + Profile | Generate the personalized training plan and coaching replies | Locally on device + Supabase (when logged in) | OpenAI (in coaching prompts only) |
| Journal entries (training wins, accidents, behavior moments, notes) | User input in Journal / Today quick-log | Coaching personalization, pattern detection | Locally on device + Supabase | OpenAI (recent entries only, in coaching prompts) |
| Chat history with Laeli AI | App usage | Coaching context (last few turns) + cross-session memory | Locally on device + Supabase | OpenAI (recent turns + rolling memory snapshots) |
| Today's training-plan tasks and completion counts | Generated by the app from your dog's profile and goals | Let the AI coach see what you were asked to do today and how much you've already finished, so its reply matches your actual progress | Locally on device + Supabase | OpenAI (in coaching prompts only) |
| Journal pattern summaries (e.g. "evening biting cluster x3 in last 7 days") | Computed by Laeli from your recent journal entries | Coaching personalization — gives the AI coach a short summary of behavior patterns so it can address them directly | Locally on device + Supabase | OpenAI (in coaching prompts only) |
| Safety-routing signals (category labels like "blood or bleeding", "child or baby safety") | Computed automatically each time you message the coach, from the words in your recent journal entries and your message | Decide whether the coach should respond normally, add a vet-referral note, or escalate to a safety-first reply | Locally on device + Supabase | OpenAI (in coaching prompts only) |
| Unresolved red-flag log excerpts (title, log ID, timestamp — last 48 hours only) | A red-flag log you wrote in the last 48 hours (e.g. a bite, broken skin, or vet-relevant event) | Make sure the coach sees recent safety events and follows up on them instead of moving on | Locally on device + Supabase | OpenAI (in coaching prompts only) |
| Care reminders (medication, vet appointments, etc.) | User input in Care tab | Scheduled local notifications | Locally on device + Supabase | None |
| Anonymous user ID (Supabase Auth) | Generated on first launch | Authentication, server-side rate limiting | Supabase Auth | None |
| Crash / error reports | Automatic when the app crashes | Bug fixing | Sentry | Sentry (PII-safe payloads — see "Crash reporting (Sentry)") |
| Server-side function logs (operational logs from our coaching backend) | Automatic when the coaching backend processes a request | Debugging, abuse prevention, rate-limit enforcement | Supabase Logs (our backend host) | None — internal to Laeli (see "Server-side logs") |
| Daily / monthly usage counts | Automatic | Subscription tier enforcement | Locally on device + Supabase | None |
What we do NOT collect
- Location data
- Microphone or camera content (the camera is used only for owner / dog photos, which stay on device unless you've explicitly enabled cloud sync)
- Contacts, calendar, or other device-level personal data
- Veterinary or medical records
- Real-name identification (Laeli works fine without a real name)
How we use OpenAI
Coaching replies are generated by OpenAI's gpt-4o-mini model. On each coaching request we send:
- Your dog's profile (no real-name identifying information unless you typed it)
- Your most recent journal entries (last 7–14 days depending on tier)
- The current chat history (last few turns) and rolling memory snapshots of past sessions
- Today's training-plan tasks and how many you've completed, so the reply matches your actual progress
- Short pattern summaries computed from your recent journal entries (e.g. "evening biting cluster x3 in last 7 days"), so the coach can address patterns directly
- Safety-routing signals — category labels such as "blood or bleeding" or "child or baby safety" computed from the words in your recent entries and your message, used to decide whether the coach should answer normally, add a vet-referral note, or escalate to a safety-first reply
- If you logged a red-flag event in the last 48 hours, a short excerpt of that log (title, log ID, timestamp) so the coach can follow up instead of moving on
- Your specific question
OpenAI does NOT train on this data (per their API terms for paid customers). We do not log requests beyond what's needed for billing and abuse prevention.
Crash reporting (Sentry)
We use Sentry to capture crashes and errors so we can fix bugs. Reports include technical context (stack traces, app version, device model, OS version) and a structured event payload. We run user-input and log strings through a redaction layer before they reach Sentry, so journal text, chat messages, owner name, dog name, email addresses, and similar fields are replaced with placeholders (e.g. [redacted-email]) before the report leaves your device. Reports are stored in Sentry's EU/US infrastructure under our project and retained per Sentry's standard retention (90 days by default for our plan).
Server-side logs
Our coaching backend (hosted on Supabase Edge Functions) writes operational logs while it processes a request — things like "request received", "rate limit hit", "model returned unexpected format". These logs may incidentally contain short excerpts of model output or user input (for example, the first 200 characters of an AI reply when it fails to parse). We run a redaction layer over these log lines so known PII fields (names, emails, IDs, free-text journal/chat content) are replaced with placeholders before they are written. Logs are retained per Supabase's standard log retention for our plan and are only accessible to Laeli engineers for debugging and abuse prevention.
Retention and deletion
- Local data stays on your device until you delete it from the app or uninstall.
- Server-side data (auth account, journal sync, chat history) is retained as long as your account is active.
- Account deletion is available in Profile → Settings → Delete account. This removes your Supabase data and signs you out. Locally stored data is also wiped on the same device. Deletion is processed within 30 days.
- Anonymous accounts that haven't been used in 365 days are automatically deleted along with their associated data.
Children
Laeli is not designed for users under 13. We do not knowingly collect data from children. If you are a parent who believes your child has used Laeli, email [email protected] and we'll delete the account.
Your rights
You can at any time:
- Export your data —
[email protected] - Delete your account — Profile → Settings → Delete account
- Ask what data we hold about you —
[email protected]
If you are in the EU / UK, you have additional GDPR rights including the right to object, restrict processing, and lodge a complaint with your local data protection authority.
Changes to this policy
We will notify you in the app and via email if we materially change how we collect or use your data. Continued use of Laeli after such notice constitutes acceptance.