From 62f0ce6ddb9fba4c69318bb23fb0c73f35ac1c23 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 3 Jul 2026 00:25:42 +0000 Subject: [PATCH] Point /banner back to the tagged homepage URL Voting is over, so the Airtable form redirect is no longer needed. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_016MLgzHLgjgrz3Vz4N5Kamu --- web/next.config.mjs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/web/next.config.mjs b/web/next.config.mjs index ff8f5ae..2be9a29 100644 --- a/web/next.config.mjs +++ b/web/next.config.mjs @@ -45,13 +45,22 @@ const nextConfig = { }, async redirects() { return [ - // In-person event banner QR code → Airtable signup form. Temporary + // In-person event banner QR code → homepage, tagged so the traffic is + // attributable to the physical banner at the current event. Temporary // (not permanent) so /banner can be repointed at the next event without - // browsers having cached a permanent redirect. + // browsers having cached a permanent redirect. Current event: + // AI Engineer World's Fair. + // + // The destination is an absolute URL on purpose. A relative root-path + // destination ('/?utm_...') 500s under our OpenNext/Cloudflare runtime: + // its URL parser treats the empty path segment of '/?...' as the whole + // string and feeds '/?...' to path-to-regexp, which throws "Unexpected + // MODIFIER" on the bare '?'. Using the absolute form routes through the + // external-URL branch, which splits the path and query correctly. { source: '/banner', destination: - 'https://airtable.com/appc7B31aJRNN5e7C/pagbWLtcl8uDrKT8H/form?prefill_Company=recMG2qouUGyCdGJ6', + 'https://agentrelay.com/?utm_source=ai-engineer-worldfair&utm_medium=banner&utm_campaign=ai-engineer-worldfair-2026', permanent: false, }, // In-person event QR card → the relay GitHub repo, tagged like /banner