Two usual suspects, check both:
1. next dev compiles every route on first request. On a small CI runner the first page.goto to each route can take longer than your whole test. Test against a production build in CI:
webServer: {
command: process.env.CI ? "npm run build && npm run start" : "npm run dev",
url: "http://localhost:3000",
reuseExistingServer: !process.env.CI,
timeout: 180_000,
stdout: "pipe",
},2. The app can't start at all in CI. Your .env.local isn't in the repo, so the Supabase/Stripe env vars are missing and the server throws on boot. stdout: "pipe" makes the server log show up in the Actions output, look there first. Add the vars as repository secrets and map them in the workflow's env:.