page.tsx28 lines · main
1import { AiExplainForm } from './ai-explain-form';
2import { AiSubnav } from '../ai-subnav';
3
4export const metadata = { title: 'ai explain' };
5export const dynamic = 'force-dynamic';
6
7export default async function AiExplainPage({ params }: { params: Promise<{ id: string }> }) {
8 const { id } = await params;
9 return (
10 <section className="flex flex-col gap-6">
11 <AiSubnav projectId={id} />
12 <header>
13 <h1 className="font-mono text-xl tracking-tight">ai explain</h1>
14 <p className="mt-1 font-mono text-sm text-[var(--color-text-muted)]">
15 paste any briven schema or function code and get a plain-english walkthrough framed in
16 briven idioms — what the wrapper means, which db calls happen, where reactivity hooks
17 in, and what would change if you flipped a query to a mutation.
18 </p>
19 <p className="mt-2 font-mono text-xs text-[var(--color-text-subtle)]">
20 your code is sent to a self-hosted Qwen 2.5-coder model on briven infrastructure — not
21 to any third-party AI provider. snippets and explanations are not logged.
22 </p>
23 </header>
24
25 <AiExplainForm projectId={id} />
26 </section>
27 );
28}