'use client'; import { useEffect, useState } from 'react'; import { apiFetch } from '@/lib/api'; import { Button } from '@/components/ui/button'; import { Textarea } from '@/components/input'; import { CodeBlock } from '@/components/code-block'; interface PromptData { builtin: string; override: string | null; updatedAt: string | null; } export default function AdminPromptPage() { const [data, setData] = useState(null); const [draft, setDraft] = useState(''); const [saving, setSaving] = useState(false); const [message, setMessage] = useState(null); async function reload() { const r = await apiFetch('/v1/admin/prompt'); setData(r); setDraft(r.override ?? r.builtin); } useEffect(() => { reload(); }, []); async function save() { if (!data) return; setSaving(true); setMessage(null); try { // Only persist as override if it differs from built-in const value = draft === data.builtin ? null : draft; await apiFetch('/v1/admin/prompt', { method: 'PATCH', body: JSON.stringify({ value }), }); setMessage(value === null ? 'Reverted to built-in prompt.' : 'Override saved.'); await reload(); } catch (e) { setMessage(`Failed: ${(e as Error).message}`); } finally { setSaving(false); } } async function revert() { if (!data) return; if (!confirm('Drop the override and use the built-in prompt?')) return; await apiFetch('/v1/admin/prompt', { method: 'PATCH', body: JSON.stringify({ value: null }) }); await reload(); setMessage('Reverted to built-in.'); } if (!data) return
Loading…
; const dirty = draft !== (data.override ?? data.builtin); const isOverridden = data.override !== null; return (

AI prompt

The system prompt the generator hands to Claude when parsing user requests. Override at your own risk — bad prompts cause low-quality builds.

Live prompt

{draft.length} chars