page.tsx81 lines · main
| 1 | import { DocsShell } from '../../components/shell'; |
| 2 | |
| 3 | export const metadata = { title: 'storage' }; |
| 4 | |
| 5 | export default function StoragePage() { |
| 6 | return ( |
| 7 | <DocsShell> |
| 8 | <h1 className="font-mono text-2xl tracking-tight">storage (S3)</h1> |
| 9 | <p className="mt-2 font-mono text-sm text-[var(--color-text-muted)]"> |
| 10 | per-project private buckets on briven MinIO. this is <strong className="text-[var(--color-text)]">file</strong>{' '} |
| 11 | storage for your app — not the SQL database (that is{' '} |
| 12 | <a className="underline" href="/doltgres"> |
| 13 | Doltgres |
| 14 | </a> |
| 15 | ) and not platform disaster-recovery backups. |
| 16 | </p> |
| 17 | |
| 18 | <div className="mt-6 rounded-md border border-[var(--color-border-subtle)] bg-[var(--color-surface)] p-4 font-mono text-xs text-[var(--color-text-muted)]"> |
| 19 | <strong className="text-[var(--color-text)]">three different “keys”.</strong> auth uses{' '} |
| 20 | <code>pk_briven_auth_…</code>. server data uses <code>brk_…</code>. storage uses{' '} |
| 21 | <code>brvn…</code> access keys for one bucket only. never mix them. |
| 22 | </div> |
| 23 | |
| 24 | <h2 className="mt-12 font-mono text-lg">what you get</h2> |
| 25 | <ul className="mt-3 list-disc pl-5 font-mono text-sm text-[var(--color-text-muted)] space-y-2"> |
| 26 | <li> |
| 27 | endpoint: <code>https://s3.briven.tech</code> |
| 28 | </li> |
| 29 | <li> |
| 30 | bucket: <code>proj-…</code> (one per project) |
| 31 | </li> |
| 32 | <li>scoped S3 keys from the dashboard (secret shown once)</li> |
| 33 | <li> |
| 34 | public files at <code>https://media.briven.tech/media/<projectId>/<fileId></code> |
| 35 | </li> |
| 36 | <li>soft-delete + restore (dashboard Recently deleted, or MCP restore tools)</li> |
| 37 | <li>image resize URLs (imgproxy) when configured</li> |
| 38 | </ul> |
| 39 | |
| 40 | <h2 className="mt-12 font-mono text-lg">dashboard</h2> |
| 41 | <ol className="mt-3 list-decimal pl-5 font-mono text-sm text-[var(--color-text-muted)] space-y-2"> |
| 42 | <li> |
| 43 | open{' '} |
| 44 | <a className="underline" href="https://briven.tech"> |
| 45 | briven.tech |
| 46 | </a>{' '} |
| 47 | → your project → <em>Storage</em> |
| 48 | </li> |
| 49 | <li> |
| 50 | create a key → copy endpoint, bucket, access key, secret immediately |
| 51 | </li> |
| 52 | <li>put them in your app server env (never in the browser for secret keys)</li> |
| 53 | </ol> |
| 54 | |
| 55 | <h2 className="mt-12 font-mono text-lg">cli</h2> |
| 56 | <p className="mt-3 font-mono text-sm text-[var(--color-text-muted)]"> |
| 57 | <code>briven setup</code> (new project) and <code>briven connect</code> (existing) always |
| 58 | mint a project S3 key into <code>.env.local</code> when possible. see{' '} |
| 59 | <a className="underline" href="/connect"> |
| 60 | connect |
| 61 | </a> |
| 62 | . |
| 63 | </p> |
| 64 | |
| 65 | <h2 className="mt-12 font-mono text-lg">mcp</h2> |
| 66 | <p className="mt-3 font-mono text-sm text-[var(--color-text-muted)]"> |
| 67 | with a project MCP key: <code>storage_upload_url</code>, <code>storage_list_files</code>,{' '} |
| 68 | <code>storage_delete_file</code>, <code>storage_list_deleted</code>,{' '} |
| 69 | <code>storage_restore_file</code>, <code>storage_mint_key</code>, and related tools. all |
| 70 | scoped to <em>this</em> project only. |
| 71 | </p> |
| 72 | |
| 73 | <h2 className="mt-12 font-mono text-lg">security</h2> |
| 74 | <ul className="mt-3 list-disc pl-5 font-mono text-sm text-[var(--color-text-muted)] space-y-2"> |
| 75 | <li>a project key cannot list another project's bucket (isolation)</li> |
| 76 | <li>prefer presigned upload URLs from the browser instead of proxying bytes</li> |
| 77 | <li>revoke keys that leaked in chat or screenshots</li> |
| 78 | </ul> |
| 79 | </DocsShell> |
| 80 | ); |
| 81 | } |