Legal
Privacy Policy
Threadline ("we," "us," "our") is operated by Casey Zandbergen as a sole proprietorship. This policy explains what data the Threadline iOS app collects, how we use it, who we share it with, and what choices you have.
We wrote this in plain English on purpose. If something is unclear, email us at privacy@threadline.fashion.
1. What we collect and why
Data you provide directly
| Data | Why we collect it | Stored where |
|---|---|---|
| Email address | Account creation and authentication | Supabase (encrypted at rest) |
| Clothing photos | Core app function — building your virtual closet | Supabase Storage (private per-user bucket + public thumbnail bucket) |
| Garment details you edit | Category, color, season, occasion, notes, purchase price — so the app can organize and recommend outfits | Supabase database |
| Outfits you build | Saving your outfit combinations | Supabase database |
| Wear history | Tracking what you wore and when, cost-per-wear analytics | Supabase database |
| Face enrollment photo | On-device only — used for camera-roll bulk import to identify your photos. Never uploaded to any server. | Device only (iOS keychain / app sandbox) |
Data generated by AI processing
When you upload a garment photo, the app sends it through a processing pipeline to auto-tag and catalog it:
| Step | What happens | Provider | Data sent |
|---|---|---|---|
| Background removal | Removes the background from your clothing photo | Apple Vision (on-device) | Nothing leaves your device |
| AI tagging | Identifies category, color, brand, description, style attributes | Google Gemini Flash via OpenRouter | The clothing photo (no face, no personal info) |
| Hanger detection | Detects and optionally removes clothes hangers from photos | Google Gemini Flash via OpenRouter | The clothing photo |
| Hanger inpainting (premium) | AI-edits the photo to cleanly remove a detected hanger | Google Gemini Flash via OpenRouter | The clothing photo |
| Semantic embedding | Converts the text description into a numerical vector for outfit matching | Voyage AI | Text description of the garment (not the photo) |
| Outfit recommendation (premium) | Re-ranks outfit candidates for style compatibility | Google Gemini Flash via OpenRouter | Text descriptions, weather context, calendar event type (no photos) |
Data collected automatically
| Data | Why | Provider |
|---|---|---|
| Approximate location (city-level, one-shot) | Weather-aware outfit suggestions. Requested once per session. We do not track or store your location history. | Apple CoreLocation → Open-Meteo |
| Calendar event titles (on-device only) | Occasion-aware outfit suggestions. Event text is matched locally — no calendar data ever leaves your device. | Apple EventKit (on-device) |
| Crash and error logs | Fixing bugs | Sentry |
| App usage analytics | Understanding how people use the app | Apple App Analytics |
| Purchase and subscription status | Managing your premium subscription | RevenueCat + Apple StoreKit |
2. How we use your data
- Provide the service. Everything above exists to make the app work — tagging clothes, building outfits, giving you weather-appropriate suggestions.
- Improve the app. Crash logs and usage analytics help us find and fix problems.
- Manage your subscription. RevenueCat and Apple handle billing; we use their status data to unlock premium features.
We do not:
- Sell your data to anyone, ever.
- Use your data for advertising or ad targeting.
- Train AI models on your photos. Your images are processed per-request and not retained by our AI providers.
- Share your closet data with other users (unless you explicitly use a future sharing feature).
3. Third-party processors
These are the companies that process data on our behalf. We only share what's necessary for each service to function.
| Provider | What they process |
|---|---|
| Supabase | Email, garment data, photos, outfits, wear history |
| OpenRouter → Google Gemini Flash | Clothing photos (background removed), text descriptions |
| Voyage AI | Text descriptions of garments |
| RevenueCat | Apple user ID, subscription status, transaction receipts |
| Apple | Purchase data, anonymized usage analytics |
| Sentry | Device info, OS version, crash stack traces |
| Open-Meteo | Approximate lat/lon (city-level, no user identifier) |
| BRIA AI (fallback, not active in v1.0) | Clothing photos |
4. Data retention and deletion
- Your data lives as long as your account does. When you delete your account, we delete your profile, all garment records, photos, outfits, and wear history from Supabase within 30 days.
- AI providers do not retain your data. OpenRouter/Gemini, Voyage AI, and BRIA process requests in real time and do not store inputs or outputs beyond the API call.
- Crash logs are retained in Sentry for 90 days.
- Face enrollment data is stored only on your device and is deleted when you tap "Delete Face Data" or delete the app.
5. Your rights
Depending on where you live, you may have the right to:
- Access — request a copy of the data we hold about you.
- Correction — fix inaccurate data.
- Deletion — delete your account and all associated data (Profile → Delete Account, or email us).
- Portability — receive your data in a machine-readable format.
- Opt out of sale — we don't sell your data, so there's nothing to opt out of.
California residents (CCPA/CPRA): We do not sell or share personal information for cross-context behavioral advertising. We do not use sensitive personal information for purposes beyond what is necessary to provide the service.
EU/EEA residents (GDPR): Our legal basis for processing is contract performance and legitimate interest. You have the right to lodge a complaint with your local data protection authority.
To exercise any of these rights, email privacy@threadline.fashion. We will respond within 30 days.
6. Security
- All data in transit is encrypted via TLS.
- All data at rest in Supabase is encrypted (AES-256).
- Row-level security (RLS) ensures each user can only access their own data.
- Photos in the private originals bucket are not publicly accessible.
- Face enrollment data never leaves your device.
- We do not store passwords — authentication is handled by Supabase Auth (bcrypt-hashed).
7. Children's privacy
Threadline is not intended for children under 17. We do not knowingly collect data from anyone under 17. If we learn that we have, we will delete it promptly. The app is rated 17+ on the App Store.
8. Changes to this policy
If we make material changes, we'll notify you via an in-app banner or email before the changes take effect. Non-material updates (typo fixes, formatting) may be made without notice.
9. Contact
Privacy questions: privacy@threadline.fashion
General support: support@threadline.fashion
Website: threadline.fashion
Casey Zandbergen
Threadline