From c211322c5af4f2ab5b2e5ea62049ad8bd45a0011 Mon Sep 17 00:00:00 2001 From: Anthony Ettinger Date: Thu, 24 Sep 2026 14:20:18 +0000 Subject: [PATCH] Send a new campaign to its own page, where its video is MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Saving a campaign queues the five-second pre-roll and then pushed the advertiser to /dashboard/ads — the list. The card that reports render progress and serves the MP4 download is on the campaign page. So a video was generated every time and the person who asked for it was routed somewhere that never showed it, which from their seat is indistinguishable from nothing happening. Redirects to /dashboard/ads/ instead. The `?created=` it used to pass was never read by the list page, so nothing is lost. Also says so on the generate screen. The render takes a couple of minutes on a worker, so it is deliberately queued on save rather than blocking that screen; without a line saying where it went, a video that is merely still rendering looks like one that failed to generate. Co-Authored-By: Claude Opus 5 (1M context) --- app/(app)/dashboard/ads/new/form.tsx | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/app/(app)/dashboard/ads/new/form.tsx b/app/(app)/dashboard/ads/new/form.tsx index 848424c..89abb32 100644 --- a/app/(app)/dashboard/ads/new/form.tsx +++ b/app/(app)/dashboard/ads/new/form.tsx @@ -120,7 +120,12 @@ export function NewAdForm() { setError(res.error); return; } - router.push(`/dashboard/ads?created=${res.refSlug}`); + // The campaign page, not the list. Saving queues the five-second + // pre-roll render, and the card that reports its progress and serves the + // MP4 download lives on the campaign page — landing on the list meant a + // video was generated and the advertiser was sent somewhere that never + // showed it. (`?created=` was never read by the list page either.) + router.push(`/dashboard/ads/${res.id}`); }); } @@ -214,6 +219,15 @@ export function NewAdForm() { )} + {/* The pre-roll is rendered by a worker, which takes a couple of + minutes — so it is queued on save rather than blocking this + screen, and its progress and MP4 download appear on the campaign + page you land on next. Saying so here stops the video looking + like something that failed to generate. */} +
+ A five-second streaming pre-roll is rendered from this design when you + save. It appears on the campaign page, with an MP4 download, once ready. +
{DESIGN_FORMATS.map((f) => { const c = creatives.find((x) => x.format === f.id);