Wenlan
Wenlan is a source-backed AI knowledge base and LLM wiki for AI work: organize documents and decisions into pages you can find, inspect, and review.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Loading the full README. The saved excerpt is shown below.
IRCC Tracker for Canada immigration applicants. Calculate your CRS score, follow live IRCC draws, view trends, and get push alerts when new draws are published.
No accounts. No self-hosted backend. Profile data stays on your device.Read the full README ↗IRCC Tracker for Canada immigration applicants. Calculate your CRS score, follow live IRCC draws, view trends, and get push alerts when new draws are published.
No accounts. No self-hosted backend. Profile data stays on your device.
All calculators are estimates for planning — each screen points to the official IRCC/provincial tool. Profile data stays on-device.
| Feature | Source |
|---|---|
| Draws (app) | Mobile app → IRCC JSON feed |
| Draws (worker) | Cloudflare Worker → GitHub Actions mirror (data/latest-draw.json)¹ |
| Processing times | Mobile app → GitHub Actions mirror (data/processing-times.json), 7-day cache |
| EE pool / levels | Mobile app → GitHub Actions mirror (data/ee-pool.json), 7-day cache |
| Trends & analytics | Computed on-device from cached draws + EE pool data |
| Push alerts | Cloudflare Worker → Expo Push API |
| Premium unlock | Google Play Billing (one-time managed product: crs_pulse.analytics_unlock) |
¹ canada.ca (Akamai) rejects Cloudflare Worker egress with HTTP 520, so the worker reads the latest draw from a GitHub-hosted mirror instead of IRCC directly.
mobile/ Expo React Native app
workers/push/ Cloudflare Worker (KV + cron)
data/ GitHub Actions mirrors (draws, processing times, EE pool)
docs/ Privacy policy
npm install -g eas-clicd mobile
npm install
cp .env.example .env.local
npm start
Set in mobile/.env.local:
EXPO_PUBLIC_PUSH_URL=https://crs-pulse-push.balwinderxcode.workers.dev
Set your EAS project ID in mobile/.env.local (or EAS secrets):
EAS_PROJECT_ID=your-eas-project-id
Privacy policy — rendered from docs/PRIVACY_POLICY.md and hosted on Vercel (see web/). Use this URL in the stores:
https://www.crspulse.com/privacy
Run on a device or simulator:
npm run ios
Push notifications require a physical iPhone (not simulator).
The worker stores anonymous Expo push tokens and notifies subscribers when IRCC publishes a new draw.
cd workers/push
npm install
npx wrangler login
# Create KV namespaces (one-time)
npx wrangler kv namespace create TOKENS_KV
npx wrangler kv namespace create TOKENS_KV --preview
Paste the returned IDs into workers/push/wrangler.toml, then:
npm run deploy
# Required production secrets (one-time)
npx wrangler secret put PUSH_API_SECRET
npx wrangler secret put SYNC_SECRET
# Optional: ops alerting — the cron emails ALERT_EMAIL once if the draw mirror
# goes >30 days stale (e.g. the GitHub Action stopped). Needs RESEND_API_KEY +
# EMAIL_FROM set too; no-op if unset.
npx wrangler secret put ALERT_EMAIL
Set the same PUSH_API_SECRET value as EXPO_PUBLIC_PUSH_API_KEY in EAS secrets / mobile/.env.local.
Verify:
curl https://crs-pulse-push.balwinderxcode.workers.dev/health
| Method | Path | Auth | Body |
|---|---|---|---|
| GET | /health | None | — |
| POST | /register | Bearer PUSH_API_SECRET | { "token": "ExponentPushToken[...]", "platform": "ios" | "android" } |
| DELETE | /revoke | Bearer PUSH_API_SECRET | { "token": "ExponentPushToken[...]" } |
| POST | /sync | Bearer SYNC_SECRET | — |
Cron runs every 15 minutes after deploy.
Local dev: npm run dev → http://localhost:8787
mobile/)| Command | Description |
|---|---|
npm start | Start Expo dev server |
npm run ios | Run on iOS simulator |
npm run android | Run on Android emulator |
npm test | Run Jest tests |
npm run test:coverage | Run Jest with coverage thresholds |
npm run type-check | TypeScript check |
npm run lint | ESLint |
workers/push/)| Command | Description |
|---|---|
npm run dev | Local worker at :8787 |
npm run deploy | Deploy to Cloudflare |
npm run type-check | TypeScript check |
npm install -g eas-clihttps://www.crspulse.com/privacycd mobile
npm install
cp .env.example .env.local
eas login
eas init # links project, sets EAS_PROJECT_ID
Set in mobile/.env.local:
EAS_PROJECT_ID=your-eas-project-id
EXPO_PUBLIC_PUSH_URL=https://crs-pulse-push.balwinderxcode.workers.dev
This is the beginning of the README. Read the rest at the original. Read the full README ↗