SPB Git forge

spb/polyllm

Public
15commits 1branches 0releases
2.2 MBsize
maindefault branch
13 days agolast push
TypeScript 97.4% SQL 1% JavaScript 0.9% CSS 0.6%
6.1 KB · 128 lines tsx
Raw Blame History
1import type { Metadata } from "next";2import { LegalPage } from "@/components/marketing/legal";34export const metadata: Metadata = {5  title: "Privacy Policy",6  description: "How PolyLLM handles your account, API keys, conversations and usage data. Short, honest and written for humans.",7  alternates: { canonical: "/privacy" },8};910export default function PrivacyPage() {11  return (12    <LegalPage13      eyebrow="Legal"14      title="Privacy Policy"15      updated="September 8, 2026"16      intro={17        <p>18          PolyLLM is a bring-your-own-keys workspace. That shapes everything about privacy here: we run the interface, you own the keys and the relationship with each AI provider. This policy explains, in plain terms, what we store, why, where it goes and how you get rid of it.19        </p>20      }21      sections={[22        {23          id: "what-we-collect",24          title: "What we collect",25          body: (26            <>27              <ul>28                <li>29                  <strong>Account:</strong> your name, email address and an Argon2id hash of your password. We never store the password itself.30                </li>31                <li>32                  <strong>Provider API keys:</strong> the keys you choose to connect, encrypted at rest with AES-256-GCM. Only a short hint (for example <code>sk-••••••••9A2K</code>) is ever displayed.33                </li>34                <li>35                  <strong>Conversations:</strong> the prompts you send, the responses you receive, attachments you upload, folders, presets and settings.36                </li>37                <li>38                  <strong>Usage metadata:</strong> per request, the model, token counts, latency, an estimated cost and an error code if one occurred. Never the prompt text itself in this table.39                </li>40                <li>41                  <strong>Audit and security logs:</strong> sign-ins, key changes, exports and deletions, with the IP address and browser user agent at the time, kept to protect your account.42                </li>43              </ul>44              <p>We do not use analytics trackers, advertising pixels or fingerprinting scripts.</p>45            </>46          ),47        },48        {49          id: "api-keys",50          title: "How your API keys are handled",51          body: (52            <>53              <p>54                Keys are encrypted before they are written to the database using AES-256-GCM with a server-held master key. They are decrypted in server memory only for the duration of a request to the provider you selected, and they are never sent to your browser, written to logs or shared with anyone.55              </p>56              <p>You can replace or remove a key at any time from Settings. Removing a key deletes the encrypted record immediately. You can also revoke a key from the provider&apos;s own console, which makes the stored copy useless.</p>57            </>58          ),59        },60        {61          id: "where-data-goes",62          title: "Where your data goes",63          body: (64            <>65              <p>66                When you send a message, its content (and any attachments the model supports) is transmitted from PolyLLM&apos;s server to <strong>the provider behind the model you picked</strong> and nowhere else: OpenAI, Anthropic, Google or xAI. Each provider processes that data under its own terms and privacy policy, using your account with them.67              </p>68              <p>We do not route requests through third-party inference brokers, and we do not use your prompts or responses to train anything.</p>69              <p>70                Transactional email (verification, password reset, security notices) is delivered through <strong>Resend</strong>, which receives your email address and the message content for that purpose only.71              </p>72            </>73          ),74        },75        {76          id: "storage",77          title: "Where your data is stored",78          body: (79            <p>80              Conversations, settings, usage records and encrypted keys are stored in PolyLLM&apos;s own PostgreSQL database. Backups are encrypted and retained for a limited period to recover from failures. Access is restricted to the operators of the service for maintenance and abuse prevention.81            </p>82          ),83        },84        {85          id: "your-controls",86          title: "Export and deletion",87          body: (88            <ul>89              <li>90                <strong>Export:</strong> download a complete JSON export of your conversations, settings and usage from Settings at any time.91              </li>92              <li>93                <strong>Delete a conversation or folder:</strong> removed immediately, including attachments and any public share link.94              </li>95              <li>96                <strong>Delete your account:</strong> after an email confirmation, every row associated with you is deleted, including encrypted keys, sessions and audit entries. Backups expire on their normal schedule.97              </li>98            </ul>99          ),100        },101        {102          id: "sharing",103          title: "Public share links",104          body: (105            <p>106              If you create a share link for a conversation, a frozen snapshot of its messages becomes readable by anyone with the link, without an account. Share pages are excluded from search engines. Revoking the link disables the page immediately.107            </p>108          ),109        },110        {111          id: "cookies",112          title: "Cookies",113          body: (114            <p>115              PolyLLM sets a small number of first-party cookies to keep you signed in and to protect against cross-site request forgery. They are HttpOnly and Secure. A preference cookie remembers your light or dark theme. There are no third-party or advertising cookies.116            </p>117          ),118        },119        {120          id: "changes",121          title: "Changes to this policy",122          body: <p>If we change how we handle your data in a meaningful way, we will update this page and notify you by email before the change takes effect.</p>,123        },124      ]}125    />126  );127}128