+ {billing.cancel_at_period_end && renewal && (
+
+ Your subscription is set to downgrade to Free on {renewal}. You can
+ reactivate from the billing portal before then.
+
+ )}
+
+ {billing.plan_status === "past_due" && (
+
+ Your last payment failed. Update your payment method in the billing
+ portal to keep Pro features active.
+
+ )}
+
+
+
+
+
+
+ Llink Pro
+
+
+
+ {cadenceLabel} · {formatCents(perSeatCents)} per seat / month
+
+
+
Pro
+
+
+
+
+ - Seats
+ - {billing.seats}
+ -
+ {billing.cancel_at_period_end ? "Ends" : "Renews"}
+
+ - {renewal ?? "—"}
+
+
+
+
+
+
+
+
+ Seats are synced automatically when you add or remove members. Changes
+ are prorated.
+
+
+ );
+}
+
+export default function NetworkBillingPage() {
+ const navigate = useNavigate();
+ const { networkId } = useParams<{ networkId: string }>();
+ const { data: networks } = useNetworks();
+ const network = networks?.find((n) => n.id === networkId);
+ const currentUser = useAuthStore((s) => s.user);
+ const isAdmin = currentUser?.id === network?.admin_human.id;
+
+ const { data: billing, isLoading, error } = useNetworkBilling(
+ isAdmin ? networkId : undefined,
+ );
+
+ const networkName = network?.name ?? "Network";
+
+ return (
+