diff --git a/dashboard/app/dashboard/layout.tsx b/dashboard/app/dashboard/layout.tsx
index 0416274..d8c4bc7 100644
--- a/dashboard/app/dashboard/layout.tsx
+++ b/dashboard/app/dashboard/layout.tsx
@@ -17,6 +17,16 @@ export default async function DashboardLayout({
{children}
+
);
}
diff --git a/dashboard/app/dashboard/reports/api-key-modal.tsx b/dashboard/app/dashboard/reports/api-key-modal.tsx
index e50be5d..9025204 100644
--- a/dashboard/app/dashboard/reports/api-key-modal.tsx
+++ b/dashboard/app/dashboard/reports/api-key-modal.tsx
@@ -18,6 +18,9 @@ export function ApiKeyModal({ open, status, onClose, onSaved }: Props) {
const [busy, setBusy] = useState(false);
const [error, setError] = useState(null);
+ const trimmed = value.trim();
+ const keyFormatOk = trimmed.startsWith("gsk_") && trimmed.length >= 20;
+
useEffect(() => {
const onKey = (e: KeyboardEvent) => { if (e.key === "Escape") onClose(); };
window.addEventListener("keydown", onKey);
@@ -105,7 +108,9 @@ export function ApiKeyModal({ open, status, onClose, onSaved }: Props) {
className="mb-2 w-full rounded border border-border bg-bg px-2 py-1.5 text-xs text-text outline-none transition-colors focus:border-purple disabled:opacity-50"
/>
- {error ? (
+ {trimmed.length > 0 && !trimmed.startsWith("gsk_") ? (
+ Key must start with gsk_
+ ) : error ? (
{error}
) : null}
@@ -135,7 +140,7 @@ export function ApiKeyModal({ open, status, onClose, onSaved }: Props) {