This runbook explains how RideFare moves from a pull request to preview and then to production on Vercel.
- the public app lives in
apps/web - the public app reads static JSON artifacts from
data/processed/analytics/webanddata/processed/ml/web - those public artifacts are versioned in git for transparency and local reproducibility
- GitHub Actions is the deploy orchestrator
- Vercel native Git auto-deploy should stay disabled so deploy behavior remains explicit
ci.ymlruns Python validation, regenerates public artifacts in workspace, and validates the frontend build against those artifactspipeline-refresh.ymlregenerates public artifacts onmasterwhen backend or data inputs change and commits refreshed JSON outputs back to the branchvercel-preview.ymlbuilds a preview deployment for pull requests targetingmastervercel-production.ymlbuilds and deploys production onmaster
Add the following repository secrets before enabling the Vercel workflows:
VERCEL_TOKENVERCEL_ORG_IDVERCEL_PROJECT_ID
The repository also needs GitHub Actions contents: write permission so
pipeline-refresh.yml can commit refreshed artifacts.
- framework preset:
Next.js - Node version:
22 - root directory:
apps/web - native Git auto-deploy: disabled
The app must receive RIDEFARE_PROJECT_ROOT at build time. The workflows set it to
${{ github.workspace }} so the loaders can resolve data/processed/** from the
repository root during vercel build.
- Open or update a pull request targeting
master - Confirm
ci.ymlpasses - Confirm
vercel-preview.ymlpublishes a preview URL - Validate
/,/dashboard,/como-funciona, and/escenariosin the preview - Merge only after the preview matches the repository state
- Merge a validated pull request into
master - Confirm
vercel-production.ymlfinishes successfully - Open the production deployment and verify:
- Home
- Dashboard
/como-funcionaEscenarios
- Confirm the app reads the expected artifacts without missing-state banners
- Confirm the browser tab title and icon match the final RideFare branding
- Confirm the shared preview metadata is present for Open Graph and Twitter cards