page.tsx188 lines · main
1import Link from 'next/link';
2
3import { DocsShell } from '../../components/shell';
4
5export const metadata = { title: 'service level agreement' };
6
7export default function SlaPage() {
8 return (
9 <DocsShell>
10 <h1 className="font-mono text-2xl tracking-tight">service level agreement</h1>
11 <p className="mt-2 font-mono text-sm text-[var(--color-text-muted)]">
12 the uptime briven commits to per tier, how monthly credits are calculated when we miss it,
13 and what counts as "downtime" for purposes of this agreement. effective date{' '}
14 <strong>2026-05-21</strong> (Phase 4 public-beta launch). free-tier projects are best-effort
15 with no contractual commitment.
16 </p>
17
18 <Section title="commitments">
19 <table className="mt-2 w-full border-collapse font-mono text-xs">
20 <thead>
21 <tr className="border-b border-[var(--color-border-subtle)] text-left text-[var(--color-text-muted)]">
22 <th className="py-2 pr-4 font-normal">tier</th>
23 <th className="py-2 pr-4 font-normal">monthly uptime target</th>
24 <th className="py-2 pr-4 font-normal">credit if missed</th>
25 </tr>
26 </thead>
27 <tbody className="text-[var(--color-text)]">
28 <tr className="border-b border-[var(--color-border-subtle)]">
29 <td className="py-2 pr-4">free</td>
30 <td className="py-2 pr-4 text-[var(--color-text-subtle)]">best-effort</td>
31 <td className="py-2 pr-4 text-[var(--color-text-subtle)]">none</td>
32 </tr>
33 <tr className="border-b border-[var(--color-border-subtle)]">
34 <td className="py-2 pr-4">pro</td>
35 <td className="py-2 pr-4">99.5%</td>
36 <td className="py-2 pr-4">see schedule below</td>
37 </tr>
38 <tr>
39 <td className="py-2 pr-4">team</td>
40 <td className="py-2 pr-4">99.9%</td>
41 <td className="py-2 pr-4">see schedule below</td>
42 </tr>
43 </tbody>
44 </table>
45 </Section>
46
47 <Section title="what counts as the platform being up">
48 <p>three signals, measured externally from outside the briven infrastructure:</p>
49 <ul className="list-disc pl-5">
50 <li>
51 <code>api.briven.tech/ready</code> returns HTTP 200 within 5 seconds. probes every 60s.
52 </li>
53 <li>
54 <code>realtime.briven.tech/ready</code> returns HTTP 200 within 5 seconds. probes every
55 60s.
56 </li>
57 <li>
58 a function invocation to a healthy deployment in your project returns within 10 seconds
59 for at least one randomly selected hosted project per region. probes every 5 minutes.
60 </li>
61 </ul>
62 <p>
63 a probe failure counts as downtime when at least three consecutive probes fail (so a
64 single packet drop doesn't trigger the SLA). downtime accumulates per calendar month UTC.
65 the monthly uptime % is calculated as{' '}
66 <code>1 - (downtime_minutes / total_minutes_in_month)</code>.
67 </p>
68 </Section>
69
70 <Section title="credit schedule">
71 <p>
72 if your tier's monthly uptime falls below the commitment, your next monthly invoice is
73 credited per the table below. credits are automatic — you don't need to file a ticket
74 unless we miss applying the credit, but you can confirm via <code>briven doctor --month</code>{' '}
75 or the dashboard billing page.
76 </p>
77 <table className="mt-2 w-full border-collapse font-mono text-xs">
78 <thead>
79 <tr className="border-b border-[var(--color-border-subtle)] text-left text-[var(--color-text-muted)]">
80 <th className="py-2 pr-4 font-normal">measured uptime</th>
81 <th className="py-2 pr-4 font-normal">pro credit</th>
82 <th className="py-2 pr-4 font-normal">team credit</th>
83 </tr>
84 </thead>
85 <tbody className="text-[var(--color-text)]">
86 <tr className="border-b border-[var(--color-border-subtle)]">
87 <td className="py-2 pr-4">target met</td>
88 <td className="py-2 pr-4 text-[var(--color-text-subtle)]">—</td>
89 <td className="py-2 pr-4 text-[var(--color-text-subtle)]">—</td>
90 </tr>
91 <tr className="border-b border-[var(--color-border-subtle)]">
92 <td className="py-2 pr-4">&lt; tier target but ≥ 99.0%</td>
93 <td className="py-2 pr-4">10% of the month&apos;s subscription</td>
94 <td className="py-2 pr-4">10% of the month&apos;s subscription</td>
95 </tr>
96 <tr className="border-b border-[var(--color-border-subtle)]">
97 <td className="py-2 pr-4">&lt; 99.0% but ≥ 95.0%</td>
98 <td className="py-2 pr-4">25%</td>
99 <td className="py-2 pr-4">25%</td>
100 </tr>
101 <tr>
102 <td className="py-2 pr-4">&lt; 95.0%</td>
103 <td className="py-2 pr-4">50%</td>
104 <td className="py-2 pr-4">50%</td>
105 </tr>
106 </tbody>
107 </table>
108 <p className="mt-3 text-[var(--color-text-subtle)]">
109 credit applies to the affected month&apos;s subscription fee. overage and metered usage
110 aren&apos;t credited. credits never roll over into cash refunds; they offset future
111 invoices.
112 </p>
113 </Section>
114
115 <Section title="what's excluded">
116 <p>downtime caused by any of the following does not count against the SLA:</p>
117 <ul className="list-disc pl-5">
118 <li>scheduled maintenance announced ≥ 48h in advance on the status page</li>
119 <li>incidents caused by the customer's own code (e.g. a function that 500s under load) or by the customer&apos;s own configuration changes</li>
120 <li>incidents caused by upstream provider failures (Hostinger, Cloudflare, Polar, Mittera) where briven&apos;s mitigation is to wait for the upstream</li>
121 <li>force majeure: natural disasters, war, government action, internet-scale BGP events</li>
122 <li>any period during which the customer is in breach of the Terms of Service or has overdue invoices</li>
123 <li>downtime affecting only free-tier projects — they&apos;re best-effort by design</li>
124 </ul>
125 </Section>
126
127 <Section title="how downtime is measured">
128 <p>
129 briven publishes its own external probes at{' '}
130 <Link
131 href="/status"
132 className="text-[var(--color-text-link)] underline-offset-2 hover:underline"
133 >
134 docs.briven.tech/status
135 </Link>{' '}
136 and{' '}
137 <Link
138 href="https://briven.tech/status"
139 className="text-[var(--color-text-link)] underline-offset-2 hover:underline"
140 >
141 briven.tech/status
142 </Link>
143 . additionally, a third-party probe (Uptime Kuma on a separate provider) records minute-
144 level availability for each public surface. monthly uptime is calculated from the
145 third-party probe data — never from internal logs alone.
146 </p>
147 <p>
148 on disagreement, the third-party probe&apos;s record is authoritative for the calculation;
149 customers may inspect the same data at the public status page&apos;s history view.
150 </p>
151 </Section>
152
153 <Section title="filing a claim">
154 <p>
155 credits are automatic and applied to the next invoice. if you believe a credit was missed,
156 email{' '}
157 <a href="mailto:billing@flndrn.com" className="text-[var(--color-text-link)] hover:underline">
158 billing@flndrn.com
159 </a>{' '}
160 within 30 days of the affected month with your project id and the time window in
161 question. claims older than 30 days are ineligible.
162 </p>
163 </Section>
164
165 <Section title="changes to this SLA">
166 <p>
167 briven may update the SLA with 30 days&apos; notice posted to the public changelog. the
168 version of this page in effect on the first day of your billing month governs that
169 month&apos;s credits.
170 </p>
171 </Section>
172
173 <p className="mt-12 font-mono text-xs text-[var(--color-text-subtle)]">
174 flndrn Limited, Limassol, Cyprus · this document is the SLA referenced in the briven Terms
175 of Service.
176 </p>
177 </DocsShell>
178 );
179}
180
181function Section({ title, children }: { title: string; children: React.ReactNode }) {
182 return (
183 <section className="mt-10 flex flex-col gap-3 font-sans text-sm text-[var(--color-text-muted)]">
184 <h2 className="font-mono text-lg tracking-tight text-[var(--color-text)]">{title}</h2>
185 {children}
186 </section>
187 );
188}