Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
391364d
feat(settings/providers): surface connection status in section headers
claude May 8, 2026
87ff9c0
feat(settings/providers): group providers into Connected and Available
jjmata May 8, 2026
6633f29
feat(settings/providers): health strip, action-needed group, and sync…
jjmata May 8, 2026
4623bc3
feat(settings/providers): card grid for available providers with conn…
jjmata May 8, 2026
2b59dd6
feat(settings): retire /settings/bank_sync; merge into providers page
jjmata May 8, 2026
a235b5a
Merge branch 'main' into feat/surface-provider-status
jjmata May 8, 2026
7e2f47d
Migrations are 7.2 here
jjmata May 8, 2026
423b209
Minimize schema noise
jjmata May 8, 2026
db7080d
Schema duplication
jjmata May 8, 2026
45b5bc0
Small copy edits
jjmata May 8, 2026
3851543
Fix tests
jjmata May 8, 2026
fff5c97
Merge remote-tracking branch 'origin/main' into feat/surface-provider…
jjmata May 9, 2026
60b2f2b
Address provider settings review feedback
jjmata May 9, 2026
bf73e3a
refactor(settings/providers): finish design-review cleanup pass
gariasf May 9, 2026
d037412
feat(settings/providers): replace Add another provider CTA with a sea…
gariasf May 9, 2026
4899d98
Private method fix
jjmata May 9, 2026
89726e6
refactor(settings/providers): drawer cleanup, header lock-up, trust s…
gariasf May 9, 2026
4bd9ddd
chore(locales): drop unused provider-panel status strings
gariasf May 9, 2026
0002237
feat(settings/providers): connected-state polish per design §05 + Lin…
gariasf May 9, 2026
b019944
fix(settings/providers): align connected state with the final design …
gariasf May 9, 2026
e0aab86
refactor(settings/providers): tighten paddings, dedupe maturity badge…
gariasf May 9, 2026
313ab83
fix(settings/providers): icons + search input height
gariasf May 9, 2026
693e3e4
refactor(settings/providers): align Sync all + search input with DS, …
gariasf May 9, 2026
229f657
fix(settings/providers): drawer trust statement uses border-tertiary
gariasf May 9, 2026
8a2f16a
refactor(settings/providers): swap arbitrary Tailwind values for scal…
gariasf May 9, 2026
41cd641
revert(settings/providers): drop the slim health strip
gariasf May 9, 2026
ee798ae
refactor(settings/providers): align with DS conventions
gariasf May 9, 2026
77a100b
fix(provider/metadata): add plaid_eu entry
gariasf May 9, 2026
e57f7ce
Merge branch 'main' into feat/surface-provider-status
gariasf May 9, 2026
8c96195
fix(settings/providers): center-align Sync all next to the lede
gariasf May 9, 2026
6abceb0
fix(settings/providers): drop colour palette + filter polish + drawer…
gariasf May 9, 2026
4c9e0f2
refactor(settings/providers): drawer alerts use DS::Alert; drop card-…
gariasf May 9, 2026
1c49750
fix(settings/providers): hoist warning alerts to top of drawer
gariasf May 9, 2026
c90836e
fix(DS::Alert): align icon to cap-height of first text line
gariasf May 9, 2026
3f3e717
copy(settings/providers): tighten alert messaging per voice review
gariasf May 9, 2026
81dd431
feat(settings/providers): SetupSteps partial for connect-drawer instr…
gariasf May 9, 2026
c5668cb
fix(settings/providers): tighten panel spacing + relocate per-panel n…
gariasf May 9, 2026
4b9ca7d
fix(settings/providers): plaid + indexa drawers join the SetupSteps look
gariasf May 9, 2026
2e0d36d
fix(settings/providers): surface configured plaid_eu + dedup show con…
gariasf May 9, 2026
39ac899
i18n(settings/providers): localize plaid setup steps + drop dead defa…
gariasf May 9, 2026
31e23d7
test(settings/providers): cover plaid_eu, clear filters, warn outline
gariasf May 9, 2026
95eec78
copy(settings/providers): drop em dashes, naturalize phrasing
gariasf May 9, 2026
59122cd
fix(settings/providers): address CodeRabbit pass on PR #1717
gariasf May 9, 2026
32fbdae
Merge branch 'main' into feat/surface-provider-status
gariasf May 9, 2026
e950d4d
fix(db): rename migration to clear collision with main's 20260508120000
gariasf May 10, 2026
1182305
fix(settings/providers): card + strip a11y polish
gariasf May 10, 2026
c1f5c1b
fix(settings/providers): keep row height on open
gariasf May 10, 2026
4d5cf79
Let's not regress IPv6
jjmata May 10, 2026
c28cc82
Keep the only real change in schema.rb
jjmata May 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions app/components/settings/health_summary.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<div class="grid grid-cols-2 sm:grid-cols-4 gap-2">
<% tiles.each do |tile| %>
<div class="bg-container shadow-border-xs rounded-xl p-3 text-center">
<div class="text-2xl font-bold tabular-nums <%= tile[:color_class] %>"><%= tile[:count] %></div>
<div class="text-xs text-secondary mt-0.5"><%= tile[:label] %></div>
</div>
<% end %>
</div>
38 changes: 38 additions & 0 deletions app/components/settings/health_summary.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
class Settings::HealthSummary < ApplicationComponent
def initialize(counts:)
@counts = counts
end

private
attr_reader :counts

def connected_count = counts[:connected]
def needs_attention_count = counts[:needs_attention]
def errors_count = counts[:errors]
def accounts_synced_count = counts[:accounts_synced]

def tiles
[
{
count: connected_count,
label: t("settings.providers.health.connected"),
color_class: connected_count > 0 ? "text-success" : "text-subdued"
},
{
count: needs_attention_count,
label: t("settings.providers.health.needs_attention"),
color_class: needs_attention_count > 0 ? "text-warning" : "text-subdued"
},
{
count: errors_count,
label: t("settings.providers.health.errors"),
color_class: errors_count > 0 ? "text-destructive" : "text-subdued"
},
{
count: accounts_synced_count,
label: t("settings.providers.health.accounts_synced"),
color_class: "text-primary"
}
]
end
end
29 changes: 29 additions & 0 deletions app/components/settings/provider_card.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<div class="bg-container shadow-border-xs rounded-xl p-4 flex flex-col gap-3 hover:shadow-border-sm transition-shadow">
<div class="flex items-start gap-3">
<div class="w-9 h-9 rounded-lg flex items-center justify-center shrink-0 <%= logo_bg %>">
<span class="text-xs font-bold text-inverse"><%= logo_text %></span>
</div>
<div class="flex-1 min-w-0">
<div class="flex items-center gap-2 flex-wrap">
<span class="font-medium text-primary"><%= name %></span>
<% if maturity_label %>
<span class="text-xs font-medium px-1.5 py-0.5 rounded-full bg-alpha-black-50 text-secondary"><%= maturity_label %></span>
<% end %>
</div>
<% if meta_line.present? %>
<p class="text-xs text-subdued mt-0.5"><%= meta_line %></p>
<% end %>
</div>
</div>
<% if tagline.present? %>
<p class="text-sm text-secondary grow"><%= tagline %></p>
<% end %>
<div class="flex justify-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 %>
</div>
</div>
35 changes: 35 additions & 0 deletions app/components/settings/provider_card.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
class Settings::ProviderCard < ApplicationComponent
MATURITY_LABELS = {
beta: "settings.providers.maturity.beta",
alpha: "settings.providers.maturity.alpha"
}.freeze

def initialize(provider_key:, name:, tagline: nil, region: nil, kind: nil, tier: nil,
maturity: :stable, logo_bg: "bg-gray-500", logo_text: nil)
@provider_key = provider_key
@name = name
@tagline = tagline
@region = region
@kind = kind
@tier = tier
@maturity = maturity.to_sym
@logo_bg = logo_bg
@logo_text = logo_text || name.first(2).upcase
end

def maturity_label
label_key = MATURITY_LABELS[@maturity]
t(label_key) if label_key
end

def meta_line
[ @region, @kind, @tier ].compact.join(" · ")
end

def connect_path
helpers.connect_form_settings_providers_path(provider_key: @provider_key)
end

private
attr_reader :provider_key, :name, :tagline, :region, :kind, :tier, :maturity, :logo_bg, :logo_text
end
43 changes: 0 additions & 43 deletions app/controllers/settings/bank_sync_controller.rb

This file was deleted.

Loading
Loading