@@ -24,12 +24,13 @@ import { Label } from "~/components/primitives/Label";
2424import { NavBar , PageAccessories , PageTitle } from "~/components/primitives/PageHeader" ;
2525import { Paragraph } from "~/components/primitives/Paragraph" ;
2626import { TextLink } from "~/components/primitives/TextLink" ;
27+ import { InfoIconTooltip } from "~/components/primitives/Tooltip" ;
2728import { prisma } from "~/db.server" ;
2829import { featuresForRequest } from "~/features.server" ;
2930import { redirectWithErrorMessage , redirectWithSuccessMessage } from "~/models/message.server" ;
3031import { getBillingAlerts , setBillingAlert } from "~/services/platform.v3.server" ;
3132import { requireUserId } from "~/services/session.server" ;
32- import { formatCurrency } from "~/utils/numberFormatter" ;
33+ import { formatCurrency , formatNumber } from "~/utils/numberFormatter" ;
3334import {
3435 docsPath ,
3536 OrganizationParamsSchema ,
@@ -183,6 +184,8 @@ export default function Page() {
183184
184185 const checkboxLevels = [ 0.75 , 0.9 , 1.0 , 2.0 , 5.0 ] ;
185186
187+ const spikeAlertLevels = [ 10.0 , 20.0 , 50.0 , 100.0 ] ;
188+
186189 useEffect ( ( ) => {
187190 if ( alerts . emails . length > 0 ) {
188191 requestIntent ( form . ref . current ?? undefined , list . append ( emails . name ) ) ;
@@ -272,6 +275,39 @@ export default function Page() {
272275 ) ) }
273276 < FormError id = { alertLevels . errorId } > { alertLevels . error } </ FormError >
274277 </ InputGroup >
278+ < InputGroup fullWidth >
279+ < div className = "flex items-center gap-1" >
280+ < Label > Spike alerts</ Label >
281+ < InfoIconTooltip
282+ content = {
283+ "Catch runaway usage from bugs or errors. We recommend keeping these enabled as a safety net."
284+ }
285+ disableHoverableContent
286+ />
287+ </ div >
288+ { spikeAlertLevels . map ( ( level ) => (
289+ < CheckboxWithLabel
290+ name = { alertLevels . name }
291+ id = { `level_${ level } ` }
292+ key = { level }
293+ value = { level . toString ( ) }
294+ variant = "simple/small"
295+ label = {
296+ < span >
297+ { formatNumber ( level * 100 ) } %{ " " }
298+ < span className = "text-text-dimmed" >
299+ ({ formatCurrency ( Number ( dollarAmount ) * level , false ) } )
300+ </ span >
301+ </ span >
302+ }
303+ defaultChecked = {
304+ alerts . alertLevels . includes ( level ) ||
305+ ! spikeAlertLevels . some ( ( l ) => alerts . alertLevels . includes ( l ) )
306+ }
307+ className = "pr-0"
308+ />
309+ ) ) }
310+ </ InputGroup >
275311 < InputGroup fullWidth >
276312 < Label htmlFor = { emails . id } > Email addresses</ Label >
277313 { emailFields . map ( ( email , index ) => (
0 commit comments