diff --git a/app/views/accounts/index.html.erb b/app/views/accounts/index.html.erb
index 5c99a4f2..b4c78332 100644
--- a/app/views/accounts/index.html.erb
+++ b/app/views/accounts/index.html.erb
@@ -10,7 +10,6 @@
variant: "outline",
disabled: Current.family.syncing?,
icon: "refresh-cw",
- class: ""
) %>
<% end %>
diff --git a/app/views/plaid_items/_plaid_item.html.erb b/app/views/plaid_items/_plaid_item.html.erb
index 7c3dc8b2..61dea7dc 100644
--- a/app/views/plaid_items/_plaid_item.html.erb
+++ b/app/views/plaid_items/_plaid_item.html.erb
@@ -92,7 +92,7 @@
<% end %>
- <% else %>
+ <% elsif Rails.env.development? %>
<%= icon(
"refresh-cw",
as_button: true,
diff --git a/db/migrate/20250513122703_add_uniqueness_to_subscriptions.rb b/db/migrate/20250513122703_add_uniqueness_to_subscriptions.rb
new file mode 100644
index 00000000..f97b67f9
--- /dev/null
+++ b/db/migrate/20250513122703_add_uniqueness_to_subscriptions.rb
@@ -0,0 +1,6 @@
+class AddUniquenessToSubscriptions < ActiveRecord::Migration[7.2]
+ def change
+ remove_index :subscriptions, :family_id
+ add_index :subscriptions, :family_id, unique: true
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 4de66be4..1f14a5c9 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -580,7 +580,7 @@ ActiveRecord::Schema[7.2].define(version: 2025_05_12_171654) do
t.datetime "trial_ends_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
- t.index ["family_id"], name: "index_subscriptions_on_family_id"
+ t.index ["family_id"], name: "index_subscriptions_on_family_id", unique: true
end
create_table "syncs", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
diff --git a/lib/tasks/stripe.rake b/lib/tasks/stripe.rake
new file mode 100644
index 00000000..7e2124de
--- /dev/null
+++ b/lib/tasks/stripe.rake
@@ -0,0 +1,28 @@
+namespace :stripe do
+ desc "Sync legacy Stripe subscriptions"
+ task sync_legacy_subscriptions: :environment do
+ cli = Stripe::StripeClient.new(ENV["STRIPE_SECRET_KEY"])
+
+ subs = cli.v1.subscriptions.list
+
+ subs.auto_paging_each do |sub|
+ details = sub.items.data.first
+
+ family = Family.find_by(stripe_customer_id: sub.customer)
+
+ if family.nil?
+ puts "Family not found for Stripe customer ID: #{sub.customer}, skipping"
+ next
+ end
+
+ family.subscription.update!(
+ stripe_id: sub.id,
+ status: sub.status,
+ interval: details.plan.interval,
+ amount: details.plan.amount / 100.0,
+ currency: details.plan.currency.upcase,
+ current_period_ends_at: Time.at(details.current_period_end)
+ )
+ end
+ end
+end