Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
e0218c2
fix(aura): scope local chat cache by user id
mirathfan Apr 21, 2026
13763be
feat(auth): add welcome, login, registration, and reset flows
mirathfan Apr 21, 2026
bd74541
feat(onboarding): add adaptive sizing and style-profile intake
mirathfan Apr 21, 2026
a942c83
feat(personalization): adapt home, closet, and aura to style profile
mirathfan Apr 21, 2026
a063ebb
feat(wardrobe): expand taxonomy and render support for mixed wardrobes
mirathfan Apr 21, 2026
7386d51
feat(add-item): support multi-photo ingestion and draft flow improvem…
mirathfan Apr 21, 2026
1135550
feat(images): improve item image selection and normalized presentation
mirathfan Apr 21, 2026
917130c
feat(ui): update aura and home components for new wardrobe data
mirathfan Apr 21, 2026
2ea49d2
fix(app): resolve lint/typecheck regressions after onboarding refactor
mirathfan Apr 21, 2026
fc4318e
feat: app shell, auth, onboarding, and base UI setup
mirathfan Apr 27, 2026
520eb24
feat: enhance AURA chat, input system, and personalization memory
mirathfan Apr 27, 2026
19206e8
feat: add AURA swipe-based outfit exploration
mirathfan Apr 27, 2026
74045f2
feat: upgrade AURA backend, memory integration, and outfit generation
mirathfan Apr 27, 2026
4669581
feat: implement product link ingestion and item extraction pipeline
mirathfan Apr 27, 2026
a950689
feat: improve closet management and home experience
mirathfan Apr 27, 2026
8b065da
feat: calendar improvements and utility enhancements
mirathfan Apr 27, 2026
cc96881
chore: update configs, dependencies, and firestore rules
mirathfan Apr 27, 2026
d54bcdc
feat(ui): add AURA design system and navigation shell
mirathfan Apr 30, 2026
28e6c8c
feat(home): redesign home experience with AURA styling
mirathfan Apr 30, 2026
0a2f7af
feat(laundry): implement laundry workflow and outfit filtering
mirathfan Apr 30, 2026
3451d8f
feat(aura): enhance chat, streaming, and styling intelligence
mirathfan Apr 30, 2026
c90624d
feat(closet): improve closet management and item ingestion
mirathfan Apr 30, 2026
02091c5
feat(profile): add profile, studio builder, and planning
mirathfan Apr 30, 2026
7b03ce5
feat(auth): add social sign-in and app identity config
mirathfan Apr 30, 2026
1abc352
feat(outfits): update outfit generation and access rules
mirathfan Apr 30, 2026
e2420fa
fix(aura): minor swipe interaction update
mirathfan Apr 30, 2026
3498d8a
feat(ui): add haptics utility
mirathfan Apr 30, 2026
f7d4508
chore: ignore IDE files
mirathfan Apr 30, 2026
5fe46c6
Fix Vision cutout edge halos
mirathfan Apr 30, 2026
5987ded
feat(home): polish AI Showcase Home experience
mirathfan May 1, 2026
dac4d6f
feat(ui): polish shared glass surfaces, dock, and item imagery
mirathfan May 1, 2026
22cf34e
feat(ai): polish AURA chat and outfit response UI
mirathfan May 1, 2026
c54bacc
feat(closet): polish closet, item detail, studio, profile, and laundr…
mirathfan May 1, 2026
11d0013
feat(calendar): polish calendar UI and interactions
mirathfan May 1, 2026
c934c5b
feat(add-item): polish and stabilize add item flow
mirathfan May 1, 2026
a8b3110
feat(outfits): improve outfit generation and backend logic
mirathfan May 1, 2026
66bcbb3
chore: add remaining polish, tools, and utilities
mirathfan May 1, 2026
190c6a2
chore: finalize polish, utilities, and minor fixes
mirathfan May 1, 2026
a70ed60
fix(functions): harden URL fetching and account deletion
mirathfan May 2, 2026
2402364
feat(aura): improve chat streaming and attachment handling
mirathfan May 2, 2026
988b542
polish(app): refine home, looks, laundry, and visual controls
mirathfan May 2, 2026
635d6fd
fix(media): clean up add item and background image handling
mirathfan May 2, 2026
3b7e623
Wire user preferences into AURA context
mirathfan May 2, 2026
46e71f4
fix(aura): improve image outfit analysis reliability
mirathfan May 2, 2026
7d5c9f2
Polish auth screens and item detail theming
mirathfan May 2, 2026
b9a4324
fix(aura): stabilize chat message ordering
mirathfan May 2, 2026
9ead0cc
Polish AURA chat interactions
mirathfan May 2, 2026
6bdc855
Clean up laundry shared item updates
mirathfan May 2, 2026
4b52f08
Add Today screen and clean up calendar date rail
mirathfan May 2, 2026
8fd57da
fix(add-item): preserve user edits and stabilize retries
mirathfan May 2, 2026
13924a0
fix(onboarding): surface save failures and preserve preferences
mirathfan May 2, 2026
5b7478e
Extract AURA look actions and align categories
mirathfan May 2, 2026
2af79a2
polish(aura): smooth chat motion and composer UX
mirathfan May 2, 2026
1b158f3
Gate production debug logging
mirathfan May 2, 2026
0968626
polish(aura): refine response cards and feedback rail
mirathfan May 2, 2026
5699f86
polish(nav): add AURA tab icon and refine tab bar
mirathfan May 2, 2026
b06866b
Document outfit planning architecture
mirathfan May 2, 2026
a6e83df
Improve new user closet empty states
mirathfan May 2, 2026
e67def2
polish(aura): improve empty error and retry states
mirathfan May 2, 2026
3cd08f9
Polish AURA outfit card touch targets
mirathfan May 2, 2026
5839f51
perf(aura): reduce simple chat model calls
mirathfan May 2, 2026
c320128
perf(aura): reduce chat reads and cache images
mirathfan May 2, 2026
012916e
perf(link): reduce product preview and image ranking cost
mirathfan May 2, 2026
db8d665
perf(media): optimize image uploads for AI payloads
mirathfan May 2, 2026
ef39e42
chore(app): remove Expo reset template script
mirathfan May 2, 2026
eb15a0e
chore(app): remove unused template and legacy files
mirathfan May 2, 2026
e959b6c
chore(deps): remove unused app dependencies
mirathfan May 2, 2026
10b96d3
refactor(app): extract pure closet onboarding and aura helpers
mirathfan May 2, 2026
ca3bf9a
refactor(aura): extract chat screen state hooks
mirathfan May 2, 2026
65519ee
refactor(functions): extract aura stream helpers
mirathfan May 2, 2026
d33c884
chore(ui): add AURA design primitives
mirathfan May 4, 2026
db86ac0
feat(aura): refine chat composer and voice input
mirathfan May 4, 2026
a9da912
feat(product-links): improve product extraction previews
mirathfan May 4, 2026
7fd29e4
feat(add-item): refactor wardrobe item wizard
mirathfan May 4, 2026
144b777
style(item): redesign item detail product page
mirathfan May 4, 2026
25be436
feat(aura): polish swipe looks and previews
mirathfan May 4, 2026
19aa819
feat(closet): add inventory insights dashboard
mirathfan May 4, 2026
2f1c159
style(calendar): polish planner surfaces
mirathfan May 4, 2026
db259be
style(profile): align profile surfaces
mirathfan May 4, 2026
f666be0
style(outfit): polish studio outfit surfaces
mirathfan May 4, 2026
e67ddde
feat(app): refine AURA frontend experience
mirathfan May 6, 2026
f555a66
docs: add AURA design system and launch QA checklist
mirathfan May 6, 2026
4a4c0f7
chore(release): align native config and loading fallback
mirathfan May 8, 2026
ae1c60d
feat(functions): harden AURA backend flows
mirathfan May 8, 2026
0d8b115
style(ui): polish premium surfaces and sheets
mirathfan May 8, 2026
cb1bcb2
fix(native): resolve smoke test blockers
mirathfan May 8, 2026
2d40b01
Fix Firebase config and Google OAuth for AURA bundle
mirathfan May 12, 2026
c260bc9
fix: guard Firebase startup config for TestFlight
mirathfan May 12, 2026
02d71f4
docs: add launch readiness and QA reports
mirathfan May 22, 2026
9511781
chore(ios): add TestFlight native project config
mirathfan May 22, 2026
885da4a
feat: add launch analytics and motion polish
mirathfan May 22, 2026
c522ba0
fix(items): harden photo ingestion and cutout flow
mirathfan May 22, 2026
d870d9a
fix(aura): resolve TestFlight QA chat and product flows
mirathfan May 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
23 changes: 23 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
EXPO_PUBLIC_FIREBASE_API_KEY=
EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=
EXPO_PUBLIC_FIREBASE_PROJECT_ID=
EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET=
EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
EXPO_PUBLIC_FIREBASE_APP_ID=
EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID=YOUR_GOOGLE_WEB_CLIENT_ID
EXPO_PUBLIC_GOOGLE_IOS_CLIENT_ID=YOUR_GOOGLE_IOS_CLIENT_ID
OPENAI_API_KEY=
EXPO_PUBLIC_AURA_VOICE_ENABLED=1
EXPO_PUBLIC_LIVE_PRODUCT_SEARCH_ENABLED=0
EXPO_PUBLIC_AFFILIATE_SHOPPING_ENABLED=0
FIREBASE_CLIENT_ID=YOUR_FIREBASE_CLIENT_ID
FIREBASE_CLIENT_SECRET=YOUR_FIREBASE_CLIENT_SECRET
SERPAPI_API_KEY=
SKIMLINKS_ID=
PRODUCT_SEARCH_PROVIDER=serpapi
PRODUCT_SEARCH_ENABLED=false
PRODUCT_SEARCH_CACHE_TTL_HOURS=24
PRODUCT_SEARCH_DAILY_LIMIT=20
PRODUCT_SEARCH_COUNTRY=us
PRODUCT_SEARCH_LANGUAGE=en
MAX_LIVE_SEARCH_RESULTS=3
20 changes: 18 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ yarn-error.log*
.env
.env.*
.env.local
!.env.example
google-services.json
GoogleService-Info.plist

# OS
.DS_Store
Expand All @@ -26,7 +29,20 @@ yarn-error.log*
expo-env.d.ts
# @end expo-cli

ios/
android/
/ios/
/android/
ios.build/
android.build/
.claude/
.idea/

# Allow Firebase native config files required for EAS/TestFlight builds
!GoogleService-Info.plist
!ios/
!ios/AURA/
!ios/AURA/GoogleService-Info.plist
# Apple signing credentials - never commit
credentials.json
ios/certs/
*.p12
*.mobileprovision
45 changes: 45 additions & 0 deletions APP_STORE_PRIVACY_ANSWERS_DRAFT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# AURA App Store Privacy Answers Draft

Draft based only on repo evidence. Do not submit without owner/legal review.

## Data Used To Track You

- NEEDS OWNER CONFIRMATION: No tracking SDK or ad SDK was found in package.json. Affiliate links are present, but code evidence does not prove cross-app tracking. Confirm Skimlinks/affiliate behavior before answering "No."

## Data Linked To The User

| App Store category | Draft answer | Status | Repo basis |
|---|---|---|---|
| Contact Info - Email Address | Collected, linked to user, used for app functionality/account management | CONFIRMED FROM CODE | Firebase email/password auth |
| Contact Info - Name | Collected if user enters it, linked to user, used for personalization | CONFIRMED FROM CODE | Register/profile stores name/displayName |
| User Content - Photos or Videos | Clothing photos, profile photo, AURA image attachments are collected and linked to user | CONFIRMED FROM CODE | Firebase Storage `users/{uid}/...` |
| User Content - Other User Content | Closet metadata, outfit plans, AURA chats, product links, saved looks | CONFIRMED FROM CODE | Firestore `users/{uid}` subcollections |
| Identifiers - User ID | Firebase UID is used and linked to user | CONFIRMED FROM CODE | Auth UID scopes Firestore/Storage |
| Location - Precise Location | Likely collected/processed when weather is enabled because lat/lon is sent to weather API | LIKELY | `expo-location`, Open-Meteo fetch with lat/lon |
| Contacts | Not found | CONFIRMED FROM CODE | No contacts permission/API found |
| Calendars | Calendar event titles/times are read when permission is granted | LIKELY | `expo-calendar` reads events; confirm App Store category wording |
| Audio Data | Voice dictation is present; backend transcription callable exists but no current call site found | NEEDS OWNER CONFIRMATION | `@react-native-voice/voice`, `transcribeAuraAudio` |
| Search History | Product searches/import links may count depending interpretation | NEEDS OWNER CONFIRMATION | SerpApi and product URL import flows |
| Purchases | No in-app purchase code found | CONFIRMED FROM CODE | No StoreKit/IAP dependency found |
| Financial Info | Item price fields can be stored manually or from product links; no payment info found | LIKELY | Clothing item price fields |
| Health and Fitness | Not found | CONFIRMED FROM CODE | No HealthKit/fitness APIs found |
| Sensitive Info | Not intentionally collected in code | NEEDS OWNER CONFIRMATION | User-generated chat/photos can contain sensitive content |
| Diagnostics | No Crashlytics/Sentry SDK found | NEEDS OWNER CONFIRMATION | App Store/TestFlight or Firebase console settings may collect outside repo |
| Product Interaction | No analytics SDK found, but Firestore commerce events are written for product suggestions | LIKELY | `commerceEvents` and suggestion analytics |

## Data Not Linked To The User

- NEEDS OWNER CONFIRMATION: Weather cache and device-level SDK telemetry may be unlinked, but repo alone is insufficient.

## Privacy Manifest Risk

`ios/AURA/PrivacyInfo.xcprivacy` currently has an empty `NSPrivacyCollectedDataTypes` array. That may be acceptable only if App Store Connect privacy answers carry the disclosure and SDK manifests cover required APIs, but owner/legal should review before external TestFlight/App Review.

## Recommended Owner Answers To Confirm

- Tracking: probably "No" only if affiliate/Skimlinks setup does not track users across apps/sites.
- Data linked to user: Email, name, user ID, photos, other user content, product interaction, location if weather enabled, calendar data if enabled.
- Purposes: App functionality, personalization, account management, product personalization/recommendations.
- Third-party advertising: not confirmed.
- Developer advertising or marketing: not confirmed.
- Analytics: not confirmed from code.
80 changes: 80 additions & 0 deletions AURA_TESTFLIGHT_QA_FIX_REPORT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# AURA TestFlight QA Fix Report

Date: 2026-05-21
Build target: TestFlight Build 4

## Root Causes Found

- Product-link wardrobe saves could inherit a prior AURA chat image because the candidate local-photo resolver fell back to the only recent chat attachment when there was one candidate and one image. Link candidates now never use chat attachment local photos.
- Product preview fallback was too permissive. A 404/error page or weak client preview could still become an "I found this item" card. Product-link previews now require a real product title and selected product image.
- Retailer titles were not fully HTML-decoded, so values such as `Men's` surfaced in cards. Numeric HTML entities are now decoded in client and Functions extraction paths.
- Footwear detection ran too late for retailer titles that contain generic men's/women's text. Air Jordan, New Balance, Foot Locker, JD Sports, shoes, sneakers, trainers, and men's/women's shoes now map to footwear before top inference.
- "Better" follow-ups were routed to existing-outfit advice instead of generating a concrete replacement. Refinement prompts now force a new outfit card with diversity constraints.
- Streaming assistant messages were local-only until final completion. The client now persists the pending assistant placeholder, overwrites it with the final message, and recovers stale pending streams on rehydrate.
- The AURA chat bottom inset did not leave enough room for the composer plus floating dock, so outfit cards and action buttons could sit behind controls.
- Outfit-photo answers used the generic detected-outfit intro even when the user asked "What am I wearing?" Direct outfit descriptions now appear before the review card.

## Bugs Fixed

- H&M/product-link stale image regression: product-link items use only product preview image candidates.
- Aritzia/error-page preview: semantic 404/error/bot pages fail cleanly instead of creating fake item cards.
- Amazon/Foot Locker/JD Sports/Macy's/Aritzia retailer quality: added safer title cleanup, brand fallback labels, HTML entity decoding, and stricter card creation.
- Footwear categorization: shoe retailer and sneaker model cues now map to footwear/shoes.
- AURA bottom overlap: chat padding now accounts for composer height, floating dock height, safe area bottom, and extra scroll room.
- Message controls: long-press user messages for Copy/Edit and assistant/system messages for Copy/Regenerate.
- Streaming persistence: user messages and pending assistant placeholders persist before stream completion; stale pending responses show Retry.
- Better/different outfit requests: now generate concrete alternate looks and avoid recent repeated combinations.
- Outfit photo direct answer: "What am I wearing?" responds naturally first, dedupes color words, and improves displayed roles.
- Shopping recommendations: existing AURA wardrobe suggestion cards and missing-piece actions continue to expose the live shopping/search sheet without pretending exact product availability.

## Files Changed In This Pass

- `app/(tabs)/ai.tsx`
- `app/(tabs)/closet.tsx`
- `functions/src/previewProductLink.ts`
- `functions/src/shared/auraCandidatePreview.ts`
- `functions/src/shared/auraOutfitPhotoAnalysis.ts`
- `functions/src/shared/auraUrlCandidatePreview.ts`
- `functions/src/shared/productLinkExtractor.ts`
- `functions/src/shared/productUrlMetadata.ts`
- `src/components/ai/AuraReplyCard.tsx`
- `src/components/ai/ChatList.tsx`
- `src/components/ai/ChatMessage.tsx`
- `src/hooks/aura/useAuraChatHydration.ts`
- `src/lib/aiChats.ts`
- `src/lib/aura.ts`
- `src/lib/auraAttachments.ts`
- `src/lib/auraChatHelpers.ts`
- `src/lib/auraOutfitAnalysisDisplay.ts`
- `src/lib/productLinkClosetImport.ts`
- `src/types/aura.ts`

## Known Remaining Issues

- `npx expo-doctor` still warns that native folders are present, so native config in `app.json` will not auto-sync through CNG. This is not from the QA fixes, but Build 4 should be made from the current native project or the native config should be synced intentionally.
- No Sentry was added in this pass per instruction.
- Retailer scraping can still be blocked by some stores; blocked/unsupported states now fail cleanly and ask the tester to try another link, screenshot, or manual add.
- I did not redesign AURA UI; message controls use the platform alert menu to keep the chat uncluttered.

## Manual QA Checklist

- Aritzia 404: paste a known bad Aritzia product URL. Expected: no product card, friendly failure message.
- Amazon product link: paste a real Amazon product URL. Expected: decoded title, real image if readable, Add enabled only with title plus image.
- Foot Locker shoe: paste a New Balance/Air Jordan shoe URL. Expected: title apostrophes decoded and category shoes/footwear.
- JD Sports shoe: paste an Air Jordan/JD Sports URL. Expected: title apostrophes decoded and category shoes/footwear.
- Macy's product: paste a readable Macy's product URL. Expected: real title/image preview or clean unsupported failure.
- H&M stale image regression: send an outfit/photo in AURA chat, then import an H&M product link. Expected: saved closet item image matches H&M product preview, not the prior chat photo.
- Better refinement: ask for a look, then send "Better" or "make it better." Expected: concrete updated outfit card, at least one meaningful changed piece, short explanation.
- Different outfit request: ask "another" or "different." Expected: no exact repeat of the recent top/bottom/shoes combination within recent suggestions.
- What am I wearing: upload an outfit photo and ask "What am I wearing?" Expected: natural text answer first, then detected pieces card; tie/sunglasses as accessories, shoes as footwear.
- Bottom composer overlap: with no keyboard, keyboard open, long assistant response, and outfit card at the bottom, Save Look/Wear Today/Plan Today remain scrollable above the composer/dock on small and large iPhones.
- App background mid-stream: send a prompt, background/close mid-response, reopen. Expected: chat rehydrates from Firestore; completed final appears if written, otherwise pending response shows Retry.

## Checks Run

- `npx tsc --noEmit` - passed
- `npm run lint` - passed
- `npx expo-doctor` - ran, 17/18 passed; failed only the native-folder/app-config CNG warning
- `cd functions && npm run lint` - passed
- `cd functions && npm run build` - passed
- `git diff --check` - passed
74 changes: 74 additions & 0 deletions COST_AND_ABUSE_READINESS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# AURA Cost And Abuse Readiness

Audit date: 2026-05-11

## Current Controls

| Area | Current control | Status |
|---|---|---|
| AURA chat | 10/min and 80/day per user | Good for small TestFlight, still costly if 50 active users all hit cap |
| Streaming AURA chat | Same `auraChat` limit | Good, but HTTP endpoint lacks App Check |
| Product link import/preview | 5/min and 30/day per user | Good for TestFlight |
| Image ingestion | 3/min and 25/day per user | Good for TestFlight |
| Outfit generation | 10/min and 100/day per user | Too high for external launch; okay for tiny internal group |
| Voice transcription | 6/min and 60/day per user | Good if feature is used |
| Live product search | Env daily limit default 20/day per user; disabled unless env enables provider | Good if disabled by default |
| Image size | Storage rules cap images at 10 MB; client compresses item/chat images | Good |
| Audio size | Storage rules and function cap audio at 10 MB | Good |
| Product URL fetch | Safe fetch timeout, content-type checks, 3 MB HTML cap in safeFetch | Good |
| Product search cache | Top-level `productSearchCache` with TTL setting | Good, but monitor cache growth |
| Account deletion | 3/day per user | Good |

## Expensive Endpoints

1. `askAuraStream` and `askAura`: OpenAI GPT-5.4, wardrobe context, possible vision inputs.
2. `ingestItemFromPhotos`: OpenAI vision, Sharp/background removal, Storage writes.
3. `previewProductLink`/`importProductLink`: external fetch, OpenAI image ranking/extraction, Storage/Firestore writes.
4. `generateAuraSwipeBatch`/`generateOutfitsV1`: OpenAI plus wardrobe reads.
5. `transcribeAuraAudio`: OpenAI transcription if wired.
6. `searchLiveProducts`: SerpApi paid search if enabled.

## Risks

- App Check missing means authenticated abuse can come from modified clients.
- `askAuraStream` is HTTP, so callable App Check enforcement will not protect it automatically.
- `outfitGeneration` daily cap of 100/user is high if a tester loops swipes.
- AURA chat cap of 80/day/user can become expensive with image-rich prompts.
- Stored chat history and wardrobe context can grow; backend slices history but Firestore storage still grows.
- Storage growth risk exists for repeated AURA attachments because attachment cleanup is account-level, not per-chat.
- Product link extraction logs and cached metadata should be watched for growth and privacy.
- Firebase reads from Calendar/Home may become hot if closet size grows, but acceptable for small TestFlight.

## Recommended Small TestFlight Caps

- User cap: 10 to 25 internal testers until Firebase config, App Check, and deletion QA are confirmed.
- AURA message cap: 30/day/user for internal TestFlight; raise only after monitoring.
- Product import cap: 10/day/user.
- Image upload/ingestion cap: 10/day/user.
- Outfit generation/swipe cap: 30/day/user.
- Voice transcription cap: 20/day/user if voice is enabled.
- Live product search: keep disabled unless explicitly testing shopping; if enabled, cap at 5/day/user.

## Monitoring Metrics

Watch daily during TestFlight:

- Function invocations by endpoint.
- Function errors by endpoint and error code.
- OpenAI spend by model and feature.
- Firebase Storage bytes and object count under `users/`.
- Firestore reads/writes/deletes and top collections by volume.
- Rate-limit block counts.
- `askAuraStream` non-200 responses and aborted streams.
- Product link import failure rate by domain.
- Image ingestion failure rate.
- Account deletion success counts and any deletion errors.

## Recommended Before External TestFlight

1. Enable App Check for Firestore, Storage, and callable functions.
2. Add manual App Check verification to HTTP endpoints or convert streaming endpoint to callable-compatible approach.
3. Lower caps in `RATE_LIMITS` for external testing.
4. Add budget alerts in Google Cloud/OpenAI/SerpApi.
5. Add log-based metrics for expensive endpoint success/failure without logging prompts, URLs, or wardrobe details.
6. Add scheduled cleanup for stale AURA attachments and old failed drafts.
36 changes: 36 additions & 0 deletions GoogleService-Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CLIENT_ID</key>
<string>1043970871162-4mbfs4taqvn9b81imga67hg6kn15k644.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.1043970871162-4mbfs4taqvn9b81imga67hg6kn15k644</string>
<key>ANDROID_CLIENT_ID</key>
<string>1043970871162-metmeq51adnvabgt010mt2lhbvbthhio.apps.googleusercontent.com</string>
<key>API_KEY</key>
<string>AIzaSyBoHMpbfOeDplgjeqReR6NJ5ll_WTftYyU</string>
<key>GCM_SENDER_ID</key>
<string>1043970871162</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.kasat.aura</string>
<key>PROJECT_ID</key>
<string>closet-app-57146</string>
<key>STORAGE_BUCKET</key>
<string>closet-app-57146.firebasestorage.app</string>
<key>IS_ADS_ENABLED</key>
<false></false>
<key>IS_ANALYTICS_ENABLED</key>
<false></false>
<key>IS_APPINVITE_ENABLED</key>
<true></true>
<key>IS_GCM_ENABLED</key>
<true></true>
<key>IS_SIGNIN_ENABLED</key>
<true></true>
<key>GOOGLE_APP_ID</key>
<string>1:1043970871162:ios:c757fdfe9dcbeb83ad50c3</string>
</dict>
</plist>
Loading