Skip to content

Vercel API always returns HTML: serverless function entrypoint not found due to outputDirectory mismatch #1003

Description

@hotlong

Bug Overview

On the current deployment, all /api/* requests return the Single-Page Application (SPA) HTML instead of invoking the intended serverless API function. This is blocking all API access in production (e.g., /api/v1/meta).


Root Cause Analysis

  • vercel.json sets outputDirectory: "dist", which means Vercel expects all serverless functions (e.g., api/index.js) to be emitted under dist/api/.
  • Current bundling script (scripts/bundle-api.mjs) outputs api/index.js at the project root, not under dist/.
  • As a result, Vercel fails to find the API function and falls back to the SPA route, returning HTML for all API calls.

Why the recent code changes (PR #1001) did not help

  • The PR swapped out the request listener for @hono/node-server/vercel's recommended handle() function but did not address the output path mismatch.
  • None of the recent fixes made the function discoverable under dist/.

Evidence

  • Current vercel.json:
    "outputDirectory": "dist",
    "rewrites": [
      { "source": "/api/(.*)", "destination": "/api" },
      { "source": "/((?!api/).*)", "destination": "/index.html" }
    ]
  • Build script (as of 2026-03-31):
    // scripts/bundle-api.mjs
    outfile: 'api/index.js' // should be 'dist/api/index.js'

Steps to reproduce

  1. Deploy current main branch to Vercel.
  2. Open /api/v1/meta or any /api/* endpoint.
  3. See HTML response instead of JSON.

Severity

  • Critical — All API functionality in Studio Vercel deployment is broken.

What needs to be fixed

  1. Update outfile: in bundle-api.mjs to dist/api/index.js.
  2. (Optional) Add Vercel functions config to be explicit about the function entrypoint.
  3. Ensure all references and docs expect the API output under dist/api/.

Acceptance Criteria

  • API routes return JSON, not HTML, in deployed Vercel preview/prod.
  • No 404/fallback rewrites for /api/* endpoints when API is present.
  • Build output and function location are consistent with Vercel config.

/cc @hotlong

Metadata

Metadata

Labels

bugSomething isn't working

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions