diff --git a/.gitignore b/.gitignore
index 45bcd91155..25428ac89a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -100,6 +100,9 @@ supabase/.temp
# linter cache
.eslintcache
+# Expo cache (any Expo app in the repo)
+**/.expo/
+
# husky generated hook shims
.husky/_/
@@ -117,3 +120,11 @@ run-milvus-test.sh
.beads/
.env*.local
.tests/
+
+# Ignore stray .env-prefixed files but preserve committed example/test/envrc files.
+.env
+.env.*
+!.env.example
+!.env.*.example
+!.env.test
+!.envrc
diff --git a/apps/web/src/app/admin/api/organizations/hooks.ts b/apps/web/src/app/admin/api/organizations/hooks.ts
index f89a1885fc..bd5359ab49 100644
--- a/apps/web/src/app/admin/api/organizations/hooks.ts
+++ b/apps/web/src/app/admin/api/organizations/hooks.ts
@@ -4,6 +4,7 @@ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { useInvalidateAllOrganizationData } from '@/app/api/organizations/hooks';
import { useTRPC } from '@/lib/trpc/utils';
import type { OrganizationPlan } from '@/lib/organizations/organization-types';
+import type { StripeSubscriptionStatusValue } from '@/lib/admin/stripe-subscription-statuses';
export function useDeleteOrganization() {
const queryClient = useQueryClient();
@@ -69,9 +70,9 @@ type UseOrganizationsListParams = {
sortBy: OrganizationSortableField;
sortOrder: 'asc' | 'desc';
search: string;
- seatsRequired?: string;
- hasBalance?: string;
- status?: string;
+ mode?: 'paying' | 'trial' | 'all';
+ include_deleted?: boolean;
+ stripe_status?: string;
plan?: string;
};
@@ -84,9 +85,9 @@ export function useOrganizationsList(params: UseOrganizationsListParams) {
sortBy: params.sortBy,
sortOrder: params.sortOrder,
search: params.search,
- seatsRequired: params.seatsRequired as '' | 'true' | 'false' | undefined,
- hasBalance: params.hasBalance as '' | 'true' | 'false' | undefined,
- status: params.status as 'active' | 'all' | 'incomplete' | 'deleted' | undefined,
+ mode: params.mode,
+ include_deleted: params.include_deleted ?? false,
+ stripe_status: params.stripe_status as StripeSubscriptionStatusValue | '' | undefined,
plan: params.plan as '' | OrganizationPlan | undefined,
})
);
diff --git a/apps/web/src/app/admin/components/AppSidebar.tsx b/apps/web/src/app/admin/components/AppSidebar.tsx
index e0f0881db5..d1ed1c5916 100644
--- a/apps/web/src/app/admin/components/AppSidebar.tsx
+++ b/apps/web/src/app/admin/components/AppSidebar.tsx
@@ -5,6 +5,7 @@ import {
Users,
DollarSign,
Building2,
+ Clock,
Shield,
Ban,
Database,
@@ -66,6 +67,11 @@ const userManagementItems: MenuItem[] = [
url: '/admin/organizations',
icon: () =>