Repository navigation
🚨 SECURITY: Fix critical RLS vulnerability allowing cross-user data access - #36
Merged
Merged
Conversation
- Remove dangerous wildcard RLS policies that allowed cross-user data access - Standardize authentication to use only Supabase anonymous auth - Remove client-side user ID generation and localStorage manipulation - Fix security vulnerability where any anonymous user could access all other anonymous users' data Fixes #35 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
laminko
added a commit
that referenced
this pull request
Jun 22, 2025
…on (#36) - Remove dangerous wildcard RLS policies that allowed cross-user data access - Standardize authentication to use only Supabase anonymous auth - Remove client-side user ID generation and localStorage manipulation - Fix security vulnerability where any anonymous user could access all other anonymous users' data Fixes #35 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: Claude <noreply@anthropic.com>
laminko
added a commit
that referenced
this pull request
Jun 22, 2025
#38) * fix: resolve RLS policy violation for spending entries - Implement proper Supabase anonymous authentication - Add session management for database operations - Maintain backward compatibility with local anonymous IDs - Fix deprecated substr method usage 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: remove unused imports from Home.vue - Remove getCurrentUserId and initializeAuth unused imports - Keep only ensureValidSession which is actually used 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: migrate to Ionic Vue with mobile capabilities - Install Ionic Vue 8.6.1 and Capacitor for native mobile support - Convert App.vue to use ion-app and ion-router-outlet structure - Migrate Home.vue to Ionic components (ion-page, ion-header, ion-content, ion-card, ion-button, ion-grid) - Replace CurrencyPicker dropdown with Ionic modal using ion-modal, ion-searchbar, ion-list - Add haptic feedback for mobile interactions using @capacitor/haptics - Configure Capacitor for iOS/Android deployment with splash screen settings - Add mobile build scripts and deployment commands - Maintain existing functionality while optimizing for mobile UX 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: resolve ion-input focus issue in edit mode - Update editTodayAmount to use Ionic input's setFocus() method - Remove HTMLInputElement type constraint for amountInput ref - Fix focus functionality when editing today's spending amount 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: ensure spending button maintains perfect circular shape - Add explicit width/height with \!important to override Ionic defaults - Include aspect-ratio and flex-shrink properties for consistent shape - Update mobile responsive styles to maintain circular appearance - Fix button appearing oval/elliptical instead of circular 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: make LineChart component responsive to parent width - Convert fixed chart dimensions to reactive refs - Add ResizeObserver to monitor container size changes - Update all computed properties to use reactive chartWidth/chartHeight - Set responsive width/height based on container dimensions - Maintain aspect ratio with configurable min/max constraints - Remove redundant mobile-specific CSS in favor of universal responsiveness 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: add responsive breakpoints for spending grid Improve grid layout on different screen sizes: - Desktop (>768px): 10 columns (unchanged) - Tablet (≤768px): 8 columns - Small tablet (≤600px): 7 columns - Mobile (≤480px): 6 columns 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: update spending grid to 90-day GitHub-style layout - Change from 30 days to 91 days (7 rows × 13 columns) - Arrange grid in weekly format like GitHub contributions - Update responsive breakpoints for new dimensions - Mobile layout switches to 7×13 for better viewing 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: maintain consistent 13×7 grid layout on mobile - Remove mobile rotation, keep 13 columns × 7 rows consistent - Reduce gap to 0.05rem on mobile for better fit - Adjust border radius for smaller mobile cells 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: prevent stat number text wrapping in stats cards - Reduce font size from 1.4rem to 1.2rem - Change word-break from break-all to keep-all - Add nowrap and ellipsis for better display - Fixes "Total This Month" currency display issue 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: reduce stat number font size to 0.85rem - Make stat numbers smaller for better fit in cards - Ensures currency amounts display properly on one line 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: improve spending chart grid layout with proper week arrangement - Arrange grid cells by weeks instead of consecutive days - Add invisible cells for dates outside the 90-day range - Improve hover behavior by disabling interaction on invisible cells - Maintain 13×7 grid structure while ensuring proper Sunday-Saturday week alignment 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: update GitHub-style grid to 14 weeks with proper day-row alignment - Change grid from 13×7 to 14×7 (7 rows × 14 columns) - Rows represent days of week (Sunday=0, Friday=5, Saturday=6) - Columns represent weeks (14 weeks total) - Fix grid index calculation to place days in correct rows - Ensure today (Friday) appears in row 5 as expected - Update responsive breakpoints for new grid dimensions 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: implement home page redesign with spending categories ## Major Features Added ### 🗂️ Spending Categories - Add category field to database schema and TypeScript interfaces - Create comprehensive spending dialog with category selection - Support 9 default categories (Food, Transport, Shopping, etc.) - Allow custom category creation - Update all database operations to include categories ### 🎯 Circular Spend Button - Replace spend button with large circular design matching mockup - Implement blue gradient background with card icon - Add "TAP IF YOU SPENT TODAY" text styling - Include hover effects and responsive scaling - Integrate with new spending dialog workflow ### 📊 Activity Grid Improvements - Update chart header from "Last 14 Weeks" to "Activity" - Fix grid layout to perfect 7 rows × 14 columns (days × weeks) - Restore square cell aspect ratios for GitHub-style appearance - Ensure Friday appears in correct row 5 position - Remove height constraints for natural grid sizing ### 🎨 UI/UX Enhancements - Create modal spending dialog with amount and category inputs - Add form validation and error handling - Implement smooth transitions and hover states - Ensure mobile-responsive design across all components - Maintain existing functionality while improving interface ## Technical Implementation - Add SpendingDialog.vue component with category management - Update spending entry creation to always insert new records - Modify chart components to handle category data - Enhance database queries to include category field - Implement proper TypeScript interfaces for type safety 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: update README with v2.0 features and project status - Add comprehensive feature descriptions for new circular button and categories - Update architecture section with new SpendingDialog component - Include recent updates section highlighting v2.0 redesign - Add roadmap showing upcoming statistics cards and navigation features - Enhance component documentation with feature descriptions 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: update README with v2.0 features and project status - Add comprehensive feature descriptions for new circular button and categories - Update architecture section with new SpendingDialog component - Include recent updates section highlighting v2.0 redesign - Add roadmap showing upcoming statistics cards and navigation features - Enhance component documentation with feature descriptions 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: add category field to TypeScript database type definitions - Add category field to Database.Row, Insert, and Update types - Update SpendingEntry interface to make category optional - Add generic typing to supabase client for better type safety - Support legacy entries without category data (nullable field) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: cleanup and streamline README and SUPABASE_SETUP documentation ## README Changes: - Remove redundant "Recent Updates" section (features already described) - Streamline tech stack and architecture sections - Simplify deployment, contributing, and development sections - Remove excessive tables, stats, and acknowledgments - Update mobile claims from "Perfect" to "Works great" for accuracy - Replace "Offline-Ready" with accurate "Real-Time Sync" - Condense verbose sections while maintaining key information ## SUPABASE_SETUP Changes: - Add category column to database schema (both dashboard and SQL methods) - Update table documentation to include category field - Add notes about category field being optional and nullable for backward compatibility ## Result: - More honest, accurate documentation - Cleaner, less overwhelming format - Maintains all essential information - Better reflects actual project capabilities 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: implement database-backed categories system - Create categories table with RLS policies for user-specific data - Add TypeScript interfaces for Category model and updated SpendingEntry - Implement useCategoryStore composable with full CRUD operations - Update SpendingDialog to use action-sheet interface and load categories from database - Add automatic seeding of 9 default categories for new users - Support custom category creation with persistent storage - Update Home.vue to handle both category_id and category fields for backward com 8000 patibility - Make category selection optional in spending entries 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: support multiple daily entries in charts - Update LineChart.vue to aggregate multiple entries per day using filter + reduce - Update SpendingChart.vue to sum all entries for each day in grid visualization - Charts now properly display total amounts when users have multiple spending entries per day - Maintains backward compatibility with single daily entries 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: resolve category creation authentication and selection issues - Fix authentication issue in useCategoryStore by calling ensureValidSession() before database operations - Update loadCategories, seedDefaultCategories, and addCategory to properly initialize user session - Improve form reset behavior in SpendingDialog to keep custom categories selected after creation - Remove unnecessary userId.value checks that were causing null reference errors - Custom categories now persist selection state and appear in subsequent dialog opens 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: improve UI polish and replace logo with transparent PNG - Replace logo.svg with transparent SpendCheck-logo-transparent.png across all files - Update SpendingDialog with proper Ionic theming and add checkmark icon to save button - Improve GitHub-style grid visibility with increased opacity (75% min) and larger gaps - Update button text to casual "Any spending? Tap to track\!" for better UX - Remove ad space placeholder for cleaner layout - Clean up unused CSS classes (centered-title, amount-input-container, logged-icon, etc.) - Enhance SpendingChart grid cell visibility and spacing 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: simplify feature descriptions with honest, minimal approach - Replace marketing fluff with straightforward 4-point feature list - Remove exaggerated claims about "smart" and "beautiful" features - Focus on core functionality: tap to log, optional categories, view patterns - Add confident "That's it. No signup, no complexity." tagline - More trustworthy and user-friendly messaging 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: improve README description to be more concise and catchy Updated the main description from complex feature listing to simple, action-oriented language that better conveys the app's core value. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: implement ion-tabs navigation with enhanced history time display - Add bottom tab navigation with Home, History, Stats tabs - Implement proper Ionic Vue routing structure with ion-page wrapper - Create History tab with daily/monthly/yearly filtering and enhanced time display - Create Stats/Graph tab with bar charts and category breakdowns - Add relative time display for History (5 mins ago, 2:30 PM, Yesterday 3:45 PM) - Fix currency formatting across all components - Update database queries to include created_at timestamps - Add appropriate icons for each tab (home-outline, time-outline, bar-chart-outline) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: remove unused diffDays variable in History.vue - Fix TypeScript error TS6133: 'diffDays' is declared but its value is never read - Ensure clean build without TypeScript warnings 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: add swipe-to-delete functionality to history entries - Implement ion-item-sliding with swipe gestures for entry deletion - Add confirmation dialog before deleting entries - Sync data between Home and History tabs using route watching - Migrate CLAUDE.local.md to CLAUDE.md with imports structure - Align data queries to use consistent fields and ordering 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * ui: improve spacing in history tab date groups Add visual gap between date text and amount in date group headers for better readability and cleaner UI appearance. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: enhance currency formatting and add user feedback - Simplify formatAmount function by removing compact parameter - Improve currency formatting for large amounts (100K+ uses K/M abbreviations) - Add proper decimal handling for JPY/KRW currencies - Set iOS mode globally for consistent UI experience - Add success/error toast notifications for spending tracking 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: refactor Graph page with Chart.js for current month daily spending - Install Chart.js and vue-chartjs dependencies - Replace custom bar chart with Chart.js implementation - Add current month daily spending visualization with category-based colors - Implement dynamic title showing current month/year (e.g., "June 2025") - Add interactive tooltips with detailed spending information - Ensure responsive design for mobile and desktop - Remove time period selector for bar chart (now focuses on current month only) - Clean up unused variables and functions 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: complete Graph page redesign with Apple-style dual charts and monthly comparison Major enhancements to Analytics page: 📊 **Chart Redesign:** - Replace Chart.js bar chart tabs with dual chart layout - Add doughnut chart for today's spending by category - Implement iOS-style daily spending chart for current month - Use Apple Design System colors and SF Pro typography 💰 **Enhanced Summary Card:** - Move "Total This Month" above all charts for better hierarchy - Add percentage comparison with last month (+/-X% from last month) - Reorder layout: label → amount → percentage change 🎯 **Today's Spending Doughnut Chart:** - Clean doughnut with 70% cutout for modern look - Category-based visualization with Apple system colors - Legend with perfect square indicators (not circles) - Hover effects with 8px offset for interactivity 📈 **Monthly Daily Spending Chart:** - Thin 8px bars with rounded tops (iOS style) - Clean design with hidden Y-axis and minimal grid - Peak day indicator showing highest spending day - Interactive tooltips with ordinal dates (June 15th 2025) 🎨 **Apple Design Integration:** - SF Pro Display/Text fonts with proper letter spacing - #007AFF primary color throughout - 16px/20px border radius for modern iOS feel - Subtle shadows and proper spacing (8pt grid) Technical improvements: - Remove unused chart type toggles and time period selectors - Add last month total calculation for comparison - Implement peak day detection algorithm - Enhanced Chart.js configuration with proper types - Mobile-responsive design with optimized heights Closes #13 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: create reusable SummaryCard component and enhance UI consistency - Create SummaryCard component with Apple Design System styling - Replace duplicate summary card implementations in Graph and History pages - Update Graph page title to "This Month's Spending (June 2025)" - Add peak spending info with bold date formatting below monthly chart - Apply consistent chart card styling between Today's and Monthly spending - Enhance typography consistency with SF Pro fonts throughout History page - Improve mobile responsiveness for all components - Remove duplicate CSS and consolidate styling logic 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: extract chart components for better code organization - Create TodaysSpendingChart.vue component with doughnut chart logic - Create MonthlySpendingChart.vue component with bar chart and peak spending - Update Graph.vue to use new modular chart components - Remove duplicate chart logic and styling from Graph.vue - Maintain all existing functionality and styling - Improve code maintainability and reusability Resolves #21 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: add bug handling workflow step 7 to CLAUDE.md * docs: update workflow to include feature requests and GitHub issue creation * feat: add daily spending popover to GitHub-style grid cells - Add ion-popover functionality to SpendingChart.vue - Display detailed spending info when users tap grid cells - Show formatted date, amount with proper currency symbols - Include entry count for days with spending - Style popover with responsive design matching app theme - Handle empty days with "No spending" message - Maintain existing tooltip as fallback - Integrate with existing currency formatting system Implements #23 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: implement shared spending store and Moment.js date utilities - Create shared spending store for centralized state management - Remove frontend date generation, let backend auto-generate dates - Implement Moment.js for robust timezone handling - Update all components to use shared store and date utilities - Fix chart update issues by using reactive shared state Known issues to fix: - Line chart not showing today's data - Graph page charts not displaying properly 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: resolve chart data display issues and enhance GitHub-style grid - Fix date comparison logic in all chart components using proper timezone conversion - LineChart: Use getDaysAgo() for consistent local date range generation - TodaysSpendingChart: Use getTodayString() and toLocalDateString() for accurate today filtering - MonthlySpendingChart: Apply toLocalDateString() to all entry date conversions - SpendingChart: Increase grid gap from 0.3rem to 0.5rem and add 0.5rem padding - SpendingChart: Add cell padding and minimum dimensions for better touch targets - SpendingChart: Increase no-spending cell opacity from 0.3 to 0.6 for better visibility - Update responsive breakpoints to maintain appropriate spacing across devices 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: format SpendingChart component code - Use self-closing tags for empty elements in template - Remove unnecessary whitespace and blank lines - Improve code consistency and readability - Clean up template, script, and style sections 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: improve History page datetime format to show precise timestamps Replace relative time format (e.g., "2 hours ago") with precise yyyy-mm-dd h:mm AM/PM format for all spending entries. This provides better context for expense tracking and record-keeping. Changes: - Update formatEntryTime() to use moment.js with YYYY-MM-DD h:mm A format - All entries now show exact date and time (e.g., "2024-12-14 2:30 PM") - Consistent timestamp display across all entries regardless of age - Better expense tracking with precise temporal information Closes #24 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: add missing imports and remove unused variable in History.vue - Add missing imports for useSpendingStore and useDateUtils composables - Remove unused formatTimeAgo variable to fix TypeScript warning - Resolve ReferenceError: useSpendingStore is not defined 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: update project documentation and remove outdated sections - Add comprehensive project status to CLAUDE.md with current architecture, components, and recent fixes - Remove v1.0 Roadmap section from README.md as features are now implemented - Remove Architecture section from README.md to reduce redundancy with CLAUDE.md - Streamline README for better focus on quick start and deployment 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: improve SpendingChart color system with 10-level intensity - Replace opacity-based color variation with 10 distinct blue shades - Fix max amount calculation to use daily totals instead of individual entries - Add proper color intensity mapping from light (#eaf2ff) to dark (#1c3d66) - Update legend colors to match new intensity levels - Remove inline opacity styles that interfered with color classes 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * chore: bump version to 1.0.0 for initial release 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: add back-dating capability for spending entries - Add ion-datetime-button to SpendingDialog for date selection - Modify useSpendingStore to accept custom date parameter - Update Home.vue to pass date to spending store - Default to current date/time, prevent future dates - Convert device timezone to UTC before backend storage - Build passes all TypeScript checks Resolves #28 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: correct ion-datetime modal structure to resolve button linking issue - Move ion-datetime outside of main modal to prevent nesting issues - Add proper modal container for datetime picker - Resolves 'No ion-datetime instance found' error 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: simplify datetime handling to resolve time display issues - Remove complex formatOptions that were causing TypeScript errors - Use standard new Date().toISOString() for datetime initialization - Simplify ion-datetime configuration to use default Ionic behavior - This should resolve the time not showing in datetime-button 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: enhance back-dating functionality with improved UX - Move datetime modal inside SpendingDialog for better UX - Keep dialog open after logging spending for multiple entries - Reset date to current time when dialog opens - Add proper datetime formatting without timezone issues - Improve date picker presentation with iOS mode and formatting 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: prioritize user-selected date over creation timestamp in History - Use entry.date || entry.created_at instead of created_at || date - Ensures back-dated entries show the user-selected timestamp - Maintains proper sorting by user-selected date - Fixes TypeScript errors with proper null handling 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: convert UTC timestamps to local timezone in History display - Use moment.tz() to properly convert UTC entry.date to user's local timezone - Ensures back-dated entries show correct local time instead of UTC - Maintains consistent timezone handling across the application 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: properly convert local datetime to UTC before database storage - Convert selectedDate from local datetime string to UTC ISO string - Ensures user-selected local time is correctly stored as UTC timestamptz - Fixes timezone consistency between save and display operations - Maintains proper local-to-UTC-to-local conversion flow 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: show "- No category -" for entries without category in History - Always display category field instead of hiding it when empty - Show "- No category -" text for entries without assigned category - Improves UI consistency and clarity for uncategorized spending 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: add confirmation buttons to datetime picker - Enable show-default-buttons on ion-datetime component - Provides Cancel and Done buttons for better UX - Users can now confirm or cancel date/time selection 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * revert: remove confirmation buttons from datetime picker - Remove show-default-buttons to maintain clean UI - Default buttons made the interface cluttered - Keep the cleaner datetime picker without explicit buttons 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: enhance datetime selector with ion-item consistency - Replace ion-item wrapper with custom div structure for datetime button - Add date-wrapper with proper border and padding matching ion-item styling - Style date-label to match ion-label appearance with theme color support - Add iOS-style modal with translucent background and backdrop blur - Improve datetime modal with proper border-radius and shadow 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * chore: bump version to 1.1.0 for minor release ## 🎉 SpendCheck v1.1.0 Release ### ✨ Major Features - **Back-dating Spending Entries**: Users can now select custom dates when adding spending - **Enhanced DateTime Picker**: iOS-style modal with improved user experience - **Timezone Support**: Proper UTC/local time conversion throughout the application ### 🔧 Improvements - **UI Consistency**: DateTime selector now matches ion-item styling - **History Display**: Shows "- No category -" for uncategorized entries - **Modal Design**: Translucent background with backdrop blur effects - **Data Accuracy**: User-selected timestamps prioritized over creation time ### 🐛 Bug Fixes - Fixed timezone conversion issues in History view - Resolved datetime display inconsistencies - Improved modal structure and button linking ### 📱 User Experience - Keep dialog open for multiple spending entries - Better visual feedback and confirmation flows - Enhanced mobile-ready interface with proper iOS styling 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: add categories table to SUPABASE_SETUP.md (#31) Add missing categories table creation SQL including: - Table structure with required columns - Unique constraint on user_id + name - Performance index on user_id - Complete RLS policies for CRUD operations - Updated documentation notes Fixes #30 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: Claude <noreply@anthropic.com> * fix: replace Moment.js with date-fns and resolve timezone issues - Migrate from moment/moment-timezone to date-fns/date-fns-tz for better tree-shaking - Fix timezone conversion bug in MonthlySpendingChart where dates were incorrectly shifted - Replace .toISOString().split('T')[0] with format() to avoid UTC conversion issues - Update all date utility functions to use date-fns equivalents - Resolve issue where spending entries appeared on wrong day in monthly chart - Clean up debug logging code 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * chore: bump version to 1.1.1 for timezone fix patch * feat: add inputmode attribute to amount input for better mobile UX (#34) - Add inputmode="decimal" to amount input in SpendingDialog.vue - Optimizes mobile keyboard to show numeric keypad with decimal point - Improves user experience when entering spending amounts on mobile devices Fixes #33 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: Claude <noreply@anthropic.com> * chore: bump version to 1.1.2 for inputmode patch - Add inputmode="decimal" to amount input for better mobile UX - Optimizes mobile keyboard for numeric input with decimal point 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * security: fix critical RLS vulnerability and standardize authentication (#36) - Remove dangerous wildcard RLS policies that allowed cross-user data access - Standardize authentication to use only Supabase anonymous auth - Remove client-side user ID generation and localStorage manipulation - Fix security vulnerability where any anonymous user could access all other anonymous users' data Fixes #35 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: Claude <noreply@anthropic.com> * chore: bump version to 1.2.0 for security fix release 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * perf: optimize RLS policies to prevent per-row function evaluation - Wrap current_setting() calls in SELECT subqueries for better performance - Prevents re-evaluation of auth functions for each row at scale - Improves query performance for RLS policy checks Addresses Supabase performance warning about suboptimal RLS policies. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: add instructions for updating existing RLS policies - Add section on dropping and recreating policies for updates - Include performance optimization note about SELECT wrappers - Provide complete SQL commands for policy updates 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: document branch workflow and release process in CLAUDE.md - Add clear branch structure: dev (development) vs main (production) - Document issue/feature handling workflow - Add release workflow: bump version first, then create PR dev to main - Ensure proper branch management going forward 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * style: update splash screen background color to blue Changed splash screen background from light gray (#f8fafc) to blue (#457CFE) in Capacitor configuration. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: add Settings page with authentication UI - Add new Settings tab to bottom navigation - Create comprehensive Settings.vue page with: - Account section with authentication options (Google, Facebook, Phone, Guest) - Currency selection with modal interface - Category management section (disabled for guests) - App information section - Update routing configuration to support /tabs/settings - Maintain backward compatibility with existing anonymous authentication - Responsive design matching existing app UI patterns - Currency selection saves to localStorage and displays toast feedback Addresses GitHub issue #37 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: add comprehensive database migration guide and scripts - Add complete migration guide (docs/database-migration.md) with 4 different approaches: - Manual SQL migration (recommended for beginners) - Supabase CLI migration (advanced users) - Direct PostgreSQL connection method - Environment-based workflow setup - Create database migration script (scripts/migrate-to-dev.sql): - Complete schema recreation with proper table structure - RLS policies for user data isolation - Performance indexes for spending_entries and categories - Default categories for testing - Add environment configuration templates: - .env.development for development database - .env.production for production database - Enables safe switching between environments - Include verification steps and troubleshooting guide - Supports safe development workflow without affecting production data Addresses need to migrate production Supabase database to development environment for enhanced authentication feature development. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: remove unnecessary cp commands from migration guide - Remove redundant 'cp .env.development .env' steps - Simplify environment switching workflow - Update instructions to directly edit .env file instead of copying - Make documentation match 8000 actual configured environment setup * docs: correct environment file handling for Vite - Remove manual environment switching instructions - Clarify that Vite automatically loads .env.development and .env.production - Update workflow to reflect Vite's built-in mode-based environment loading - No .env file needed - Vite handles everything based on npm run command * feat: refactor Settings page with proper Ionic components - Replace div sections with ion-list and ion-list-header components - Remove unnecessary container divs in favor of ion-content structure - Update authentication UI to show guest status as informational text - Use official Google logo SVG from Google's CDN with transparent background - Standardize all sign-in button icon sizes to 24px with consistent spacing - Remove unused imports (chevronForwardOutline, logoGoogle) - Simplify CSS by leveraging Ionic utility classes (ion-margin-bottom, ion-text-center) - Fix Graph.vue title from "Analytics" to "Stats" 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: replace custom currency modal with existing CurrencyPicker component - Remove duplicate currency selection modal (~40 lines of code) - Import and use existing CurrencyPicker component with search functionality - Clean up unused functions (selectCurrency, showCurrencyModal) - Remove unused imports (checkmarkOutline) - Improve UX by leveraging better-designed currency picker - Reduce bundle size by eliminating redundant currency logic 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: document Settings page implementation tasks and update gitignore - Add comprehensive documentation of remaining Settings page work (Issue #37) - Document OAuth integration requirements (Google, Facebook, Phone SMS) - Document category management and backend integration tasks - Add .env files to gitignore to prevent credential commits - Fix duplicate branch workflow instruction 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: implement complete Supabase authentication system - Add email/password authentication with sign up/in forms - Implement OAuth social login (Google, Facebook) - Add proper anonymous user flow with Supabase user IDs - Enhance Settings page with full authentication modal - Add auth state management and session handling - Include documentation for enabling anonymous auth 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * polish: enhance email/password authentication with Apple design system - Add floating labels and real-time form validation - Implement confirm password field for sign-up flow - Add comprehensive error handling with specific messages - Include loading states with spinners and disabled states - Apply Apple-style design patterns with smooth animations - Add proper focus states and hover effects for accessibility - Implement form state management and field-level validation - Include dark mode support and responsive design - Add premium visual design with shadows and blur effects 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: update CLAUDE.md with authentication implementation status - Update branch status to feature/settings-page-auth - Mark authentication system as completed with checkmarks - Update recent issues resolved to highlight auth work - Reflect remaining tasks: phone verification and category management 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: add OAuth configuration guide for redirect URI issues - Document Google OAuth redirect_uri_mismatch error solution - Include step-by-step Google Cloud Console configuration - Add notes for other OAuth providers and testing procedures 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: convert Settings page to pure Ionic design system - Replace custom Apple design system with standard Ionic components - Remove 270+ lines of custom CSS styling for cleaner maintenance - Update authentication modal to use ion-header/ion-content structure - Standardize form inputs with ion-list and ion-text error handling - Fix social auth buttons with consistent icon spacing and alignment - Use official Google logo SVG and Facebook logoFacebook icon - Remove all custom hover effects and brand colors for better visibility - Implement ion-padding and standard ion-margin-bottom patterns - Convert auth section to standard ion-item layout - Maintain functionality while improving consistency with app design 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: standardize modal close button style with spending dialog - Replace solid 'close' icon with outline 'closeOutline' icon - Add 'fill=clear' for transparent button background - Match SpendingDialog.vue close button styling for consistency - Improve visual hierarchy with subtle, non-distracting close button 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * polish: standardize chart and card styling with Apple Design System - Update SpendingChart styling to match other components - Update Home stat cards with consistent 16px border radius and shadows - Apply uniform #FFFFFF background and #E5E5EA borders across UI 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: implement complete category management system (Issue #40) - Add comprehensive CategoryManagement component with CRUD operations - Integrate category management modal in Settings page - Support create, edit, and delete categories for authenticated users - Add no-color and white color options with visual indicators - Implement live preview section showing category appearance - Use consistent input styling matching existing app design - Add proper form validation and error handling - Include mobile-responsive design with touch-friendly interface - Auto-reload categories in SpendingDialog after creation - Display-only icon section (icon selection not yet supported) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: implement database schema for user preferences (Issue #43) - Add user_preferences table with currency, theme, and notification settings - Enhance categories table with UUID references and default system categories - Add RLS policies for secure user data access - Implement database triggers for auto-preference creation and timestamp updates - Add 8 default spending categories available to all users - Create foreign key relationship between spending_entries and categories - Add comprehensive migration documentation and step-by-step guide - Update SUPABASE_SETUP.md with complete schema 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: consolidate database migration documentation (Issue #43) - Replace 4 separate migration files with 2 comprehensive ones - Add database-migration-complete.md with fail-safe step-by-step guide - Add database-migration-complete.sql with intelligent auto-detection - Remove outdated migration files: - database-schema-migration-43.sql - migration-step-by-step.md - database-migration-fix.sql - quick-fix-migration.md - New migration handles both fresh and existing databases automatically - Includes complete verification and rollback procedures 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: implement Vercel Analytics tracking - Add @vercel/analytics package dependency - Initialize analytics in App.vue on mount - Enable automatic page view and interaction tracking 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: replace database triggers with Prisma ORM implementation Replace database-level triggers with application-level ORM logic: ## Core Infrastructure - Add Prisma ORM with type-safe database models - Create DatabaseService with automatic timestamp management - Implement UserService to replace user preferences trigger ## Enhanced Composables - useSpendingStoreORM: Type-safe spending operations - useCategoryStoreORM: Category management with validation - useAuthORM: Authentication with automatic user initialization ## Key Benefits - Automatic timestamp updates via Prisma @updatedat - Application-level user preferences creation - Full TypeScript type safety from database schema - Better error handling and validation - Eliminates database trigger dependencies ## Migration Support - docs/remove-database-triggers.sql: Remove existing triggers - docs/orm-migration-guide.md: Complete migration documentation - Maintains API compatibility with existing composables 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: implement comprehensive Playwright test suite and fix data persistence - Add complete Playwright testing framework with 40+ automated tests - Fix data persistence issue by initializing authentication in all views - Add test coverage for navigation, spending entry, authentication, settings, and analytics - Implement secure environment variable authentication testing - Update README.md with comprehensive testing documentation Staged files: • .claude/settings.local.json - Updated MCP permissions • .gitignore - Added Playwright test artifacts exclusion • README.md - Added comprehensive testing section • package.json & package-lock.json - Added Playwright dependency and test scripts • playwright.config.ts - Test configuration for multi-browser support • src/views/Home.vue, History.vue, Graph.vue - Fixed authentication initialization • tests/*.spec.ts - Complete test suite (40+ tests) • tests/00-test-summary.md - Test execution summary and documentation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: implement user preferences system with database integration Complete implementation of Issues #41 and #42 with comprehensive user preference management: ### User Preferences Database Integration (Issue #41 & #42) - Created SupabaseUserService for frontend database operations - Enhanced useCurrency composable with database persistence for authenticated users - Added useUserPreferences composable for unified preference management - Implemented guest-to-authenticated user data migration - Added theme and notification preference controls to Settings page ### Enhanced Settings Page - Added Preferences section with theme selector and notification toggle - Updated Settings page with new user preference controls - Integrated real-time preference loading and saving - Added proper authentication state handling ### Bundle Size Optimization - Configured Vite manual chunking to split 1.1MB bundle into logical chunks - Reduced largest chunk from 1,188KB to 717KB (40% improvement) - Enabled better caching strategies with separated vendor/framework chunks ### Test Infrastructure Improvements - Created comprehensive selectors.ts for reliable test element targeting - Updated Playwright tests with improved selectors to avoid strict mode violations - Enhanced test reliability for authentication, settings, and spending entry flows ### Technical Enhancements - Updated Supabase types to include user_preferences table - Added proper async/await handling for currency operations - Enhanced error handling with localStorage fallbacks - Maintained backward compatibility with anonymous users 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: remove Prisma ORM and restore proper frontend-only architecture Prisma is not suitable for frontend applications as it requires a server environment and cannot run in browsers. This commit removes all Prisma dependencies and ORM-based code, restoring the proper frontend architecture using only Supabase client. **Removed:** - @prisma/client and prisma packages - prisma/ schema directory - src/lib/prisma/ generated client files - src/lib/database.ts (PrismaClient usage) - ORM composables (useSpendingStoreORM, useCategoryStoreORM, useAuthORM) - src/services/userService.ts (Prisma-based) **Architecture restored:** Frontend (Vue.js) → Supabase Client → Supabase Backend → PostgreSQL **Impact:** - Build size reduced by removing unnecessary Prisma client bundle - TypeScript errors eliminated - Proper browser-compatible database operations via Supabase client - Existing Supabase-based composables (useSpendingStore, useCategoryStore, useAuth) remain intact 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
laminko
added a commit
that referenced
this pull request
Jun 30, 2025
* docs: document branch workflow and release process in CLAUDE.md
- Add clear branch structure: dev (development) vs main (production)
- Document issue/feature handling workflow
- Add release workflow: bump version first, then create PR dev to main
- Ensure proper branch management going forward
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* style: update splash screen background color to blue
Changed splash screen background from light gray (#f8fafc) to blue (#457CFE) in Capacitor configuration.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: Add Settings page with authentication UI and improved components (#38)
* fix: resolve RLS policy violation for spending entries
- Implement proper Supabase anonymous authentication
- Add session management for database operations
- Maintain backward compatibility with local anonymous IDs
- Fix deprecated substr method usage
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: remove unused imports from Home.vue
- Remove getCurrentUserId and initializeAuth unused imports
- Keep only ensureValidSession which is actually used
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: migrate to Ionic Vue with mobile capabilities
- Install Ionic Vue 8.6.1 and Capacitor for native mobile support
- Convert App.vue to use ion-app and ion-router-outlet structure
- Migrate Home.vue to Ionic components (ion-page, ion-header, ion-content, ion-card, ion-button, ion-grid)
- Replace CurrencyPicker dropdown with Ionic modal using ion-modal, ion-searchbar, ion-list
- Add haptic feedback for mobile interactions using @capacitor/haptics
- Configure Capacitor for iOS/Android deployment with splash screen settings
- Add mobile build scripts and deployment commands
- Maintain existing functionality while optimizing for mobile UX
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: resolve ion-input focus issue in edit mode
- Update editTodayAmount to use Ionic input's setFocus() method
- Remove HTMLInputElement type constraint for amountInput ref
- Fix focus functionality when editing today's spending amount
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: ensure spending button maintains perfect circular shape
- Add explicit width/height with \!important to override Ionic defaults
- Include aspect-ratio and flex-shrink properties for consistent shape
- Update mobile responsive styles to maintain circular appearance
- Fix button appearing oval/elliptical instead of circular
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: make LineChart component responsive to parent width
- Convert fixed chart dimensions to reactive refs
- Add ResizeObserver to monitor container size changes
- Update all computed properties to use reactive chartWidth/chartHeight
- Set responsive width/height based on container dimensions
- Maintain aspect ratio with configurable min/max constraints
- Remove redundant mobile-specific CSS in favor of universal responsiveness
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add responsive breakpoints for spending grid
Improve grid layout on different screen sizes:
- Desktop (>768px): 10 columns (unchanged)
- Tablet (≤768px): 8 columns
- Small tablet (≤600px): 7 columns
- Mobile (≤480px): 6 columns
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: update spending grid to 90-day GitHub-style layout
- Change from 30 days to 91 days (7 rows × 13 columns)
- Arrange grid in weekly format like GitHub contributions
- Update responsive breakpoints for new dimensions
- Mobile layout switches to 7×13 for better viewing
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: maintain consistent 13×7 grid layout on mobile
- Remove mobile rotation, keep 13 columns × 7 rows consistent
- Reduce gap to 0.05rem on mobile for better fit
- Adjust border radius for smaller mobile cells
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: prevent stat number text wrapping in stats cards
- Reduce font size from 1.4rem to 1.2rem
- Change word-break from break-all to keep-all
- Add nowrap and ellipsis for better display
- Fixes "Total This Month" currency display issue
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: reduce stat number font size to 0.85rem
- Make stat numbers smaller for better fit in cards
- Ensures currency amounts display properly on one line
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: improve spending chart grid layout with proper week arrangement
- Arrange grid cells by weeks instead of consecutive days
- Add invisible cells for dates outside the 90-day range
- Improve hover behavior by disabling interaction on invisible cells
- Maintain 13×7 grid structure while ensuring proper Sunday-Saturday week alignment
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: update GitHub-style grid to 14 weeks with proper day-row alignment
- Change grid from 13×7 to 14×7 (7 rows × 14 columns)
- Rows represent days of week (Sunday=0, Friday=5, Saturday=6)
- Columns represent weeks (14 weeks total)
- Fix grid index calculation to place days in correct rows
- Ensure today (Friday) appears in row 5 as expected
- Update responsive breakpoints for new grid dimensions
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement home page redesign with spending categories
## Major Features Added
### 🗂️ Spending Categories
- Add category field to database schema and TypeScript interfaces
- Create comprehensive spending dialog with category selection
- Support 9 default categories (Food, Transport, Shopping, etc.)
- Allow custom category creation
- Update all database operations to include categories
### 🎯 Circular Spend Button
- Replace spend button with large circular design matching mockup
- Implement blue gradient background with card icon
- Add "TAP IF YOU SPENT TODAY" text styling
- Include hover effects and responsive scaling
- Integrate with new spending dialog workflow
### 📊 Activity Grid Improvements
- Update chart header from "Last 14 Weeks" to "Activity"
- Fix grid layout to perfect 7 rows × 14 columns (days × weeks)
- Restore square cell aspect ratios for GitHub-style appearance
- Ensure Friday appears in correct row 5 position
- Remove height constraints for natural grid sizing
### 🎨 UI/UX Enhancements
- Create modal spending dialog with amount and category inputs
- Add form validation and error handling
- Implement smooth transitions and hover states
- Ensure mobile-responsive design across all components
- Maintain existing functionality while improving interface
## Technical Implementation
- Add SpendingDialog.vue component with category management
- Update spending entry creation to always insert new records
- Modify chart components to handle category data
- Enhance database queries to include category field
- Implement proper TypeScript interfaces for type safety
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: update README with v2.0 features and project status
- Add comprehensive feature descriptions for new circular button and categories
- Update architecture section with new SpendingDialog component
- Include recent updates section highlighting v2.0 redesign
- Add roadmap showing upcoming statistics cards and navigation features
- Enhance component documentation with feature descriptions
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: update README with v2.0 features and project status
- Add comprehensive feature descriptions for new circular button and categories
- Update architecture section with new SpendingDialog component
- Include recent updates section highlighting v2.0 redesign
- Add roadmap showing upcoming statistics cards and navigation features
- Enhance component documentation with feature descriptions
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: add category field to TypeScript database type definitions
- Add category field to Database.Row, Insert, and Update types
- Update SpendingEntry interface to make category optional
- Add generic typing to supabase client for better type safety
- Support legacy entries without category data (nullable field)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: cleanup and streamline README and SUPABASE_SETUP documentation
## README Changes:
- Remove redundant "Recent Updates" section (features already described)
- Streamline tech stack and architecture sections
- Simplify deployment, contributing, and development sections
- Remove excessive tables, stats, and acknowledgments
- Update mobile claims from "Perfect" to "Works great" for accuracy
- Replace "Offline-Ready" with accurate "Real-Time Sync"
- Condense verbose sections while maintaining key information
## SUPABASE_SETUP Changes:
- Add category column to database schema (both dashboard and SQL methods)
- Update table documentation to include category field
- Add notes about category field being optional and nullable for backward compatibility
## Result:
- More honest, accurate documentation
- Cleaner, less overwhelming format
- Maintains all essential information
- Better reflects actual project capabilities
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement database-backed categories system
- Create categories table with RLS policies for user-specific data
- Add TypeScript interfaces for Category model and updated SpendingEntry
- Implement useCategoryStore composable with full CRUD operations
- Update SpendingDialog to use action-sheet interface and load categories from database
- Add automatic seeding of 9 default categories for new users
- Support custom category creation with persistent storage
- Update Home.vue to handle both category_id and category fields for backward compatibility
- Make category selection optional in spending entries
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: support multiple daily entries in charts
- Update LineChart.vue to aggregate multiple entries per day using filter + reduce
- Update SpendingChart.vue to sum all entries for each day in grid visualization
- Charts now properly display total amounts when users have multiple spending entries per day
- Maintains backward compatibility with single daily entries
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: resolve category creation authentication and selection issues
- Fix authentication issue in useCategoryStore by calling ensureValidSession() before database operations
- Update loadCategories, seedDefaultCategories, and addCategory to properly initialize user session
- Improve form reset behavior in SpendingDialog to keep custom categories selected after creation
- Remove unnecessary userId.value checks that were causing null reference errors
- Custom categories now persist selection state and appear in subsequent dialog opens
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: improve UI polish and replace logo with transparent PNG
- Replace logo.svg with transparent SpendCheck-logo-transparent.png across all files
- Update SpendingDialog with proper Ionic theming and add checkmark icon to save button
- Improve GitHub-style grid visibility with increased opacity (75% min) and larger gaps
- Update button text to casual "Any spending? Tap to track\!" for better UX
- Remove ad space placeholder for cleaner layout
- Clean up unused CSS classes (centered-title, amount-input-container, logged-icon, etc.)
- Enhance SpendingChart grid cell visibility and spacing
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: simplify feature descriptions with honest, minimal approach
- Replace marketing fluff with straightforward 4-point feature list
- Remove exaggerated claims about "smart" and "beautiful" features
- Focus on core functionality: tap to log, optional categories, view patterns
- Add confident "That's it. No signup, no complexity." tagline
- More trustworthy and user-friendly messaging
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: improve README description to be more concise and catchy
Updated the main description from complex feature listing to simple,
action-oriented language that better conveys the app's core value.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement ion-tabs navigation with enhanced history time display
- Add bottom tab navigation with Home, History, Stats tabs
- Implement proper Ionic Vue routing structure with ion-page wrapper
- Create History tab with daily/monthly/yearly filtering and enhanced time display
- Create Stats/Graph tab with bar charts and category breakdowns
- Add relative time display for History (5 mins ago, 2:30 PM, Yesterday 3:45 PM)
- Fix currency formatting across all components
- Update database queries to include created_at timestamps
- Add appropriate icons for each tab (home-outline, time-outline, bar-chart-outline)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: remove unused diffDays variable in History.vue
- Fix TypeScript error TS6133: 'diffDays' is declared but its value is never read
- Ensure clean build without TypeScript warnings
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add swipe-to-delete functionality to history entries
- Implement ion-item-sliding with swipe gestures for entry deletion
- Add confirmation dialog before deleting entries
- Sync data between Home and History tabs using route watching
- Migrate CLAUDE.local.md to CLAUDE.md with imports structure
- Align data queries to use consistent fields and ordering
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* ui: improve spacing in history tab date groups
Add visual gap between date text and amount in date group headers
for better readability and cleaner UI appearance.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: enhance currency formatting and add user feedback
- Simplify formatAmount function by removing compact parameter
- Improve currency formatting for large amounts (100K+ uses K/M abbreviations)
- Add proper decimal handling for JPY/KRW currencies
- Set iOS mode globally for consistent UI experience
- Add success/error toast notifications for spending tracking
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: refactor Graph page with Chart.js for current month daily spending
- Install Chart.js and vue-chartjs dependencies
- Replace custom bar chart with Chart.js implementation
- Add current month daily spending visualization with category-based colors
- Implement dynamic title showing current month/year (e.g., "June 2025")
- Add interactive tooltips with detailed spending information
- Ensure responsive design for mobile and desktop
- Remove time period selector for bar chart (now focuses on current month only)
- Clean up unused variables and functions
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: complete Graph page redesign with Apple-style dual charts and monthly comparison
Major enhancements to Analytics page:
📊 **Chart Redesign:**
- Replace Chart.js bar chart tabs with dual chart layout
- Add doughnut chart for today's spending by category
- Implement iOS-style daily spending chart for current month
- Use Apple Design System colors and SF Pro typography
💰 **Enhanced Summary Card:**
- Move "Total This Month" above all charts for better hierarchy
- Add percentage comparison with last month (+/-X% from last month)
- Reorder layout: label → amount → percentage change
🎯 **Today's Spending Doughnut Chart:**
- Clean doughnut with 70% cutout for modern look
- Category-based visualization with Apple system colors
- Legend with perfect square indicators (not circles)
- Hover effects with 8px offset for interactivity
📈 **Monthly Daily Spending Chart:**
- Thin 8px bars with rounded tops (iOS style)
- Clean design with hidden Y-axis and minimal grid
- Peak day indicator showing highest spending day
- Interactive tooltips with ordinal dates (June 15th 2025)
🎨 **Apple Design Integration:**
- SF Pro Display/Text fonts with proper letter spacing
- #007AFF primary color throughout
- 16px/20px border radius for modern iOS feel
- Subtle shadows and proper spacing (8pt grid)
Technical improvements:
- Remove unused chart type toggles and time period selectors
- Add last month total calculation for comparison
- Implement peak day detection algorithm
- Enhanced Chart.js configuration with proper types
- Mobile-responsive design with optimized heights
Closes #13
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: create reusable SummaryCard component and enhance UI consistency
- Create SummaryCard component with Apple Design System styling
- Replace duplicate summary card implementations in Graph and History pages
- Update Graph page title to "This Month's Spending (June 2025)"
- Add peak spending info with bold date formatting below monthly chart
- Apply consistent chart card styling between Today's and Monthly spending
- Enhance typography consistency with SF Pro fonts throughout History page
- Improve mobile responsiveness for all components
- Remove duplicate CSS and consolidate styling logic
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: extract chart components for better code organization
- Create TodaysSpendingChart.vue component with doughnut chart logic
- Create MonthlySpendingChart.vue component with bar chart and peak spending
- Update Graph.vue to use new modular chart components
- Remove duplicate chart logic and styling from Graph.vue
- Maintain all existing functionality and styling
- Improve code maintainability and reusability
Resolves #21
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: add bug handling workflow step 7 to CLAUDE.md
* docs: update workflow to include feature requests and GitHub issue creation
* feat: add daily spending popover to GitHub-style grid cells
- Add ion-popover functionality to SpendingChart.vue
- Display detailed spending info when users tap grid cells
- Show formatted date, amount with proper currency symbols
- Include entry count for days with spending
- Style popover with responsive design matching app theme
- Handle empty days with "No spending" message
- Maintain existing tooltip as fallback
- Integrate with existing currency formatting system
Implements #23
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: implement shared spending store and Moment.js date utilities
- Create shared spending store for centralized state management
- Remove frontend date generation, let backend auto-generate dates
- Implement Moment.js for robust timezone handling
- Update all components to use shared store and date utilities
- Fix chart update issues by using reactive shared state
Known issues to fix:
- Line chart not showing today's data
- Graph page charts not displaying properly
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: resolve chart data display issues and enhance GitHub-style grid
- Fix date comparison logic in all chart components using proper timezone conversion
- LineChart: Use getDaysAgo() for consistent local date range generation
- TodaysSpendingChart: Use getTodayString() and toLocalDateString() for accurate today filtering
- MonthlySpendingChart: Apply toLocalDateString() to all entry date conversions
- SpendingChart: Increase grid gap from 0.3rem to 0.5rem and add 0.5rem padding
- SpendingChart: Add cell padding and minimum dimensions for better touch targets
- SpendingChart: Increase no-spending cell opacity from 0.3 to 0.6 for better visibility
- Update responsive breakpoints to maintain appropriate spacing across devices
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: format SpendingChart component code
- Use self-closing tags for empty elements in template
- Remove unnecessary whitespace and blank lines
- Improve code consistency and readability
- Clean up template, script, and style sections
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: improve History page datetime format to show precise timestamps
Replace relative time format (e.g., "2 hours ago") with precise yyyy-mm-dd h:mm AM/PM format for all spending entries. This provides better context for expense tracking and record-keeping.
Changes:
- Update formatEntryTime() to use moment.js with YYYY-MM-DD h:mm A format
- All entries now show exact date and time (e.g., "2024-12-14 2:30 PM")
- Consistent timestamp display across all entries regardless of age
- Better expense tracking with precise temporal information
Closes #24
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: add missing imports and remove unused variable in History.vue
- Add missing imports for useSpendingStore and useDateUtils composables
- Remove unused formatTimeAgo variable to fix TypeScript warning
- Resolve ReferenceError: useSpendingStore is not defined
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: update project documentation and remove outdated sections
- Add comprehensive project status to CLAUDE.md with current architecture, components, and recent fixes
- Remove v1.0 Roadmap section from README.md as features are now implemented
- Remove Architecture section from README.md to reduce redundancy with CLAUDE.md
- Streamline README for better focus on quick start and deployment
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: improve SpendingChart color system with 10-level intensity
- Replace opacity-based color variation with 10 distinct blue shades
- Fix max amount calculation to use daily totals instead of individual entries
- Add proper color intensity mapping from light (#eaf2ff) to dark (#1c3d66)
- Update legend colors to match new intensity levels
- Remove inline opacity styles that interfered with color classes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: bump version to 1.0.0 for initial release
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add back-dating capability for spending entries
- Add ion-datetime-button to SpendingDialog for date selection
- Modify useSpendingStore to accept custom date parameter
- Update Home.vue to pass date to spending store
- Default to current date/time, prevent future dates
- Convert device timezone to UTC before backend storage
- Build passes all TypeScript checks
Resolves #28
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: correct ion-datetime modal structure to resolve button linking issue
- Move ion-datetime outside of main modal to prevent nesting issues
- Add proper modal container for datetime picker
- Resolves 'No ion-datetime instance found' error
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: simplify datetime handling to resolve time display issues
- Remove complex formatOptions that were causing TypeScript errors
- Use standard new Date().toISOString() for datetime initialization
- Simplify ion-datetime configuration to use default Ionic behavior
- This should resolve the time not showing in datetime-button
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: enhance back-dating functionality with improved UX
- Move datetime modal inside SpendingDialog for better UX
- Keep dialog open after logging spending for multiple entries
- Reset date to current time when dialog opens
- Add proper datetime formatting without timezone issues
- Improve date picker presentation with iOS mode and formatting
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: prioritize user-selected date over creation timestamp in History
- Use entry.date || entry.created_at instead of created_at || date
- Ensures back-dated entries show the user-selected timestamp
- Maintains proper sorting by user-selected date
- Fixes TypeScript errors with proper null handling
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: convert UTC timestamps to local timezone in History display
- Use moment.tz() to properly convert UTC entry.date to user's local timezone
- Ensures back-dated entries show correct local time instead of UTC
- Maintains consistent timezone handling across the application
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: properly convert local datetime to UTC before database storage
- Convert selectedDate from local datetime string to UTC ISO string
- Ensures user-selected local time is correctly stored as UTC timestamptz
- Fixes timezone consistency between save and display operations
- Maintains proper local-to-UTC-to-local conversion flow
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: show "- No category -" for entries without category in History
- Always display category field instead of hiding it when empty
- Show "- No category -" text for entries without assigned category
- Improves UI consistency and clarity for uncategorized spending
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add confirmation buttons to datetime picker
- Enable show-default-buttons on ion-datetime component
- Provides Cancel and Done buttons for better UX
- Users can now confirm or cancel date/time selection
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* revert: remove confirmation buttons from datetime picker
- Remove show-default-buttons to maintain clean UI
- Default buttons made the interface cluttered
- Keep the cleaner datetime picker without explicit buttons
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: enhance datetime selector with ion-item consistency
- Replace ion-item wrapper with custom div structure for datetime button
- Add date-wrapper with proper border and padding matching ion-item styling
- Style date-label to match ion-label appearance with theme color support
- Add iOS-style modal with translucent background and backdrop blur
- Improve datetime modal with proper border-radius and shadow
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: bump version to 1.1.0 for minor release
## 🎉 SpendCheck v1.1.0 Release
### ✨ Major Features
- **Back-dating Spending Entries**: Users can now select custom dates when adding spending
- **Enhanced DateTime Picker**: iOS-style modal with improved user experience
- **Timezone Support**: Proper UTC/local time conversion throughout the application
### 🔧 Improvements
- **UI Consistency**: DateTime selector now matches ion-item styling
- **History Display**: Shows "- No category -" for uncategorized entries
- **Modal Design**: Translucent background with backdrop blur effects
- **Data Accuracy**: User-selected timestamps prioritized over creation time
### 🐛 Bug Fixes
- Fixed timezone conversion issues in History view
- Resolved datetime display inconsistencies
- Improved modal structure and button linking
### 📱 User Experience
- Keep dialog open for multiple spending entries
- Better visual feedback and confirmation flows
- Enhanced mobile-ready interface with proper iOS styling
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: add categories table to SUPABASE_SETUP.md (#31)
Add missing categories table creation SQL including:
- Table structure with required columns
- Unique constraint on user_id + name
- Performance index on user_id
- Complete RLS policies for CRUD operations
- Updated documentation notes
Fixes #30
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* fix: replace Moment.js with date-fns and resolve timezone issues
- Migrate from moment/moment-timezone to date-fns/date-fns-tz for better tree-shaking
- Fix timezone conversion bug in MonthlySpendingChart where dates were incorrectly shifted
- Replace .toISOString().split('T')[0] with format() to avoid UTC conversion issues
- Update all date utility functions to use date-fns equivalents
- Resolve issue where spending entries appeared on wrong day in monthly chart
- Clean up debug logging code
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: bump version to 1.1.1 for timezone fix patch
* feat: add inputmode attribute to amount input for better mobile UX (#34)
- Add inputmode="decimal" to amount input in SpendingDialog.vue
- Optimizes mobile keyboard to show numeric keypad with decimal point
- Improves user experience when entering spending amounts on mobile devices
Fixes #33
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* chore: bump version to 1.1.2 for inputmode patch
- Add inputmode="decimal" to amount input for better mobile UX
- Optimizes mobile keyboard for numeric input with decimal point
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* security: fix critical RLS vulnerability and standardize authentication (#36)
- Remove dangerous wildcard RLS policies that allowed cross-user data access
- Standardize authentication to use only Supabase anonymous auth
- Remove client-side user ID generation and localStorage manipulation
- Fix security vulnerability where any anonymous user could access all other anonymous users' data
Fixes #35
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* chore: bump version to 1.2.0 for security fix release
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* perf: optimize RLS policies to prevent per-row function evaluation
- Wrap current_setting() calls in SELECT subqueries for better performance
- Prevents re-evaluation of auth functions for each row at scale
- Improves query performance for RLS policy checks
Addresses Supabase performance warning about suboptimal RLS policies.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: add instructions for updating existing RLS policies
- Add section on dropping and recreating policies for updates
- Include performance optimization note about SELECT wrappers
- Provide complete SQL commands for policy updates
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: document branch workflow and release process in CLAUDE.md
- Add clear branch structure: dev (development) vs main (production)
- Document issue/feature handling workflow
- Add release workflow: bump version first, then create PR dev to main
- Ensure proper branch management going forward
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* style: update splash screen background color to blue
Changed splash screen background from light gray (#f8fafc) to blue (#457CFE) in Capacitor configuration.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add Settings page with authentication UI
- Add new Settings tab to bottom navigation
- Create comprehensive Settings.vue page with:
- Account section with authentication options (Google, Facebook, Phone, Guest)
- Currency selection with modal interface
- Category management section (disabled for guests)
- App information section
- Update routing configuration to support /tabs/settings
- Maintain backward compatibility with existing anonymous authentication
- Responsive design matching existing app UI patterns
- Currency selection saves to localStorage and displays toast feedback
Addresses GitHub issue #37
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: add comprehensive database migration guide and scripts
- Add complete migration guide (docs/database-migration.md) with 4 different approaches:
- Manual SQL migration (recommended for beginners)
- Supabase CLI migration (advanced users)
- Direct PostgreSQL connection method
- Environment-based workflow setup
- Create database migration script (scripts/migrate-to-dev.sql):
- Complete schema recreation with proper table structure
- RLS policies for user data isolation
- Performance indexes for spending_entries and categories
- Default categories for testing
- Add environment configuration templates:
- .env.development for development database
- .env.production for production database
- Enables safe switching between environments
- Include verification steps and troubleshooting guide
- Supports safe development workflow without affecting production data
Addresses need to migrate production Supabase database to development environment
for enhanced authentication feature development.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: remove unnecessary cp commands from migration guide
- Remove redundant 'cp .env.development .env' steps
- Simplify environment switching workflow
- Update instructions to directly edit .env file instead of copying
- Make documentation match actual configured environment setup
* docs: correct en
10BC8
vironment file handling for Vite
- Remove manual environment switching instructions
- Clarify that Vite automatically loads .env.development and .env.production
- Update workflow to reflect Vite's built-in mode-based environment loading
- No .env file needed - Vite handles everything based on npm run command
* feat: refactor Settings page with proper Ionic components
- Replace div sections with ion-list and ion-list-header components
- Remove unnecessary container divs in favor of ion-content structure
- Update authentication UI to show guest status as informational text
- Use official Google logo SVG from Google's CDN with transparent background
- Standardize all sign-in button icon sizes to 24px with consistent spacing
- Remove unused imports (chevronForwardOutline, logoGoogle)
- Simplify CSS by leveraging Ionic utility classes (ion-margin-bottom, ion-text-center)
- Fix Graph.vue title from "Analytics" to "Stats"
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: replace custom currency modal with existing CurrencyPicker component
- Remove duplicate currency selection modal (~40 lines of code)
- Import and use existing CurrencyPicker component with search functionality
- Clean up unused functions (selectCurrency, showCurrencyModal)
- Remove unused imports (checkmarkOutline)
- Improve UX by leveraging better-designed currency picker
- Reduce bundle size by eliminating redundant currency logic
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: document Settings page implementation tasks and update gitignore
- Add comprehensive documentation of remaining Settings page work (Issue #37)
- Document OAuth integration requirements (Google, Facebook, Phone SMS)
- Document category management and backend integration tasks
- Add .env files to gitignore to prevent credential commits
- Fix duplicate branch workflow instruction
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement complete Supabase authentication system
- Add email/password authentication with sign up/in forms
- Implement OAuth social login (Google, Facebook)
- Add proper anonymous user flow with Supabase user IDs
- Enhance Settings page with full authentication modal
- Add auth state management and session handling
- Include documentation for enabling anonymous auth
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* polish: enhance email/password authentication with Apple design system
- Add floating labels and real-time form validation
- Implement confirm password field for sign-up flow
- Add comprehensive error handling with specific messages
- Include loading states with spinners and disabled states
- Apply Apple-style design patterns with smooth animations
- Add proper focus states and hover effects for accessibility
- Implement form state management and field-level validation
- Include dark mode support and responsive design
- Add premium visual design with shadows and blur effects
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: update CLAUDE.md with authentication implementation status
- Update branch status to feature/settings-page-auth
- Mark authentication system as completed with checkmarks
- Update recent issues resolved to highlight auth work
- Reflect remaining tasks: phone verification and category management
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: add OAuth configuration guide for redirect URI issues
- Document Google OAuth redirect_uri_mismatch error solution
- Include step-by-step Google Cloud Console configuration
- Add notes for other OAuth providers and testing procedures
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: convert Settings page to pure Ionic design system
- Replace custom Apple design system with standard Ionic components
- Remove 270+ lines of custom CSS styling for cleaner maintenance
- Update authentication modal to use ion-header/ion-content structure
- Standardize form inputs with ion-list and ion-text error handling
- Fix social auth buttons with consistent icon spacing and alignment
- Use official Google logo SVG and Facebook logoFacebook icon
- Remove all custom hover effects and brand colors for better visibility
- Implement ion-padding and standard ion-margin-bottom patterns
- Convert auth section to standard ion-item layout
- Maintain functionality while improving consistency with app design
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: standardize modal close button style with spending dialog
- Replace solid 'close' icon with outline 'closeOutline' icon
- Add 'fill=clear' for transparent button background
- Match SpendingDialog.vue close button styling for consistency
- Improve visual hierarchy with subtle, non-distracting close button
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* polish: standardize chart and card styling with Apple Design System
- Update SpendingChart styling to match other components
- Update Home stat cards with consistent 16px border radius and shadows
- Apply uniform #FFFFFF background and #E5E5EA borders across UI
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement complete category management system (Issue #40)
- Add comprehensive CategoryManagement component with CRUD operations
- Integrate category management modal in Settings page
- Support create, edit, and delete categories for authenticated users
- Add no-color and white color options with visual indicators
- Implement live preview section showing category appearance
- Use consistent input styling matching existing app design
- Add proper form validation and error handling
- Include mobile-responsive design with touch-friendly interface
- Auto-reload categories in SpendingDialog after creation
- Display-only icon section (icon selection not yet supported)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement database schema for user preferences (Issue #43)
- Add user_preferences table with currency, theme, and notification settings
- Enhance categories table with UUID references and default system categories
- Add RLS policies for secure user data access
- Implement database triggers for auto-preference creation and timestamp updates
- Add 8 default spending categories available to all users
- Create foreign key relationship between spending_entries and categories
- Add comprehensive migration documentation and step-by-step guide
- Update SUPABASE_SETUP.md with complete schema
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: consolidate database migration documentation (Issue #43)
- Replace 4 separate migration files with 2 comprehensive ones
- Add database-migration-complete.md with fail-safe step-by-step guide
- Add database-migration-complete.sql with intelligent auto-detection
- Remove outdated migration files:
- database-schema-migration-43.sql
- migration-step-by-step.md
- database-migration-fix.sql
- quick-fix-migration.md
- New migration handles both fresh and existing databases automatically
- Includes complete verification and rollback procedures
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement Vercel Analytics tracking
- Add @vercel/analytics package dependency
- Initialize analytics in App.vue on mount
- Enable automatic page view and interaction tracking
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: replace database triggers with Prisma ORM implementation
Replace database-level triggers with application-level ORM logic:
## Core Infrastructure
- Add Prisma ORM with type-safe database models
- Create DatabaseService with automatic timestamp management
- Implement UserService to replace user preferences trigger
## Enhanced Composables
- useSpendingStoreORM: Type-safe spending operations
- useCategoryStoreORM: Category management with validation
- useAuthORM: Authentication with automatic user initialization
## Key Benefits
- Automatic timestamp updates via Prisma @updatedAt
- Application-level user preferences creation
- Full TypeScript type safety from database schema
- Better error handling and validation
- Eliminates database trigger dependencies
## Migration Support
- docs/remove-database-triggers.sql: Remove existing triggers
- docs/orm-migration-guide.md: Complete migration documentation
- Maintains API compatibility with existing composables
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement comprehensive Playwright test suite and fix data persistence
- Add complete Playwright testing framework with 40+ automated tests
- Fix data persistence issue by initializing authentication in all views
- Add test coverage for navigation, spending entry, authentication, settings, and analytics
- Implement secure environment variable authentication testing
- Update README.md with comprehensive testing documentation
Staged files:
• .claude/settings.local.json - Updated MCP permissions
• .gitignore - Added Playwright test artifacts exclusion
• README.md - Added comprehensive testing section
• package.json & package-lock.json - Added Playwright dependency and test scripts
• playwright.config.ts - Test configuration for multi-browser support
• src/views/Home.vue, History.vue, Graph.vue - Fixed authentication initialization
• tests/*.spec.ts - Complete test suite (40+ tests)
• tests/00-test-summary.md - Test execution summary and documentation
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement user preferences system with database integration
Complete implementation of Issues #41 and #42 with comprehensive user preference management:
### User Preferences Database Integration (Issue #41 & #42)
- Created SupabaseUserService for frontend database operations
- Enhanced useCurrency composable with database persistence for authenticated users
- Added useUserPreferences composable for unified preference management
- Implemented guest-to-authenticated user data migration
- Added theme and notification preference controls to Settings page
### Enhanced Settings Page
- Added Preferences section with theme selector and notification toggle
- Updated Settings page with new user preference controls
- Integrated real-time preference loading and saving
- Added proper authentication state handling
### Bundle Size Optimization
- Configured Vite manual chunking to split 1.1MB bundle into logical chunks
- Reduced largest chunk from 1,188KB to 717KB (40% improvement)
- Enabled better caching strategies with separated vendor/framework chunks
### Test Infrastructure Improvements
- Created comprehensive selectors.ts for reliable test element targeting
- Updated Playwright tests with improved selectors to avoid strict mode violations
- Enhanced test reliability for authentication, settings, and spending entry flows
### Technical Enhancements
- Updated Supabase types to include user_preferences table
- Added proper async/await handling for currency operations
- Enhanced error handling with localStorage fallbacks
- Maintained backward compatibility with anonymous users
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: remove Prisma ORM and restore proper frontend-only architecture
Prisma is not suitable for frontend applications as it requires a server environment and cannot run in browsers. This commit removes all Prisma dependencies and ORM-based code, restoring the proper frontend architecture using only Supabase client.
**Removed:**
- @prisma/client and prisma packages
- prisma/ schema directory
- src/lib/prisma/ generated client files
- src/lib/database.ts (PrismaClient usage)
- ORM composables (useSpendingStoreORM, useCategoryStoreORM, useAuthORM)
- src/services/userService.ts (Prisma-based)
**Architecture restored:**
Frontend (Vue.js) → Supabase Client → Supabase Backend → PostgreSQL
**Impact:**
- Build size reduced by removing unnecessary Prisma client bundle
- TypeScript errors eliminated
- Proper browser-compatible database operations via Supabase client
- Existing Supabase-based composables (useSpendingStore, useCategoryStore, useAuth) remain intact
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
* test: Implement comprehensive Playwright test suite with 100% pass rate
- Add complete authentication testing (email/password, OAuth, guest state)
- Add settings and currency management test coverage
- Add complex spending entry workflows (multi-entry, date/time, categories)
- Fix save button validation logic in SpendingDialog component
- Streamline selectors for better Ionic component targeting
- Remove redundant tests while maintaining full business logic coverage
- Achieve 22/22 tests passing with robust error handling
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: Add .claude directory to .gitignore
- Exclude Claude Code local settings from version control
- Prevents accidental commits of development environment configuration
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* remove .claude/*
* feat: enhance spending dialog save flow with loading state and auto-close
- Add loading state to save button with spinner and "Saving..." text
- Disable save button during save operation to prevent double-submission
- Automatically close dialog after showing success/failure toast message
- Improve user experience with clear visual feedback throughout save process
- Maintain form validation to prevent saves while loading
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement spending data migration for anonymous to authenticated users (#49)
- Add migrateAnonymousSpendingData() function to preserve spending history
- Track anonymous user IDs before authentication transition
- Integrate migration trigger in authentication flow for email/OAuth
- Update CLAUDE.md with critical issue #48 documentation
- Ensure seamless user experience when upgrading from anonymous to authenticated accounts
Fixes #48
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* chore: add CLAUDE.md to .gitignore for persistent local memory
- CLAUDE.md will now serve as untracked persistent memory
- Allows Claude Code to maintain project context across sessions
- Prevents git conflicts with memory updates
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: improve spending data migration with server-side function and enhanced error handling
- Replace client-side migration with Supabase RPC function to bypass RLS issues
- Add server-side migrate_anonymous_spending_data() function for secure data transfer
- Fix migration flow to work for both new signups and existing user logins
- Add email confirmation error handling with user-friendly toast message
- Remove debug logging for cleaner production code
- Ensure migration attempts regardless of existing user preferences
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* re-add CLAUDE.md
* re-add CLAUDE.md
* feat: hide Facebook OAuth button in Settings authentication modal
- Comment out Facebook sign-in button to simplify authentication options
- Keep Google OAuth and email/password authentication active
- Facebook integration remains in code for easy restoration if needed
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: resolve TypeScript warnings for Facebook OAuth removal
- Comment out unused logoFacebook import
- Comment out unused signInWithFacebook function
- Clean build with no TypeScript errors
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
laminko
added a commit
that referenced
this pull request
Jun 30, 2025
* docs: document branch workflow and release process in CLAUDE.md
- Add clear branch structure: dev (development) vs main (production)
- Document issue/feature handling workflow
- Add release workflow: bump version first, then create PR dev to main
- Ensure proper branch management going forward
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* style: update splash screen background color to blue
Changed splash screen background from light gray (#f8fafc) to blue (#457CFE) in Capacitor configuration.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: Add Settings page with authentication UI and improved components (#38)
* fix: resolve RLS policy violation for spending entries
- Implement proper Supabase anonymous authentication
- Add session management for database operations
- Maintain backward compatibility with local anonymous IDs
- Fix deprecated substr method usage
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: remove unused imports from Home.vue
- Remove getCurrentUserId and initializeAuth unused imports
- Keep only ensureValidSession which is actually used
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: migrate to Ionic Vue with mobile capabilities
- Install Ionic Vue 8.6.1 and Capacitor for native mobile support
- Convert App.vue to use ion-app and ion-router-outlet structure
- Migrate Home.vue to Ionic components (ion-page, ion-header, ion-content, ion-card, ion-button, ion-grid)
- Replace CurrencyPicker dropdown with Ionic modal using ion-modal, ion-searchbar, ion-list
- Add haptic feedback for mobile interactions using @capacitor/haptics
- Configure Capacitor for iOS/Android deployment with splash screen settings
- Add mobile build scripts and deployment commands
- Maintain existing functionality while optimizing for mobile UX
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: resolve ion-input focus issue in edit mode
- Update editTodayAmount to use Ionic input's setFocus() method
- Remove HTMLInputElement type constraint for amountInput ref
- Fix focus functionality when editing today's spending amount
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: ensure spending button maintains perfect circular shape
- Add explicit width/height with \!important to override Ionic defaults
- Include aspect-ratio and flex-shrink properties for consistent shape
- Update mobile responsive styles to maintain circular appearance
- Fix button appearing oval/elliptical instead of circular
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: make LineChart component responsive to parent width
- Convert fixed chart dimensions to reactive refs
- Add ResizeObserver to monitor container size changes
- Update all computed properties to use reactive chartWidth/chartHeight
- Set responsive width/height based on container dimensions
- Maintain aspect ratio with configurable min/max constraints
- Remove redundant mobile-specific CSS in favor of universal responsiveness
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add responsive breakpoints for spending grid
Improve grid layout on different screen sizes:
- Desktop (>768px): 10 columns (unchanged)
- Tablet (≤768px): 8 columns
- Small tablet (≤600px): 7 columns
- Mobile (≤480px): 6 columns
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: update spending grid to 90-day GitHub-style layout
- Change from 30 days to 91 days (7 rows × 13 columns)
- Arrange grid in weekly format like GitHub contributions
- Update responsive breakpoints for new dimensions
- Mobile layout switches to 7×13 for better viewing
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: maintain consistent 13×7 grid layout on mobile
- Remove mobile rotation, keep 13 columns × 7 rows consistent
- Reduce gap to 0.05rem on mobile for better fit
- Adjust border radius for smaller mobile cells
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: prevent stat number text wrapping in stats cards
- Reduce font size from 1.4rem to 1.2rem
- Change word-break from break-all to keep-all
- Add nowrap and ellipsis for better display
- Fixes "Total This Month" currency display issue
🤖 Generated with [Claude Code](https:
10BC8
//claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: reduce stat number font size to 0.85rem
- Make stat numbers smaller for better fit in cards
- Ensures currency amounts display properly on one line
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: improve spending chart grid layout with proper week arrangement
- Arrange grid cells by weeks instead of consecutive days
- Add invisible cells for dates outside the 90-day range
- Improve hover behavior by disabling interaction on invisible cells
- Maintain 13×7 grid structure while ensuring proper Sunday-Saturday week alignment
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: update GitHub-style grid to 14 weeks with proper day-row alignment
- Change grid from 13×7 to 14×7 (7 rows × 14 columns)
- Rows represent days of week (Sunday=0, Friday=5, Saturday=6)
- Columns represent weeks (14 weeks total)
- Fix grid index calculation to place days in correct rows
- Ensure today (Friday) appears in row 5 as expected
- Update responsive breakpoints for new grid dimensions
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement home page redesign with spending categories
## Major Features Added
### 🗂️ Spending Categories
- Add category field to database schema and TypeScript interfaces
- Create comprehensive spending dialog with category selection
- Support 9 default categories (Food, Transport, Shopping, etc.)
- Allow custom category creation
- Update all database operations to include categories
### 🎯 Circular Spend Button
- Replace spend button with large circular design matching mockup
- Implement blue gradient background with card icon
- Add "TAP IF YOU SPENT TODAY" text styling
- Include hover effects and responsive scaling
- Integrate with new spending dialog workflow
### 📊 Activity Grid Improvements
- Update chart header from "Last 14 Weeks" to "Activity"
- Fix grid layout to perfect 7 rows × 14 columns (days × weeks)
- Restore square cell aspect ratios for GitHub-style appearance
- Ensure Friday appears in correct row 5 position
- Remove height constraints for natural grid sizing
### 🎨 UI/UX Enhancements
- Create modal spending dialog with amount and category inputs
- Add form validation and error handling
- Implement smooth transitions and hover states
- Ensure mobile-responsive design across all components
- Maintain existing functionality while improving interface
## Technical Implementation
- Add SpendingDialog.vue component with category management
- Update spending entry creation to always insert new records
- Modify chart components to handle category data
- Enhance database queries to include category field
- Implement proper TypeScript interfaces for type safety
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: update README with v2.0 features and project status
- Add comprehensive feature descriptions for new circular button and categories
- Update architecture section with new SpendingDialog component
- Include recent updates section highlighting v2.0 redesign
- Add roadmap showing upcoming statistics cards and navigation features
- Enhance component documentation with feature descriptions
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: update README with v2.0 features and project status
- Add comprehensive feature descriptions for new circular button and categories
- Update architecture section with new SpendingDialog component
- Include recent updates section highlighting v2.0 redesign
- Add roadmap showing upcoming statistics cards and navigation features
- Enhance component documentation with feature descriptions
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: add category field to TypeScript database type definitions
- Add category field to Database.Row, Insert, and Update types
- Update SpendingEntry interface to make category optional
- Add generic typing to supabase client for better type safety
- Support legacy entries without category data (nullable field)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: cleanup and streamline README and SUPABASE_SETUP documentation
## README Changes:
- Remove redundant "Recent Updates" section (features already described)
- Streamline tech stack and architecture sections
- Simplify deployment, contributing, and development sections
- Remove excessive tables, stats, and acknowledgments
- Update mobile claims from "Perfect" to "Works great" for accuracy
- Replace "Offline-Ready" with accurate "Real-Time Sync"
- Condense verbose sections while maintaining key information
## SUPABASE_SETUP Changes:
- Add category column to database schema (both dashboard and SQL methods)
- Update table documentation to include category field
- Add notes about category field being optional and nullable for backward compatibility
## Result:
- More honest, accurate documentation
- Cleaner, less overwhelming format
- Maintains all essential information
- Better reflects actual project capabilities
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement database-backed categories system
- Create categories table with RLS policies for user-specific data
- Add TypeScript interfaces for Category model and updated SpendingEntry
- Implement useCategoryStore composable with full CRUD operations
- Update SpendingDialog to use action-sheet interface and load categories from database
- Add automatic seeding of 9 default categories for new users
- Support custom category creation with persistent storage
- Update Home.vue to handle both category_id and category fields for backward compatibility
- Make category selection optional in spending entries
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: support multiple daily entries in charts
- Update LineChart.vue to aggregate multiple entries per day using filter + reduce
- Update SpendingChart.vue to sum all entries for each day in grid visualization
- Charts now properly display total amounts when users have multiple spending entries per day
- Maintains backward compatibility with single daily entries
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: resolve category creation authentication and selection issues
- Fix authentication issue in useCategoryStore by calling ensureValidSession() before database operations
- Update loadCategories, seedDefaultCategories, and addCategory to properly initialize user session
- Improve form reset behavior in SpendingDialog to keep custom categories selected after creation
- Remove unnecessary userId.value checks that were causing null reference errors
- Custom categories now persist selection state and appear in subsequent dialog opens
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: improve UI polish and replace logo with transparent PNG
- Replace logo.svg with transparent SpendCheck-logo-transparent.png across all files
- Update SpendingDialog with proper Ionic theming and add checkmark icon to save button
- Improve GitHub-style grid visibility with increased opacity (75% min) and larger gaps
- Update button text to casual "Any spending? Tap to track\!" for better UX
- Remove ad space placeholder for cleaner layout
- Clean up unused CSS classes (centered-title, amount-input-container, logged-icon, etc.)
- Enhance SpendingChart grid cell visibility and spacing
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: simplify feature descriptions with honest, minimal approach
- Replace marketing fluff with straightforward 4-point feature list
- Remove exaggerated claims about "smart" and "beautiful" features
- Focus on core functionality: tap to log, optional categories, view patterns
- Add confident "That's it. No signup, no complexity." tagline
- More trustworthy and user-friendly messaging
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: improve README description to be more concise and catchy
Updated the main description from complex feature listing to simple,
action-oriented language that better conveys the app's core value.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement ion-tabs navigation with enhanced history time display
- Add bottom tab navigation with Home, History, Stats tabs
- Implement proper Ionic Vue routing structure with ion-page wrapper
- Create History tab with daily/monthly/yearly filtering and enhanced time display
- Create Stats/Graph tab with bar charts and category breakdowns
- Add relative time display for History (5 mins ago, 2:30 PM, Yesterday 3:45 PM)
- Fix currency formatting across all components
- Update database queries to include created_at timestamps
- Add appropriate icons for each tab (home-outline, time-outline, bar-chart-outline)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: remove unused diffDays variable in History.vue
- Fix TypeScript error TS6133: 'diffDays' is declared but its value is never read
- Ensure clean build without TypeScript warnings
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add swipe-to-delete functionality to history entries
- Implement ion-item-sliding with swipe gestures for entry deletion
- Add confirmation dialog before deleting entries
- Sync data between Home and History tabs using route watching
- Migrate CLAUDE.local.md to CLAUDE.md with imports structure
- Align data queries to use consistent fields and ordering
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* ui: improve spacing in history tab date groups
Add visual gap between date text and amount in date group headers
for better readability and cleaner UI appearance.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: enhance currency formatting and add user feedback
- Simplify formatAmount function by removing compact parameter
- Improve currency formatting for large amounts (100K+ uses K/M abbreviations)
- Add proper decimal handling for JPY/KRW currencies
- Set iOS mode globally for consistent UI experience
- Add success/error toast notifications for spending tracking
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: refactor Graph page with Chart.js for current month daily spending
- Install Chart.js and vue-chartjs dependencies
- Replace custom bar chart with Chart.js implementation
- Add current month daily spending visualization with category-based colors
- Implement dynamic title showing current month/year (e.g., "June 2025")
- Add interactive tooltips with detailed spending information
- Ensure responsive design for mobile and desktop
- Remove time period selector for bar chart (now focuses on current month only)
- Clean up unused variables and functions
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: complete Graph page redesign with Apple-style dual charts and monthly comparison
Major enhancements to Analytics page:
📊 **Chart Redesign:**
- Replace Chart.js bar chart tabs with dual chart layout
- Add doughnut chart for today's spending by category
- Implement iOS-style daily spending chart for current month
- Use Apple Design System colors and SF Pro typography
💰 **Enhanced Summary Card:**
- Move "Total This Month" above all charts for better hierarchy
- Add percentage comparison with last month (+/-X% from last month)
- Reorder layout: label → amount → percentage change
🎯 **Today's Spending Doughnut Chart:**
- Clean doughnut with 70% cutout for modern look
- Category-based visualization with Apple system colors
- Legend with perfect square indicators (not circles)
- Hover effects with 8px offset for interactivity
📈 **Monthly Daily Spending Chart:**
- Thin 8px bars with rounded tops (iOS style)
- Clean design with hidden Y-axis and minimal grid
- Peak day indicator showing highest spending day
- Interactive tooltips with ordinal dates (June 15th 2025)
🎨 **Apple Design Integration:**
- SF Pro Display/Text fonts with proper letter spacing
- #007AFF primary color throughout
- 16px/20px border radius for modern iOS feel
- Subtle shadows and proper spacing (8pt grid)
Technical improvements:
- Remove unused chart type toggles and time period selectors
- Add last month total calculation for comparison
- Implement peak day detection algorithm
- Enhanced Chart.js configuration with proper types
- Mobile-responsive design with optimized heights
Closes #13
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: create reusable SummaryCard component and enhance UI consistency
- Create SummaryCard component with Apple Design System styling
- Replace duplicate summary card implementations in Graph and History pages
- Update Graph page title to "This Month's Spending (June 2025)"
- Add peak spending info with bold date formatting below monthly chart
- Apply consistent chart card styling between Today's and Monthly spending
- Enhance typography consistency with SF Pro fonts throughout History page
- Improve mobile responsiveness for all components
- Remove duplicate CSS and consolidate styling logic
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: extract chart components for better code organization
- Create TodaysSpendingChart.vue component with doughnut chart logic
- Create MonthlySpendingChart.vue component with bar chart and peak spending
- Update Graph.vue to use new modular chart components
- Remove duplicate chart logic and styling from Graph.vue
- Maintain all existing functionality and styling
- Improve code maintainability and reusability
Resolves #21
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: add bug handling workflow step 7 to CLAUDE.md
* docs: update workflow to include feature requests and GitHub issue creation
* feat: add daily spending popover to GitHub-style grid cells
- Add ion-popover functionality to SpendingChart.vue
- Display detailed spending info when users tap grid cells
- Show formatted date, amount with proper currency symbols
- Include entry count for days with spending
- Style popover with responsive design matching app theme
- Handle empty days with "No spending" message
- Maintain existing tooltip as fallback
- Integrate with existing currency formatting system
Implements #23
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: implement shared spending store and Moment.js date utilities
- Create shared spending store for centralized state management
- Remove frontend date generation, let backend auto-generate dates
- Implement Moment.js for robust timezone handling
- Update all components to use shared store and date utilities
- Fix chart update issues by using reactive shared state
Known issues to fix:
- Line chart not showing today's data
- Graph page charts not displaying properly
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: resolve chart data display issues and enhance GitHub-style grid
- Fix date comparison logic in all chart components using proper timezone conversion
- LineChart: Use getDaysAgo() for consistent local date range generation
- TodaysSpendingChart: Use getTodayString() and toLocalDateString() for accurate today filtering
- MonthlySpendingChart: Apply toLocalDateString() to all entry date conversions
- SpendingChart: Increase grid gap from 0.3rem to 0.5rem and add 0.5rem padding
- SpendingChart: Add cell padding and minimum dimensions for better touch targets
- SpendingChart: Increase no-spending cell opacity from 0.3 to 0.6 for better visibility
- Update responsive breakpoints to maintain appropriate spacing across devices
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: format SpendingChart component code
- Use self-closing tags for empty elements in template
- Remove unnecessary whitespace and blank lines
- Improve code consistency and readability
- Clean up template, script, and style sections
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: improve History page datetime format to show precise timestamps
Replace relative time format (e.g., "2 hours ago") with precise yyyy-mm-dd h:mm AM/PM format for all spending entries. This provides better context for expense tracking and record-keeping.
Changes:
- Update formatEntryTime() to use moment.js with YYYY-MM-DD h:mm A format
- All entries now show exact date and time (e.g., "2024-12-14 2:30 PM")
- Consistent timestamp display across all entries regardless of age
- Better expense tracking with precise temporal information
Closes #24
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: add missing imports and remove unused variable in History.vue
- Add missing imports for useSpendingStore and useDateUtils composables
- Remove unused formatTimeAgo variable to fix TypeScript warning
- Resolve ReferenceError: useSpendingStore is not defined
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: update project documentation and remove outdated sections
- Add comprehensive project status to CLAUDE.md with current architecture, components, and recent fixes
- Remove v1.0 Roadmap section from README.md as features are now implemented
- Remove Architecture section from README.md to reduce redundancy with CLAUDE.md
- Streamline README for better focus on quick start and deployment
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: improve SpendingChart color system with 10-level intensity
- Replace opacity-based color variation with 10 distinct blue shades
- Fix max amount calculation to use daily totals instead of individual entries
- Add proper color intensity mapping from light (#eaf2ff) to dark (#1c3d66)
- Update legend colors to match new intensity levels
- Remove inline opacity styles that interfered with color classes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: bump version to 1.0.0 for initial release
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add back-dating capability for spending entries
- Add ion-datetime-button to SpendingDialog for date selection
- Modify useSpendingStore to accept custom date parameter
- Update Home.vue to pass date to spending store
- Default to current date/time, prevent future dates
- Convert device timezone to UTC before backend storage
- Build passes all TypeScript checks
Resolves #28
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: correct ion-datetime modal structure to resolve button linking issue
- Move ion-datetime outside of main modal to prevent nesting issues
- Add proper modal container for datetime picker
- Resolves 'No ion-datetime instance found' error
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: simplify datetime handling to resolve time display issues
- Remove complex formatOptions that were causing TypeScript errors
- Use standard new Date().toISOString() for datetime initialization
- Simplify ion-datetime configuration to use default Ionic behavior
- This should resolve the time not showing in datetime-button
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: enhance back-dating functionality with improved UX
- Move datetime modal inside SpendingDialog for better UX
- Keep dialog open after logging spending for multiple entries
- Reset date to current time when dialog opens
- Add proper datetime formatting without timezone issues
- Improve date picker presentation with iOS mode and formatting
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: prioritize user-selected date over creation timestamp in History
- Use entry.date || entry.created_at instead of created_at || date
- Ensures back-dated entries show the user-selected timestamp
- Maintains proper sorting by user-selected date
- Fixes TypeScript errors with proper null handling
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: convert UTC timestamps to local timezone in History display
- Use moment.tz() to properly convert UTC entry.date to user's local timezone
- Ensures back-dated entries show correct local time instead of UTC
- Maintains consistent timezone handling across the application
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: properly convert local datetime to UTC before database storage
- Convert selectedDate from local datetime string to UTC ISO string
- Ensures user-selected local time is correctly stored as UTC timestamptz
- Fixes timezone consistency between save and display operations
- Maintains proper local-to-UTC-to-local conversion flow
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: show "- No category -" for entries without category in History
- Always display category field instead of hiding it when empty
- Show "- No category -" text for entries without assigned category
- Improves UI consistency and clarity for uncategorized spending
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add confirmation buttons to datetime picker
- Enable show-default-buttons on ion-datetime component
- Provides Cancel and Done buttons for better UX
- Users can now confirm or cancel date/time selection
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* revert: remove confirmation buttons from datetime picker
- Remove show-default-buttons to maintain clean UI
- Default buttons made the interface cluttered
- Keep the cleaner datetime picker without explicit buttons
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: enhance datetime selector with ion-item consistency
- Replace ion-item wrapper with custom div structure for datetime button
- Add date-wrapper with proper border and padding matching ion-item styling
- Style date-label to match ion-label appearance with theme color support
- Add iOS-style modal with translucent background and backdrop blur
- Improve datetime modal with proper border-radius and shadow
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: bump version to 1.1.0 for minor release
## 🎉 SpendCheck v1.1.0 Release
### ✨ Major Features
- **Back-dating Spending Entries**: Users can now select custom dates when adding spending
- **Enhanced DateTime Picker**: iOS-style modal with improved user experience
- **Timezone Support**: Proper UTC/local time conversion throughout the application
### 🔧 Improvements
- **UI Consistency**: DateTime selector now matches ion-item styling
- **History Display**: Shows "- No category -" for uncategorized entries
- **Modal Design**: Translucent background with backdrop blur effects
- **Data Accuracy**: User-selected timestamps prioritized over creation time
### 🐛 Bug Fixes
- Fixed timezone conversion issues in History view
- Resolved datetime display inconsistencies
- Improved modal structure and button linking
### 📱 User Experience
- Keep dialog open for multiple spending entries
- Better visual feedback and confirmation flows
- Enhanced mobile-ready interface with proper iOS styling
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: add categories table to SUPABASE_SETUP.md (#31)
Add missing categories table creation SQL including:
- Table structure with required columns
- Unique constraint on user_id + name
- Performance index on user_id
- Complete RLS policies for CRUD operations
- Updated documentation notes
Fixes #30
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* fix: replace Moment.js with date-fns and resolve timezone issues
- Migrate from moment/moment-timezone to date-fns/date-fns-tz for better tree-shaking
- Fix timezone conversion bug in MonthlySpendingChart where dates were incorrectly shifted
- Replace .toISOString().split('T')[0] with format() to avoid UTC conversion issues
- Update all date utility functions to use date-fns equivalents
- Resolve issue where spending entries appeared on wrong day in monthly chart
- Clean up debug logging code
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: bump version to 1.1.1 for timezone fix patch
* feat: add inputmode attribute to amount input for better mobile UX (#34)
- Add inputmode="decimal" to amount input in SpendingDialog.vue
- Optimizes mobile keyboard to show numeric keypad with decimal point
- Improves user experience when entering spending amounts on mobile devices
Fixes #33
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* chore: bump version to 1.1.2 for inputmode patch
- Add inputmode="decimal" to amount input for better mobile UX
- Optimizes mobile keyboard for numeric input with decimal point
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* security: fix critical RLS vulnerability and standardize authentication (#36)
- Remove dangerous wildcard RLS policies that allowed cross-user data access
- Standardize authentication to use only Supabase anonymous auth
- Remove client-side user ID generation and localStorage manipulation
- Fix security vulnerability where any anonymous user could access all other anonymous users' data
Fixes #35
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* chore: bump version to 1.2.0 for security fix release
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* perf: optimize RLS policies to prevent per-row function evaluation
- Wrap current_setting() calls in SELECT subqueries for better performance
- Prevents re-evaluation of auth functions for each row at scale
- Improves query performance for RLS policy checks
Addresses Supabase performance warning about suboptimal RLS policies.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: add instructions for updating existing RLS policies
- Add section on dropping and recreating policies for updates
- Include performance optimization note about SELECT wrappers
- Provide complete SQL commands for policy updates
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: document branch workflow and release process in CLAUDE.md
- Add clear branch structure: dev (development) vs main (production)
- Document issue/feature handling workflow
- Add release workflow: bump version first, then create PR dev to main
- Ensure proper branch management going forward
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* style: update splash screen background color to blue
Changed splash screen background from light gray (#f8fafc) to blue (#457CFE) in Capacitor configuration.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add Settings page with authentication UI
- Add new Settings tab to bottom navigation
- Create comprehensive Settings.vue page with:
- Account section with authentication options (Google, Facebook, Phone, Guest)
- Currency selection with modal interface
- Category management section (disabled for guests)
- App information section
- Update routing configuration to support /tabs/settings
- Maintain backward compatibility with existing anonymous authentication
- Responsive design matching existing app UI patterns
- Currency selection saves to localStorage and displays toast feedback
Addresses GitHub issue #37
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: add comprehensive database migration guide and scripts
- Add complete migration guide (docs/database-migration.md) with 4 different approaches:
- Manual SQL migration (recommended for beginners)
- Supabase CLI migration (advanced users)
- Direct PostgreSQL connection method
- Environment-based workflow setup
- Create database migration script (scripts/migrate-to-dev.sql):
- Complete schema recreation with proper table structure
- RLS policies for user data isolation
- Performance indexes for spending_entries and categories
- Default categories for testing
- Add environment configuration templates:
- .env.development for development database
- .env.production for production database
- Enables safe switching between environments
- Include verification steps and troubleshooting guide
- Supports safe development workflow without affecting production data
Addresses need to migrate production Supabase database to development environment
for enhanced authentication feature development.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: remove unnecessary cp commands from migration guide
- Remove redundant 'cp .env.development .env' steps
- Simplify environment switching workflow
- Update instructions to directly edit .env file instead of copying
- Make documentation match actual configured environment setup
* docs: correct environment file handling for Vite
- Remove manual environment switching instructions
- Clarify that Vite automatically loads .env.development and .env.production
- Update workflow to reflect Vite's built-in mode-based environment loading
- No .env file needed - Vite handles everything based on npm run command
* feat: refactor Settings page with proper Ionic components
- Replace div sections with ion-list and ion-list-header components
- Remove unnecessary container divs in favor of ion-content structure
- Update authentication UI to show guest status as informational text
- Use official Google logo SVG from Google's CDN with transparent background
- Standardize all sign-in button icon sizes to 24px with consistent spacing
- Remove unused imports (chevronForwardOutline, logoGoogle)
- Simplify CSS by leveraging Ionic utility classes (ion-margin-bottom, ion-text-center)
- Fix Graph.vue title from "Analytics" to "Stats"
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: replace custom currency modal with existing CurrencyPicker component
- Remove duplicate currency selection modal (~40 lines of code)
- Import and use existing CurrencyPicker component with search functionality
- Clean up unused functions (selectCurrency, showCurrencyModal)
- Remove unused imports (checkmarkOutline)
- Improve UX by leveraging better-designed currency picker
- Reduce bundle size by eliminating redundant currency logic
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: document Settings page implementation tasks and update gitignore
- Add comprehensive documentation of remaining Settings page work (Issue #37)
- Document OAuth integration requirements (Google, Facebook, Phone SMS)
- Document category management and backend integration tasks
- Add .env files to gitignore to prevent credential commits
- Fix duplicate branch workflow instruction
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement complete Supabase authentication system
- Add email/password authentication with sign up/in forms
- Implement OAuth social login (Google, Facebook)
- Add proper anonymous user flow with Supabase user IDs
- Enhance Settings page with full authentication modal
- Add auth state management and session handling
- Include documentation for enabling anonymous auth
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* polish: enhance email/password authentication with Apple design system
- Add floating labels and real-time form validation
- Implement confirm password field for sign-up flow
- Add comprehensive error handling with specific messages
- Include loading states with spinners and disabled states
- Apply Apple-style design patterns with smooth animations
- Add proper focus states and hover effects for accessibility
- Implement form state management and field-level validation
- Include dark mode support and responsive design
- Add premium visual design with shadows and blur effects
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: update CLAUDE.md with authentication implementation status
- Update branch status to feature/settings-page-auth
- Mark authentication system as completed with checkmarks
- Update recent issues resolved to highlight auth work
- Reflect remaining tasks: phone verification and category management
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: add OAuth configuration guide for redirect URI issues
- Document Google OAuth redirect_uri_mismatch error solution
- Include step-by-step Google Cloud Console configuration
- Add notes for other OAuth providers and testing procedures
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: convert Settings page to pure Ionic design system
- Replace custom Apple design system with standard Ionic components
- Remove 270+ lines of custom CSS styling for cleaner maintenance
- Update authentication modal to use ion-header/ion-content structure
- Standardize form inputs with ion-list and ion-text error handling
- Fix social auth buttons with consistent icon spacing and alignment
- Use official Google logo SVG and Facebook logoFacebook icon
- Remove all custom hover effects and brand colors for better visibility
- Implement ion-padding and standard ion-margin-bottom patterns
- Convert auth section to standard ion-item layout
- Maintain functionality while improving consistency with app design
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: standardize modal close button style with spending dialog
- Replace solid 'close' icon with outline 'closeOutline' icon
- Add 'fill=clear' for transparent button background
- Match SpendingDialog.vue close button styling for consistency
- Improve visual hierarchy with subtle, non-distracting close button
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* polish: standardize chart and card styling with Apple Design System
- Update SpendingChart styling to match other components
- Update Home stat cards with consistent 16px border radius and shadows
- Apply uniform #FFFFFF background and #E5E5EA borders across UI
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement complete category management system (Issue #40)
- Add comprehensive CategoryManagement component with CRUD operations
- Integrate category management modal in Settings page
- Support create, edit, and delete categories for authenticated users
- Add no-color and white color options with visual indicators
- Implement live preview section showing category appearance
- Use consistent input styling matching existing app design
- Add proper form validation and error handling
- Include mobile-responsive design with touch-friendly interface
- Auto-reload categories in SpendingDialog after creation
- Display-only icon section (icon selection not yet supported)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement database schema for user preferences (Issue #43)
- Add user_preferences table with currency, theme, and notification settings
- Enhance categories table with UUID references and default system categories
- Add RLS policies for secure user data access
- Implement database triggers for auto-preference creation and timestamp updates
- Add 8 default spending categories available to all users
- Create foreign key relationship between spending_entries and categories
- Add comprehensive migration documentation and step-by-step guide
- Update SUPABASE_SETUP.md with complete schema
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: consolidate database migration documentation (Issue #43)
- Replace 4 separate migration files with 2 comprehensive ones
- Add database-migration-complete.md with fail-safe step-by-step guide
- Add database-migration-complete.sql with intelligent auto-detection
- Remove outdated migration files:
- database-schema-migration-43.sql
- migration-step-by-step.md
- database-migration-fix.sql
- quick-fix-migration.md
- New migration handles both fresh and existing databases automatically
- Includes complete verification and rollback procedures
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement Vercel Analytics tracking
- Add @vercel/analytics package dependency
- Initialize analytics in App.vue on mount
- Enable automatic page view and interaction tracking
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: replace database triggers with Prisma ORM implementation
Replace database-level triggers with application-level ORM logic:
## Core Infrastructure
- Add Prisma ORM with type-safe database models
- Create DatabaseService with automatic timestamp management
- Implement UserService to replace user preferences trigger
## Enhanced Composables
- useSpendingStoreORM: Type-safe spending operations
- useCategoryStoreORM: Category management with validation
- useAuthORM: Authentication with automatic user initialization
## Key Benefits
- Automatic timestamp updates via Prisma @updatedAt
- Application-level user preferences creation
- Full TypeScript type safety from database schema
- Better error handling and validation
- Eliminates database trigger dependencies
## Migration Support
- docs/remove-database-triggers.sql: Remove existing triggers
- docs/orm-migration-guide.md: Complete migration documentation
- Maintains API compatibility with existing composables
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement comprehensive Playwright test suite and fix data persistence
- Add complete Playwright testing framework with 40+ automated tests
- Fix data persistence issue by initializing authentication in all views
- Add test coverage for navigation, spending entry, authentication, settings, and analytics
- Implement secure environment variable authentication testing
- Update README.md with comprehensive testing documentation
Staged files:
• .claude/settings.local.json - Updated MCP permissions
• .gitignore - Added Playwright test artifacts exclusion
• README.md - Added comprehensive testing section
• package.json & package-lock.json - Added Playwright dependency and test scripts
• playwright.config.ts - Test configuration for multi-browser support
• src/views/Home.vue, History.vue, Graph.vue - Fixed authentication initialization
• tests/*.spec.ts - Complete test suite (40+ tests)
• tests/00-test-summary.md - Test execution summary and documentation
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement user preferences system with database integration
Complete implementation of Issues #41 and #42 with comprehensive user preference management:
### User Preferences Database Integration (Issue #41 & #42)
- Created SupabaseUserService for frontend database operations
- Enhanced useCurrency composable with database persistence for authenticated users
- Added useUserPreferences composable for unified preference management
- Implemented guest-to-authenticated user data migration
- Added theme and notification preference controls to Settings page
### Enhanced Settings Page
- Added Preferences section with theme selector and notification toggle
- Updated Settings page with new user preference controls
- Integrated real-time preference loading and saving
- Added proper authentication state handling
### Bundle Size Optimization
- Configured Vite manual chunking to split 1.1MB bundle into logical chunks
- Reduced largest chunk from 1,188KB to 717KB (40% improvement)
- Enabled better caching strategies with separated vendor/framework chunks
### Test Infrastructure Improvements
- Created comprehensive selectors.ts for reliable test element targeting
- Updated Playwright tests with improved selectors to avoid strict mode violations
- Enhanced test reliability for authentication, settings, and spending entry flows
### Technical Enhancements
- Updated Supabase types to include user_preferences table
- Added proper async/await handling for currency operations
- Enhanced error handling with localStorage fallbacks
- Maintained backward compatibility with anonymous users
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: remove Prisma ORM and restore proper frontend-only architecture
Prisma is not suitable for frontend applications as it requires a server environment and cannot run in browsers. This commit removes all Prisma dependencies and ORM-based code, restoring the proper frontend architecture using only Supabase client.
**Removed:**
- @prisma/client and prisma packages
- prisma/ schema directory
- src/lib/prisma/ generated client files
- src/lib/database.ts (PrismaClient usage)
- ORM composables (useSpendingStoreORM, useCategoryStoreORM, useAuthORM)
- src/services/userService.ts (Prisma-based)
**Architecture restored:**
Frontend (Vue.js) → Supabase Client → Supabase Backend → PostgreSQL
**Impact:**
- Build size reduced by removing unnecessary Prisma client bundle
- TypeScript errors eliminated
- Proper browser-compatible database operations via Supabase client
- Existing Supabase-based composables (useSpendingStore, useCategoryStore, useAuth) remain intact
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
* test: Implement comprehensive Playwright test suite with 100% pass rate
- Add complete authentication testing (email/password, OAuth, guest state)
- Add settings and currency management test coverage
- Add complex spending entry workflows (multi-entry, date/time, categories)
- Fix save button validation logic in SpendingDialog component
- Streamline selectors for better Ionic component targeting
- Remove redundant tests while maintaining full business logic coverage
- Achieve 22/22 tests passing with robust error handling
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: Add .claude directory to .gitignore
- Exclude Claude Code local settings from version control
- Prevents accidental commits of development environment configuration
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* remove .claude/*
* feat: enhance spending dialog save flow with loading state and auto-close
- Add loading state to save button with spinner and "Saving..." text
- Disable save button during save operation to prevent double-submission
- Automatically close dialog after showing success/failure toast message
- Improve user experience with clear visual feedback throughout save process
- Maintain form validation to prevent saves while loading
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement spending data migration for anonymous to authenticated users (#49)
- Add migrateAnonymousSpendingData() function to preserve spending history
- Track anonymous user IDs before authentication transition
- Integrate migration trigger in authentication flow for email/OAuth
- Update CLAUDE.md with critical issue #48 documentation
- Ensure seamless user experience when upgrading from anonymous to authenticated accounts
Fixes #48
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* chore: add CLAUDE.md to .gitignore for persistent local memory
- CLAUDE.md will now serve as untracked persistent memory
- Allows Claude Code to maintain project context across sessions
- Prevents git conflicts with memory updates
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: improve spending data migration with server-side function and enhanced error handling
- Replace client-side migration with Supabase RPC function to bypass RLS issues
- Add server-side migrate_anonymous_spending_data() function for secure data transfer
- Fix migration flow to work for both new signups and existing user logins
- Add email confirmation error handling with user-friendly toast message
- Remove debug logging for cleaner production code
- Ensure migration attempts regardless of existing user preferences
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* re-add CLAUDE.md
* re-add CLAUDE.md
* feat: hide Facebook OAuth button in Settings authentication modal
- Comment out Facebook sign-in button to simplify authentication options
- Keep Google OAuth and email/password authentication active
- Facebook integration remains in code for easy restoration if needed
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: resolve TypeScript warnings for Facebook OAuth removal
- Comment out unused logoFacebook import
- Comment out unused signInWithFacebook function
- Clean build with no TypeScript errors
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: bump version to 1.3.0 for release
- Prepare for production release with major new features
- Authentication system with email/password and Google OAuth
- Data migration for anonymous to authenticated users
- Enhanced UI with loading states and bundle optimization
- Comprehensive test suite with 100% pass rate
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: update Settings.vue version display to 1.3.0
- Update version display in Settings About section
- Update CLAUDE.md with latest commit and PR status
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* docs: update CLAUDE.md with new PR #51 status
- Updated PR reference from #50 (merged) to #51 (new)
- Corrected latest commit reference to 67ea87d
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes critical security vulnerability identified in #35 where RLS policies allowed any anonymous user to access ALL other anonymous users' spending data.
Changes Made
🔒 Security Fixes
user_id LIKE 'anon_%'wildcard conditions🏗️ Authentication Refactor
Security Impact
Testing
Breaking Changes
anon_*IDs will need to re-authenticateFiles Changed
SUPABASE_SETUP.md- Updated with secure RLS policiessrc/composables/useAuth.ts- Completely refactored authentication logicCloses #35
🤖 Generated with Claude Code