aboutsummaryrefslogtreecommitdiff
path: root/web/ui/src/lib/plans.ts
diff options
context:
space:
mode:
authorbenj <benj@rse8.com>2026-04-10 11:13:34 +0800
committerbenj <benj@rse8.com>2026-04-10 11:13:34 +0800
commit493746b14c1251a45b061d2e3edd9160c929d2b9 (patch)
tree1607cceb94c1aac1a17a01bb5c0d71b97342e892 /web/ui/src/lib/plans.ts
parentc041641634650c31e03c70dcad132fd94cb08e63 (diff)
downloadtidyindex-493746b14c1251a45b061d2e3edd9160c929d2b9.tar
tidyindex-493746b14c1251a45b061d2e3edd9160c929d2b9.tar.gz
tidyindex-493746b14c1251a45b061d2e3edd9160c929d2b9.tar.bz2
tidyindex-493746b14c1251a45b061d2e3edd9160c929d2b9.tar.lz
tidyindex-493746b14c1251a45b061d2e3edd9160c929d2b9.tar.xz
tidyindex-493746b14c1251a45b061d2e3edd9160c929d2b9.tar.zst
tidyindex-493746b14c1251a45b061d2e3edd9160c929d2b9.zip
a basic ui and landing web interface for tidyindex.com
Diffstat (limited to 'web/ui/src/lib/plans.ts')
-rw-r--r--web/ui/src/lib/plans.ts82
1 files changed, 82 insertions, 0 deletions
diff --git a/web/ui/src/lib/plans.ts b/web/ui/src/lib/plans.ts
new file mode 100644
index 0000000..bf6c474
--- /dev/null
+++ b/web/ui/src/lib/plans.ts
@@ -0,0 +1,82 @@
+export type PlanId = 'free' | 'dev' | 'pro' | 'enterprise';
+
+export interface Plan {
+ id: PlanId;
+ name: string;
+ price: number | null; // null = custom / contact us
+ priceLabel: string;
+ period: string;
+ requestsPerMonth: number; // Infinity for enterprise
+ maxKeys: number; // Infinity for enterprise
+ features: string[];
+ cta: string;
+}
+
+export const PLANS: Record<PlanId, Plan> = {
+ free: {
+ id: 'free',
+ name: 'Free',
+ price: 0,
+ priceLabel: '$0',
+ period: 'forever',
+ requestsPerMonth: 1_000,
+ maxKeys: 1,
+ features: [
+ '1,000 requests per month',
+ '1 API key',
+ 'JSON + JSONL access',
+ 'Community support'
+ ],
+ cta: 'Switch to Free'
+ },
+ dev: {
+ id: 'dev',
+ name: 'Developer',
+ price: 100,
+ priceLabel: '$100',
+ period: '/ month',
+ requestsPerMonth: 50_000,
+ maxKeys: 5,
+ features: [
+ '50,000 requests per month',
+ '5 API keys',
+ 'All response shapes',
+ 'Email support'
+ ],
+ cta: 'Switch to Developer'
+ },
+ pro: {
+ id: 'pro',
+ name: 'Professional',
+ price: 1000,
+ priceLabel: '$1,000',
+ period: '/ month',
+ requestsPerMonth: 500_000,
+ maxKeys: 20,
+ features: [
+ '500,000 requests per month',
+ '20 API keys',
+ 'Priority support',
+ 'SLA on uptime'
+ ],
+ cta: 'Switch to Pro'
+ },
+ enterprise: {
+ id: 'enterprise',
+ name: 'Enterprise',
+ price: null,
+ priceLabel: 'Custom',
+ period: '',
+ requestsPerMonth: Number.POSITIVE_INFINITY,
+ maxKeys: Number.POSITIVE_INFINITY,
+ features: [
+ 'Unlimited requests',
+ 'Unlimited keys',
+ 'Dedicated support',
+ 'Custom datasets and SLAs'
+ ],
+ cta: 'Contact us'
+ }
+};
+
+export const PLAN_ORDER: PlanId[] = ['free', 'dev', 'pro', 'enterprise'];