Openstatus www.openstatus.dev
at main 211 lines 5.4 kB view raw
1import { AVAILABLE_REGIONS, FREE_FLY_REGIONS } from "@openstatus/regions"; 2import type { WorkspacePlan } from "../workspaces/validation"; 3import type { Addons, PlanLimits, Price } from "./schema"; 4 5type PlanConfig = { 6 title: "Hobby" | "Starter" | "Pro"; 7 id: WorkspacePlan; 8 description: string; 9 price: Price; 10 addons: Partial<{ 11 [K in keyof Addons]: { 12 title: string; 13 description: string; 14 price: Price; 15 }; 16 }>; 17 limits: PlanLimits; 18}; 19 20// TODO: rename to `planConfig` 21export const allPlans: Record<WorkspacePlan, PlanConfig> = { 22 free: { 23 title: "Hobby", 24 id: "free", 25 description: "Perfect for personal projects", 26 price: { 27 USD: 0, 28 EUR: 0, 29 INR: 0, 30 }, 31 addons: {}, 32 limits: { 33 version: undefined, 34 monitors: 1, 35 "synthetic-checks": 30, 36 periodicity: ["10m", "30m", "1h"], 37 "multi-region": true, 38 "max-regions": 6, 39 "data-retention": "14 days", 40 "status-pages": 1, 41 "page-components": 3, 42 maintenance: true, 43 "monitor-values-visibility": true, 44 "response-logs": false, 45 screenshots: false, 46 otel: false, 47 "status-subscribers": false, 48 "custom-domain": false, 49 "password-protection": false, 50 "email-domain-protection": false, 51 "white-label": false, 52 notifications: true, 53 sms: false, 54 "sms-limit": 0, 55 pagerduty: false, 56 opsgenie: false, 57 whatsapp: false, 58 "notification-channels": 1, 59 members: 1, 60 "audit-log": false, 61 regions: [...FREE_FLY_REGIONS], 62 "private-locations": false, 63 }, 64 }, 65 starter: { 66 title: "Starter", 67 id: "starter", 68 description: "Perfect for uptime monitoring", 69 price: { 70 USD: 30, 71 EUR: 30, 72 INR: 3000, 73 }, 74 addons: { 75 "email-domain-protection": { 76 title: "Magic Link (Auth)", 77 description: 78 "Only allow user with a given email domain to access the status page.", 79 price: { 80 USD: 100, 81 EUR: 100, 82 INR: 10_000, 83 }, 84 }, 85 "white-label": { 86 title: "White Label", 87 description: 88 "Remove the 'powered by openstatus.dev' footer from your status pages.", 89 price: { 90 USD: 300, 91 EUR: 300, 92 INR: 30_000, 93 }, 94 }, 95 "status-pages": { 96 title: "Status Pages", 97 description: "Create and manage status pages for your workspace.", 98 price: { 99 USD: 20, 100 EUR: 20, 101 INR: 2_000, 102 }, 103 }, 104 }, 105 limits: { 106 version: undefined, 107 monitors: 20, 108 "synthetic-checks": 100, 109 periodicity: ["1m", "5m", "10m", "30m", "1h"], 110 "multi-region": true, 111 "max-regions": 6, 112 "data-retention": "3 months", 113 "status-pages": 1, 114 "page-components": 20, 115 maintenance: true, 116 "monitor-values-visibility": true, 117 "response-logs": true, 118 screenshots: true, 119 otel: false, 120 "status-subscribers": true, 121 "custom-domain": true, 122 "password-protection": true, 123 "email-domain-protection": false, 124 "white-label": false, 125 notifications: true, 126 pagerduty: true, 127 opsgenie: true, 128 whatsapp: true, 129 sms: true, 130 "sms-limit": 50, 131 "notification-channels": 10, 132 members: "Unlimited", 133 "audit-log": false, 134 regions: [...AVAILABLE_REGIONS], 135 "private-locations": false, 136 }, 137 }, 138 team: { 139 title: "Pro", 140 id: "team", 141 description: "Perfect for global synthetic monitoring", 142 price: { 143 USD: 100, 144 EUR: 100, 145 INR: 10_000, 146 }, 147 addons: { 148 "email-domain-protection": { 149 title: "Magic Link (Auth)", 150 description: 151 "Only allow user with a given email domain to access the status page.", 152 price: { 153 USD: 100, 154 EUR: 100, 155 INR: 10_000, 156 }, 157 }, 158 "white-label": { 159 title: "White Label", 160 description: 161 "Remove the 'powered by openstatus.dev' footer from your status pages.", 162 price: { 163 USD: 300, 164 EUR: 300, 165 INR: 30_000, 166 }, 167 }, 168 "status-pages": { 169 title: "Status Pages", 170 description: "Create and manage status pages for your workspace.", 171 price: { 172 USD: 20, 173 EUR: 20, 174 INR: 2_000, 175 }, 176 }, 177 }, 178 limits: { 179 version: undefined, 180 monitors: 50, 181 "synthetic-checks": 300, 182 periodicity: ["30s", "1m", "5m", "10m", "30m", "1h"], 183 "multi-region": true, 184 "max-regions": AVAILABLE_REGIONS.length, 185 "data-retention": "12 months", 186 "status-pages": 5, 187 "page-components": 50, 188 maintenance: true, 189 "monitor-values-visibility": true, 190 "response-logs": true, 191 screenshots: true, 192 otel: true, 193 "status-subscribers": true, 194 "custom-domain": true, 195 "password-protection": true, 196 "email-domain-protection": false, 197 "white-label": false, 198 notifications: true, 199 sms: true, 200 "sms-limit": 100, 201 pagerduty: true, 202 opsgenie: true, 203 whatsapp: true, 204 "notification-channels": 20, 205 members: "Unlimited", 206 "audit-log": true, 207 regions: [...AVAILABLE_REGIONS], 208 "private-locations": true, 209 }, 210 }, 211};