Polls GitHub repos tracking Canadian tech internships and sends new postings to Discord.
npm install
cp .env.example .env
# Add your Discord webhook URL to .env# Seed state (skip initial flood of notifications)
npm start -- --seed
# Run the notifier (polls every 15 min)
npm run dev # local (loads .env)
npm start # cloud (env vars injected)- Deploy the repo with the
/api/workercron function andvercel.jsonschedule. - Set
DISCORD_WEBHOOK_URL,CRON_SECRET,UPSTASH_REDIS_REST_URL, andUPSTASH_REDIS_REST_TOKENin Vercel. - Keep
GITHUB_TOKENoptional for higher GitHub rate limits. - First cron run seeds state silently and sends no initial Discord flood.
POLL_INTERVAL_MINUTESonly applies to local long-running mode; Vercel cadence comes fromvercel.json.
Validation:
npm run smoke:worker
npm test
npm run typecheck
npm run build
DISCORD_WEBHOOK_URL=https://discord.invalid CRON_SECRET=test-secret UPSTASH_REDIS_REST_URL=https://example.com UPSTASH_REDIS_REST_TOKEN=test-token npx vercel build --yes| Variable | Required | Description |
|---|---|---|
DISCORD_WEBHOOK_URL |
Yes | Discord channel webhook URL |
CRON_SECRET |
Yes for Vercel | Vercel cron bearer token |
UPSTASH_REDIS_REST_URL |
Yes for Vercel | Upstash Redis REST URL |
UPSTASH_REDIS_REST_TOKEN |
Yes for Vercel | Upstash Redis REST token |
GITHUB_TOKEN |
No | Increases GitHub rate limit (60/hr to 5000/hr) |
POLL_INTERVAL_MINUTES |
Local only | Poll interval in minutes (default: 15) |
- Connect repo on railway.app
- Add
DISCORD_WEBHOOK_URLin service Variables - Set start command to
npm start -- --seed, let it run once - Change start command back to
npm start