# Configure Build and Start for Express

## Summary
Configure build and start for an Express app on Ample. Ample detects Node, runs `npm install` and `npm run build --if-present`, and starts the app with `npm run start` on the node-22 template; the app only has to bind `0.0.0.0` on `PORT`.

## Prerequisites
- A `package.json` with a start script
- 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:** `npm install`
- **Build:** `echo no build needed`
- **Start:** `npm run start`

## Workflow Steps
1. **Pin what detection cannot infer**  
   If the start command is not in `package.json`, pass `--start`, or write it into `ample.toml` with `ample plan --write.`

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  --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  --kind build`

## Success Checks
- **Root route responds**  
   Kind: `http_get`  
   Path: `/`  
   Expect: `ample canary express basic`

## 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.
- A missing `package-lock.json` produces a warning and a slower, non-reproducible install.

## Cost Estimate
- **Currency:** USD  
- **Monthly Amount:** 5.0  
- **Basis:** size prices from `pricing.toml` (loaded by the API) at build revision `1ac5595375130d45290090e82ed0f554ccd45405-dirty`  
- **Components:**  
   - **Name:** app server  
   - **Size:** s-1vcpu-1gb  
   - **Quantity:** 1.0  
   - **Monthly Amount:** 5.0

*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.*

## Examples
- **Express basic canary**  
  Minimal Express server deployed with the detected `npm install` / `npm run start` commands.  
  Source Ref: `tests/deploy-canaries/express-basic`

## Evidence Summary
- **Kind:** canary_run  
- **Summary:** Express app with `npm install` and `npm run start` deployed on the node-22 template; the public URL served the expected response.  
- **Observed At:** 2026-09-19T23:55:33Z  
- **Implementation Revision:** `1764076-tls-account-903d345`  
- **Expires At:** 2027-03-18T23:55:33Z  
- **Scope:**  
  - **CLI Version:** 0.1.20  
  - **Platform:** hosted-beta  
  - **Template:** node-22

## Last Verified At
2026-09-19T23:55:33Z

## Unknowns
- Region availability is unknown until a verified region fact is recorded.
- Compliance attestations are unknown; none are claimed.
