diff --git a/frontend/src/lib/api/builds.ts b/frontend/src/lib/api/builds.ts
index 900acf2..349c6e1 100644
--- a/frontend/src/lib/api/builds.ts
+++ b/frontend/src/lib/api/builds.ts
@@ -2,6 +2,7 @@ import { apiFetch, type ApiResult } from '$lib/api/client';
export type BuildLogEntry = {
step: number;
+ phase: string; // "pre-build", "recipe", or "post-build"
cmd: string;
stdout: string;
stderr: string;
diff --git a/frontend/src/routes/admin/templates/+page.svelte b/frontend/src/routes/admin/templates/+page.svelte
index 0d719bd..dde8fc3 100644
--- a/frontend/src/routes/admin/templates/+page.svelte
+++ b/frontend/src/routes/admin/templates/+page.svelte
@@ -521,6 +521,9 @@
{#if build.logs && build.logs.length > 0}
{#each build.logs as log, i (i)}
+ {@const isInternal = log.phase === 'pre-build' || log.phase === 'post-build'}
+ {@const recipeIdx = log.phase === 'recipe' ? build.logs.filter(l => l.phase === 'recipe' && l.step <= log.step).length : 0}
+ {@const phaseLabel = isInternal ? (log.phase === 'pre-build' ? 'Pre-build' : 'Post-build') : `Step ${recipeIdx}`}