# CLAUDE.md - Stuffolio Project Guide **Version:** Stuffolio2c | **Updated:** January 4, 2026 --- ## Quick Reference | Item | Value | |------|-------| | Current Version | Stuffolio2c | | Working Directory | /Volumes/2 TB Drive/Coding/GitHubDeskTop/Stuffolio | | GitHub | https://github.com/Terryc21/Stuffolio | | Platforms | iOS 17.6+, macOS 14.6+, iPad | | Frameworks | SwiftUI, SwiftData, CloudKit | --- ## ⚠️ DELIVERY WORKFLOW (Read First) ### Step 1: Determine Delivery Format | Scope | Format | Version Change | |-------|--------|----------------| | **Very small** (<10 lines) | Find/replace instructions | None | | **Small-medium** (10-100 lines) | Drop-in file(s) | None | | **Large** (>100 lines) | Full project .zip | **Required** | ### Step 2: If Creating Zip, ASK Current Version **ALWAYS ask:** "What's the current version?" before creating any zip. ### Step 3: Apply Version Increment **Format:** `Stuffolio[Major][Letter]` | Change Type | Rule | Example | |-------------|------|---------| | Patch (fixes, docs) | Increment letter | Stuffolio2a → **Stuffolio2b** | | Major release | Increment major | Stuffolio2z → **Stuffolio3a** | ### Step 4: Name Folder and Zip Identically ``` ✅ CORRECT: Stuffolio2a.zip contains Stuffolio2a/ ❌ WRONG: Stuffolio2a.zip contains Stuffolio2/ ❌ WRONG: Stuffolio2.zip contains Stuffolio2a/ ``` ### Step 5: Update Documentation When creating zip, update version in: - CLAUDE.md (header + Quick Reference table) - Migration History table - Any version-specific section headers --- ## Developer Preferences - Uses Xcode 26 on macOS 26 M4 Desktop - Prefers GUI tools over command-line - Wants concise, non-verbose responses - Provide download links after placing files in outputs - Report token usage after EVERY response --- ## Session Startup Read these project files at session start: 1. DevelopmentRules.md 2. DESIGN_SYSTEM.md 3. COLORBLIND_ACCESSIBILITY.md 4. FUTURE_FLEXIBILITY.md --- ## Code & File Naming - **Code:** `Item` (models/variables) - **UI text:** "Product" (user-facing) - **Views:** `*View.swift` - **ViewModels:** `*ViewModel.swift` - **Managers:** `*Manager.swift` - **Extensions:** `TypeName+Extension.swift` --- ## File Size Guidelines ### By File Type | Type | Comfortable | Consider Splitting | |------|-------------|-------------------| | Views | <600 | >1000 if problematic | | ViewModels | <400 | >600 | | Managers | <500 | >800 | | Models | <800 | >1200 | | Tests | No limit | Never for line count | ### When to Split Split when ANY of these are true: - **Multiple responsibilities** - File does 2+ unrelated things - **Merge conflicts** - Multiple developers editing same file - **Hard to navigate** - Can't find things with Cmd+F + MARK sections - **Reusable component buried** - Something inside could be used elsewhere ### When NOT to Split Do NOT split just for line count if: - ✅ File works correctly and isn't being modified - ✅ File has clear MARK sections - ✅ Logic is cohesive (splitting would scatter related code) - ✅ SwiftUI state/binding flow would break ### The Rule **Working code that isn't being modified should not be refactored for line count alone.** Refactor only when adding features, fixing bugs, or extracting for reuse. ### Other Extractions - Help content >30-40 lines → `Sources/Views/Help/` - Complex inline views >40 lines → computed properties --- ## Navigation Architecture ### Platform Layouts - **iPhone:** TabView (4 tabs, bottom bar) - **iPad/Mac:** NavigationSplitView (sidebar with dividers) ### Section Colors | Section | Color | Hex | |---------|-------|-----| | Dashboard | Blue | #007AFF | | My Products | Indigo | #5856D6 | | Actions | Teal | #5AC8FA | | Insights | Purple | #AF52DE | | Stuff Scout | Magenta | #C2185B | | Settings | Gray | #8E8E93 | --- ## Design Standards ### Colorblind Accessibility - **Palette:** Blue/Yellow/Red only (no green for status) - **Triple redundancy:** Color + Icon + Text (always) - **Compliance:** WCAG 2.1 AA ### Status Colors | Status | Color | Icon | |--------|-------|------| | Active | Blue | checkmark.circle.fill | | Warning | Yellow | clock.badge.exclamationmark.fill | | Expired | Red | exclamationmark.triangle.fill | | Lifetime | Blue | infinity.circle.fill | --- ## SwiftUI Stability Rules Avoid crashes and constraint loops: - ❌ NO `print()` in view body properties - ❌ NO `ScrollViewReader` inside NavigationSplitView on macOS - ❌ NO nested NavigationStack on macOS - ✅ Use `.onAppear` + guard flag (NOT `.task`) for data loading - ✅ Extract complex inline views (40+ lines) to computed properties --- ## Assets & Branding | Asset | Name | |-------|------| | App logo | `sf-logo` | | Support email | support@stuffolio.app | | Copyright | © 2025 Coffee & Code LLC | --- ## AI Integration - **Backend:** Cloudflare Workers (api.stuffolio.app) - **APIs:** Claude + Perplexity + Tavily + Brave - **Features:** Product research, maintenance tips, troubleshooting, manual lookup, parts search, recalls ### Query Routing (SF1e) | Query Type | Primary | Secondary | Fallback | |------------|---------|-----------|----------| | Official (website, manual) | Tavily | Brave | Perplexity | | Diverse (parts, supplies) | Brave | Tavily | Perplexity | | Knowledge (maintenance) | Claude | Brave | Perplexity | | Recalls | CPSC | Brave | Perplexity | --- ## API Security (Jan 5, 2026) Security measures implemented in Cloudflare Worker (`cloudflare-worker/Worker.js`). ### Rate Limiting Protects against abuse and controls API costs. Limits per IP per hour: | Endpoint | Limit/Hour | Reason | |----------|------------|--------| | Main (/) | 60 | Product lookups | | OCR | 20 | Claude Vision (expensive) | | Stuff Scout | 20 | AI identification (expensive) | | Barcode Lookup | 50 | UPC lookups | | Recalls | 100 | Free govt API | | App Events | 100 | Analytics | | Newsletter | 3 | Anti-spam | Rate limit hits logged to analytics dashboard for monitoring. ### CORS Restrictions Controls which origins can access the API: | Origin | Access | |--------|--------| | `stuffolio.app` | ✅ Allowed | | `www.stuffolio.app` | ✅ Allowed | | `api.stuffolio.app` | ✅ Allowed | | `localhost:*` | ✅ Allowed (dev) | | Native iOS/macOS apps | ✅ Allowed (no Origin header) | | Other web origins | ❌ Blocked | ### Input Validation All user inputs validated before processing: | Field | Limit | Validation | |-------|-------|------------| | Manufacturer | 100 chars | XSS patterns stripped | | Model number | 200 chars | XSS patterns stripped | | Email | 254 chars | Format + disposable domain check | | Phone | 10-15 digits | Digits only | | Images | 10MB each, max 5 | Base64 + size check | | Barcode | 8-14 digits | Numeric only | | QueryType | Whitelist | 10 allowed values | ### Newsletter Spam Protection - **Honeypot field:** Hidden `website` field catches bots - **Disposable emails:** 16 common temp-mail domains blocked - **Rate limiting:** 3 signups/hour per IP - **Format validation:** Email and phone formats verified ### Error Handling - Generic error messages returned to users (no stack traces) - Full errors logged to Cloudflare console for debugging - User-friendly field names in validation errors ### Deployment ```bash cd cloudflare-worker npx wrangler deploy ``` All security features are code-based in Worker.js — no Cloudflare dashboard configuration required. --- ## Current Focus iOS Excellence Plan (Stuffolio2c) ### Stuffolio2c - iOS Excellence Phase 1 Complete (Jan 4, 2026) **Cross-Platform System Integration (6 features):** - ✅ Spotlight Indexing - `SpotlightManager.swift` - ✅ Handoff Support - `HandoffManager.swift` - ✅ Expanded App Intents - `ExpandedAppIntents.swift` - ✅ Focus Filters - `StuffolioFocusFilter.swift` - ✅ Interactive Widgets - `WidgetButtonIntents.swift`, updated `WarrantyWidget.swift` - ✅ Localization Infrastructure - `Localizable.xcstrings`, `LocalizationManager.swift` **Next:** Integration steps + Phase 2 iPad Excellence **Plan Document:** `iOS_EXCELLENCE_PLAN.md` --- ### Stuffolio2b - Beta Testing Infrastructure (Dec 22, 2025) **Beta Testing Progress:** - Phase 1 ✅ Crash Reporting - Sentry SDK integrated - Phase 2 ✅ Privacy Policy - GitHub Pages hosted - Phase 3 ⏳ TestFlight Configuration - Pending - Phase 4 ⏳ Pre-Submission Validation - Pending - Phase 5 ⏳ Archive & Upload - Pending - Phase 6 ⏳ Beta Monitoring - Pending **Crash Reporting (Sentry):** - Full Sentry SDK integration with DSN configured - Auto breadcrumbs for app lifecycle, navigation, user actions - Error capture with context - Screenshot attachment on crash - Session tracking for crash-free metrics - Debug mode disabled in DEBUG builds **Privacy Policy:** - Comprehensive privacy policy created - Hosted at: https://stuffolio.app/privacy - Covers: local storage, iCloud sync, AI features, crash reporting - CCPA compliance section included - Linked from AboutView in app **Files Modified:** - `Sources/Utilities/CrashReporting.swift` - Full Sentry implementation - `Sources/App/StuffolioApp.swift` - Breadcrumb for app launch - `Sources/Features/ItemManagement/Views/AddItemSheetWrapper.swift` - Product creation breadcrumb - `Sources/Managers/CSVExportManager.swift` - Export breadcrumb - `Sources/Features/StuffScout/ScoutAnalysisService.swift` - AI analysis breadcrumbs - `Sources/Views/Information/Reference/AboutView.swift` - Privacy policy URL - `docs/privacy.html` - GitHub Pages privacy policy - `docs/index.html` - Redirect to privacy.html - `Documentation/PRIVACY_POLICY.md` - Markdown privacy policy ### Stuffolio2a - Improvement Plan Complete (Dec 18, 2025) **Quality Improvements:** - Sprint 6 complete: Performance baseline, UI polish audit, ScoutResultView→Add to Inventory flow - Added OS signpost logging to critical paths (app launch, data load, search, export) - Fixed Swift 6 Sendable warnings in DuplicateFinderView - Documented ToastManager vs BannerManager usage distinction - All technical debt resolved **Files Modified:** - `StuffolioApp.swift` - Added signpost event for container init - `MyProductsView.swift` - Added signpost for data loading - `ItemListViewModel.swift` - Added signpost for search filtering - `CSVExportManager.swift`, `PDFExportManager.swift`, `XLSXExportManager.swift` - Added signpost for exports - `DuplicateFinderView.swift` - Fixed Sendable warnings, changed Task.detached to Task @MainActor - `ToastNotification.swift`, `InfoBanner.swift` - Added documentation clarifying usage ### SF2q17 - Stuff Scout (Dec 15, 2025) **New Feature: AI-Powered Antique & Collectible Identification** - Camera-first UI for capturing items (iOS camera, photo library, macOS paste) - Claude Vision API integration via Cloudflare Worker - Multi-provider web search cascade (Brave → Tavily) for market data - Structured result display with Quick Facts, Recent Sales, narratives - SwiftData persistence via ScoutBookmark model - Scout History view with search, filter, and detail viewing **Files Added:** - `Sources/Features/StuffScout/StuffScoutView.swift` - Main camera/capture UI - `Sources/Features/StuffScout/ScoutResultView.swift` - AI results display - `Sources/Features/StuffScout/ScoutHistoryView.swift` - Saved bookmarks list - `Sources/Features/StuffScout/ScoutSession.swift` - Ephemeral analysis session - `Sources/Features/StuffScout/ScoutBookmark.swift` - SwiftData persistence model - `Sources/Features/StuffScout/ScoutBookmarkManager.swift` - CRUD operations - `Sources/Features/StuffScout/ScoutAnalysisService.swift` - API communication - `Sources/Features/StuffScout/ScoutMockData.swift` - Demo data - `cloudflare-worker/Worker.js` - Added `/stuff-scout` endpoint **Data Models:** - ScoutSession (struct) - Ephemeral analysis results - ScoutBookmark (@Model) - Persisted identifications - Classification enum: Antique, Vintage, Collectible, Modern, Reproduction, Unknown - Rarity enum: Common, Uncommon, Rare, VeryRare, ExtremelyRare ### SF1q14-20 Changes (Dec 14, 2025) **SF1q14 - Dashboard Grid & Navigation Renaming:** - Dashboard now uses 2-column grid layout for feature cards - Navigation renamed: Tools→Actions, Information→Insights, System→Settings - Feature cards are now actionable (tap to navigate) - QuickStartCard defaults to collapsed state **SF1q15 - Alert Button Contrast Fix:** - Added global `.tint(.blue)` to StuffolioApp root for alert button visibility - Fixes accessibility issue with light "OK" button text in alerts - Backup tint added to ImportDataSheet alert **SF1q16 - Horizontal Scroll for Filter Chips:** - Filter chips on My Products now scroll horizontally on compact screens - Added gradient hint on trailing edge to indicate more content - Added `.scrollIndicatorsFlash(onAppear: true)` for visual hint - Cross-platform `scrollHintColor` computed property (iOS/macOS) **SF1q17 - Fun Cost Comparison Feature:** - Added "Fun Fact" section to Value Calculator - Shows inventory value as everyday items (lattes, iPhones, etc.) - Automatically selects 3 relevant comparisons based on value - Added FunComparisonRow component with icons and number formatting **SF1q18 - Collapsible Quick Stats:** - Quick Stats section now collapsible with chevron toggle - State persisted via @AppStorage (shared between Dashboard and Inventory Hub) - Smooth animation on collapse/expand **SF1q19 - Quick Stats Enhancement:** - Added "Purchase Price" stat card (green tag icon) - Renamed "Value" to "Depreciated" for clarity - Fun Fact now uses Total Purchase Cost instead of Current Value **SF1q20 - Rotating Fun Fact in Quick Stats:** - Fun Fact card displays next to Purchase Price on Dashboard - Randomly rotates through 26 comparisons each time Dashboard opens - Cycles through all facts before repeating (persisted via @AppStorage) - Uses emojis for visual appeal (lattes, iPhones, flights, etc.) - Categories: everyday, food, entertainment, practical, travel, tech, major - Updated Quick Stats help content **SF1q21 - Horizontal Scrolling Quick Stats:** - Quick Stats cards now horizontally scrollable on iPhone - Fixed-width cards (85pt) for consistent sizing - Scroll hints: fade gradient + chevron arrow on trailing edge - `allowsHitTesting(false)` on overlay to preserve scroll gestures - macOS retains non-scrolling layout **SF1q22 - Generic HelpSheet Component Refactor:** - Created GenericHelpSheet.swift with data-driven help content system - Extended SharedHelpComponents.swift with unified row types (HelpRow, TipRow, StatusRow, etc.) - Refactored MyProductsHelpSheets.swift: 898 → 93 lines (805 lines saved) - Refactored AdditionalHelpSheets.swift: 905 → 80 lines (825 lines saved) - Total reduction: 1,630 lines of duplicated code - All 11 help sheets now use GenericHelpSheet with predefined content **SF1q23 - DashboardView Refactor:** - Reduced DashboardView.swift from 1070 → 544 lines (526 lines extracted) - Created DashboardModels.swift: Sheet types, feature models, action enums (130 lines) - Created DashboardQuickStatsView.swift: Quick Stats bar with Fun Fact logic (235 lines) - Extended DashboardComponents.swift with QuickActionIcon, DashboardStatCard, DashboardFunFactCard, DashboardFeatureCard - Created FunFactManager and FunFactComparison for reusable fun fact selection - DashboardView.swift now under 500-line target per DevelopmentRules.md **SF1q24 - Dynamic Type Accessibility Support:** - Created ScaledMetrics.swift utility (157 lines) with @ScaledMetric wrappers - Fixed 13 hardcoded font sizes across 4 user-facing views: - DashboardComponents.swift (5): InteractiveStatCard, QuickActionIcon, DashboardFeatureCard - QuickStartCard.swift (2): PasteImageButton, ScanButton icons - EmptyDashboardView.swift (2): Welcome title, feature help sheet icon - MyProductsToolbar.swift (4): Filter buttons, ToolbarActionButton icons - All icon and title fonts now scale with Dynamic Type settings - Added ScaledSize enum, @ScaledIcon, @ScaledSpacing wrappers, Font.scaledSystem() extension **SF1q25 - Dynamic Type for OnboardingView:** - Added @ScaledMetric to 11 structs in OnboardingView.swift - Fixed 35 hardcoded font sizes for Dynamic Type accessibility - Structs: WelcomeScreen, FeaturesScreen, FeatureRow, HowItHelpsScreen, ScenarioCard, AccessibilityScreen, AccessibilityBadgeExample, SetupScreen, PermissionRow, GettingStartedScreen, GetStartedStepCard **SF1q26 - Dynamic Type for Remaining Components:** - Replaced all remaining hardcoded `.font(.system(size: XX))` with @ScaledMetric - Fixed 74 files across the entire codebase - Text style mappings: .caption (6-14pt), .body (14-20pt), .title (20-36pt), .largeTitle (40-80pt) - Categories fixed: Settings, Forms, Tools, Navigation, Lists, Detail views, AI/OCR sheets, Dashboard components, Help views - All icon sizes now scale proportionally with user's Dynamic Type preference - Completes Dynamic Type accessibility support (SF1q24-26 series) **Files Modified:** - `StuffolioApp.swift` - Global tint for alert contrast - `ImportDataSheet.swift` - Alert tint backup - `MyProductsToolbar.swift` - Horizontal scroll with gradient hint - `DashboardView.swift` - Grid layout, collapsible Quick Stats, Purchase Price, rotating Fun Fact - `ValueCalculatorView.swift` - Fun cost comparison feature - `InventoryHubView.swift` - Collapsible Quick Stats, Purchase Price - `HelpContent+Navigation.swift` - Updated Quick Stats help ### SF1q11 Changes (Dec 12, 2025) **UI Consistency Fix - Sidebar/View Title Alignment:** - Fixed sidebar label "Help" → "Insights" to match view title - Fixed view title "Tools" → "Actions" to match sidebar - Updated icons: Insights uses analytics icon (chart.line.uptrend.xyaxis) - Actions uses bolt.fill icon consistently - Updated all related help content for new section names **Unified Visual Headers:** - All 5 main views now use ContentIllustratedHeader component - Dashboard: Blue header with grid icon - My Products: Indigo header with shipping box icon - Actions: Teal header with bolt icon - Insights: Purple header with chart icon - Settings: Gray header with gear icon **Files Modified:** - `NavigationTypes.swift` - Sidebar labels and icons - `DashboardView.swift` - Added ContentIllustratedHeader - `MyProductsToolbar.swift` - Replaced title row with ContentIllustratedHeader - `ToolsView.swift` - Header title "Tools" → "Actions" - `InformationView.swift` - Header title "Information" → "Insights", added gradient - `SystemView.swift` - Moved header outside Form - `HelpContent+Navigation.swift` - Updated help content for renamed sections ### SF1q9/SF1q10 Changes (Dec 12, 2025) **UI/UX Improvements** SF1q9 - Dashboard Simplification & Section Renaming: - Removed 6 redundant feature sections from Dashboard - Added "Needs Attention" section (expiring warranties, maintenance, loans, missing info) - Added "Recently Added" section with product thumbnails - Renamed sections: Tools → Actions, Information → Help, System → Settings - Unified terminology: "My Stuff" → "My Products", "item" → "product" - Fixed nested NavigationSplitView issue on iPad SF1q10 - Wide Screen Optimization: - Added `CompactAttentionCard` for horizontal layout on iPad/Mac - Added `CompactRecentProductCard` with thumbnails for horizontal scroll - Responsive layouts: HStack on wide screens, VStack on iPhone - Shows 8 recent products on wide screens, 5 on iPhone **Files Modified:** - `DashboardView.swift` - Simplified dashboard, responsive layouts - `NavigationTypes.swift` - Renamed section labels and icons - `AppNavigationView.swift` - iPad sidebar navigation, section headers - `SystemView.swift` - Renamed to "Settings" - `QuickFindItem.swift` - Updated Quick Find items - `HelpContent+Navigation.swift` - Updated help content ### SF1p7 Changes (Dec 12, 2025) **Phase 1: AIProductAssistantView Refactor** - Original: 1843 lines → Main: 834 lines - Extracted: AIProductAssistantModels.swift (101 lines) - Extracted: AIProductAssistantResults.swift (575 lines) - All features preserved (10 query types, 10 result views, API functions) - Platform conditionals maintained (macOS/iOS) - All modifiers preserved (.alert, .withBannerSupport, .onChange) **Files Added:** - `AIProductAssistantModels.swift` - Response model structs - `AIProductAssistantResults.swift` - Result view components + helpers **Files Modified:** - `AIProductAssistantView.swift` - Refactored main view ### SF1l Changes **Smart Barcode Scanner (New Feature)** - Multi-step scanning: UPC → Model/Serial → Review - Automatic barcode type detection (UPC vs model vs serial) - User guidance with step-by-step instructions - Option to disable guidance once familiar - Tutorial on first use, can be shown again - Classification picker for ambiguous barcodes **Files Added:** - `SmartBarcodeScannerView.swift` - Main scanner with guidance UI - `SmartBarcodeReviewView.swift` - Review and save captured data **Files Modified:** - `BarcodeManager.swift` - Added barcode classification logic - `ToolsView.swift` - Uses SmartBarcodeScannerView - `ToolCategory.swift` - Renamed to "Smart Scanner" - `HelpContent.swift` - Added smart scanner help **User Guidance Features:** - 3-step progress indicator - Contextual guidance cards with hints - Barcode type explanations (UPC vs Model vs Serial) - Settings to toggle guidance on/off - Scan count tracking - First-use tutorial ### SF1k5 Changes **Documentation Restructure** - Added prominent DELIVERY WORKFLOW section at top - Consolidated version naming and delivery format rules - Clear 5-step process for creating deliverables **Colorblind Accessibility (High Saturation Pass)** - Increased UI opacity values 2-3× across ~55 files for deuteranopia visibility - Fixed computed property opacity values in dashboard cards and components - Dark mode backgrounds: 0.08 → 0.18 - Light mode backgrounds: 0.06-0.12 → 0.18-0.25 - Borders: 0.30 → 0.45-0.50 **Opacity Scale Applied:** | Before | After | Purpose | |--------|-------|---------| | 0.05-0.06 | 0.15-0.18 | Very subtle backgrounds | | 0.08 | 0.18-0.20 | Subtle backgrounds | | 0.10-0.12 | 0.22-0.25 | Light backgrounds | | 0.15 | 0.35 | Medium backgrounds, badges | | 0.20 | 0.40 | Active states, borders | **Help System Updates** - Fixed AddItemHelpView: Only Product Name required - Enabled help button in Edit Product mode - Updated 12 HelpContent sections for current navigation **Bug Fixes** - Fixed AppNavigationView ⌘K keyboard shortcut (invalid onKeyPress API) ### Quick Find (⌘K) - Command palette for quick app navigation - Location: `Sources/Features/QuickFind/` - Access: Sidebar footer button or ⌘K ### macOS Form Fix Pattern ```swift Form { ... } #if os(macOS) .formStyle(.grouped) #endif ``` --- ## Platform Testing Checklist Before delivery, verify on: - [ ] macOS - [ ] iOS (iPhone) - [ ] iPad --- ## Migration History | Date | From | To | Notes | |------|------|-----|-------| | Dec 5, 2025 | AMS21j2 | SF1 | Renamed to Stuffolio | | Dec 6, 2025 | SF1e | SF1f | Cloudflare Worker smart routing complete | | Dec 7, 2025 | SF1h2 | SF1i | Quick Find feature, connected RMA/Social, macOS Form fixes | | Dec 8, 2025 | SF1k4 | SF1k5 | Documentation restructure (delivery workflow) | | Dec 8, 2025 | SF1k5 | SF1l | Smart Barcode Scanner with multi-step scanning & guidance | | Dec 12, 2025 | SF1p9 | SF1q9 | Dashboard simplification, section renaming, terminology unification | | Dec 12, 2025 | SF1q9 | SF1q10 | Wide screen responsive layouts for iPad/Mac | | Dec 12, 2025 | SF1q10 | SF1q11 | UI consistency - sidebar labels match view titles | | Dec 14, 2025 | SF1q11 | SF1q14 | Dashboard grid layout, navigation renaming, actionable cards | | Dec 14, 2025 | SF1q14 | SF1q15 | Alert button contrast fix (global tint) | | Dec 14, 2025 | SF1q15 | SF1q16 | Horizontal scroll for filter chips on compact screens | | Dec 14, 2025 | SF1q16 | SF1q17 | Fun cost comparison feature in Value Calculator | | Dec 14, 2025 | SF1q17 | SF1q18 | Collapsible Quick Stats on Dashboard and Inventory Hub | | Dec 14, 2025 | SF1q18 | SF1q19 | Added Purchase Price, renamed Value to Depreciated | | Dec 14, 2025 | SF1q19 | SF1q20 | Rotating Fun Fact in Quick Stats with 26 emoji comparisons | | Dec 14, 2025 | SF1q20 | SF1q21 | Horizontal scrolling Quick Stats with fade+arrow hints | | Dec 14, 2025 | SF1q21 | SF1q22 | Generic HelpSheet refactor - 1,630 lines saved | | Dec 14, 2025 | SF1q22 | SF1q23 | DashboardView refactor - 526 lines extracted | | Dec 14, 2025 | SF1q23 | SF1q24 | Dynamic Type accessibility - 13 hardcoded fonts fixed | | Dec 14, 2025 | SF1q24 | SF1q25 | Dynamic Type for OnboardingView - 35 fonts fixed | | Dec 14, 2025 | SF1q25 | SF1q26 | Dynamic Type for remaining 74 files - completes accessibility | | Dec 15, 2025 | SF1q26 | SF2q17 | Stuff Scout - AI-powered antique/collectible identification | | Dec 18, 2025 | SF2q17 | Stuffolio2a | New naming convention, Improvement Plan 100% complete | | Dec 22, 2025 | Stuffolio2a | Stuffolio2b | Beta testing infrastructure: Sentry crash reporting, Privacy Policy (GitHub Pages) | | Jan 4, 2026 | Stuffolio2b | Stuffolio2c | iOS Excellence Phase 1: Spotlight, Handoff, App Intents, Focus Filters, Interactive Widgets, Localization | --- ## Session Notes (Space for notes during session) ---