Remix deploy successful but I get 404 error

I deployed a new remix app, basic stack, the deploy is successful however browsing the wenbite I get the Netlify 404 page.
I downloaded the build output and it seems to have everything, it just doesn’t start the server.

My netlify site name: https://tangity-ne-request.netlify.app/

My netlify.toml:

[build]
  command = "remix build"
  publish = "public"

[dev]
  command = "remix watch"
  port = 3000

[[redirects]]
  from = "/*"
  to = "/.netlify/functions/server"
  status = 200

[[headers]]
  for = "/build/*"
  [headers.values]
    "Cache-Control" = "public, max-age=31536000, s-maxage=31536000"

My package.json (extract):

  "scripts": {
    "build": "run-s build:*",
    "build:css": "npm run sass:build",
    "build:remix": "remix build",
    "dev": "concurrently \"npm run sass\" \"remix dev\"",
    "sass:build": "sass --load-path=node_modules app/:app/",
  },
  "dependencies": {
    "@netlify/functions": "^1.4.0",
    "@prisma/client": "^4.9.0",
    "@radix-ui/react-dialog": "^1.0.2",
    "@radix-ui/react-select": "^1.0.0",
    "@radix-ui/react-toast": "^1.1.2",
    "@radix-ui/react-toggle-group": "^1.0.0",
    "@remix-run/css-bundle": "^1.12.0",
    "@remix-run/netlify": "^1.15.0",
    "@remix-run/node": "^1.12.0",
    "@remix-run/react": "^1.12.0",
    "@remix-run/serve": "^1.15.0",
    "@remix-run/server-runtime": "^1.12.0",
    "@tanstack/react-table": "^8.7.9",
    "bcryptjs": "^2.4.3",
    "chart.js": "^4.2.0",
    "downshift": "^7.6.0",
    "gsap": "^3.11.4",
    "isbot": "^3.6.5",
    "react": "^18.2.0",
    "react-chartjs-2": "^5.2.0",
    "react-dom": "^18.2.0",
    "remix-utils": "^6.0.0",
    "tiny-invariant": "^1.3.1"
  },
  "devDependencies": {
    "@remix-run/dev": "^1.12.0",
    "@remix-run/eslint-config": "^1.12.0",
    "@testing-library/dom": "^9.2.0",
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^14.0.0",
    "@testing-library/user-event": "^14.4.3",
    "@types/bcryptjs": "^2.4.2",
    "@types/eslint": "^8.4.10",
    "@types/node": "^18.11.18",
    "@types/react": "^18.0.26",
    "@types/react-dom": "^18.0.10",
    "@vitejs/plugin-react": "^3.0.1",
    "@vitest/coverage-c8": "^0.27.2",
    "autoprefixer": "^10.4.13",
    "binode": "^1.0.5",
    "c8": "^7.12.0",
    "concurrently": "^8.0.1",
    "cookie": "^0.5.0",
    "cross-env": "^7.0.3",
    "esbuild-register": "^3.4.2",
    "eslint": "^8.32.0",
    "eslint-config-prettier": "^8.6.0",
    "happy-dom": "^8.1.4",
    "msw": "^1.2.1",
    "npm-run-all": "^4.1.5",
    "postcss": "^8.4.21",
    "prettier": "^2.8.3",
    "prisma": "^4.9.0",
    "sass": "^1.58.0",
    "start-server-and-test": "^2.0.0",
    "ts-node": "^10.9.1",
    "tsconfig-paths": "^4.1.2",
    "typescript": "^4.9.4",
    "vite": "^4.0.4",
    "vite-tsconfig-paths": "^3.6.0",
    "vitest": "^0.27.2"
  },
  "engines": {
    "node": ">=14"
  },

Build log:

2:17:55 PM: build-image version: 91488c6c0412f5c1c00fb34eff5c1fc41a32bce9 (focal)
2:17:55 PM: buildbot version: 91488c6c0412f5c1c00fb34eff5c1fc41a32bce9
2:17:55 PM: Fetching cached dependencies
2:17:55 PM: Failed to fetch cache, continuing with build
2:17:55 PM: Starting to prepare the repo for build
2:17:55 PM: No cached dependencies found. Cloning fresh repo
2:17:55 PM: git clone --filter=blob:none https://github.com/tan-git-y/ne-requests
2:17:56 PM: Preparing Git Reference refs/heads/main
2:17:57 PM: Parsing package.json dependencies
2:17:58 PM: Starting to install dependencies
2:17:58 PM: Python version set to 3.8
2:17:58 PM: Attempting Ruby version 2.7.2, read from environment
2:17:59 PM: Using Ruby version 2.7.2
2:17:59 PM: Started restoring cached go cache
2:17:59 PM: Finished restoring cached go cache
2:17:59 PM: Installing Go version 1.19.5 (requested 1.19.5)
2:18:04 PM: go version go1.19.5 linux/amd64
2:18:04 PM: Using PHP version 8.0
2:18:05 PM: v16.20.0 is already installed.
2:18:05 PM: Now using node v16.20.0 (npm v8.19.4)
2:18:05 PM: Enabling Node.js Corepack
2:18:05 PM: Started restoring cached build plugins
2:18:05 PM: Finished restoring cached build plugins
2:18:05 PM: Started restoring cached corepack dependencies
2:18:05 PM: Finished restoring cached corepack dependencies
2:18:05 PM: No npm workspaces detected
2:18:05 PM: Started restoring cached node modules
2:18:05 PM: Finished restoring cached node modules
2:18:06 PM: Installing npm packages using npm version 8.19.4
2:18:37 PM: npm WARN deprecated sourcemap-codec@1.4.8: Please use @jridgewell/sourcemap-codec instead
2:18:38 PM: npm WARN deprecated rollup-plugin-inject@3.0.2: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.
2:18:41 PM: npm WARN deprecated @npmcli/move-file@1.1.2: This functionality has been moved to @npmcli/fs
2:18:51 PM: added 1245 packages, and audited 1246 packages in 46s
2:18:51 PM: 262 packages are looking for funding
2:18:51 PM:   run `npm fund` for details
2:18:51 PM: found 0 vulnerabilities
2:18:51 PM: npm packages installed
2:18:52 PM: Install dependencies script success
2:18:52 PM: Starting build script
2:18:52 PM: Detected 2 framework(s)
2:18:52 PM: "remix" at version "1.15.0"
2:18:52 PM: "vite" at version "4.2.1"
2:18:52 PM: Section completed: initializing
2:18:54 PM: ​
2:18:54 PM:   Netlify Build                                                 
2:18:54 PM: ────────────────────────────────────────────────────────────────
2:18:54 PM: ​
2:18:54 PM: ❯ Version
2:18:54 PM:   @netlify/build 29.9.2
2:18:54 PM: ​
2:18:54 PM: ❯ Flags
2:18:54 PM:   baseRelDir: true
2:18:54 PM:   buildId: 643d38efffa4c00efa3384a7
2:18:54 PM:   deployId: 643d38efffa4c00efa3384a9
2:18:54 PM: ​
2:18:54 PM: ❯ Current directory
2:18:54 PM:   /opt/build/repo
2:18:54 PM: ​
2:18:54 PM: ❯ Config file
2:18:54 PM:   /opt/build/repo/netlify.toml
2:18:54 PM: ​
2:18:54 PM: ❯ Context
2:18:54 PM:   production
2:18:54 PM: ​
2:18:54 PM:   1. build.command from netlify.toml                            
2:18:54 PM: ────────────────────────────────────────────────────────────────
2:18:54 PM: ​
2:18:54 PM: $ remix build
2:18:54 PM: Building Remix app in production mode...
2:18:55 PM: ⚠️ REMIX FUTURE CHANGE: APIs that provide `formMethod` will be changing in v2. All values will be uppercase (GET, POST, etc.) instead of lowercase (get, post, etc.) You can prepare for this change at your convenience with the `v2_normalizeFormMethod` future flag. For instructions on making this change see https://remix.run/docs/en/v1.15.0/pages/v2#formMethod
2:18:55 PM: ⚠️ REMIX FUTURE CHANGE: The route `meta` export signature is changing in v2You can prepare for this change at your convenience with the `v2_meta` future flag. For instructions on making this change see https://remix.run/docs/en/v1.15.0/pages/v2#meta
2:18:55 PM: Built in 512ms
2:18:55 PM: ​
2:18:55 PM: (build.command completed in 1.2s)
2:18:55 PM: ​
2:18:55 PM:   2. Deploy site                                                
2:18:55 PM: ────────────────────────────────────────────────────────────────
2:18:55 PM: ​
2:18:55 PM: Starting to deploy site from 'public'
2:18:55 PM: Calculating files to upload
2:18:55 PM: 34 new files to upload
2:18:55 PM: 0 new functions to upload
2:18:55 PM: Section completed: deploying
2:18:55 PM: Site deploy was successfully initiated
2:18:55 PM: Starting post processing
2:18:55 PM: ​
2:18:55 PM: (Deploy site completed in 383ms)
2:18:55 PM: ​
2:18:56 PM: Post processing - HTML
2:18:55 PM: The build completed successfully, but the following processes were still running:
2:18:55 PM: ​
2:18:55 PM:    - /opt/build/repo/node_modules/@esbuild/linux-x64/bin/esbuild --service=0.16.3 --ping
2:18:55 PM: ​
2:18:56 PM: Post processing - header rules
2:18:55 PM: These processes have been terminated. In case this creates a problem for your build, refer to this article for details about why this process termination happens and how to fix it.
2:18:55 PM: ​
2:18:55 PM:   Netlify Build Complete                                        
2:18:56 PM: Post processing - redirect rules
2:18:55 PM: ────────────────────────────────────────────────────────────────
2:18:55 PM: ​
2:18:55 PM: (Netlify Build completed in 1.6s)
2:18:56 PM: Caching artifacts
2:18:56 PM: Post processing done
2:18:56 PM: Started saving node modules
2:18:56 PM: Finished saving node modules
2:18:56 PM: Section completed: postprocessing
2:18:56 PM: Started saving build plugins
2:18:56 PM: Finished saving build plugins
2:18:56 PM: Started saving corepack cache
2:18:56 PM: Finished saving corepack cache
2:18:56 PM: Started saving pip cache
2:18:56 PM: Finished saving pip cache
2:18:56 PM: Started saving emacs cask dependencies
2:18:56 PM: Finished saving emacs cask dependencies
2:18:56 PM: Started saving maven dependencies
2:18:56 PM: Finished saving maven dependencies
2:18:56 PM: Started saving boot dependencies
2:18:56 PM: Finished saving boot dependencies
2:18:56 PM: Started saving rust rustup cache
2:18:56 PM: Finished saving rust rustup cache
2:18:57 PM: Site is live ✨
2:18:56 PM: Started saving go dependencies
2:18:56 PM: Finished saving go dependencies
2:18:56 PM: Build script success
2:18:56 PM: Section completed: building
2:18:57 PM: Uploading Cache of size 176.1MB
2:18:58 PM: Section completed: cleanup
2:18:58 PM: Finished processing build request in 1m3.63s

Does this work locally? I also recommend you check out the support guide below.

If you are still seeing issues after following the troubleshooting steps in there, please check out this Support Guide as well. It outlines all of our build and deploy resources and will get you on the right track :slight_smile:

Just found the issue: for a remix app I need a server.ts in the project root and a custom configuration in the remix.config, like the netlify template: GitHub - netlify/remix-template: Deploy your Remix site to Netlify Edge Functions

Awesome! I’m glad you found your solution.