2024-02-02 09:05:04 -06:00
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# This file is the source Rails uses to define your schema when running `bin/rails
# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
# be faster and is potentially less error prone than running all of your
# migrations from scratch. Old migrations may fail to apply correctly if those
# migrations use external dependencies or application code.
#
# It's strongly recommended that you check this file into your version control system.
2025-05-22 12:43:24 -04:00
ActiveRecord :: Schema [ 7 . 2 ] . define ( version : 2025_05_21_112347 ) do
2024-02-02 09:05:04 -06:00
# These are extensions that must be enabled in order to support this database
enable_extension " pgcrypto "
enable_extension " plpgsql "
2024-03-11 16:32:13 -04:00
# Custom types defined in this database.
# Note that some types may not work with other database engines. Be careful if changing database.
create_enum " account_status " , [ " ok " , " syncing " , " error " ]
2024-02-02 09:05:04 -06:00
create_table " accounts " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . string " subtype "
t . uuid " family_id " , null : false
t . string " name "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-02-02 23:09:35 +00:00
t . string " accountable_type "
t . uuid " accountable_id "
2024-07-17 08:57:17 -04:00
t . decimal " balance " , precision : 19 , scale : 4
t . string " currency "
2024-03-07 10:55:51 -05:00
t . boolean " is_active " , default : true , null : false
2025-05-22 12:43:24 -04:00
t . virtual " classification " , type : :string , as : " \n CASE \n WHEN ((accountable_type)::text = ANY ((ARRAY['Loan'::character varying, 'CreditCard'::character varying, 'OtherLiability'::character varying])::text[])) THEN 'liability'::text \n ELSE 'asset'::text \n END " , stored : true
2024-10-01 10:47:59 -04:00
t . uuid " import_id "
2024-11-15 13:49:37 -05:00
t . uuid " plaid_account_id "
t . boolean " scheduled_for_deletion " , default : false
2024-12-10 17:41:20 -05:00
t . decimal " cash_balance " , precision : 19 , scale : 4 , default : " 0.0 "
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
2024-10-17 15:45:13 -05:00
t . index [ " accountable_id " , " accountable_type " ] , name : " index_accounts_on_accountable_id_and_accountable_type "
2024-02-02 23:09:35 +00:00
t . index [ " accountable_type " ] , name : " index_accounts_on_accountable_type "
2024-10-17 15:45:13 -05:00
t . index [ " family_id " , " accountable_type " ] , name : " index_accounts_on_family_id_and_accountable_type "
t . index [ " family_id " , " id " ] , name : " index_accounts_on_family_id_and_id "
2024-02-02 09:05:04 -06:00
t . index [ " family_id " ] , name : " index_accounts_on_family_id "
2024-10-01 10:47:59 -04:00
t . index [ " import_id " ] , name : " index_accounts_on_import_id "
2024-11-15 13:49:37 -05:00
t . index [ " plaid_account_id " ] , name : " index_accounts_on_plaid_account_id "
2024-02-02 09:05:04 -06:00
end
2024-04-30 18:38:33 +01:00
create_table " active_storage_attachments " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . string " name " , null : false
t . string " record_type " , null : false
t . uuid " record_id " , null : false
t . uuid " blob_id " , null : false
t . datetime " created_at " , null : false
t . index [ " blob_id " ] , name : " index_active_storage_attachments_on_blob_id "
t . index [ " record_type " , " record_id " , " name " , " blob_id " ] , name : " index_active_storage_attachments_uniqueness " , unique : true
end
create_table " active_storage_blobs " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . string " key " , null : false
t . string " filename " , null : false
t . string " content_type "
t . text " metadata "
t . string " service_name " , null : false
t . bigint " byte_size " , null : false
t . string " checksum "
t . datetime " created_at " , null : false
t . index [ " key " ] , name : " index_active_storage_blobs_on_key " , unique : true
end
create_table " active_storage_variant_records " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " blob_id " , null : false
t . string " variation_digest " , null : false
t . index [ " blob_id " , " variation_digest " ] , name : " index_active_storage_variant_records_uniqueness " , unique : true
end
2024-08-23 08:47:08 -04:00
create_table " addresses " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . string " addressable_type "
t . uuid " addressable_id "
t . string " line1 "
t . string " line2 "
t . string " county "
t . string " locality "
t . string " region "
t . string " country "
t . integer " postal_code "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " addressable_type " , " addressable_id " ] , name : " index_addresses_on_addressable "
end
2025-04-14 11:40:34 -04:00
create_table " balances " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " account_id " , null : false
t . date " date " , null : false
t . decimal " balance " , precision : 19 , scale : 4 , null : false
t . string " currency " , default : " USD " , null : false
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . decimal " cash_balance " , precision : 19 , scale : 4 , default : " 0.0 "
t . index [ " account_id " , " date " , " currency " ] , name : " index_account_balances_on_account_id_date_currency_unique " , unique : true
t . index [ " account_id " ] , name : " index_balances_on_account_id "
end
2025-01-16 14:36:37 -05:00
create_table " budget_categories " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " budget_id " , null : false
t . uuid " category_id " , null : false
t . decimal " budgeted_spending " , precision : 19 , scale : 4 , null : false
t . string " currency " , null : false
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " budget_id " , " category_id " ] , name : " index_budget_categories_on_budget_id_and_category_id " , unique : true
t . index [ " budget_id " ] , name : " index_budget_categories_on_budget_id "
t . index [ " category_id " ] , name : " index_budget_categories_on_category_id "
end
create_table " budgets " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " family_id " , null : false
t . date " start_date " , null : false
t . date " end_date " , null : false
t . decimal " budgeted_spending " , precision : 19 , scale : 4
t . decimal " expected_income " , precision : 19 , scale : 4
t . string " currency " , null : false
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " family_id " , " start_date " , " end_date " ] , name : " index_budgets_on_family_id_and_start_date_and_end_date " , unique : true
t . index [ " family_id " ] , name : " index_budgets_on_family_id "
end
2024-06-20 08:15:09 -04:00
create_table " categories " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . string " name " , null : false
t . string " color " , default : " # 6172F3 " , null : false
t . uuid " family_id " , null : false
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-12-20 11:37:26 -05:00
t . uuid " parent_id "
2025-01-16 14:36:37 -05:00
t . string " classification " , default : " expense " , null : false
2025-02-24 21:08:05 +05:00
t . string " lucide_icon " , default : " shapes " , null : false
2024-06-20 08:15:09 -04:00
t . index [ " family_id " ] , name : " index_categories_on_family_id "
end
Personal finance AI (v1) (#2022)
* AI sidebar
* Add chat and message models with associations
* Implement AI chat functionality with sidebar and messaging system
- Add chat and messages controllers
- Create chat and message views
- Implement chat-related routes
- Add message broadcasting and user interactions
- Update application layout to support chat sidebar
- Enhance user model with initials method
* Refactor AI sidebar with enhanced chat menu and interactions
- Update sidebar layout with dynamic width and improved responsiveness
- Add new chat menu Stimulus controller for toggling between chat and chat list views
- Improve chat list display with recent chats and empty state
- Extract AI avatar to a partial for reusability
- Enhance message display and interaction styling
- Add more contextual buttons and interaction hints
* Improve chat scroll behavior and message styling
- Refactor chat scroll functionality with Stimulus controller
- Optimize message scrolling in chat views
- Update message styling for better visual hierarchy
- Enhance chat container layout with flex and auto-scroll
- Simplify message rendering across different chat views
* Extract AI avatar to a shared partial for consistent styling
- Refactor AI avatar rendering across chat views
- Replace hardcoded avatar markup with a reusable partial
- Simplify avatar display in chats and messages views
* Update sidebar controller to handle right panel width dynamically
- Add conditional width class for right sidebar panel
- Ensure consistent sidebar toggle behavior for both left and right panels
- Use specific width class for right panel (w-[375px])
* Refactor chat form and AI greeting with flexible partials
- Extract message form to a reusable partial with dynamic context support
- Create flexible AI greeting partial for consistent welcome messages
- Simplify chat and sidebar views by leveraging new partials
- Add support for different form scenarios (chat, new chat, sidebar)
- Improve code modularity and reduce duplication
* Add chat clearing functionality with dynamic menu options
- Implement clear chat action in ChatsController
- Add clear chat route to support clearing messages
- Update AI sidebar with dropdown menu for chat actions
- Preserve system message when clearing chat
- Enhance chat interaction with new menu options
* Add frontmatter to project structure documentation
- Create initial frontmatter for structure.mdc file
- Include description and configuration options
- Prepare for potential dynamic documentation rendering
* Update general project rules with additional guidelines
- Add rule for using `Current.family` instead of `current_family`
- Include new guidelines for testing, API routes, and solution approach
- Expand project-specific rules for more consistent development practices
* Add OpenAI gem and AI-friendly data representations
- Add `ruby-openai` gem for AI integration
- Implement `to_ai_readable_hash` methods in BalanceSheet and IncomeStatement
- Include Promptable module in both models
- Add savings rate calculation method in IncomeStatement
- Prepare financial models for AI-powered insights and interactions
* Enhance AI Financial Assistant with Advanced Querying and Debugging Capabilities
- Implement comprehensive AI financial query system with function-based interactions
- Add detailed debug logging for AI responses and function calls
- Extend BalanceSheet and IncomeStatement models with AI-friendly methods
- Create robust error handling and fallback mechanisms for AI queries
- Update chat and message views to support debug mode and enhanced rendering
- Add AI query routes and initial test coverage for financial assistant
* Refactor AI sidebar and chat layout with improved structure and comments
- Remove inline AI chat from application layout
- Enhance AI sidebar with more semantic HTML structure
- Add descriptive comments to clarify different sections of chat view
- Improve flex layout and scrolling behavior in chat messages container
- Optimize message rendering with more explicit class names and structure
* Add Markdown rendering support for AI chat messages
- Implement `markdown` helper method in ApplicationHelper using Redcarpet
- Update message view to render AI messages with Markdown formatting
- Add comprehensive Markdown rendering options (tables, code blocks, links)
- Enhance AI Financial Assistant prompt to encourage Markdown usage
- Remove commented Markdown CSS in Tailwind application stylesheet
* Missing comma
* Enhance AI response processing with chat history context
* Improve AI debug logging with payload size limits and internal message flag
* Enhance AI chat interaction with improved thinking indicator and scrolling behavior
* Add AI consent and enable/disable functionality for AI chat
* Upgrade Biome and refactor JavaScript template literals
- Update @biomejs/biome to latest version with caret (^) notation
- Refactor AI query and chat controllers to use template literals
- Standardize npm scripts formatting in package.json
* Add beta testing usage note to AI consent modal
* Update test fixtures and configurations for AI chat functionality
- Add family association to chat fixtures and tests
- Set consistent password digest for test users
- Enable AI for test users
- Add OpenAI access token for test environment
- Update chat and user model tests to include family context
* Simplify data model and get tests passing
* Remove structure.mdc from version control
* Integrate AI chat styles into existing prose pattern
* Match Figma design spec, implement Turbo frames and actions for chats controller
* AI rules refresh
* Consolidate Stimulus controllers, thinking state, controllers, and views
* Naming, domain alignment
* Reset migrations
* Improve data model to support tool calls and message types
* Tool calling tests and fixtures
* Tool call implementation and test
* Get assistant test working again
* Test updates
* Process tool calls within provider
* Chat UI back to working state again
* Remove stale code
* Tests passing
* Update openai class naming to avoid conflicts
* Reconfigure test env
* Rebuild gemfile
* Fix naming conflicts for ChatResponse
* Message styles
* Use OpenAI conversation state management
* Assistant function base implementation
* Add back thinking messages, clean up error handling for chat
* Fix sync error when security price has bad data from provider
* Add balance sheet function to assistant
* Add better function calling error visibility
* Add income statement function
* Simplify and clean up "thinking" interactions with Turbo frames
* Remove stale data definitions from functions
* Ensure VCR fixtures working with latest code
* basic stream implementation
* Get streaming working
* Make AI sidebar wider when left sidebar is collapsed
* Get tests working with streaming responses
* Centralize provider error handling
* Provider data boundaries
---------
Co-authored-by: Josh Pigford <josh@joshpigford.com>
2025-03-28 13:08:22 -04:00
create_table " chats " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " user_id " , null : false
t . string " title " , null : false
t . string " instructions "
t . jsonb " error "
t . string " latest_assistant_response_id "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " user_id " ] , name : " index_chats_on_user_id "
end
2024-06-20 07:26:25 -04:00
create_table " credit_cards " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-10-08 17:16:37 -04:00
t . decimal " available_credit " , precision : 10 , scale : 2
t . decimal " minimum_payment " , precision : 10 , scale : 2
t . decimal " apr " , precision : 10 , scale : 2
t . date " expiration_date "
t . decimal " annual_fee " , precision : 10 , scale : 2
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
2024-06-20 07:26:25 -04:00
end
create_table " cryptos " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
end
create_table " data_enrichments " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . string " enrichable_type " , null : false
t . uuid " enrichable_id " , null : false
t . string " source "
t . string " attribute_name "
t . jsonb " value "
t . jsonb " metadata "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " enrichable_id " , " enrichable_type " , " source " , " attribute_name " ] , name : " idx_on_enrichable_id_enrichable_type_source_attribu_5be5f63e08 " , unique : true
t . index [ " enrichable_type " , " enrichable_id " ] , name : " index_data_enrichments_on_enrichable "
2024-06-20 07:26:25 -04:00
end
create_table " depositories " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
2024-06-20 07:26:25 -04:00
end
2025-04-14 11:40:34 -04:00
create_table " entries " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " account_id " , null : false
t . string " entryable_type "
t . uuid " entryable_id "
t . decimal " amount " , precision : 19 , scale : 4
t . string " currency "
t . date " date "
t . string " name " , null : false
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . uuid " import_id "
t . text " notes "
t . boolean " excluded " , default : false
t . string " plaid_id "
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
2025-04-14 11:40:34 -04:00
t . index [ " account_id " ] , name : " index_entries_on_account_id "
t . index [ " import_id " ] , name : " index_entries_on_import_id "
end
2024-02-10 16:18:56 -06:00
create_table " exchange_rates " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
2024-07-08 09:04:59 -04:00
t . string " from_currency " , null : false
t . string " to_currency " , null : false
2025-03-17 11:54:53 -04:00
t . decimal " rate " , null : false
t . date " date " , null : false
2024-02-10 16:18:56 -06:00
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-07-08 09:04:59 -04:00
t . index [ " from_currency " , " to_currency " , " date " ] , name : " index_exchange_rates_on_base_converted_date_unique " , unique : true
t . index [ " from_currency " ] , name : " index_exchange_rates_on_from_currency "
t . index [ " to_currency " ] , name : " index_exchange_rates_on_to_currency "
2024-02-10 16:18:56 -06:00
end
2024-02-02 09:05:04 -06:00
create_table " families " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . string " name "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-02-10 16:18:56 -06:00
t . string " currency " , default : " USD "
2024-10-02 14:02:17 -04:00
t . string " locale " , default : " en "
2024-10-08 14:37:47 -05:00
t . string " stripe_customer_id "
2024-10-23 11:20:55 -04:00
t . string " date_format " , default : " %m-%d-%Y "
t . string " country " , default : " US "
2024-12-10 17:41:20 -05:00
t . string " timezone "
2024-12-17 09:58:08 -05:00
t . boolean " data_enrichment_enabled " , default : false
2025-05-01 16:47:14 -04:00
t . boolean " early_access " , default : false
2025-05-18 15:02:51 -04:00
t . boolean " auto_sync_on_login " , default : true , null : false
2024-02-10 16:18:56 -06:00
end
2025-04-14 11:40:34 -04:00
create_table " holdings " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " account_id " , null : false
t . uuid " security_id " , null : false
t . date " date " , null : false
t . decimal " qty " , precision : 19 , scale : 4 , null : false
t . decimal " price " , precision : 19 , scale : 4 , null : false
t . decimal " amount " , precision : 19 , scale : 4 , null : false
t . string " currency " , null : false
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " account_id " , " security_id " , " date " , " currency " ] , name : " idx_on_account_id_security_id_date_currency_5323e39f8b " , unique : true
t . index [ " account_id " ] , name : " index_holdings_on_account_id "
t . index [ " security_id " ] , name : " index_holdings_on_security_id "
end
2024-10-17 15:45:13 -05:00
create_table " impersonation_session_logs " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " impersonation_session_id " , null : false
t . string " controller "
t . string " action "
t . text " path "
t . string " method "
t . string " ip_address "
t . text " user_agent "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " impersonation_session_id " ] , name : " index_impersonation_session_logs_on_impersonation_session_id "
end
create_table " impersonation_sessions " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " impersonator_id " , null : false
t . uuid " impersonated_id " , null : false
t . string " status " , default : " pending " , null : false
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " impersonated_id " ] , name : " index_impersonation_sessions_on_impersonated_id "
t . index [ " impersonator_id " ] , name : " index_impersonation_sessions_on_impersonator_id "
end
2024-10-01 10:47:59 -04:00
create_table " import_mappings " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . string " type " , null : false
t . string " key "
t . string " value "
t . boolean " create_when_empty " , default : true
t . uuid " import_id " , null : false
t . string " mappable_type "
t . uuid " mappable_id "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " import_id " ] , name : " index_import_mappings_on_import_id "
t . index [ " mappable_type " , " mappable_id " ] , name : " index_import_mappings_on_mappable "
end
create_table " import_rows " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " import_id " , null : false
t . string " account "
t . string " date "
t . string " qty "
t . string " ticker "
t . string " price "
t . string " amount "
t . string " currency "
t . string " name "
t . string " category "
t . string " tags "
t . string " entity_type "
t . text " notes "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2025-02-24 16:00:24 +01:00
t . string " exchange_operating_mic "
2024-10-01 10:47:59 -04:00
t . index [ " import_id " ] , name : " index_import_rows_on_import_id "
end
2024-05-17 09:09:32 -04:00
create_table " imports " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . jsonb " column_mappings "
2025-02-07 15:36:05 -05:00
t . string " status "
2024-08-19 14:25:07 +01:00
t . string " raw_file_str "
2024-05-17 09:09:32 -04:00
t . string " normalized_csv_str "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-08-16 20:00:16 +02:00
t . string " col_sep " , default : " , "
2024-10-01 10:47:59 -04:00
t . uuid " family_id " , null : false
2025-03-03 12:47:30 -05:00
t . uuid " account_id "
2024-10-01 10:47:59 -04:00
t . string " type " , null : false
2025-04-18 10:48:10 -04:00
t . string " date_col_label "
t . string " amount_col_label "
t . string " name_col_label "
t . string " category_col_label "
t . string " tags_col_label "
t . string " account_col_label "
t . string " qty_col_label "
t . string " ticker_col_label "
t . string " price_col_label "
t . string " entity_type_col_label "
t . string " notes_col_label "
t . string " currency_col_label "
2024-10-01 10:47:59 -04:00
t . string " date_format " , default : " %m/%d/%Y "
t . string " signage_convention " , default : " inflows_positive "
t . string " error "
2025-02-10 16:31:28 -04:00
t . string " number_format "
2025-02-24 16:00:24 +01:00
t . string " exchange_operating_mic_col_label "
2025-04-18 10:48:10 -04:00
t . string " amount_type_strategy " , default : " signed_amount "
t . string " amount_type_inflow_value "
2024-10-01 10:47:59 -04:00
t . index [ " family_id " ] , name : " index_imports_on_family_id "
2024-05-17 09:09:32 -04:00
end
2024-06-20 07:26:25 -04:00
create_table " investments " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
2024-06-20 07:26:25 -04:00
end
2024-11-01 10:23:27 -05:00
create_table " invitations " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . string " email "
t . string " role "
t . string " token "
t . uuid " family_id " , null : false
t . uuid " inviter_id " , null : false
t . datetime " accepted_at "
t . datetime " expires_at "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-11-08 16:58:35 +01:00
t . index [ " email " , " family_id " ] , name : " index_invitations_on_email_and_family_id " , unique : true
2024-11-01 10:23:27 -05:00
t . index [ " email " ] , name : " index_invitations_on_email "
t . index [ " family_id " ] , name : " index_invitations_on_family_id "
t . index [ " inviter_id " ] , name : " index_invitations_on_inviter_id "
t . index [ " token " ] , name : " index_invitations_on_token " , unique : true
end
2024-02-02 17:49:28 -06:00
create_table " invite_codes " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . string " token " , null : false
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-02-02 23:06:31 -06:00
t . index [ " token " ] , name : " index_invite_codes_on_token " , unique : true
2024-02-02 17:49:28 -06:00
end
2024-06-20 07:26:25 -04:00
create_table " loans " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-10-08 17:16:37 -04:00
t . string " rate_type "
2024-11-22 20:28:10 +00:00
t . decimal " interest_rate " , precision : 10 , scale : 3
2024-10-08 17:16:37 -04:00
t . integer " term_months "
2025-04-14 09:09:25 -04:00
t . decimal " initial_balance " , precision : 19 , scale : 4
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
2024-06-20 07:26:25 -04:00
end
2024-06-20 08:38:59 -04:00
create_table " merchants " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . string " name " , null : false
2025-04-18 11:39:58 -04:00
t . string " color "
t . uuid " family_id "
2024-06-20 08:38:59 -04:00
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2025-04-18 11:39:58 -04:00
t . string " logo_url "
t . string " website_url "
t . string " type " , null : false
t . string " source "
t . string " provider_merchant_id "
t . index [ " family_id " , " name " ] , name : " index_merchants_on_family_id_and_name " , unique : true , where : " ((type)::text = 'FamilyMerchant'::text) "
2024-06-20 08:38:59 -04:00
t . index [ " family_id " ] , name : " index_merchants_on_family_id "
2025-04-18 11:39:58 -04:00
t . index [ " source " , " name " ] , name : " index_merchants_on_source_and_name " , unique : true , where : " ((type)::text = 'ProviderMerchant'::text) "
t . index [ " type " ] , name : " index_merchants_on_type "
2024-06-20 08:38:59 -04:00
end
Personal finance AI (v1) (#2022)
* AI sidebar
* Add chat and message models with associations
* Implement AI chat functionality with sidebar and messaging system
- Add chat and messages controllers
- Create chat and message views
- Implement chat-related routes
- Add message broadcasting and user interactions
- Update application layout to support chat sidebar
- Enhance user model with initials method
* Refactor AI sidebar with enhanced chat menu and interactions
- Update sidebar layout with dynamic width and improved responsiveness
- Add new chat menu Stimulus controller for toggling between chat and chat list views
- Improve chat list display with recent chats and empty state
- Extract AI avatar to a partial for reusability
- Enhance message display and interaction styling
- Add more contextual buttons and interaction hints
* Improve chat scroll behavior and message styling
- Refactor chat scroll functionality with Stimulus controller
- Optimize message scrolling in chat views
- Update message styling for better visual hierarchy
- Enhance chat container layout with flex and auto-scroll
- Simplify message rendering across different chat views
* Extract AI avatar to a shared partial for consistent styling
- Refactor AI avatar rendering across chat views
- Replace hardcoded avatar markup with a reusable partial
- Simplify avatar display in chats and messages views
* Update sidebar controller to handle right panel width dynamically
- Add conditional width class for right sidebar panel
- Ensure consistent sidebar toggle behavior for both left and right panels
- Use specific width class for right panel (w-[375px])
* Refactor chat form and AI greeting with flexible partials
- Extract message form to a reusable partial with dynamic context support
- Create flexible AI greeting partial for consistent welcome messages
- Simplify chat and sidebar views by leveraging new partials
- Add support for different form scenarios (chat, new chat, sidebar)
- Improve code modularity and reduce duplication
* Add chat clearing functionality with dynamic menu options
- Implement clear chat action in ChatsController
- Add clear chat route to support clearing messages
- Update AI sidebar with dropdown menu for chat actions
- Preserve system message when clearing chat
- Enhance chat interaction with new menu options
* Add frontmatter to project structure documentation
- Create initial frontmatter for structure.mdc file
- Include description and configuration options
- Prepare for potential dynamic documentation rendering
* Update general project rules with additional guidelines
- Add rule for using `Current.family` instead of `current_family`
- Include new guidelines for testing, API routes, and solution approach
- Expand project-specific rules for more consistent development practices
* Add OpenAI gem and AI-friendly data representations
- Add `ruby-openai` gem for AI integration
- Implement `to_ai_readable_hash` methods in BalanceSheet and IncomeStatement
- Include Promptable module in both models
- Add savings rate calculation method in IncomeStatement
- Prepare financial models for AI-powered insights and interactions
* Enhance AI Financial Assistant with Advanced Querying and Debugging Capabilities
- Implement comprehensive AI financial query system with function-based interactions
- Add detailed debug logging for AI responses and function calls
- Extend BalanceSheet and IncomeStatement models with AI-friendly methods
- Create robust error handling and fallback mechanisms for AI queries
- Update chat and message views to support debug mode and enhanced rendering
- Add AI query routes and initial test coverage for financial assistant
* Refactor AI sidebar and chat layout with improved structure and comments
- Remove inline AI chat from application layout
- Enhance AI sidebar with more semantic HTML structure
- Add descriptive comments to clarify different sections of chat view
- Improve flex layout and scrolling behavior in chat messages container
- Optimize message rendering with more explicit class names and structure
* Add Markdown rendering support for AI chat messages
- Implement `markdown` helper method in ApplicationHelper using Redcarpet
- Update message view to render AI messages with Markdown formatting
- Add comprehensive Markdown rendering options (tables, code blocks, links)
- Enhance AI Financial Assistant prompt to encourage Markdown usage
- Remove commented Markdown CSS in Tailwind application stylesheet
* Missing comma
* Enhance AI response processing with chat history context
* Improve AI debug logging with payload size limits and internal message flag
* Enhance AI chat interaction with improved thinking indicator and scrolling behavior
* Add AI consent and enable/disable functionality for AI chat
* Upgrade Biome and refactor JavaScript template literals
- Update @biomejs/biome to latest version with caret (^) notation
- Refactor AI query and chat controllers to use template literals
- Standardize npm scripts formatting in package.json
* Add beta testing usage note to AI consent modal
* Update test fixtures and configurations for AI chat functionality
- Add family association to chat fixtures and tests
- Set consistent password digest for test users
- Enable AI for test users
- Add OpenAI access token for test environment
- Update chat and user model tests to include family context
* Simplify data model and get tests passing
* Remove structure.mdc from version control
* Integrate AI chat styles into existing prose pattern
* Match Figma design spec, implement Turbo frames and actions for chats controller
* AI rules refresh
* Consolidate Stimulus controllers, thinking state, controllers, and views
* Naming, domain alignment
* Reset migrations
* Improve data model to support tool calls and message types
* Tool calling tests and fixtures
* Tool call implementation and test
* Get assistant test working again
* Test updates
* Process tool calls within provider
* Chat UI back to working state again
* Remove stale code
* Tests passing
* Update openai class naming to avoid conflicts
* Reconfigure test env
* Rebuild gemfile
* Fix naming conflicts for ChatResponse
* Message styles
* Use OpenAI conversation state management
* Assistant function base implementation
* Add back thinking messages, clean up error handling for chat
* Fix sync error when security price has bad data from provider
* Add balance sheet function to assistant
* Add better function calling error visibility
* Add income statement function
* Simplify and clean up "thinking" interactions with Turbo frames
* Remove stale data definitions from functions
* Ensure VCR fixtures working with latest code
* basic stream implementation
* Get streaming working
* Make AI sidebar wider when left sidebar is collapsed
* Get tests working with streaming responses
* Centralize provider error handling
* Provider data boundaries
---------
Co-authored-by: Josh Pigford <josh@joshpigford.com>
2025-03-28 13:08:22 -04:00
create_table " messages " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " chat_id " , null : false
t . string " type " , null : false
t . string " status " , default : " complete " , null : false
t . text " content "
t . string " ai_model "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . boolean " debug " , default : false
t . string " provider_id "
t . boolean " reasoning " , default : false
t . index [ " chat_id " ] , name : " index_messages_on_chat_id "
end
2024-06-20 07:26:25 -04:00
create_table " other_assets " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
2024-06-20 07:26:25 -04:00
end
create_table " other_liabilities " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
2024-06-20 07:26:25 -04:00
end
2024-11-15 13:49:37 -05:00
create_table " plaid_accounts " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " plaid_item_id " , null : false
t . string " plaid_id "
t . string " plaid_type "
t . string " plaid_subtype "
t . decimal " current_balance " , precision : 19 , scale : 4
t . decimal " available_balance " , precision : 19 , scale : 4
t . string " currency "
t . string " name "
t . string " mask "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " plaid_item_id " ] , name : " index_plaid_accounts_on_plaid_item_id "
end
create_table " plaid_items " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " family_id " , null : false
t . string " access_token "
t . string " plaid_id "
t . string " name "
t . string " next_cursor "
t . boolean " scheduled_for_deletion " , default : false
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . string " available_products " , default : [ ] , array : true
t . string " billed_products " , default : [ ] , array : true
2025-01-31 12:13:58 -06:00
t . string " plaid_region " , default : " us " , null : false
2025-02-06 08:57:24 -06:00
t . string " institution_url "
t . string " institution_id "
t . string " institution_color "
2025-02-12 12:59:35 -06:00
t . string " status " , default : " good " , null : false
2024-11-15 13:49:37 -05:00
t . index [ " family_id " ] , name : " index_plaid_items_on_family_id "
end
2024-06-20 07:26:25 -04:00
create_table " properties " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-08-23 08:47:08 -04:00
t . integer " year_built "
t . integer " area_value "
t . string " area_unit "
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
2024-06-20 07:26:25 -04:00
end
2025-01-27 16:56:46 -05:00
create_table " rejected_transfers " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " inflow_transaction_id " , null : false
t . uuid " outflow_transaction_id " , null : false
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " inflow_transaction_id " , " outflow_transaction_id " ] , name : " idx_on_inflow_transaction_id_outflow_transaction_id_412f8e7e26 " , unique : true
t . index [ " inflow_transaction_id " ] , name : " index_rejected_transfers_on_inflow_transaction_id "
t . index [ " outflow_transaction_id " ] , name : " index_rejected_transfers_on_outflow_transaction_id "
end
2025-04-18 11:39:58 -04:00
create_table " rule_actions " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " rule_id " , null : false
t . string " action_type " , null : false
t . string " value "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " rule_id " ] , name : " index_rule_actions_on_rule_id "
end
create_table " rule_conditions " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " rule_id "
t . uuid " parent_id "
t . string " condition_type " , null : false
t . string " operator " , null : false
t . string " value "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " parent_id " ] , name : " index_rule_conditions_on_parent_id "
t . index [ " rule_id " ] , name : " index_rule_conditions_on_rule_id "
end
create_table " rules " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " family_id " , null : false
t . string " resource_type " , null : false
t . date " effective_date "
t . boolean " active " , default : false , null : false
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2025-05-13 14:53:13 -05:00
t . string " name "
2025-04-18 11:39:58 -04:00
t . index [ " family_id " ] , name : " index_rules_on_family_id "
end
2024-07-16 09:26:49 -04:00
create_table " securities " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
2025-02-11 10:40:30 -06:00
t . string " ticker " , null : false
2024-07-16 09:26:49 -04:00
t . string " name "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-10-24 16:36:50 -05:00
t . string " country_code "
2024-10-25 13:09:02 -05:00
t . string " exchange_mic "
t . string " exchange_acronym "
2024-11-27 16:01:50 -05:00
t . string " logo_url "
2025-02-11 10:40:30 -06:00
t . string " exchange_operating_mic "
2025-05-22 12:43:24 -04:00
t . boolean " offline " , default : false , null : false
t . datetime " failed_fetch_at "
t . integer " failed_fetch_count " , default : 0 , null : false
t . datetime " last_health_check_at "
2024-10-24 16:36:50 -05:00
t . index [ " country_code " ] , name : " index_securities_on_country_code "
2025-02-11 10:40:30 -06:00
t . index [ " exchange_operating_mic " ] , name : " index_securities_on_exchange_operating_mic "
t . index [ " ticker " , " exchange_operating_mic " ] , name : " index_securities_on_ticker_and_exchange_operating_mic " , unique : true
2024-07-16 09:26:49 -04:00
end
create_table " security_prices " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
2025-03-17 11:54:53 -04:00
t . date " date " , null : false
t . decimal " price " , precision : 19 , scale : 4 , null : false
t . string " currency " , default : " USD " , null : false
2024-07-16 09:26:49 -04:00
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-10-29 15:37:59 -04:00
t . uuid " security_id "
2025-03-17 11:54:53 -04:00
t . index [ " security_id " , " date " , " currency " ] , name : " index_security_prices_on_security_id_and_date_and_currency " , unique : true
2024-10-29 15:37:59 -04:00
t . index [ " security_id " ] , name : " index_security_prices_on_security_id "
2024-07-16 09:26:49 -04:00
end
2024-10-03 14:42:22 -04:00
create_table " sessions " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " user_id " , null : false
t . string " user_agent "
t . string " ip_address "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-10-18 11:26:58 -05:00
t . uuid " active_impersonator_session_id "
2024-10-24 11:02:27 -04:00
t . datetime " subscribed_at "
2025-01-30 14:12:01 -05:00
t . jsonb " prev_transaction_page_params " , default : { }
2025-05-15 10:19:56 -04:00
t . jsonb " data " , default : { }
2024-10-18 11:26:58 -05:00
t . index [ " active_impersonator_session_id " ] , name : " index_sessions_on_active_impersonator_session_id "
2024-10-03 14:42:22 -04:00
t . index [ " user_id " ] , name : " index_sessions_on_user_id "
end
2024-04-13 09:28:45 -04:00
create_table " settings " , force : :cascade do | t |
t . string " var " , null : false
t . text " value "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " var " ] , name : " index_settings_on_var " , unique : true
end
2025-05-06 14:05:21 -04:00
create_table " subscriptions " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " family_id " , null : false
t . string " status " , null : false
t . string " stripe_id "
t . decimal " amount " , precision : 19 , scale : 4
t . string " currency "
t . string " interval "
t . datetime " current_period_ends_at "
t . datetime " trial_ends_at "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2025-05-13 08:32:53 -04:00
t . index [ " family_id " ] , name : " index_subscriptions_on_family_id " , unique : true
2025-05-06 14:05:21 -04:00
end
2024-11-15 13:49:37 -05:00
create_table " syncs " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . string " syncable_type " , null : false
t . uuid " syncable_id " , null : false
t . string " status " , default : " pending "
t . string " error "
t . jsonb " data "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2025-04-11 12:13:46 -04:00
t . uuid " parent_id "
2025-05-15 10:19:56 -04:00
t . datetime " pending_at "
t . datetime " syncing_at "
t . datetime " completed_at "
t . datetime " failed_at "
t . date " window_start_date "
t . date " window_end_date "
2025-04-11 12:13:46 -04:00
t . index [ " parent_id " ] , name : " index_syncs_on_parent_id "
2024-11-15 13:49:37 -05:00
t . index [ " syncable_type " , " syncable_id " ] , name : " index_syncs_on_syncable "
end
2024-05-23 08:09:33 -04:00
create_table " taggings " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " tag_id " , null : false
t . string " taggable_type "
t . uuid " taggable_id "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " tag_id " ] , name : " index_taggings_on_tag_id "
t . index [ " taggable_type " , " taggable_id " ] , name : " index_taggings_on_taggable "
end
create_table " tags " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . string " name "
t . string " color " , default : " # e99537 " , null : false
t . uuid " family_id " , null : false
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " family_id " ] , name : " index_tags_on_family_id "
end
Personal finance AI (v1) (#2022)
* AI sidebar
* Add chat and message models with associations
* Implement AI chat functionality with sidebar and messaging system
- Add chat and messages controllers
- Create chat and message views
- Implement chat-related routes
- Add message broadcasting and user interactions
- Update application layout to support chat sidebar
- Enhance user model with initials method
* Refactor AI sidebar with enhanced chat menu and interactions
- Update sidebar layout with dynamic width and improved responsiveness
- Add new chat menu Stimulus controller for toggling between chat and chat list views
- Improve chat list display with recent chats and empty state
- Extract AI avatar to a partial for reusability
- Enhance message display and interaction styling
- Add more contextual buttons and interaction hints
* Improve chat scroll behavior and message styling
- Refactor chat scroll functionality with Stimulus controller
- Optimize message scrolling in chat views
- Update message styling for better visual hierarchy
- Enhance chat container layout with flex and auto-scroll
- Simplify message rendering across different chat views
* Extract AI avatar to a shared partial for consistent styling
- Refactor AI avatar rendering across chat views
- Replace hardcoded avatar markup with a reusable partial
- Simplify avatar display in chats and messages views
* Update sidebar controller to handle right panel width dynamically
- Add conditional width class for right sidebar panel
- Ensure consistent sidebar toggle behavior for both left and right panels
- Use specific width class for right panel (w-[375px])
* Refactor chat form and AI greeting with flexible partials
- Extract message form to a reusable partial with dynamic context support
- Create flexible AI greeting partial for consistent welcome messages
- Simplify chat and sidebar views by leveraging new partials
- Add support for different form scenarios (chat, new chat, sidebar)
- Improve code modularity and reduce duplication
* Add chat clearing functionality with dynamic menu options
- Implement clear chat action in ChatsController
- Add clear chat route to support clearing messages
- Update AI sidebar with dropdown menu for chat actions
- Preserve system message when clearing chat
- Enhance chat interaction with new menu options
* Add frontmatter to project structure documentation
- Create initial frontmatter for structure.mdc file
- Include description and configuration options
- Prepare for potential dynamic documentation rendering
* Update general project rules with additional guidelines
- Add rule for using `Current.family` instead of `current_family`
- Include new guidelines for testing, API routes, and solution approach
- Expand project-specific rules for more consistent development practices
* Add OpenAI gem and AI-friendly data representations
- Add `ruby-openai` gem for AI integration
- Implement `to_ai_readable_hash` methods in BalanceSheet and IncomeStatement
- Include Promptable module in both models
- Add savings rate calculation method in IncomeStatement
- Prepare financial models for AI-powered insights and interactions
* Enhance AI Financial Assistant with Advanced Querying and Debugging Capabilities
- Implement comprehensive AI financial query system with function-based interactions
- Add detailed debug logging for AI responses and function calls
- Extend BalanceSheet and IncomeStatement models with AI-friendly methods
- Create robust error handling and fallback mechanisms for AI queries
- Update chat and message views to support debug mode and enhanced rendering
- Add AI query routes and initial test coverage for financial assistant
* Refactor AI sidebar and chat layout with improved structure and comments
- Remove inline AI chat from application layout
- Enhance AI sidebar with more semantic HTML structure
- Add descriptive comments to clarify different sections of chat view
- Improve flex layout and scrolling behavior in chat messages container
- Optimize message rendering with more explicit class names and structure
* Add Markdown rendering support for AI chat messages
- Implement `markdown` helper method in ApplicationHelper using Redcarpet
- Update message view to render AI messages with Markdown formatting
- Add comprehensive Markdown rendering options (tables, code blocks, links)
- Enhance AI Financial Assistant prompt to encourage Markdown usage
- Remove commented Markdown CSS in Tailwind application stylesheet
* Missing comma
* Enhance AI response processing with chat history context
* Improve AI debug logging with payload size limits and internal message flag
* Enhance AI chat interaction with improved thinking indicator and scrolling behavior
* Add AI consent and enable/disable functionality for AI chat
* Upgrade Biome and refactor JavaScript template literals
- Update @biomejs/biome to latest version with caret (^) notation
- Refactor AI query and chat controllers to use template literals
- Standardize npm scripts formatting in package.json
* Add beta testing usage note to AI consent modal
* Update test fixtures and configurations for AI chat functionality
- Add family association to chat fixtures and tests
- Set consistent password digest for test users
- Enable AI for test users
- Add OpenAI access token for test environment
- Update chat and user model tests to include family context
* Simplify data model and get tests passing
* Remove structure.mdc from version control
* Integrate AI chat styles into existing prose pattern
* Match Figma design spec, implement Turbo frames and actions for chats controller
* AI rules refresh
* Consolidate Stimulus controllers, thinking state, controllers, and views
* Naming, domain alignment
* Reset migrations
* Improve data model to support tool calls and message types
* Tool calling tests and fixtures
* Tool call implementation and test
* Get assistant test working again
* Test updates
* Process tool calls within provider
* Chat UI back to working state again
* Remove stale code
* Tests passing
* Update openai class naming to avoid conflicts
* Reconfigure test env
* Rebuild gemfile
* Fix naming conflicts for ChatResponse
* Message styles
* Use OpenAI conversation state management
* Assistant function base implementation
* Add back thinking messages, clean up error handling for chat
* Fix sync error when security price has bad data from provider
* Add balance sheet function to assistant
* Add better function calling error visibility
* Add income statement function
* Simplify and clean up "thinking" interactions with Turbo frames
* Remove stale data definitions from functions
* Ensure VCR fixtures working with latest code
* basic stream implementation
* Get streaming working
* Make AI sidebar wider when left sidebar is collapsed
* Get tests working with streaming responses
* Centralize provider error handling
* Provider data boundaries
---------
Co-authored-by: Josh Pigford <josh@joshpigford.com>
2025-03-28 13:08:22 -04:00
create_table " tool_calls " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " message_id " , null : false
t . string " provider_id " , null : false
t . string " provider_call_id "
t . string " type " , null : false
t . string " function_name "
t . jsonb " function_arguments "
t . jsonb " function_result "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " message_id " ] , name : " index_tool_calls_on_message_id "
end
2025-04-14 11:40:34 -04:00
create_table " trades " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " security_id " , null : false
t . decimal " qty " , precision : 19 , scale : 4
t . decimal " price " , precision : 19 , scale : 4
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . string " currency "
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
2025-04-14 11:40:34 -04:00
t . index [ " security_id " ] , name : " index_trades_on_security_id "
end
create_table " transactions " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . uuid " category_id "
t . uuid " merchant_id "
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
t . string " plaid_category "
t . string " plaid_category_detailed "
2025-04-14 11:40:34 -04:00
t . index [ " category_id " ] , name : " index_transactions_on_category_id "
t . index [ " merchant_id " ] , name : " index_transactions_on_merchant_id "
end
2025-01-07 09:41:24 -05:00
create_table " transfers " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " inflow_transaction_id " , null : false
t . uuid " outflow_transaction_id " , null : false
t . string " status " , default : " pending " , null : false
t . text " notes "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
t . index [ " inflow_transaction_id " , " outflow_transaction_id " ] , name : " idx_on_inflow_transaction_id_outflow_transaction_id_8cd07a28bd " , unique : true
t . index [ " inflow_transaction_id " ] , name : " index_transfers_on_inflow_transaction_id "
t . index [ " outflow_transaction_id " ] , name : " index_transfers_on_outflow_transaction_id "
end
2024-02-02 09:05:04 -06:00
create_table " users " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . uuid " family_id " , null : false
t . string " first_name "
t . string " last_name "
t . string " email "
t . string " password_digest "
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-10-18 17:18:54 -04:00
t . string " role " , default : " member " , null : false
2024-04-30 16:40:31 +01:00
t . boolean " active " , default : true , null : false
2024-10-23 11:20:55 -04:00
t . datetime " onboarded_at "
2025-01-31 11:29:49 -06:00
t . string " unconfirmed_email "
2025-02-06 14:16:53 -06:00
t . string " otp_secret "
t . boolean " otp_required " , default : false , null : false
t . string " otp_backup_codes " , default : [ ] , array : true
2025-02-21 11:57:59 -05:00
t . boolean " show_sidebar " , default : true
2025-03-07 20:35:54 +05:30
t . string " default_period " , default : " last_30_days " , null : false
Personal finance AI (v1) (#2022)
* AI sidebar
* Add chat and message models with associations
* Implement AI chat functionality with sidebar and messaging system
- Add chat and messages controllers
- Create chat and message views
- Implement chat-related routes
- Add message broadcasting and user interactions
- Update application layout to support chat sidebar
- Enhance user model with initials method
* Refactor AI sidebar with enhanced chat menu and interactions
- Update sidebar layout with dynamic width and improved responsiveness
- Add new chat menu Stimulus controller for toggling between chat and chat list views
- Improve chat list display with recent chats and empty state
- Extract AI avatar to a partial for reusability
- Enhance message display and interaction styling
- Add more contextual buttons and interaction hints
* Improve chat scroll behavior and message styling
- Refactor chat scroll functionality with Stimulus controller
- Optimize message scrolling in chat views
- Update message styling for better visual hierarchy
- Enhance chat container layout with flex and auto-scroll
- Simplify message rendering across different chat views
* Extract AI avatar to a shared partial for consistent styling
- Refactor AI avatar rendering across chat views
- Replace hardcoded avatar markup with a reusable partial
- Simplify avatar display in chats and messages views
* Update sidebar controller to handle right panel width dynamically
- Add conditional width class for right sidebar panel
- Ensure consistent sidebar toggle behavior for both left and right panels
- Use specific width class for right panel (w-[375px])
* Refactor chat form and AI greeting with flexible partials
- Extract message form to a reusable partial with dynamic context support
- Create flexible AI greeting partial for consistent welcome messages
- Simplify chat and sidebar views by leveraging new partials
- Add support for different form scenarios (chat, new chat, sidebar)
- Improve code modularity and reduce duplication
* Add chat clearing functionality with dynamic menu options
- Implement clear chat action in ChatsController
- Add clear chat route to support clearing messages
- Update AI sidebar with dropdown menu for chat actions
- Preserve system message when clearing chat
- Enhance chat interaction with new menu options
* Add frontmatter to project structure documentation
- Create initial frontmatter for structure.mdc file
- Include description and configuration options
- Prepare for potential dynamic documentation rendering
* Update general project rules with additional guidelines
- Add rule for using `Current.family` instead of `current_family`
- Include new guidelines for testing, API routes, and solution approach
- Expand project-specific rules for more consistent development practices
* Add OpenAI gem and AI-friendly data representations
- Add `ruby-openai` gem for AI integration
- Implement `to_ai_readable_hash` methods in BalanceSheet and IncomeStatement
- Include Promptable module in both models
- Add savings rate calculation method in IncomeStatement
- Prepare financial models for AI-powered insights and interactions
* Enhance AI Financial Assistant with Advanced Querying and Debugging Capabilities
- Implement comprehensive AI financial query system with function-based interactions
- Add detailed debug logging for AI responses and function calls
- Extend BalanceSheet and IncomeStatement models with AI-friendly methods
- Create robust error handling and fallback mechanisms for AI queries
- Update chat and message views to support debug mode and enhanced rendering
- Add AI query routes and initial test coverage for financial assistant
* Refactor AI sidebar and chat layout with improved structure and comments
- Remove inline AI chat from application layout
- Enhance AI sidebar with more semantic HTML structure
- Add descriptive comments to clarify different sections of chat view
- Improve flex layout and scrolling behavior in chat messages container
- Optimize message rendering with more explicit class names and structure
* Add Markdown rendering support for AI chat messages
- Implement `markdown` helper method in ApplicationHelper using Redcarpet
- Update message view to render AI messages with Markdown formatting
- Add comprehensive Markdown rendering options (tables, code blocks, links)
- Enhance AI Financial Assistant prompt to encourage Markdown usage
- Remove commented Markdown CSS in Tailwind application stylesheet
* Missing comma
* Enhance AI response processing with chat history context
* Improve AI debug logging with payload size limits and internal message flag
* Enhance AI chat interaction with improved thinking indicator and scrolling behavior
* Add AI consent and enable/disable functionality for AI chat
* Upgrade Biome and refactor JavaScript template literals
- Update @biomejs/biome to latest version with caret (^) notation
- Refactor AI query and chat controllers to use template literals
- Standardize npm scripts formatting in package.json
* Add beta testing usage note to AI consent modal
* Update test fixtures and configurations for AI chat functionality
- Add family association to chat fixtures and tests
- Set consistent password digest for test users
- Enable AI for test users
- Add OpenAI access token for test environment
- Update chat and user model tests to include family context
* Simplify data model and get tests passing
* Remove structure.mdc from version control
* Integrate AI chat styles into existing prose pattern
* Match Figma design spec, implement Turbo frames and actions for chats controller
* AI rules refresh
* Consolidate Stimulus controllers, thinking state, controllers, and views
* Naming, domain alignment
* Reset migrations
* Improve data model to support tool calls and message types
* Tool calling tests and fixtures
* Tool call implementation and test
* Get assistant test working again
* Test updates
* Process tool calls within provider
* Chat UI back to working state again
* Remove stale code
* Tests passing
* Update openai class naming to avoid conflicts
* Reconfigure test env
* Rebuild gemfile
* Fix naming conflicts for ChatResponse
* Message styles
* Use OpenAI conversation state management
* Assistant function base implementation
* Add back thinking messages, clean up error handling for chat
* Fix sync error when security price has bad data from provider
* Add balance sheet function to assistant
* Add better function calling error visibility
* Add income statement function
* Simplify and clean up "thinking" interactions with Turbo frames
* Remove stale data definitions from functions
* Ensure VCR fixtures working with latest code
* basic stream implementation
* Get streaming working
* Make AI sidebar wider when left sidebar is collapsed
* Get tests working with streaming responses
* Centralize provider error handling
* Provider data boundaries
---------
Co-authored-by: Josh Pigford <josh@joshpigford.com>
2025-03-28 13:08:22 -04:00
t . uuid " last_viewed_chat_id "
t . boolean " show_ai_sidebar " , default : true
t . boolean " ai_enabled " , default : false , null : false
2025-04-11 09:28:00 -05:00
t . string " theme " , default : " system "
2025-04-18 11:39:58 -04:00
t . boolean " rule_prompts_disabled " , default : false
t . datetime " rule_prompt_dismissed_at "
2025-05-01 16:47:14 -04:00
t . text " goals " , default : [ ] , array : true
t . datetime " set_onboarding_preferences_at "
t . datetime " set_onboarding_goals_at "
2024-03-25 20:59:49 +01:00
t . index [ " email " ] , name : " index_users_on_email " , unique : true
2024-02-02 09:05:04 -06:00
t . index [ " family_id " ] , name : " index_users_on_family_id "
Personal finance AI (v1) (#2022)
* AI sidebar
* Add chat and message models with associations
* Implement AI chat functionality with sidebar and messaging system
- Add chat and messages controllers
- Create chat and message views
- Implement chat-related routes
- Add message broadcasting and user interactions
- Update application layout to support chat sidebar
- Enhance user model with initials method
* Refactor AI sidebar with enhanced chat menu and interactions
- Update sidebar layout with dynamic width and improved responsiveness
- Add new chat menu Stimulus controller for toggling between chat and chat list views
- Improve chat list display with recent chats and empty state
- Extract AI avatar to a partial for reusability
- Enhance message display and interaction styling
- Add more contextual buttons and interaction hints
* Improve chat scroll behavior and message styling
- Refactor chat scroll functionality with Stimulus controller
- Optimize message scrolling in chat views
- Update message styling for better visual hierarchy
- Enhance chat container layout with flex and auto-scroll
- Simplify message rendering across different chat views
* Extract AI avatar to a shared partial for consistent styling
- Refactor AI avatar rendering across chat views
- Replace hardcoded avatar markup with a reusable partial
- Simplify avatar display in chats and messages views
* Update sidebar controller to handle right panel width dynamically
- Add conditional width class for right sidebar panel
- Ensure consistent sidebar toggle behavior for both left and right panels
- Use specific width class for right panel (w-[375px])
* Refactor chat form and AI greeting with flexible partials
- Extract message form to a reusable partial with dynamic context support
- Create flexible AI greeting partial for consistent welcome messages
- Simplify chat and sidebar views by leveraging new partials
- Add support for different form scenarios (chat, new chat, sidebar)
- Improve code modularity and reduce duplication
* Add chat clearing functionality with dynamic menu options
- Implement clear chat action in ChatsController
- Add clear chat route to support clearing messages
- Update AI sidebar with dropdown menu for chat actions
- Preserve system message when clearing chat
- Enhance chat interaction with new menu options
* Add frontmatter to project structure documentation
- Create initial frontmatter for structure.mdc file
- Include description and configuration options
- Prepare for potential dynamic documentation rendering
* Update general project rules with additional guidelines
- Add rule for using `Current.family` instead of `current_family`
- Include new guidelines for testing, API routes, and solution approach
- Expand project-specific rules for more consistent development practices
* Add OpenAI gem and AI-friendly data representations
- Add `ruby-openai` gem for AI integration
- Implement `to_ai_readable_hash` methods in BalanceSheet and IncomeStatement
- Include Promptable module in both models
- Add savings rate calculation method in IncomeStatement
- Prepare financial models for AI-powered insights and interactions
* Enhance AI Financial Assistant with Advanced Querying and Debugging Capabilities
- Implement comprehensive AI financial query system with function-based interactions
- Add detailed debug logging for AI responses and function calls
- Extend BalanceSheet and IncomeStatement models with AI-friendly methods
- Create robust error handling and fallback mechanisms for AI queries
- Update chat and message views to support debug mode and enhanced rendering
- Add AI query routes and initial test coverage for financial assistant
* Refactor AI sidebar and chat layout with improved structure and comments
- Remove inline AI chat from application layout
- Enhance AI sidebar with more semantic HTML structure
- Add descriptive comments to clarify different sections of chat view
- Improve flex layout and scrolling behavior in chat messages container
- Optimize message rendering with more explicit class names and structure
* Add Markdown rendering support for AI chat messages
- Implement `markdown` helper method in ApplicationHelper using Redcarpet
- Update message view to render AI messages with Markdown formatting
- Add comprehensive Markdown rendering options (tables, code blocks, links)
- Enhance AI Financial Assistant prompt to encourage Markdown usage
- Remove commented Markdown CSS in Tailwind application stylesheet
* Missing comma
* Enhance AI response processing with chat history context
* Improve AI debug logging with payload size limits and internal message flag
* Enhance AI chat interaction with improved thinking indicator and scrolling behavior
* Add AI consent and enable/disable functionality for AI chat
* Upgrade Biome and refactor JavaScript template literals
- Update @biomejs/biome to latest version with caret (^) notation
- Refactor AI query and chat controllers to use template literals
- Standardize npm scripts formatting in package.json
* Add beta testing usage note to AI consent modal
* Update test fixtures and configurations for AI chat functionality
- Add family association to chat fixtures and tests
- Set consistent password digest for test users
- Enable AI for test users
- Add OpenAI access token for test environment
- Update chat and user model tests to include family context
* Simplify data model and get tests passing
* Remove structure.mdc from version control
* Integrate AI chat styles into existing prose pattern
* Match Figma design spec, implement Turbo frames and actions for chats controller
* AI rules refresh
* Consolidate Stimulus controllers, thinking state, controllers, and views
* Naming, domain alignment
* Reset migrations
* Improve data model to support tool calls and message types
* Tool calling tests and fixtures
* Tool call implementation and test
* Get assistant test working again
* Test updates
* Process tool calls within provider
* Chat UI back to working state again
* Remove stale code
* Tests passing
* Update openai class naming to avoid conflicts
* Reconfigure test env
* Rebuild gemfile
* Fix naming conflicts for ChatResponse
* Message styles
* Use OpenAI conversation state management
* Assistant function base implementation
* Add back thinking messages, clean up error handling for chat
* Fix sync error when security price has bad data from provider
* Add balance sheet function to assistant
* Add better function calling error visibility
* Add income statement function
* Simplify and clean up "thinking" interactions with Turbo frames
* Remove stale data definitions from functions
* Ensure VCR fixtures working with latest code
* basic stream implementation
* Get streaming working
* Make AI sidebar wider when left sidebar is collapsed
* Get tests working with streaming responses
* Centralize provider error handling
* Provider data boundaries
---------
Co-authored-by: Josh Pigford <josh@joshpigford.com>
2025-03-28 13:08:22 -04:00
t . index [ " last_viewed_chat_id " ] , name : " index_users_on_last_viewed_chat_id "
2025-02-06 14:16:53 -06:00
t . index [ " otp_secret " ] , name : " index_users_on_otp_secret " , unique : true , where : " (otp_secret IS NOT NULL) "
2024-02-02 09:05:04 -06:00
end
2025-04-14 11:40:34 -04:00
create_table " valuations " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
2025-04-14 11:40:34 -04:00
end
2024-06-20 07:26:25 -04:00
create_table " vehicles " , id : :uuid , default : - > { " gen_random_uuid() " } , force : :cascade do | t |
t . datetime " created_at " , null : false
t . datetime " updated_at " , null : false
2024-08-23 09:33:42 -04:00
t . integer " year "
t . integer " mileage_value "
t . string " mileage_unit "
t . string " make "
t . string " model "
2025-04-18 11:39:58 -04:00
t . jsonb " locked_attributes " , default : { }
2024-06-20 07:26:25 -04:00
end
2024-02-02 09:05:04 -06:00
add_foreign_key " accounts " , " families "
2024-10-01 10:47:59 -04:00
add_foreign_key " accounts " , " imports "
2024-11-15 13:49:37 -05:00
add_foreign_key " accounts " , " plaid_accounts "
2024-04-30 18:38:33 +01:00
add_foreign_key " active_storage_attachments " , " active_storage_blobs " , column : " blob_id "
add_foreign_key " active_storage_variant_records " , " active_storage_blobs " , column : " blob_id "
2025-04-14 11:40:34 -04:00
add_foreign_key " balances " , " accounts " , on_delete : :cascade
2025-01-16 14:36:37 -05:00
add_foreign_key " budget_categories " , " budgets "
add_foreign_key " budget_categories " , " categories "
add_foreign_key " budgets " , " families "
2024-06-20 08:15:09 -04:00
add_foreign_key " categories " , " families "
Personal finance AI (v1) (#2022)
* AI sidebar
* Add chat and message models with associations
* Implement AI chat functionality with sidebar and messaging system
- Add chat and messages controllers
- Create chat and message views
- Implement chat-related routes
- Add message broadcasting and user interactions
- Update application layout to support chat sidebar
- Enhance user model with initials method
* Refactor AI sidebar with enhanced chat menu and interactions
- Update sidebar layout with dynamic width and improved responsiveness
- Add new chat menu Stimulus controller for toggling between chat and chat list views
- Improve chat list display with recent chats and empty state
- Extract AI avatar to a partial for reusability
- Enhance message display and interaction styling
- Add more contextual buttons and interaction hints
* Improve chat scroll behavior and message styling
- Refactor chat scroll functionality with Stimulus controller
- Optimize message scrolling in chat views
- Update message styling for better visual hierarchy
- Enhance chat container layout with flex and auto-scroll
- Simplify message rendering across different chat views
* Extract AI avatar to a shared partial for consistent styling
- Refactor AI avatar rendering across chat views
- Replace hardcoded avatar markup with a reusable partial
- Simplify avatar display in chats and messages views
* Update sidebar controller to handle right panel width dynamically
- Add conditional width class for right sidebar panel
- Ensure consistent sidebar toggle behavior for both left and right panels
- Use specific width class for right panel (w-[375px])
* Refactor chat form and AI greeting with flexible partials
- Extract message form to a reusable partial with dynamic context support
- Create flexible AI greeting partial for consistent welcome messages
- Simplify chat and sidebar views by leveraging new partials
- Add support for different form scenarios (chat, new chat, sidebar)
- Improve code modularity and reduce duplication
* Add chat clearing functionality with dynamic menu options
- Implement clear chat action in ChatsController
- Add clear chat route to support clearing messages
- Update AI sidebar with dropdown menu for chat actions
- Preserve system message when clearing chat
- Enhance chat interaction with new menu options
* Add frontmatter to project structure documentation
- Create initial frontmatter for structure.mdc file
- Include description and configuration options
- Prepare for potential dynamic documentation rendering
* Update general project rules with additional guidelines
- Add rule for using `Current.family` instead of `current_family`
- Include new guidelines for testing, API routes, and solution approach
- Expand project-specific rules for more consistent development practices
* Add OpenAI gem and AI-friendly data representations
- Add `ruby-openai` gem for AI integration
- Implement `to_ai_readable_hash` methods in BalanceSheet and IncomeStatement
- Include Promptable module in both models
- Add savings rate calculation method in IncomeStatement
- Prepare financial models for AI-powered insights and interactions
* Enhance AI Financial Assistant with Advanced Querying and Debugging Capabilities
- Implement comprehensive AI financial query system with function-based interactions
- Add detailed debug logging for AI responses and function calls
- Extend BalanceSheet and IncomeStatement models with AI-friendly methods
- Create robust error handling and fallback mechanisms for AI queries
- Update chat and message views to support debug mode and enhanced rendering
- Add AI query routes and initial test coverage for financial assistant
* Refactor AI sidebar and chat layout with improved structure and comments
- Remove inline AI chat from application layout
- Enhance AI sidebar with more semantic HTML structure
- Add descriptive comments to clarify different sections of chat view
- Improve flex layout and scrolling behavior in chat messages container
- Optimize message rendering with more explicit class names and structure
* Add Markdown rendering support for AI chat messages
- Implement `markdown` helper method in ApplicationHelper using Redcarpet
- Update message view to render AI messages with Markdown formatting
- Add comprehensive Markdown rendering options (tables, code blocks, links)
- Enhance AI Financial Assistant prompt to encourage Markdown usage
- Remove commented Markdown CSS in Tailwind application stylesheet
* Missing comma
* Enhance AI response processing with chat history context
* Improve AI debug logging with payload size limits and internal message flag
* Enhance AI chat interaction with improved thinking indicator and scrolling behavior
* Add AI consent and enable/disable functionality for AI chat
* Upgrade Biome and refactor JavaScript template literals
- Update @biomejs/biome to latest version with caret (^) notation
- Refactor AI query and chat controllers to use template literals
- Standardize npm scripts formatting in package.json
* Add beta testing usage note to AI consent modal
* Update test fixtures and configurations for AI chat functionality
- Add family association to chat fixtures and tests
- Set consistent password digest for test users
- Enable AI for test users
- Add OpenAI access token for test environment
- Update chat and user model tests to include family context
* Simplify data model and get tests passing
* Remove structure.mdc from version control
* Integrate AI chat styles into existing prose pattern
* Match Figma design spec, implement Turbo frames and actions for chats controller
* AI rules refresh
* Consolidate Stimulus controllers, thinking state, controllers, and views
* Naming, domain alignment
* Reset migrations
* Improve data model to support tool calls and message types
* Tool calling tests and fixtures
* Tool call implementation and test
* Get assistant test working again
* Test updates
* Process tool calls within provider
* Chat UI back to working state again
* Remove stale code
* Tests passing
* Update openai class naming to avoid conflicts
* Reconfigure test env
* Rebuild gemfile
* Fix naming conflicts for ChatResponse
* Message styles
* Use OpenAI conversation state management
* Assistant function base implementation
* Add back thinking messages, clean up error handling for chat
* Fix sync error when security price has bad data from provider
* Add balance sheet function to assistant
* Add better function calling error visibility
* Add income statement function
* Simplify and clean up "thinking" interactions with Turbo frames
* Remove stale data definitions from functions
* Ensure VCR fixtures working with latest code
* basic stream implementation
* Get streaming working
* Make AI sidebar wider when left sidebar is collapsed
* Get tests working with streaming responses
* Centralize provider error handling
* Provider data boundaries
---------
Co-authored-by: Josh Pigford <josh@joshpigford.com>
2025-03-28 13:08:22 -04:00
add_foreign_key " chats " , " users "
2025-04-14 11:40:34 -04:00
add_foreign_key " entries " , " accounts "
add_foreign_key " entries " , " imports "
add_foreign_key " holdings " , " accounts "
add_foreign_key " holdings " , " securities "
2024-10-17 15:45:13 -05:00
add_foreign_key " impersonation_session_logs " , " impersonation_sessions "
add_foreign_key " impersonation_sessions " , " users " , column : " impersonated_id "
add_foreign_key " impersonation_sessions " , " users " , column : " impersonator_id "
2024-10-01 10:47:59 -04:00
add_foreign_key " import_rows " , " imports "
add_foreign_key " imports " , " families "
2024-11-01 10:23:27 -05:00
add_foreign_key " invitations " , " families "
add_foreign_key " invitations " , " users " , column : " inviter_id "
2024-06-20 08:38:59 -04:00
add_foreign_key " merchants " , " families "
Personal finance AI (v1) (#2022)
* AI sidebar
* Add chat and message models with associations
* Implement AI chat functionality with sidebar and messaging system
- Add chat and messages controllers
- Create chat and message views
- Implement chat-related routes
- Add message broadcasting and user interactions
- Update application layout to support chat sidebar
- Enhance user model with initials method
* Refactor AI sidebar with enhanced chat menu and interactions
- Update sidebar layout with dynamic width and improved responsiveness
- Add new chat menu Stimulus controller for toggling between chat and chat list views
- Improve chat list display with recent chats and empty state
- Extract AI avatar to a partial for reusability
- Enhance message display and interaction styling
- Add more contextual buttons and interaction hints
* Improve chat scroll behavior and message styling
- Refactor chat scroll functionality with Stimulus controller
- Optimize message scrolling in chat views
- Update message styling for better visual hierarchy
- Enhance chat container layout with flex and auto-scroll
- Simplify message rendering across different chat views
* Extract AI avatar to a shared partial for consistent styling
- Refactor AI avatar rendering across chat views
- Replace hardcoded avatar markup with a reusable partial
- Simplify avatar display in chats and messages views
* Update sidebar controller to handle right panel width dynamically
- Add conditional width class for right sidebar panel
- Ensure consistent sidebar toggle behavior for both left and right panels
- Use specific width class for right panel (w-[375px])
* Refactor chat form and AI greeting with flexible partials
- Extract message form to a reusable partial with dynamic context support
- Create flexible AI greeting partial for consistent welcome messages
- Simplify chat and sidebar views by leveraging new partials
- Add support for different form scenarios (chat, new chat, sidebar)
- Improve code modularity and reduce duplication
* Add chat clearing functionality with dynamic menu options
- Implement clear chat action in ChatsController
- Add clear chat route to support clearing messages
- Update AI sidebar with dropdown menu for chat actions
- Preserve system message when clearing chat
- Enhance chat interaction with new menu options
* Add frontmatter to project structure documentation
- Create initial frontmatter for structure.mdc file
- Include description and configuration options
- Prepare for potential dynamic documentation rendering
* Update general project rules with additional guidelines
- Add rule for using `Current.family` instead of `current_family`
- Include new guidelines for testing, API routes, and solution approach
- Expand project-specific rules for more consistent development practices
* Add OpenAI gem and AI-friendly data representations
- Add `ruby-openai` gem for AI integration
- Implement `to_ai_readable_hash` methods in BalanceSheet and IncomeStatement
- Include Promptable module in both models
- Add savings rate calculation method in IncomeStatement
- Prepare financial models for AI-powered insights and interactions
* Enhance AI Financial Assistant with Advanced Querying and Debugging Capabilities
- Implement comprehensive AI financial query system with function-based interactions
- Add detailed debug logging for AI responses and function calls
- Extend BalanceSheet and IncomeStatement models with AI-friendly methods
- Create robust error handling and fallback mechanisms for AI queries
- Update chat and message views to support debug mode and enhanced rendering
- Add AI query routes and initial test coverage for financial assistant
* Refactor AI sidebar and chat layout with improved structure and comments
- Remove inline AI chat from application layout
- Enhance AI sidebar with more semantic HTML structure
- Add descriptive comments to clarify different sections of chat view
- Improve flex layout and scrolling behavior in chat messages container
- Optimize message rendering with more explicit class names and structure
* Add Markdown rendering support for AI chat messages
- Implement `markdown` helper method in ApplicationHelper using Redcarpet
- Update message view to render AI messages with Markdown formatting
- Add comprehensive Markdown rendering options (tables, code blocks, links)
- Enhance AI Financial Assistant prompt to encourage Markdown usage
- Remove commented Markdown CSS in Tailwind application stylesheet
* Missing comma
* Enhance AI response processing with chat history context
* Improve AI debug logging with payload size limits and internal message flag
* Enhance AI chat interaction with improved thinking indicator and scrolling behavior
* Add AI consent and enable/disable functionality for AI chat
* Upgrade Biome and refactor JavaScript template literals
- Update @biomejs/biome to latest version with caret (^) notation
- Refactor AI query and chat controllers to use template literals
- Standardize npm scripts formatting in package.json
* Add beta testing usage note to AI consent modal
* Update test fixtures and configurations for AI chat functionality
- Add family association to chat fixtures and tests
- Set consistent password digest for test users
- Enable AI for test users
- Add OpenAI access token for test environment
- Update chat and user model tests to include family context
* Simplify data model and get tests passing
* Remove structure.mdc from version control
* Integrate AI chat styles into existing prose pattern
* Match Figma design spec, implement Turbo frames and actions for chats controller
* AI rules refresh
* Consolidate Stimulus controllers, thinking state, controllers, and views
* Naming, domain alignment
* Reset migrations
* Improve data model to support tool calls and message types
* Tool calling tests and fixtures
* Tool call implementation and test
* Get assistant test working again
* Test updates
* Process tool calls within provider
* Chat UI back to working state again
* Remove stale code
* Tests passing
* Update openai class naming to avoid conflicts
* Reconfigure test env
* Rebuild gemfile
* Fix naming conflicts for ChatResponse
* Message styles
* Use OpenAI conversation state management
* Assistant function base implementation
* Add back thinking messages, clean up error handling for chat
* Fix sync error when security price has bad data from provider
* Add balance sheet function to assistant
* Add better function calling error visibility
* Add income statement function
* Simplify and clean up "thinking" interactions with Turbo frames
* Remove stale data definitions from functions
* Ensure VCR fixtures working with latest code
* basic stream implementation
* Get streaming working
* Make AI sidebar wider when left sidebar is collapsed
* Get tests working with streaming responses
* Centralize provider error handling
* Provider data boundaries
---------
Co-authored-by: Josh Pigford <josh@joshpigford.com>
2025-03-28 13:08:22 -04:00
add_foreign_key " messages " , " chats "
2024-11-15 13:49:37 -05:00
add_foreign_key " plaid_accounts " , " plaid_items "
add_foreign_key " plaid_items " , " families "
2025-04-14 11:40:34 -04:00
add_foreign_key " rejected_transfers " , " transactions " , column : " inflow_transaction_id "
add_foreign_key " rejected_transfers " , " transactions " , column : " outflow_transaction_id "
2025-04-18 11:39:58 -04:00
add_foreign_key " rule_actions " , " rules "
add_foreign_key " rule_conditions " , " rule_conditions " , column : " parent_id "
add_foreign_key " rule_conditions " , " rules "
add_foreign_key " rules " , " families "
2024-10-29 15:37:59 -04:00
add_foreign_key " security_prices " , " securities "
2024-10-18 11:26:58 -05:00
add_foreign_key " sessions " , " impersonation_sessions " , column : " active_impersonator_session_id "
2024-10-03 14:42:22 -04:00
add_foreign_key " sessions " , " users "
2025-05-06 14:05:21 -04:00
add_foreign_key " subscriptions " , " families "
2025-04-11 12:13:46 -04:00
add_foreign_key " syncs " , " syncs " , column : " parent_id "
2024-05-23 08:09:33 -04:00
add_foreign_key " taggings " , " tags "
add_foreign_key " tags " , " families "
Personal finance AI (v1) (#2022)
* AI sidebar
* Add chat and message models with associations
* Implement AI chat functionality with sidebar and messaging system
- Add chat and messages controllers
- Create chat and message views
- Implement chat-related routes
- Add message broadcasting and user interactions
- Update application layout to support chat sidebar
- Enhance user model with initials method
* Refactor AI sidebar with enhanced chat menu and interactions
- Update sidebar layout with dynamic width and improved responsiveness
- Add new chat menu Stimulus controller for toggling between chat and chat list views
- Improve chat list display with recent chats and empty state
- Extract AI avatar to a partial for reusability
- Enhance message display and interaction styling
- Add more contextual buttons and interaction hints
* Improve chat scroll behavior and message styling
- Refactor chat scroll functionality with Stimulus controller
- Optimize message scrolling in chat views
- Update message styling for better visual hierarchy
- Enhance chat container layout with flex and auto-scroll
- Simplify message rendering across different chat views
* Extract AI avatar to a shared partial for consistent styling
- Refactor AI avatar rendering across chat views
- Replace hardcoded avatar markup with a reusable partial
- Simplify avatar display in chats and messages views
* Update sidebar controller to handle right panel width dynamically
- Add conditional width class for right sidebar panel
- Ensure consistent sidebar toggle behavior for both left and right panels
- Use specific width class for right panel (w-[375px])
* Refactor chat form and AI greeting with flexible partials
- Extract message form to a reusable partial with dynamic context support
- Create flexible AI greeting partial for consistent welcome messages
- Simplify chat and sidebar views by leveraging new partials
- Add support for different form scenarios (chat, new chat, sidebar)
- Improve code modularity and reduce duplication
* Add chat clearing functionality with dynamic menu options
- Implement clear chat action in ChatsController
- Add clear chat route to support clearing messages
- Update AI sidebar with dropdown menu for chat actions
- Preserve system message when clearing chat
- Enhance chat interaction with new menu options
* Add frontmatter to project structure documentation
- Create initial frontmatter for structure.mdc file
- Include description and configuration options
- Prepare for potential dynamic documentation rendering
* Update general project rules with additional guidelines
- Add rule for using `Current.family` instead of `current_family`
- Include new guidelines for testing, API routes, and solution approach
- Expand project-specific rules for more consistent development practices
* Add OpenAI gem and AI-friendly data representations
- Add `ruby-openai` gem for AI integration
- Implement `to_ai_readable_hash` methods in BalanceSheet and IncomeStatement
- Include Promptable module in both models
- Add savings rate calculation method in IncomeStatement
- Prepare financial models for AI-powered insights and interactions
* Enhance AI Financial Assistant with Advanced Querying and Debugging Capabilities
- Implement comprehensive AI financial query system with function-based interactions
- Add detailed debug logging for AI responses and function calls
- Extend BalanceSheet and IncomeStatement models with AI-friendly methods
- Create robust error handling and fallback mechanisms for AI queries
- Update chat and message views to support debug mode and enhanced rendering
- Add AI query routes and initial test coverage for financial assistant
* Refactor AI sidebar and chat layout with improved structure and comments
- Remove inline AI chat from application layout
- Enhance AI sidebar with more semantic HTML structure
- Add descriptive comments to clarify different sections of chat view
- Improve flex layout and scrolling behavior in chat messages container
- Optimize message rendering with more explicit class names and structure
* Add Markdown rendering support for AI chat messages
- Implement `markdown` helper method in ApplicationHelper using Redcarpet
- Update message view to render AI messages with Markdown formatting
- Add comprehensive Markdown rendering options (tables, code blocks, links)
- Enhance AI Financial Assistant prompt to encourage Markdown usage
- Remove commented Markdown CSS in Tailwind application stylesheet
* Missing comma
* Enhance AI response processing with chat history context
* Improve AI debug logging with payload size limits and internal message flag
* Enhance AI chat interaction with improved thinking indicator and scrolling behavior
* Add AI consent and enable/disable functionality for AI chat
* Upgrade Biome and refactor JavaScript template literals
- Update @biomejs/biome to latest version with caret (^) notation
- Refactor AI query and chat controllers to use template literals
- Standardize npm scripts formatting in package.json
* Add beta testing usage note to AI consent modal
* Update test fixtures and configurations for AI chat functionality
- Add family association to chat fixtures and tests
- Set consistent password digest for test users
- Enable AI for test users
- Add OpenAI access token for test environment
- Update chat and user model tests to include family context
* Simplify data model and get tests passing
* Remove structure.mdc from version control
* Integrate AI chat styles into existing prose pattern
* Match Figma design spec, implement Turbo frames and actions for chats controller
* AI rules refresh
* Consolidate Stimulus controllers, thinking state, controllers, and views
* Naming, domain alignment
* Reset migrations
* Improve data model to support tool calls and message types
* Tool calling tests and fixtures
* Tool call implementation and test
* Get assistant test working again
* Test updates
* Process tool calls within provider
* Chat UI back to working state again
* Remove stale code
* Tests passing
* Update openai class naming to avoid conflicts
* Reconfigure test env
* Rebuild gemfile
* Fix naming conflicts for ChatResponse
* Message styles
* Use OpenAI conversation state management
* Assistant function base implementation
* Add back thinking messages, clean up error handling for chat
* Fix sync error when security price has bad data from provider
* Add balance sheet function to assistant
* Add better function calling error visibility
* Add income statement function
* Simplify and clean up "thinking" interactions with Turbo frames
* Remove stale data definitions from functions
* Ensure VCR fixtures working with latest code
* basic stream implementation
* Get streaming working
* Make AI sidebar wider when left sidebar is collapsed
* Get tests working with streaming responses
* Centralize provider error handling
* Provider data boundaries
---------
Co-authored-by: Josh Pigford <josh@joshpigford.com>
2025-03-28 13:08:22 -04:00
add_foreign_key " tool_calls " , " messages "
2025-04-14 11:40:34 -04:00
add_foreign_key " trades " , " securities "
add_foreign_key " transactions " , " categories " , on_delete : :nullify
add_foreign_key " transactions " , " merchants "
add_foreign_key " transfers " , " transactions " , column : " inflow_transaction_id " , on_delete : :cascade
add_foreign_key " transfers " , " transactions " , column : " outflow_transaction_id " , on_delete : :cascade
Personal finance AI (v1) (#2022)
* AI sidebar
* Add chat and message models with associations
* Implement AI chat functionality with sidebar and messaging system
- Add chat and messages controllers
- Create chat and message views
- Implement chat-related routes
- Add message broadcasting and user interactions
- Update application layout to support chat sidebar
- Enhance user model with initials method
* Refactor AI sidebar with enhanced chat menu and interactions
- Update sidebar layout with dynamic width and improved responsiveness
- Add new chat menu Stimulus controller for toggling between chat and chat list views
- Improve chat list display with recent chats and empty state
- Extract AI avatar to a partial for reusability
- Enhance message display and interaction styling
- Add more contextual buttons and interaction hints
* Improve chat scroll behavior and message styling
- Refactor chat scroll functionality with Stimulus controller
- Optimize message scrolling in chat views
- Update message styling for better visual hierarchy
- Enhance chat container layout with flex and auto-scroll
- Simplify message rendering across different chat views
* Extract AI avatar to a shared partial for consistent styling
- Refactor AI avatar rendering across chat views
- Replace hardcoded avatar markup with a reusable partial
- Simplify avatar display in chats and messages views
* Update sidebar controller to handle right panel width dynamically
- Add conditional width class for right sidebar panel
- Ensure consistent sidebar toggle behavior for both left and right panels
- Use specific width class for right panel (w-[375px])
* Refactor chat form and AI greeting with flexible partials
- Extract message form to a reusable partial with dynamic context support
- Create flexible AI greeting partial for consistent welcome messages
- Simplify chat and sidebar views by leveraging new partials
- Add support for different form scenarios (chat, new chat, sidebar)
- Improve code modularity and reduce duplication
* Add chat clearing functionality with dynamic menu options
- Implement clear chat action in ChatsController
- Add clear chat route to support clearing messages
- Update AI sidebar with dropdown menu for chat actions
- Preserve system message when clearing chat
- Enhance chat interaction with new menu options
* Add frontmatter to project structure documentation
- Create initial frontmatter for structure.mdc file
- Include description and configuration options
- Prepare for potential dynamic documentation rendering
* Update general project rules with additional guidelines
- Add rule for using `Current.family` instead of `current_family`
- Include new guidelines for testing, API routes, and solution approach
- Expand project-specific rules for more consistent development practices
* Add OpenAI gem and AI-friendly data representations
- Add `ruby-openai` gem for AI integration
- Implement `to_ai_readable_hash` methods in BalanceSheet and IncomeStatement
- Include Promptable module in both models
- Add savings rate calculation method in IncomeStatement
- Prepare financial models for AI-powered insights and interactions
* Enhance AI Financial Assistant with Advanced Querying and Debugging Capabilities
- Implement comprehensive AI financial query system with function-based interactions
- Add detailed debug logging for AI responses and function calls
- Extend BalanceSheet and IncomeStatement models with AI-friendly methods
- Create robust error handling and fallback mechanisms for AI queries
- Update chat and message views to support debug mode and enhanced rendering
- Add AI query routes and initial test coverage for financial assistant
* Refactor AI sidebar and chat layout with improved structure and comments
- Remove inline AI chat from application layout
- Enhance AI sidebar with more semantic HTML structure
- Add descriptive comments to clarify different sections of chat view
- Improve flex layout and scrolling behavior in chat messages container
- Optimize message rendering with more explicit class names and structure
* Add Markdown rendering support for AI chat messages
- Implement `markdown` helper method in ApplicationHelper using Redcarpet
- Update message view to render AI messages with Markdown formatting
- Add comprehensive Markdown rendering options (tables, code blocks, links)
- Enhance AI Financial Assistant prompt to encourage Markdown usage
- Remove commented Markdown CSS in Tailwind application stylesheet
* Missing comma
* Enhance AI response processing with chat history context
* Improve AI debug logging with payload size limits and internal message flag
* Enhance AI chat interaction with improved thinking indicator and scrolling behavior
* Add AI consent and enable/disable functionality for AI chat
* Upgrade Biome and refactor JavaScript template literals
- Update @biomejs/biome to latest version with caret (^) notation
- Refactor AI query and chat controllers to use template literals
- Standardize npm scripts formatting in package.json
* Add beta testing usage note to AI consent modal
* Update test fixtures and configurations for AI chat functionality
- Add family association to chat fixtures and tests
- Set consistent password digest for test users
- Enable AI for test users
- Add OpenAI access token for test environment
- Update chat and user model tests to include family context
* Simplify data model and get tests passing
* Remove structure.mdc from version control
* Integrate AI chat styles into existing prose pattern
* Match Figma design spec, implement Turbo frames and actions for chats controller
* AI rules refresh
* Consolidate Stimulus controllers, thinking state, controllers, and views
* Naming, domain alignment
* Reset migrations
* Improve data model to support tool calls and message types
* Tool calling tests and fixtures
* Tool call implementation and test
* Get assistant test working again
* Test updates
* Process tool calls within provider
* Chat UI back to working state again
* Remove stale code
* Tests passing
* Update openai class naming to avoid conflicts
* Reconfigure test env
* Rebuild gemfile
* Fix naming conflicts for ChatResponse
* Message styles
* Use OpenAI conversation state management
* Assistant function base implementation
* Add back thinking messages, clean up error handling for chat
* Fix sync error when security price has bad data from provider
* Add balance sheet function to assistant
* Add better function calling error visibility
* Add income statement function
* Simplify and clean up "thinking" interactions with Turbo frames
* Remove stale data definitions from functions
* Ensure VCR fixtures working with latest code
* basic stream implementation
* Get streaming working
* Make AI sidebar wider when left sidebar is collapsed
* Get tests working with streaming responses
* Centralize provider error handling
* Provider data boundaries
---------
Co-authored-by: Josh Pigford <josh@joshpigford.com>
2025-03-28 13:08:22 -04:00
add_foreign_key " users " , " chats " , column : " last_viewed_chat_id "
2024-02-02 09:05:04 -06:00
add_foreign_key " users " , " families "
end