diff --git a/README.md b/README.md index 64cca23f5..170096e46 100644 --- a/README.md +++ b/README.md @@ -74,8 +74,8 @@ rake demo_data:default Visit http://localhost:3000 to view the app. You can log in with these demo credentials (from the DB seed): -- Email: `user@sure.local` -- Password: `password` +- Email: `user@example.com` +- Password: `Password1!` For further instructions, see guides below. diff --git a/app/controllers/concerns/self_hostable.rb b/app/controllers/concerns/self_hostable.rb index 4208e03ac..3631571ae 100644 --- a/app/controllers/concerns/self_hostable.rb +++ b/app/controllers/concerns/self_hostable.rb @@ -23,7 +23,7 @@ module SelfHostable if controller_name == "pages" && action_name == "redis_configuration_error" # If Redis is now working, redirect to home if redis_connected? - redirect_to root_path, notice: "Redis is now configured properly! You can now setup your Maybe application." + redirect_to root_path, notice: "Redis is now configured properly! You can now setup your Sure application." end return diff --git a/app/controllers/subscriptions_controller.rb b/app/controllers/subscriptions_controller.rb index 541d3dd9b..22a67f5c0 100644 --- a/app/controllers/subscriptions_controller.rb +++ b/app/controllers/subscriptions_controller.rb @@ -30,7 +30,7 @@ class SubscriptionsController < ApplicationController def create if Current.family.can_start_trial? Current.family.start_trial_subscription! - redirect_to root_path, notice: "Welcome to Maybe!" + redirect_to root_path, notice: "Welcome to Sure!" else redirect_to root_path, alert: "You have already started or completed a trial. Please upgrade to continue." end @@ -51,7 +51,7 @@ class SubscriptionsController < ApplicationController if checkout_result.success? Current.family.start_subscription!(checkout_result.subscription_id) - redirect_to root_path, notice: "Welcome to Maybe! Your subscription has been created." + redirect_to root_path, notice: "Welcome to Sure! Your subscription has been created." else redirect_to root_path, alert: "Something went wrong processing your subscription. Please contact us to get this fixed." end diff --git a/app/models/account.rb b/app/models/account.rb index 30856f7a2..e9a7e9a34 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -80,7 +80,7 @@ class Account < ApplicationRecord balance = simplefin_account.current_balance || simplefin_account.available_balance || 0 # SimpleFin returns negative balances for credit cards (liabilities) - # But Maybe expects positive balances for liabilities + # But Sure expects positive balances for liabilities if account_type == "CreditCard" || account_type == "Loan" balance = balance.abs end diff --git a/app/models/assistant/configurable.rb b/app/models/assistant/configurable.rb index b28fc523f..1da95d14b 100644 --- a/app/models/assistant/configurable.rb +++ b/app/models/assistant/configurable.rb @@ -26,7 +26,7 @@ module Assistant::Configurable <<~PROMPT ## Your identity - You are a friendly financial assistant for an open source personal finance application called "Maybe", which is short for "Maybe Finance". + You are a friendly financial assistant for an open source personal finance application called "Sure", which is short for "Sure Finances". ## Your purpose @@ -52,7 +52,7 @@ module Assistant::Configurable #### User's preferred currency - Maybe is a multi-currency app where each user has a "preferred currency" setting. + Sure is a multi-currency app where each user has a "preferred currency" setting. When no currency is specified, use the user's preferred currency for formatting and displaying monetary values. diff --git a/app/models/demo/generator.rb b/app/models/demo/generator.rb index 9a1c98818..278dcb3f6 100644 --- a/app/models/demo/generator.rb +++ b/app/models/demo/generator.rb @@ -38,7 +38,7 @@ class Demo::Generator end puts "👥 Creating empty family..." - create_family_and_users!("Demo Family", "user@sure.local", onboarded: true, subscribed: true) + create_family_and_users!("Demo Family", "user@example.com", onboarded: true, subscribed: true) puts "✅ Empty demo data loaded successfully!" end @@ -53,14 +53,14 @@ class Demo::Generator end puts "👥 Creating new user family..." - create_family_and_users!("Demo Family", "user@sure.local", onboarded: false, subscribed: false) + create_family_and_users!("Demo Family", "user@example.com", onboarded: false, subscribed: false) puts "✅ New user demo data loaded successfully!" end end # Generate comprehensive realistic demo data with multi-currency - def generate_default_data!(skip_clear: false, email: "user@sure.local") + def generate_default_data!(skip_clear: false, email: "user@example.com") if skip_clear puts "⏭️ Skipping data clearing (appending new family)..." else @@ -133,20 +133,20 @@ class Demo::Generator # Admin user family.users.create!( email: email, - first_name: "Demo (admin)", - last_name: "Maybe", + first_name: "Jack", + last_name: "Bogle", role: "admin", - password: "password", + password: "Password1!", onboarded_at: onboarded ? Time.current : nil ) # Member user family.users.create!( email: "partner_#{email}", - first_name: "Demo (member)", - last_name: "Maybe", + first_name: "Eve", + last_name: "Bogle", role: "member", - password: "password", + password: "Password1!", onboarded_at: onboarded ? Time.current : nil ) diff --git a/app/models/family_export.rb b/app/models/family_export.rb index 2ea2a5d30..94e4fd836 100644 --- a/app/models/family_export.rb +++ b/app/models/family_export.rb @@ -13,7 +13,7 @@ class FamilyExport < ApplicationRecord scope :ordered, -> { order(created_at: :desc) } def filename - "maybe_export_#{created_at.strftime('%Y%m%d_%H%M%S')}.zip" + "sure_export_#{created_at.strftime('%Y%m%d_%H%M%S')}.zip" end def downloadable? diff --git a/app/models/import/row.rb b/app/models/import/row.rb index 0d8d9aba6..ef16d26e5 100644 --- a/app/models/import/row.rb +++ b/app/models/import/row.rb @@ -37,12 +37,12 @@ class Import::Row < ApplicationRecord end private - # In the Maybe system, positive quantities == "inflows" + # In the Sure system, positive quantities == "inflows" def apply_trade_signage_convention(value) value * (import.signage_convention == "inflows_positive" ? 1 : -1) end - # In the Maybe system, positive amounts == "outflows", so we must reverse signage + # In the Sure system, positive amounts == "outflows", so we must reverse signage def apply_transaction_signage_convention(value) if import.amount_type_strategy == "signed_amount" value * (import.signage_convention == "inflows_positive" ? -1 : 1) diff --git a/app/models/mobile_device.rb b/app/models/mobile_device.rb index e334e3a88..3e3f5f774 100644 --- a/app/models/mobile_device.rb +++ b/app/models/mobile_device.rb @@ -23,7 +23,7 @@ class MobileDevice < ApplicationRecord app = Doorkeeper::Application.create!( name: "Mobile App - #{device_id}", - redirect_uri: "maybe://oauth/callback", # Custom scheme for mobile + redirect_uri: "sureapp://oauth/callback", # Custom scheme for mobile scopes: "read_write", # Use the configured scope confidential: false # Public client for mobile ) diff --git a/app/models/plaid_account/investments/balance_calculator.rb b/app/models/plaid_account/investments/balance_calculator.rb index ba713c191..eade15ee4 100644 --- a/app/models/plaid_account/investments/balance_calculator.rb +++ b/app/models/plaid_account/investments/balance_calculator.rb @@ -24,7 +24,7 @@ class PlaidAccount::Investments::BalanceCalculator # Plaid considers "brokerage cash" and "cash equivalent holdings" to all be part of "cash balance" # - # Internally, we DO NOT. Maybe clearly distinguishes between "brokerage cash" vs. "holdings (i.e. invested cash)" + # Internally, we DO NOT. Sure clearly distinguishes between "brokerage cash" vs. "holdings (i.e. invested cash)" # For this reason, we must manually calculate the cash balance based on "total value" and "holdings value" # See PlaidAccount::Investments::SecurityResolver for more details. def cash_balance diff --git a/app/models/plaid_account/investments/security_resolver.rb b/app/models/plaid_account/investments/security_resolver.rb index a6b0515bd..a8f15b0ea 100644 --- a/app/models/plaid_account/investments/security_resolver.rb +++ b/app/models/plaid_account/investments/security_resolver.rb @@ -63,7 +63,7 @@ class PlaidAccount::Investments::SecurityResolver end end - # Plaid treats "brokerage cash" differently than us. Internally, Maybe treats "brokerage cash" + # Plaid treats "brokerage cash" differently than us. Internally, Sure treats "brokerage cash" # as "uninvested cash" (i.e. cash that doesn't have a corresponding Security and can be withdrawn). # # Plaid treats everything as a "holding" with a corresponding Security. For example, "brokerage cash" (USD) diff --git a/app/models/plaid_account/transactions/category_matcher.rb b/app/models/plaid_account/transactions/category_matcher.rb index c4081a68d..87652109f 100644 --- a/app/models/plaid_account/transactions/category_matcher.rb +++ b/app/models/plaid_account/transactions/category_matcher.rb @@ -3,7 +3,7 @@ # categories we cannot directly assign Plaid categories as this would overwrite # user data and create a confusing experience. # -# Automated category matching in the Maybe app has a hierarchy: +# Automated category matching in the Sure app has a hierarchy: # 1. Naive string matching via CategoryAliasMatcher # 2. Rules-based matching set by user # 3. AI-powered matching (also enabled by user via rules) diff --git a/app/models/provider/plaid.rb b/app/models/provider/plaid.rb index 44201074b..d72d540ad 100644 --- a/app/models/provider/plaid.rb +++ b/app/models/provider/plaid.rb @@ -1,7 +1,7 @@ class Provider::Plaid attr_reader :client, :region - MAYBE_SUPPORTED_PLAID_PRODUCTS = %w[transactions investments liabilities].freeze + SUPPORTED_PLAID_PRODUCTS = %w[transactions investments liabilities].freeze MAX_HISTORY_DAYS = Rails.env.development? ? 90 : 730 def initialize(config, region: :us) @@ -45,7 +45,7 @@ class Provider::Plaid def get_link_token(user_id:, webhooks_url:, redirect_url:, accountable_type: nil, access_token: nil) request_params = { user: { client_user_id: user_id }, - client_name: "Maybe Finance", + client_name: "Sure Finances", country_codes: country_codes, language: "en", webhook: webhooks_url, @@ -195,7 +195,7 @@ class Provider::Plaid def get_additional_consented_products(accountable_type) return [] if eu? - MAYBE_SUPPORTED_PLAID_PRODUCTS - [ get_primary_product(accountable_type) ] + SUPPORTED_PLAID_PRODUCTS - [ get_primary_product(accountable_type) ] end def eu? diff --git a/app/models/security/health_checker.rb b/app/models/security/health_checker.rb index 241e38450..92ff5f2ee 100644 --- a/app/models/security/health_checker.rb +++ b/app/models/security/health_checker.rb @@ -1,4 +1,4 @@ -# There are hundreds of thousands of market securities that Maybe must handle. +# There are hundreds of thousands of market securities that Sure must handle. # Due to the always-changing nature of the market, the health checker is responsible # for periodically checking active securities to ensure we can still fetch prices for them. # diff --git a/app/models/simplefin_account/processor.rb b/app/models/simplefin_account/processor.rb index 50be1a6ff..571d6bfde 100644 --- a/app/models/simplefin_account/processor.rb +++ b/app/models/simplefin_account/processor.rb @@ -79,8 +79,8 @@ class SimplefinAccount::Processor end # SimpleFin uses banking convention (expenses negative, income positive) - # Maybe expects opposite convention (expenses positive, income negative) - # So we negate the amount to convert from SimpleFin to Maybe format + # Sure expects opposite convention (expenses positive, income negative) + # So we negate the amount to convert from SimpleFin to Sure format -parsed_amount rescue ArgumentError => e Rails.logger.error "Failed to parse SimpleFin transaction amount: #{amount_value.inspect} - #{e.message}" diff --git a/app/models/user.rb b/app/models/user.rb index eaa7b08eb..49b3aa9d3 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -193,7 +193,7 @@ class User < ApplicationRecord end def totp - ROTP::TOTP.new(otp_secret, issuer: "Maybe Finance") + ROTP::TOTP.new(otp_secret, issuer: "Sure Finances") end def verify_backup_code?(code) diff --git a/app/views/chats/_ai_consent.html.erb b/app/views/chats/_ai_consent.html.erb index b19b8bc9f..3e9437508 100644 --- a/app/views/chats/_ai_consent.html.erb +++ b/app/views/chats/_ai_consent.html.erb @@ -3,11 +3,11 @@ <%= render "chats/ai_avatar" %> -
<% if Current.user.ai_available? %>
- Maybe AI can answer financial questions and provide insights based on your data. To use this feature you'll need to explicitly enable it.
+ AI chat can answer financial questions and provide insights based on your data. To use this feature you'll need to explicitly enable it.
<% else %>
To use the AI assistant, you need to set the OPENAI_ACCESS_TOKEN
environment variable or configure it in the Self-Hosting settings of your instance.
@@ -18,7 +18,7 @@
<%= form_with url: user_path(Current.user), method: :patch, class: "w-full", data: { turbo: false } do |form| %>
<%= form.hidden_field "user[ai_enabled]", value: true %>
<%= form.hidden_field "user[redirect_to]", value: "home" %>
- <%= form.submit "Enable Maybe AI", class: "cursor-pointer hover:bg-inverse-hover w-full py-2 px-4 bg-inverse fg-inverse rounded-lg text-sm font-medium" %>
+ <%= form.submit "Enable AI Chats", class: "cursor-pointer hover:bg-inverse-hover w-full py-2 px-4 bg-inverse fg-inverse rounded-lg text-sm font-medium" %>
<% end %>
<% end %>
diff --git a/app/views/chats/_ai_greeting.html.erb b/app/views/chats/_ai_greeting.html.erb
index 162ee8ea1..e04b9bc51 100644
--- a/app/views/chats/_ai_greeting.html.erb
+++ b/app/views/chats/_ai_greeting.html.erb
@@ -2,7 +2,7 @@
<%= render "chats/ai_avatar" %>
Hey <%= Current.user&.first_name || "there" %>! I'm an AI built by Maybe to help with your finances. I have access to the web and your account data.
+Hey <%= Current.user&.first_name || "there" %>! I'm an AI/large-language-model that can help with your finances. I have access to the web and your account data.
You can use / to access commands diff --git a/app/views/family_exports/new.html.erb b/app/views/family_exports/new.html.erb index 5bf023522..ce6c53aea 100644 --- a/app/views/family_exports/new.html.erb +++ b/app/views/family_exports/new.html.erb @@ -27,7 +27,7 @@
- Note: This export includes all of your data, but only some of the data can be imported back into Maybe via the CSV import feature. We support account, transaction (with category and tags), and trade imports. Other account data cannot be imported and is for your records only. + Note: This export includes all of your data, but only some of the data can be imported back via the CSV import feature. We support account, transaction (with category and tags), and trade imports. Other account data cannot be imported and is for your records only.
Maybe support staff has requested access to your account (likely to help you with a support request). If you approve the request, all activity they take will be logged for security and audit purposes.
+Sure support staff has requested access to your account (likely to help you with a support request). If you approve the request, all activity they take will be logged for security and audit purposes.
<%= button_to "Approve", approve_impersonation_session_path(pending_session), method: :put, class: "inline-flex items-center px-3 py-1.5 border border-transparent text-sm font-medium rounded-md text-white bg-green-600 hover:bg-green-700 focus:outline-hidden focus:ring-2 focus:ring-offset-2 focus:ring-green-500" %> <%= button_to "Reject", reject_impersonation_session_path(pending_session), method: :put, class: "inline-flex items-center px-3 py-1.5 border border-transparent text-sm font-medium rounded-md text-white bg-red-600 hover:bg-red-700 focus:outline-hidden focus:ring-2 focus:ring-offset-2 focus:ring-red-500" %> <% elsif in_progress_session.present? %> -Someone from the Maybe Finance team is currently viewing your data. You may end the session at any time.
+Someone from the Sure Finances team is currently viewing your data. You may end the session at any time.
<%= button_to "End Session", complete_impersonation_session_path(in_progress_session), method: :put, class: "inline-flex items-center px-3 py-1.5 border border-transparent text-sm font-medium rounded-md text-white bg-blue-600 hover:bg-blue-700 focus:outline-hidden focus:ring-2 focus:ring-offset-2 focus:ring-blue-500" %> <% else %>Something went wrong. Please contact us.
diff --git a/app/views/import/configurations/_trade_import.html.erb b/app/views/import/configurations/_trade_import.html.erb index 007bf34bc..9db460d40 100644 --- a/app/views/import/configurations/_trade_import.html.erb +++ b/app/views/import/configurations/_trade_import.html.erb @@ -30,7 +30,7 @@ <% unless Security.provider %>- Note: The security prices provider is not configured. Your trade imports will work, but Maybe will not backfill price history. Please go to your settings to configure this. + Note: The security prices provider is not configured. Your trade imports will work, but Sure will not backfill price history. Please go to your settings to configure this.
Select one or more goals that you have with using Maybe as your personal finance tool.
+Select one or more goals that you have with using Sure as your personal finance tool.
- Try Maybe for 14 days. + Try Sure for 14 days.
- Starting the trial activates your account for Maybe. You won't need to enter payment details. + Starting the trial activates your account for Sure. You won't need to enter payment details.
Today
-You'll get free access to Maybe for 14 days
+You'll get free access to Sure for 14 days
In 14 days (<%= 14.days.from_now.strftime("%B %d") %>)
-Your trial ends — subscribe to continue using Maybe
+Your trial ends — subscribe to continue using Sure
Unlimited access and chats with Maybe AI
+Unlimited access and chats with Sure AI
Your self-hosted Maybe installation needs Redis to be properly configured.
+Your self-hosted Sure installation needs Redis to be properly configured.
Why is Redis required?
-Maybe uses Redis to power Sidekiq background jobs for tasks like syncing account data, processing imports, and other background operations that keep your financial data up to date.
+Sure uses Redis to power Sidekiq background jobs for tasks like syncing account data, processing imports, and other background operations that keep your financial data up to date.
Please note, we are still working on translations for various languages. Please see the <%= link_to "I18n issue", "https://github.com/maybe-finance/maybe/issues/1225", target: "_blank", class: "underline" %> for more information.
+Please note, we are still working on translations for various languages.
<% end %> <% end %>Version: <%= Maybe.version.to_release_tag %>
+Version: <%= Sure.version.to_release_tag %>
To continue using Maybe pick a plan below.
+To continue using Sure pick a plan below.
<%= form_with url: new_subscription_path, method: :get, class: "max-w-xs", data: { turbo: false } do |form| %>Version: - <%= link_to Maybe.version.to_release_tag, "https://github.com/we-promise/sure/releases/tag/#{Maybe.version.to_release_tag}", target: "_blank", class: "hover:underline" %> + <%= link_to Sure.version.to_release_tag, "https://github.com/we-promise/sure/releases/tag/#{Sure.version.to_release_tag}", target: "_blank", class: "hover:underline" %> - <% if Maybe.commit_sha.present? %> - (<%= link_to Maybe.commit_sha.first(7), "https://github.com/we-promise/sure/commit/#{Maybe.commit_sha}", target: "_blank", class: "hover:underline" %>) + <% if Sure.commit_sha.present? %> + (<%= link_to Sure.commit_sha.first(7), "https://github.com/we-promise/sure/commit/#{Sure.commit_sha}", target: "_blank", class: "hover:underline" %>) <% end %>