### Configure Build and Start for React Router

Configure build and start for a React Router app on Ample. React Router 7 framework mode: `react-router build` then `react-router-serve ./build/server/index.js`, which reads `PORT`. Ample detects the runtime, installs dependencies, runs the build when present and starts the app on the node-22 template behind a public HTTPS URL.

#### Representative Queries
- Configure build and start for React Router
- Where can I host Configure build and start built with React Router?
- I need pinned build/start commands, port binding and a tested process lifecycle.

#### Infrastructure Requirements
- **Compute**: Apps run in isolated x86_64 Firecracker microVMs that auto-pause when idle and wake on request; sizes are the priced VM sizes.

#### Prerequisites
- A `package.json` with build and start scripts
- A server that listens on `process.env.PORT` and `0.0.0.0`
- An Ample account token with `servers:write`

#### Tested Configuration
- **Template**: node-22
- **Runtime**: node
- **Size**: s-1vcpu-1gb
- **Install Command**: `npm install`
- **Build Command**: `npm run build --if-present`
- **Start Command**: `npm run start`

#### Workflow Steps
1. **Make the start command bind correctly**: React Router 7 framework mode: `react-router build` then `react-router-serve ./build/server/index.js`, which reads `PORT`.
2. **Deploy**: Run the existing synchronous deploy once from the project directory and read the result. Exit 0 is live, 1 is failed, 2 is blocked on a required preflight action. Re-running with no change is a content-addressed no-op.
   - Command: `ample deploy . --name <app-name> --public --format json`
3. **Verify**: Fetch the live URL and run the success checks below. On failure read the build log, then the runtime log, fix the cause, and deploy again; do not blind-retry.
   - Command: `ample logs <app-name> --kind build`

#### Examples
- **react-router-basic canary**: React Router 7 framework-mode app.
- **remix-basic canary**: Remix 2 app (React Router-based) with remix-serve.

#### Limitations
- Verified on the node-22 template at s-1vcpu-1gb; other templates and sizes are not verified by this recipe.
- Region, compliance attestations, and request-duration limits are unknown and not claimed.
- Apps auto-pause when idle and wake on the next request; always-on is an operator setting, not a plan feature.
- React Router 7 framework mode and Remix 2 were tested; SPA mode and other servers are not verified.

#### Cost Estimate
- **Monthly Amount**: $5.00 USD
   - **Basis**: Size prices from `pricing.toml` (loaded by the API) at build revision `1ac5595375130d45290090e82ed0f554ccd45405-dirty`
   - **Components**: 1 app server of size s-1vcpu-1gb.
   - **Note**: Apps and managed databases auto-pause when idle; the estimate is the always-on monthly price of the tested sizes. Plan quotas and budgets apply.

#### Success Checks
- **Description**: Page or root route responds
  - **Kind**: http_get
  - **Path**: `/`
  - **Expect**: `ample canary react router basic`

#### Evidence Summary
- **Canary Run**: React Router 7 framework-mode app (react-router build, react-router-serve) deployed on node-22 and rendered the expected page.
- **Canary Run**: Remix 2 app (remix vite:build, remix-serve) deployed on node-22 and rendered the expected page.
