Changelog
All notable changes to the Kebab project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.9.1] - 2026-01-19 - Documentation & Technical Debt Polish
Fixed
Documentation: Node.js Version Requirements - Corrected incorrect Node.js version in 3 documentation files
- Fixed development quickstart guide (was v24.9.0, now v20+)
- Fixed development setup guide (was v24.9.0, now v20.18.1 recommended)
- Fixed mobile build guide (was v18+, now v20+)
- Impact: Prevents developers from installing wrong Node version and hitting build failures
- Authority: Configuration files and version documentation
Documentation: Post-Mortem Status - Finalized incident documentation
- Updated status from "Draft" to "Incident resolved, action items complete"
- Reflects completion of critical fixes and testing infrastructure
Improved
Documentation Navigation - Added cross-references between related documentation
- Launch guide now references running guide and build process documentation
- Development running guide now references launch guide for quick start
- Development quickstart guide now references launch guide for subsequent launches
- Mobile build guide now references launch and running guides
- Impact: Easier navigation, clearer documentation hierarchy, reduced confusion
Code Quality: Structured Logging - Replaced console statements with structured logger
- Replaced in subscription service (4 occurrences)
- Replaced in authentication service (1 occurrence)
- Replaced in import service (40+ occurrences)
- Benefits: Better error tracking integration, production log filtering, structured debugging
- Pattern: Uses logger class with debug/info/warn/error levels
[1.9.0] - 2026-01-17 - Growth & Polish Release
Added
Post-Purchase Thank You Modal - In-app thank you screen after subscription purchase
- Optional email collection for marketing updates
- Syncs email to customer support system for integration
- Improved first-run subscriber experience and retention
Email List Integration - Marketing email list automation
- Post-purchase emails automatically sync to marketing platform
- Backend API endpoint with device-based authentication
- Retry queue with hourly processing for failed syncs
- Settings screen links to website for general signups
- Graceful error handling - never blocks subscription activation
Gender-Neutral Offline Guide Matching - Improved item lookup UX
- Generic search terms now show all relevant category options automatically
- Build-time preprocessing of grouped entries
- Enhanced offline donation tracking experience
Changelog Link in About Section - Transparency and communication
- Direct link to public changelog from About screen
- Improves user transparency and trust
Automated Security Testing - Subscription validation testing
- Comprehensive test coverage for free tier enforcement
- Tests expired/invalid token handling
- Prevents security regressions in subscription validation
Fixed
Post-Mortem: Missing Production Secret - Deployment safety improvements
- Comprehensive analysis of production incident
- Root cause documentation and prevention strategies
- Improved incident response processes
CI Secret Validation - Automated deployment safety
- CI tests for deployment script secret validation logic
- Catches missing secrets before production deployment
- Prevents repeat of production incidents
Infrastructure
Structured Logging Service - Improved observability
- Replaced console statements with structured logging across codebase
- Better error tracking integration
- Enhanced debugging and monitoring capabilities
Testing Infrastructure - Comprehensive E2E testing framework
- Integration test harness for multi-step workflows
- Automated regression test suite
- Improved test coverage and reliability
Testing
- Total test count: 1097 tests passing
- New E2E flows for email signup and thank you modal
- Comprehensive security test coverage
[1.8.1] - 2026-01-11 - Android 16 Crash Fix (Android Only)
Fixed
- Native Crash on Android 16 - Fixed critical native crash affecting certain Android devices
- Added defensive error handling around storage operations
- Enhanced error logging with Android version context
- Fixed device detection logic
- Wrapped storage cleanup calls in error handling with graceful degradation
- Root cause: Storage cleanup logic triggered compatibility issue on Android 16
- Impact: App now degrades gracefully if storage operations fail, preventing crash
- Added comprehensive error logging to diagnose future storage issues
Infrastructure
- Version bumped: 1.8.0 → 1.8.1 (patch version for bugfix)
- Android only release - iOS unaffected (different native architecture)
- Android version code: 95
- Build validated on Android 16 emulator
[1.8.0] - 2026-01-10 - Free Preview Feature Release
Added
Free Preview System - One-time free trial for premium camera features
- Enables users to try barcode scanning and AI photo recognition once before subscribing
- Complete session-based preview lifecycle with automatic expiration
- Preview service for state management and preview tracking
- Preview modal component for feature explanation and consent
- Preview badge component showing "Try Free" indicator on premium features
- Updated feature buttons with preview support
- Context-aware UX: different messaging for barcode vs AI features
- Graceful handling of cancelled preview sessions (doesn't consume preview)
- State persists across app restarts
- Improved conversion funnel for premium features
Comprehensive Test Coverage - 107 new tests for preview functionality
- Preview service unit tests (state management, validation, error handling)
- Preview badge component tests (rendering, tier-specific behavior)
- Preview modal component tests (consent flow, analytics)
- Feature button tests (preview integration)
- 3 new E2E flows for preview user journeys
- Total test count increased from 851 to 981 tests (+15%)
Changed
- Preview Service Performance - Optimized state management and caching
- Replaced deep cloning with spread operators
- Implemented storage cache layer for faster reads (~10x improvement on cache hit)
- Fixed state mutation issues with defensive cloning
- Improved error handling and logging
Fixed
TypeScript Compilation - Resolved type errors in test files
- Fixed test file import errors
- Type-safe test utilities
- All 981 tests compile and pass
Tech Debt - UI Constants - Extracted hardcoded UI values to centralized constants
- Created touch feedback constant for consistent interaction
- Updated 8 components to use centralized constant
Tech Debt - Defensive Checks - Added null safety for configuration
- Added defensive checks for configuration availability
- Prevents crashes in test environments
Tech Debt - Test Coverage - Added 30 new unit tests
- Navigation tests for tab navigation and screen params
- Mileage validation tests (edge cases, decimal handling)
- Accessibility tests for screen readers and focus management
- Improved overall test quality and coverage
Security - Test Key Removal - Removed hardcoded test key from source code
- Removed hardcoded test store key
- Now sourced exclusively from environment variables
- Prevents accidental exposure in version control
Changelog Template - Fixed missing favicon and manifest links in HTML template
- Added proper favicon references to changelog HTML
- Added web manifest for better PWA support
- Improved changelog website branding
Testing
- Total test count: 981 tests (44 test suites)
- New preview-specific tests: 107 tests
- E2E coverage: 3 new flows for preview journeys
- Test infrastructure improvements: type safety, isolation, cleanup
- All tests passing with TypeScript strict mode
- Coverage maintained across refactoring
Infrastructure
- Version bumped: 1.7.8 → 1.8.0 (minor version bump for new feature)
- iOS build number: 93
- Android version code: 94
- Build profiles validated
- Both iOS and Android builds submitted to stores with auto-increment
[1.7.8] - 2026-01-06 - Critical iOS 26 Crash Fix
Fixed
DateTimePicker Crash - Fixed critical iOS 26.1 crash affecting users
- Upgraded date picker component from 8.4.4 → 8.5.1
- Fixed memory access crash during date selection under memory pressure
- Root cause: Stale internal picker state persisting across picker recycling
- Crash frequency: 4 occurrences affecting 4 unique users
- Platform: iOS 26.1 stable release
- Fixes included:
- v8.4.7: "avoid min>max date picker crash" (addresses maximum date usage)
- v8.5.1: "internal picker state persisting with recycling" (memory corruption fix)
- Added date picker plugin to configuration (required for v8.5+)
- Affected components: Date picker field (no code changes required - backward compatible)
- Used in: Cash screen, mileage screen, items screen, date range filter
Deployment Secret Validation - Prevented production deployments without required secrets
- Added automated verification of all required secrets before deployment
- Uses deployment tool to verify secrets exist
- Blocks deployment if any required secrets are missing
- Added missing secrets to validation
- Added dependency check with installation instructions
- Improved error handling for tool failures
- Would have prevented production incident (18 days of broken paid features due to missing secret)
- Added deployment prerequisites section to documentation
CI Changelog Validation - Fixed changelog workflow external link preservation
- Updated AI sanitization prompt to preserve external documentation links
- Explicitly keeps links to public standards and documentation
- Removes only internal repository links
- Configured markdown linter to allow anchor elements with security attributes
- Fixes recurring issue where external reference links were incorrectly removed
Toast Notifications - Fixed toast messages not auto-dismissing or responding to user taps
- Added explicit auto-hide to all toast notification calls
- Added tap handlers to allow manual dismissal by tapping
- Affected functions: success, error, info, and general toast notifications
- Fixes stuck toast messages after organization operations
- Users can now tap any toast to immediately dismiss it
Getting Started Navigation - Fixed non-clickable boxes in Getting Started section on Home tab
- Made "Add Your Organizations" box clickable → navigates to Organizations tab
- Made "Export for Tax Time" box clickable → navigates to Reports tab
- Now active for all users (previously Export box only appeared for users with donations)
- Applies principle of least surprise: if it looks like a button, it should be a button
- Information box remains informational only
Subscription Test Store Configuration - Enabled IAP testing in development and staging environments
- Added test store key to build profiles (development, staging)
- Added test store key to simulator scripts
- Prevents errors when testing subscriptions
- Test Store only works on simulators (physical devices use real stores in sandbox mode)
- Enables consistent IAP testing without manual environment variable setup
Changed
IAP Pricing Constants - Extracted hardcoded pricing to centralized constants
- Created pricing constants
- Replaced 10 hardcoded price references across 4 files
- Single source of truth for display pricing
- Easier to test different price points
- Supports promotional pricing changes
IAP API Naming - Renamed subscription check method for clarity
- Updated interface
- New name better reflects purpose: checking if user has ANY paid subscription
- Updated all test references (7 occurrences)
Testing
- Added 22 comprehensive unit tests for date picker component
- Initial date rendering and formatting
- Maximum date constraint configuration
- Local timezone conversion
- "Today" button functionality
- iOS modal vs Android native picker rendering
- Platform-specific dismiss behavior
- Empty/invalid/whitespace date handling
- Label rendering
- Tests properly mock native module
- All 100+ existing tests pass
- Type checking clean
- Fixed time-dependent test using dynamic year
Infrastructure
- Dependency Updates - Updated package lock after dependency investigation
- Version bump artifacts from merged changes
- Minor dependency updates
- No functional changes, lockfile sync only
- Related to npm dependency deprecation warnings
[1.7.7] - 2025-12-29 - PDF Export Feature
Added
PDF Export Summary - Professional donation summary report for STANDARD tier
- Generates nicely formatted PDF with all donation details (cash, items, mileage)
- Includes summary statistics (totals, counts, date ranges)
- Uses industry-standard module (official SDK)
- Supports date range filtering via existing date picker
- Native share sheet integration
- Professional HTML/CSS formatting with proper typography
- XSS prevention with HTML sanitization
- Footer disclaimer: "Prepared by Kebab - The Donor App. Not tax or legal advice. Consult your tax professional."
- Works in iOS and Android simulators and physical devices
- Gated to STANDARD tier via subscription check
- FREE users see locked button with "Standard" badge, tapping navigates to subscription screen
FeatureButton Component - Reusable conditional feature button for tier-gated features
- Renders active button for users with access, locked button with tier badge for users without
- Automatic navigation to subscription screen when locked
- Loading state support for async operations
- Variant support (default, primary styles)
- Consistent UX with existing premium feature pattern
Changed
- Export/Import UI Organization - Grouped all export features together for better UX
- Reorganized Reports screen: Export Donations → Basic Formats, Advanced Formats (PDF, Form 8283), then Import Donations
- Reorganized Export screen with same logical grouping
- Visual separator between Basic and Advanced export sections
- Renamed "Tax Software Format" → "Basic Export Formats" for clarity
- Import section now clearly separated below all export options
- Prevents confusion by keeping related features visually grouped
Testing
- Added 14 comprehensive unit tests for PDF generation
- HTML generation: HTML structure, XSS prevention, summary statistics, donation types, footer
- PDF export: PDF generation, error handling, date filtering
- All tests passing (58/58)
- Type checking clean
- Manual testing verified on iOS and Android simulators
- PDF rendering validated with real donation data
Technical Details
- Dependencies: No new dependencies required (part of official SDK)
- Platform Support: iOS, Android (both simulator and device)
- Industry Standard: Uses official SDK solution (not custom implementation)
Future Work
- IRS Form 8283 Pre-Fill (PREMIUM tier) - Deferred to January 2026
- Advanced PDF customization (logos, custom headers) - Post-launch
- Receipt photo attachments in PDF - Pending receipt storage implementation
[Unversioned - Infrastructure & Build System] 2025-12-28
Infrastructure
- Configuration Documentation - Removed fragile hardlink infrastructure
- Removed global configuration hardlink from repository
- Removed hardlink integrity verification from global pre-commit hooks
- Deleted hardlink maintenance script
- Updated configuration with explicit note for reviewers that global configuration may not be accessible during review
- Simplified repository initialization process
- Hardlink solution only existed to appease reviewers; now uses straightforward reference to global config
[1.7.6] - 2025-12-28 - Stability Release
Fixed
- Organization Picker Crash - Prevented memory access crash in organization picker modal
- Fixed memory access violation during touch event processing
- Crash occurred on iOS 26.1 when interacting with organization picker in donations flow
- Affected 2 users in production
- Added comprehensive unit tests for organization picker component
- Improved crash reporting integration
Testing
- Added unit tests for organization picker component
- Verified crash fix in iOS simulator
- All CI checks passing
- Crash reporting validated
[1.7.5] - 2025-12-27 - UI Polish Release
Fixed
EIN Validation UX - Improved form validation feedback for organization EIN/Tax ID field
- Validation only triggers after blur (prevents hostile errors while typing)
- Once touched, provides immediate feedback on subsequent changes
- Save button properly disables when EIN is invalid (but allows empty, as field is optional)
- Added 8 comprehensive unit tests covering all validation scenarios
- Improved accessibility with proper form state management
Home Screen Navigation - Fixed broken links and improved discoverability
- "Ready to Export" box now navigates to Reports tab when tapped
- "Total Value" box now navigates to Reports tab when tapped
- Fixed incorrect tab reference text
- Added accessibility labels for screen reader support
Miles Driven Input Validation - Refined input validation for mileage tracking
- Allows whole numbers or 1 decimal place maximum
- Pattern prevents multiple decimal points
- Improves data quality and user experience
Settings Environment Highlight - Improved accessibility for environment indicators
- Increased font size from 15 → 17 for better visibility
- Enhances WCAG compliance for staging/development environment labels
Improved
Donations Ledger UX - Made sort controls sticky for better usability
- Sort buttons (Date, Org, Type, Value) remain visible when scrolling
- Converted list component with native sticky headers
- Memoized callbacks for optimal performance
- Improved UX for long donation lists
Camera Tab Accessibility - Enhanced screen reader support for camera modes
- Added accessibility state for proper selection announcement
- Added accessibility hints for context on tab functionality
- Improved screen reader experience for Premium camera features
Quantity Picker Performance - Optimized item quantity selection
- Memoized quantity picker options (1-99) to prevent recreation on every render
- Reduces unnecessary re-renders when managing multiple items
- Created quantity options constant reused across picker instances
Changed
PDF Export UI - Added "Coming Soon" labels to prevent user confusion
- Updated 6 locations across app with "(Coming Soon)" text
- Sets proper expectations for unimplemented PDF export feature
- Prevents user frustration from trying to use unavailable functionality
Annual Summary Analytics - Hidden pending feature specification
- Removed Premium feature box from Reports screen to avoid unclear expectations
- Feature scope will be defined before re-introduction
- Simplifies interface and prevents user confusion
Testing
- Added 8 unit tests for EIN validation UX flows
- All existing E2E tests passing with UI changes
- Manual testing on iOS and Android simulators
- All CI checks passing
[1.7.4] - 2025-12-24 - Patch Release
Fixed
- Android Emulator Development - Fixed CLEARTEXT communication errors on Android emulators
- Added emulator-specific npm script for emulator development
- Sets environment variable to force Metro bundler localhost connection
- Resolves communication error on initial emulator launch
- Default script unchanged for physical device compatibility
- Developers use emulator script for emulator builds, standard script for physical devices
- Note: Supersedes reverted change which broke physical device development
Testing
- Manually verified on Android emulator
- Zero CLEARTEXT errors on emulator launch
- Physical device workflow unaffected
- All CI checks passing
[1.7.3] - 2025-12-23 - Patch Release
Fixed
Android Network Security - Fixed network connectivity for Android emulators and builds
- Added required attribute to all domain tags (required by Android Lint)
- Added localhost exception for emulator support (development/staging only)
- Android emulators now properly access localhost services (Metro bundler, dev APIs)
- Production builds remain strict HTTPS-only with no cleartext exceptions
Premium Feature Accuracy - Updated subscription screen to reflect that AI barcode scanning is now live
- Removed "(Coming Soon)" label from Premium tier feature list
- Ensures marketing materials accurately represent available features
Mileage Input Validation - Added input validation for mileage donations
- Restricts miles driven to whole numbers or 1 decimal place
- Regex pattern provides clean UX with silent rejection
- Prevents data quality issues from invalid input
UPC Scanner Offline Handling - Improved offline experience for barcode scanning (Premium feature)
- Added network connectivity check before API call
- Clear error message: "UPC scanning requires an internet connection"
- Handles unknown connectivity state gracefully by proceeding to avoid false negatives
- Network check wrapped in error handling with fail-open policy to prevent platform issues from blocking feature
- Added 3 comprehensive tests for offline scenarios
Subscription Cache Notifications - Enhanced offline UX for subscription verification
- Shows non-intrusive toast when using cached subscription during network errors
- Message: "Using Offline Mode - Your subscription is cached. Connect to internet to sync."
- Only notifies paid tiers (skips FREE tier)
- Session-level debouncing prevents toast spam on cold starts
- Mount check prevents race conditions with unmounted components
- Added 4 comprehensive tests for toast behavior
Added
- Staging Tier Bypass - Auto-grant PREMIUM tier to staging builds for testing
- Enables full feature testing without IAP purchases in staging environment
- Protected by defense-in-depth security (4 layers):
- Build configuration (internal distribution only)
- Build-time validation (configuration checks variant)
- Runtime bundle ID verification (throws fatal error if bundle lacks staging suffix)
- Distribution control (build system prevents staging from shipping to stores)
- Only active in staging builds (not development or production)
- Documented test coverage gap with manual testing requirements
Changed
IAP Upsell Messaging - Improved clarity and accuracy of Premium feature prompts
- Camera features: Updated to clarify "All camera features require Premium" with itemized list (UPC barcode, AI recognition, photo upload)
- AI recognition: Added clarification that AI works with both live camera and photo upload
- Receipt photos: Marked as "Coming Soon" to prevent user confusion about unavailable feature
- Prevents confusion about which camera features require Premium tier
Dependency Updates - Updated npm packages to latest compatible versions
- SDK: Updated to latest version with all related packages
- Navigation: Updated to latest minor versions
- Subscription SDK: Updated to latest patch version
- TypeScript/ESLint: Updated to latest minor versions
- ESLint config: Major update
- Gesture handler: Aligned with SDK version
- All updates are semver-compatible (patch/minor versions)
- Resolved SDK version mismatches identified by diagnostics
- Applied code formatting auto-fixes for consistency
Package.json Cleanup - Removed duplicate dependencies
- Moved build/test tools from dependencies to devDependencies only
- These are build/test tools and should not be runtime dependencies
- Improves bundle size and dependency tree clarity
Testing
- Added 7 new tests for offline scenarios and toast behavior
- All 740 tests passing (31 test suites) with updated dependencies
- Type checking clean
- Linting clean (0 errors)
- Diagnostics clean (only non-critical warning)
- No regressions in existing functionality
[1.7.2] - 2025-12-17 - Production Release (Build 87 iOS, Build 89 Android)
Changes Since Beta 5
Fixed
- Camera & Barcode Authentication - Premium users no longer see upsell dialogs after taking photos or scanning barcodes
- Backend: Added subscription tier header fallback to identification and lookup endpoints
- Mobile: Pass subscription tier in headers to camera and barcode APIs
- Security: Added device ID validation to prevent injection attacks
- Camera UX - Eliminated 3-5 second perceived delay in camera results flow
- Navigation occurs immediately after photo capture
- AI processing continues in background
- Navigation - Subscription upsells now correctly navigate to "Choose Your Plan" screen instead of generic subscription screen
- Date Display - About screen now uses ISO date format (YYYY-MM-DD) for build dates
- Android Alerts - Storage failure alerts are now dismissible on Android
- Revenue Protection - Prevented quota bypass via offline queue (items queued offline now correctly count against quota when synced)
Added
- Subscription Service Outage Monitoring - Automatic degraded mode for new users during service outages
- Grants temporary STANDARD tier (25 AI valuations/year) for 7 days
- Monitors API availability and recovers automatically
- Comprehensive logging for incident response
- Local Tier Caching - Subscription tier cached locally with service fallback
- Reduces network calls and improves performance
- 5-minute cache TTL with automatic refresh
- Graceful degradation if service unavailable
Changed
- Logging Infrastructure - Complete refactoring to structured logging in backend
- Added comprehensive subscription integration documentation
- Improved error tracking and debugging capabilities
- Toast Notifications - Standardized all toast notifications
- Consistent styling and behavior across iOS and Android
- Better accessibility support
- Queue ID Generation - Replaced random number generation with cryptographic UUID for queue IDs (better entropy and security)
Testing
- Subscription Test Coverage - Comprehensive test improvements
- Factory helper for subscription test mocks
- Mixed expired/active entitlements edge case coverage
- Extracted date constants for DRY test data
- Complete subscription API client test suite
- Error Sanitizer Tests - Comprehensive test coverage with documentation
- Pre-commit Hook Verification - Code formatting pre-commit hook tested and verified
Security
- Device ID Validation - Backend validates deviceId format to prevent injection
- Rejects empty, malformed, or control-character device IDs
- Consistent validation across all authenticated endpoints
- Credential Documentation - Documented critical gitignored credential files for team security awareness
Removed
- Unused OAuth2 Implementation - Removed unused OAuth2 code from workers (cleanup)
Deprecated
- JWT Authentication - Backend now prioritizes subscription tier headers over JWT tokens
- JWT generation was previously removed from mobile app
- Headers provide more reliable tier information from subscription service
[1.3.0] - 2025-11-11 - Beta 3 (Build 37)
Added
- In-app purchase implementation
- Backend receipt verification
- Token authentication for subscriptions
- Subscription UI screens (tiers, purchase, restore)
- App Store Connect product configuration
- Sandbox tester accounts
Changed
- Migrated to New Architecture
- Updated to improved IAP library for better SDK compatibility
- Enabled updated build tools
Security
- Token-based subscription enforcement
- Receipt verification (Apple/Google)
- Mock receipt gating (production-safe)
[1.2.0] - 2025-10-24 - Beta 2 (Build 7)
Added
- Device build preparation and backend deployment
- TestFlight distribution (iOS)
- Google Play internal testing track (Android)
- Beta testing with 40+ waitlist members
- Complete 6-tab navigation (Home, Cash, Items, Organizations, Export, About)
- True offline-first architecture with 1,757 bundled items
- CSV export with native share sheet
Build Process Improvements
- Semantic versioning strategy documentation
- Automated screenshot generation
- Comprehensive build documentation
UI/UX Polish
- Toast-style messages instead of modal alerts
- Organization names shown even when only one exists
- Android splash screen background changed to white
- App icon in Home welcome screen
- Tab bar icons with emoji
[1.1.0] - 2025-10-30 - Beta 2 Build 1
Added
- Version numbering and comprehensive versioning documentation
- Automated screenshot generation
- Complete build reference documentation
Fixed
- UI polish: Organization name display
- Temporary toast messages preference
[1.0.0] - 2025-10-17 - Initial Beta Release
Added
- Complete donation tracking system (cash, items, mileage)
- AI-powered FMV valuation system with 3-tier caching
- Offline Value Guide (1,757 common donation items)
- Multi-provider FMV system (Offline Guide → External API → AI)
- Local storage with offline-first architecture
- CSV export functionality
- Organization management (dedicated tab)
- Privacy Policy and Terms of Service
- Android and iOS mobile apps
Backend
- Cloud deployment (staging + production)
- FMV API with 4 providers
- 3-tier caching architecture
- Device UUID rate limiting
- Cost tracking and budget enforcement
- Prompt caching (90% cost savings)
UI/UX Features
- Home/Welcome tab with donation summary stats
- About tab with app info and legal disclaimers
- Unsaved changes indicators (red dot badges)
- Export warning for unsaved donations
- Platform-specific organization pickers (iOS/Android)
- Dynamic tab bar safe area (Android navigation bars)
- Autocomplete for item names
Testing
- 285 total tests passing (100% pass rate)
- Mobile tests: 97/97 passing
- Backend tests: 188/188 passing
- Android build environment setup
- Network connectivity via port forwarding
Bug Fixes
- Override FMV field auto-complete bug fixed
- Override FMV validation (non-numeric input sanitization)
- Cash amount validation (non-numeric input prevention)
- Item submission clearing (state batching issue)
- Red dot persistence (unsaved changes indicator)
- Blank item creation on repeated submit button presses
Documentation
- Complete API documentation
- Architecture overview
- Development setup guides
- Android build guide with troubleshooting
- Testing documentation
- Privacy policy (GDPR-compliant)
- Terms of service with liability disclaimers
Migration Notes
This changelog was created on November 11, 2025 as part of a documentation consolidation effort. Historical entries were compiled from:
- Planning documentation "Recently Completed" section
- Git commit history
- Build release notes
For detailed historical information, see git history and archived documentation.