page.tsx228 lines · main
1export const metadata = { title: 'privacy policy' };
2
3export default function PrivacyPage() {
4 return (
5 <>
6 <h1 className="font-mono text-2xl text-[var(--color-text)]">privacy policy</h1>
7 <p className="mt-2 font-mono text-xs text-[var(--color-text-subtle)]">
8 last updated 2026-05-10 · phase 0 private alpha
9 </p>
10
11 <p className="mt-8">
12 This Privacy Policy explains what personal data the briven Service (briven.tech and any
13 subdomain) collects, why, and what you can do about it. The Service is operated by{' '}
14 <strong>flndrn Limited</strong> (the &ldquo;Operator&rdquo;, also the data controller
15 for the purposes of the EU General Data Protection Regulation), a company registered at
16 Arch. Makariou III 171, Vanezis Business Center 4th floor, 3027 Limassol, Cyprus.
17 Day-to-day development takes place in Flanders, Belgium. For brand and legal context see
18 the <a href="/terms" className="text-[var(--color-text-link)]">Terms of Service</a>.
19 </p>
20
21 <h2 className="mt-10 font-mono text-lg text-[var(--color-text)]">1. what we collect</h2>
22 <p>We process the following categories of personal data:</p>
23 <ul className="mt-2 list-disc pl-6">
24 <li>
25 <strong>Account data</strong> — email address (required), display name (optional),
26 OAuth provider identifier and avatar URL (only if you sign in via Google).
27 </li>
28 <li>
29 <strong>Project metadata</strong> — names you give projects, schemas you push,
30 deployment timestamps, and a per-project audit log of mutations (who did what, when).
31 </li>
32 <li>
33 <strong>Encrypted secrets</strong> — project env vars and API keys, encrypted at rest
34 with AES-256-GCM. The Operator can never read these without your authenticated request.
35 </li>
36 <li>
37 <strong>Operational telemetry</strong> — request paths, response codes, and latency on
38 the API and dashboard. We use these to debug and to bill function-invocation usage.
39 </li>
40 <li>
41 <strong>IP-derived identifiers</strong> — your IP address is hashed with a server-side
42 pepper at the moment a request is logged. The plaintext IP is never written to disk.
43 The hash is what appears in the audit log; it lets us correlate sessions for security
44 investigations without de-anonymising you.
45 </li>
46 <li>
47 <strong>Billing data</strong> (when paid tiers launch) — billing email and a token from
48 our payment processor. We do not store card or bank-account details on briven
49 infrastructure; the processor handles all of that.
50 </li>
51 </ul>
52
53 <h2 className="mt-10 font-mono text-lg text-[var(--color-text)]">2. what we do not collect</h2>
54 <ul className="mt-2 list-disc pl-6">
55 <li>
56 <strong>The contents of your customer database.</strong> We operate the Postgres
57 cluster and the runtime; we do not read your tables, rows, or function code outside of
58 the support paths you explicitly authenticate.
59 </li>
60 <li>
61 <strong>Third-party advertising cookies, marketing trackers, or session-replay tools.</strong>{' '}
62 briven.tech ships zero analytics scripts to your browser.
63 </li>
64 <li>
65 <strong>Plaintext IP addresses</strong>, browser fingerprints, or device identifiers
66 for advertising purposes.
67 </li>
68 </ul>
69
70 <h2 className="mt-10 font-mono text-lg text-[var(--color-text)]">3. why we process it</h2>
71 <p>The legal bases for processing under GDPR Article 6 are:</p>
72 <ul className="mt-2 list-disc pl-6">
73 <li>
74 <strong>Contract</strong> (Art. 6(1)(b)) — to provide you the Service you signed up
75 for: hosting your Postgres, running your functions, serving your dashboard.
76 </li>
77 <li>
78 <strong>Legitimate interests</strong> (Art. 6(1)(f)) — security, abuse prevention, and
79 operational debugging. The audit log and IP hashing fall under this basis.
80 </li>
81 <li>
82 <strong>Legal obligation</strong> (Art. 6(1)(c)) — when a court order, regulatory
83 subpoena, or DSA/DMA disclosure requirement compels us.
84 </li>
85 <li>
86 <strong>Consent</strong> (Art. 6(1)(a)) — currently used only for optional product
87 announcements; you can decline at sign-up and withdraw any time without affecting your
88 access to the Service.
89 </li>
90 </ul>
91
92 <h2 className="mt-10 font-mono text-lg text-[var(--color-text)]">4. who we share with</h2>
93 <p>
94 We share data only with the third-party processors listed at{' '}
95 <a href="/subprocessors" className="text-[var(--color-text-link)]">
96 briven.tech/subprocessors
97 </a>
98 . Each one is bound by a data-processing agreement that limits them to the purpose for
99 which we engage them. We do not sell personal data and do not rent it to advertisers.
100 We disclose data to law enforcement only when required by binding legal process and we
101 challenge over-broad demands where we can.
102 </p>
103
104 <h2 className="mt-10 font-mono text-lg text-[var(--color-text)]">5. retention</h2>
105 <ul className="mt-2 list-disc pl-6">
106 <li>
107 <strong>Account data</strong> — kept while your account is active. After account
108 closure: 30-day soft-delete window during which you can restore, then permanent erasure.
109 </li>
110 <li>
111 <strong>Project data</strong> — same: 30-day soft-delete after you close the project,
112 then permanent erasure including from backups within 90 days.
113 </li>
114 <li>
115 <strong>Audit logs</strong> — 13 months, then rotated. Required so we can investigate
116 security incidents that surface late.
117 </li>
118 <li>
119 <strong>Function invocation logs</strong> — 7 days for free-tier projects, 30 days for
120 paid tiers (when applicable). Customer-controlled retention is on the roadmap.
121 </li>
122 <li>
123 <strong>Backups</strong> — encrypted off-site backups are kept for 30 days then
124 rotated. A deletion request runs through the active store immediately; backup
125 deletion follows the 30-day rotation cycle.
126 </li>
127 </ul>
128
129 <h2 className="mt-10 font-mono text-lg text-[var(--color-text)]">6. security</h2>
130 <p>
131 TLS 1.3 on every public endpoint; AES-256-GCM for project env vars at rest; bcrypt for
132 password hashes; SHA-256 for API key hashes; constant-time comparison on every secret
133 check. SSH access to the host is key-only; root-password authentication is disabled.
134 Dependency updates roll weekly. No system is ever fully secure; if you discover a
135 vulnerability, please email <strong>security@flndrn.com</strong> rather than disclosing
136 publicly.
137 </p>
138
139 <h2 className="mt-10 font-mono text-lg text-[var(--color-text)]">
140 7. international transfers
141 </h2>
142 <p>
143 Your data is hosted in the EU (Hostinger Frankfurt VPS). Some of our subprocessors are
144 located outside the EU; transfers to those processors rely on Standard Contractual
145 Clauses approved by the European Commission, supplemented where appropriate by additional
146 technical and organisational measures (encryption at rest and in transit, minimisation
147 of data shared with each processor). The{' '}
148 <a href="/subprocessors" className="text-[var(--color-text-link)]">
149 subprocessors page
150 </a>{' '}
151 notes the location of each processor.
152 </p>
153
154 <h2 className="mt-10 font-mono text-lg text-[var(--color-text)]">8. your rights</h2>
155 <p>Under GDPR and equivalent laws, you have the right to:</p>
156 <ul className="mt-2 list-disc pl-6">
157 <li>
158 <strong>access</strong> the personal data we hold about you;
159 </li>
160 <li>
161 <strong>rectify</strong> inaccurate or incomplete data — most fields are user-editable
162 in the Settings page;
163 </li>
164 <li>
165 <strong>erase</strong> your data — open <a className="text-[var(--color-text-link)]" href="/dashboard/settings">Settings → Danger zone</a> and click <em>delete account</em>. We send a confirmation email the moment the request lands, soft-delete your projects and sole-owner orgs, revoke your API keys, and clear your PII (legal name, address, VAT id, display name, profile image) from our control plane. After the 30-day reversal window the row is hard-deleted and the data is unrecoverable. Multi-owner team orgs survive (you&apos;re removed from membership instead).
166 </li>
167 <li>
168 <strong>port</strong> your data — <code>briven export --with-data</code> produces a
169 portable JSON archive plus a pg_dump of every row;
170 </li>
171 <li>
172 <strong>restrict</strong> or <strong>object</strong> to a specific processing purpose;
173 </li>
174 <li>
175 <strong>withdraw</strong> any consent you previously gave;
176 </li>
177 <li>
178 <strong>complain</strong> to your local data protection authority. The Operator&rsquo;s
179 lead supervisory authority is the Belgian Data Protection Authority (Autorité de
180 protection des données / Gegevensbeschermingsautoriteit).
181 </li>
182 </ul>
183 <p className="mt-3">
184 To exercise any of these rights, email <strong>privacy@flndrn.com</strong>. We answer
185 within 72 hours and resolve within 30 days, extendable by 60 days for complex requests
186 (we will tell you).
187 </p>
188
189 <h2 className="mt-10 font-mono text-lg text-[var(--color-text)]">9. cookies</h2>
190 <p>
191 briven.tech sets exactly two cookies, both first-party and HTTP-only:
192 </p>
193 <ul className="mt-2 list-disc pl-6">
194 <li>
195 <strong>briven.session</strong> — your sign-in session, sent only to briven.tech and
196 its subdomains. Cleared on sign-out or after 30 days of inactivity.
197 </li>
198 <li>
199 <strong>briven.csrf</strong> — a per-session anti-CSRF token. Cleared with the session.
200 </li>
201 </ul>
202 <p className="mt-3">
203 We do not set advertising or analytics cookies. There is no consent banner because there
204 is nothing to consent to that we don&rsquo;t already need to operate the Service.
205 </p>
206
207 <h2 className="mt-10 font-mono text-lg text-[var(--color-text)]">10. children</h2>
208 <p>
209 briven is not directed to children under 16 and we do not knowingly collect their data.
210 If you believe a child has signed up, contact us and we will erase the account.
211 </p>
212
213 <h2 className="mt-10 font-mono text-lg text-[var(--color-text)]">11. updates</h2>
214 <p>
215 Material changes to this policy will be announced on briven.tech/changelog and emailed to
216 the address on your account at least 30 days before they take effect. The
217 &ldquo;last updated&rdquo; date at the top of this page reflects the most recent version.
218 </p>
219
220 <h2 className="mt-10 font-mono text-lg text-[var(--color-text)]">12. contact</h2>
221 <p>
222 Privacy questions and rights requests: <strong>privacy@flndrn.com</strong>. Until
223 brand-fronted email is fully wired up, this address forwards to{' '}
224 <strong>flandriendev@hotmail.com</strong>. We answer within 72 hours.
225 </p>
226 </>
227 );
228}