type: decision
status: active
timestamp: 2026-06-22
tags: [decision, architecture, firebase, no-functions, no-card-on-file, cloudflare-workers, cloudflare-pages-functions, github-actions, serverless]

No Firebase Functions — Blaze requires a card on file, hard blocked

No Firebase Functions, avoids Blaze plan which requires a card on file with no real spend cap. Per the no-card-on-file rule, Functions are excluded. Replaces with: GitHub Actions cron (free for public repos), Cloudflare Workers (100K req/day free), Cloudflare Pages Functions (shared 100K/day free), browser-side compute, static JSON in Pages.

No Firebase Functions — Blaze requires a card on file

Decision

Firebase Cloud Functions are never used by any product in the family. This is a hard exclusion, not a “prefer not to” — Functions only runs on Blaze, Blaze requires a card on file, and the no-card-on-file rule is non-negotiable.

This closes the loop on firebase-spark-forever.md: Spark forever implies Functions never.

Why

What replaces Functions

Workload typeReplacementFree-tier limitSource
HTTPS endpoint / webhook receiverCloudflare Workers100,000 requests/dayCF Workers limits
Edge function on a Pages siteCloudflare Pages FunctionsShared 100K/day with WorkersCF Pages Functions pricing
Scheduled cron job (>1/min granularity)Cloudflare Workers cron triggersIncluded in Workers freeCF Workers limits
Heavy scheduled batch (long-running, package builds, scrapers)GitHub Actions on public repoUnlimited minutes on public repos; 2000 min/mo on private freeGH Actions billing, GH Actions pricing 2026
Per-user compute (auth-gated, requires fresh data)Client-side fetch + Firestore REST direct from browserSpark Firestore: 50K reads/day, 20K writes/dayfirebase-rest-firestore-not-admin
Static-ish derived data (sitemaps, search index, OG image cache)Build-time generation ? static JSON in Cloudflare PagesCF Pages free unlimited static(existing knowledge)
Inbound webhook reliability (retries, replay)Hookdeck free tier ? CF Workerper hookdeck-for-webhook-reliability

Concrete payment-flow consequences

Payment webhooks (Razorpay, Lemon Squeezy, Polar.sh) must not be in the hot path of a CF Worker that could fail closed on quota. Concrete rule:

What changes vs prior decisions

Implications

Cross-refs


Edit on GitHub · Back to index