+<%= link_to connect_path,
+ class: "bg-container shadow-border-xs rounded-xl p-4 flex flex-col gap-3 text-primary hover:bg-container-hover transition-colors",
+ data: { turbo_frame: "drawer", turbo_prefetch: "false" } do %>
<%= logo_text %>
@@ -18,12 +20,8 @@
<% if tagline.present? %>
<%= tagline %>
<% end %>
-
- <%= link_to connect_path,
- class: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:text-primary/70 transition-colors",
- data: { turbo_frame: "drawer", turbo_prefetch: "false" } do %>
- <%= t("settings.providers.connect") %>
- <%= helpers.icon "arrow-right", class: "w-4 h-4" %>
- <% end %>
+
+ <%= t("settings.providers.connect") %>
+ <%= helpers.icon "arrow-right", class: "w-4 h-4" %>
-
+<% end %>
diff --git a/app/controllers/settings/providers_controller.rb b/app/controllers/settings/providers_controller.rb
index 9cd689d51..159ca3ef5 100644
--- a/app/controllers/settings/providers_controller.rb
+++ b/app/controllers/settings/providers_controller.rb
@@ -261,13 +261,6 @@ class Settings::ProvidersController < ApplicationController
@connected = entries.select { |e| e[:summary][:status] == :ok }
@needs_attention = entries.select { |e| [ :warn, :err ].include?(e[:summary][:status]) }
@available = entries.select { |e| e[:summary][:status] == :off }
-
- @health_counts = {
- connected: @connected.size + @needs_attention.size,
- needs_attention: @needs_attention.size,
- errors: @needs_attention.count { |e| e[:summary][:status] == :err },
- accounts_synced: Current.family.accounts.joins(:account_providers).distinct.count
- }
end
# Returns a hash mapping provider key → { error:, last_synced_at:, stale: }
diff --git a/app/models/provider/metadata.rb b/app/models/provider/metadata.rb
index 378e133ed..e2326990d 100644
--- a/app/models/provider/metadata.rb
+++ b/app/models/provider/metadata.rb
@@ -4,7 +4,6 @@ class Provider
simplefin: {
region: "US",
kind: "Bank",
- tier: "Free",
maturity: :stable,
logo_bg: "bg-blue-600",
logo_text: "SF"
@@ -12,7 +11,6 @@ class Provider
lunchflow: {
region: "US",
kind: "Lunch",
- tier: "Free",
maturity: :stable,
logo_bg: "bg-orange-500",
logo_text: "LF"
@@ -20,7 +18,6 @@ class Provider
enable_banking: {
region: "EU",
kind: "Bank",
- tier: "Free",
maturity: :beta,
logo_bg: "bg-purple-600",
logo_text: "EB"
@@ -28,7 +25,6 @@ class Provider
coinstats: {
region: "Global",
kind: "Crypto",
- tier: "Free",
maturity: :beta,
logo_bg: "bg-yellow-500",
logo_text: "CS"
@@ -36,7 +32,6 @@ class Provider
mercury: {
region: "US",
kind: "Bank",
- tier: "Free",
maturity: :beta,
logo_bg: "bg-cyan-600",
logo_text: "ME"
@@ -44,7 +39,6 @@ class Provider
coinbase: {
region: "Global",
kind: "Crypto",
- tier: "Free",
maturity: :beta,
logo_bg: "bg-blue-500",
logo_text: "CB"
@@ -52,7 +46,6 @@ class Provider
binance: {
region: "Global",
kind: "Crypto",
- tier: "Free",
maturity: :beta,
logo_bg: "bg-yellow-400",
logo_text: "BI"
@@ -60,7 +53,6 @@ class Provider
snaptrade: {
region: "US / CA",
kind: "Investment",
- tier: "Free",
maturity: :beta,
logo_bg: "bg-green-600",
logo_text: "ST"
@@ -68,7 +60,6 @@ class Provider
indexa_capital: {
region: "ES",
kind: "Investment",
- tier: "Free",
maturity: :alpha,
logo_bg: "bg-red-600",
logo_text: "IC"
@@ -76,7 +67,6 @@ class Provider
sophtron: {
region: "US",
kind: "Bank",
- tier: "Free",
maturity: :alpha,
logo_bg: "bg-teal-600",
logo_text: "SO"
diff --git a/app/views/settings/providers/show.html.erb b/app/views/settings/providers/show.html.erb
index 0b4ae09c7..31f41a974 100644
--- a/app/views/settings/providers/show.html.erb
+++ b/app/views/settings/providers/show.html.erb
@@ -20,23 +20,19 @@
method: :post,
disabled: sync_all_disabled,
title: sync_all_disabled ? t("settings.providers.sync_all_recently") : nil,
- class: "inline-flex items-center gap-2 shrink-0 px-3 py-1.5 text-sm font-medium text-secondary hover:text-primary border border-secondary rounded-lg hover:border-primary transition-colors disabled:opacity-50 disabled:cursor-not-allowed" do %>
+ class: "inline-flex items-center gap-2 shrink-0 whitespace-nowrap px-3 py-1.5 text-sm font-medium text-secondary hover:text-primary border border-secondary rounded-lg hover:border-primary transition-colors disabled:opacity-50 disabled:cursor-not-allowed" do %>
<%= icon "refresh-cw", class: "w-4 h-4" %>
<%= t("settings.providers.sync_all") %>
<% end %>
<% end %>
- <%= render Settings::HealthSummary.new(counts: @health_counts) %>
-
<% all_connections = @needs_attention + @connected %>
- <%= render "settings/providers/group_heading",
- title: t("settings.providers.groups.your_connections"),
- count: all_connections.size %>
-
- <% if all_connections.empty? %>
-
<%= t("settings.providers.groups.empty_connected") %>
+ <% if all_connections.any? %>
+ <%= render "settings/providers/group_heading",
+ title: t("settings.providers.groups.your_connections"),
+ count: all_connections.size %>
<% end %>
<% all_connections.each do |entry| %>
diff --git a/config/locales/views/settings/en.yml b/config/locales/views/settings/en.yml
index 028cb2f79..bf511edaa 100644
--- a/config/locales/views/settings/en.yml
+++ b/config/locales/views/settings/en.yml
@@ -176,7 +176,7 @@ en:
whats_new_label: What's new
api_keys_label: API Key
appearance_label: Appearance
- bank_sync_label: Bank Sync
+ bank_sync_label: Bank sync
settings_nav_link_large:
next: Next
previous: Back
@@ -188,7 +188,7 @@ en:
providers:
not_authorized: Not authorized
bank_sync:
- page_title: Bank Sync
+ page_title: Bank sync
lede: Connect external accounts so transactions, balances and holdings flow into Sure automatically.
status:
ok: Connected
@@ -204,13 +204,7 @@ en:
connected: Connected
needs_attention: Action needed
available: Available
- empty_connected: Nothing connected yet — pick a provider below to get started.
empty_available: All available providers are connected.
- health:
- connected: Connected
- needs_attention: Action needed
- errors: Errors
- accounts_synced: Accounts synced
meta:
sync_error: Sync error
no_recent_sync: Sync overdue
diff --git a/test/system/settings/providers_test.rb b/test/system/settings/providers_test.rb
index 2de951c31..fd5870e6b 100644
--- a/test/system/settings/providers_test.rb
+++ b/test/system/settings/providers_test.rb
@@ -81,17 +81,6 @@ class Settings::ProvidersTest < ApplicationSystemTestCase
assert_operator available_y, :<, available_grid_top, "Available heading should appear above the card grid"
end
- test "health strip shows four tiles with correct counts" do
- SimplefinItem.create!(family: @family, name: "Test SimpleFIN", access_url: "https://bridge.simplefin.org/simplefin/access")
-
- visit settings_providers_path
-
- assert_text "Connected"
- assert_text "Action needed"
- assert_text "Errors"
- assert_text "Accounts synced"
- end
-
test "action needed group is absent when no providers have issues" do
SimplefinItem.create!(family: @family, name: "Test SimpleFIN", access_url: "https://bridge.simplefin.org/simplefin/access")
@@ -149,14 +138,11 @@ class Settings::ProvidersTest < ApplicationSystemTestCase
end
end
- test "clicking a provider card connect link opens the connect drawer" do
+ test "clicking a provider card opens the connect drawer" do
visit settings_providers_path
within available_provider_cards_container do
- card = find(:xpath, ".//div[contains(concat(' ', normalize-space(@class), ' '), ' bg-container ')][.//span[normalize-space()='SimpleFIN']]")
- within(card) do
- find("a[data-turbo-frame='drawer']", text: "Connect").click
- end
+ find("a[data-turbo-frame='drawer']", text: "SimpleFIN").click
end
assert_selector "dialog[open]"
diff --git a/test/system/settings_test.rb b/test/system/settings_test.rb
index 68b85f297..4aef39d0e 100644
--- a/test/system/settings_test.rb
+++ b/test/system/settings_test.rb
@@ -9,7 +9,7 @@ class SettingsTest < ApplicationSystemTestCase
[ "Accounts", accounts_path ]
]
- @settings_links << [ "Bank Sync", settings_providers_path ] if @user.admin?
+ @settings_links << [ "Bank sync", settings_providers_path ] if @user.admin?
@settings_links += [
[ "Preferences", settings_preferences_path ],
@@ -91,7 +91,7 @@ class SettingsTest < ApplicationSystemTestCase
# Assert that admin-only settings are not present in the navigation
assert_no_selector "li", text: "AI Prompts"
assert_no_selector "li", text: "API Key"
- assert_no_selector "li", text: "Bank Sync"
+ assert_no_selector "li", text: "Bank sync"
end
end