Deployments
Environments
| Environment | Trigger | Crons Active |
|---|---|---|
| Preview | PR-based / dev branch | No |
| Production | main branch or manual promote | Yes |
Note: Vercel crons only fire on the production deployment. See APP-CONTROL.md for current deployment status.
Platform
| Component | Platform | Description |
|---|---|---|
| Web app | Vercel | app.eko.day — authenticated Next.js app |
| Admin app | Vercel | admin.eko.day — admin dashboard |
| Public site | Vercel | eko.day — marketing site |
| Workers | Bun (standalone) | 5 queue consumer processes |
| Database | Supabase | PostgreSQL with RLS |
| Queues | Upstash Redis | 12 queue types, REST API |
| Object storage | Cloudflare R2 | Images and media assets |
Deploy Commands
bun run deploy:web # Deploy web app to Vercel production
bun run deploy:admin # Deploy admin app to Vercel production
bun run deploy:public # Deploy public site to Vercel production
These run vercel --prod with the appropriate project scope.
Flow
- Push to branch → CI checks (
bun run ci) - Preview deployment on Vercel (automatic)
- Merge to main → production deploy
- Crons activate on production
Workers
Workers are Bun-based queue consumers that run as standalone processes:
| Worker | Queues | Purpose |
|---|---|---|
worker-ingest | INGEST_NEWS, CLUSTER_STORIES, RESOLVE_IMAGE, RESOLVE_CHALLENGE_IMAGE | News ingestion and image resolution |
worker-facts | EXTRACT_FACTS, IMPORT_FACTS, GENERATE_EVERGREEN, EXPLODE_CATEGORY_ENTRY, FIND_SUPER_FACTS, GENERATE_CHALLENGE_CONTENT | Fact extraction and challenge generation |
worker-validate | VALIDATE_FACT | 4-phase fact verification |
worker-reel-render | (R2 triggers) | Video rendering |
worker-sms | SEND_SMS | SMS notifications |
Each worker exposes /health on port 8080 and implements graceful shutdown.
Cron Routes
13 cron routes exist in apps/web/app/api/cron/. Of these, 5 are scheduled in vercel.json and fire automatically on production. The remaining 8 are unscheduled (need manual trigger or external orchestration).
See Cron Actions for the full listing and APP-CONTROL.md for operational details.
Rollbacks
- Revert commit and push to main
- Or use
vercel rollbackto revert to a previous deployment
Secrets
- Managed via Vercel environment variables (dashboard or
vercel envCLI) - Never commit secrets — all
.env*.localfiles are in.gitignore - See
.env.examplefor the full variable reference
Related
- APP-CONTROL.md - Full operational manifest (crons, workers, queues, APIs)
- Cron Actions - Scheduled task reference
- Local Development - Running everything locally