status: active
timestamp: 2026-06-20
tags: [budget, free-tier, services, constraint]
No service in the stack may require a paid subscription
All external services must work free-tier indefinitely
No service in the stack may require a paid subscription
Scope clarification
This rule applies to developer-facing services that the family consumes — the cloud / API / tool subscriptions the developer themself would pay for to run the family. It does NOT apply to user-facing subscriptions that the apps offer to their visitors.
| Direction | Subscription allowed? |
|---|---|
| Developer ? service provider (Vercel Pro, Firebase Blaze, Sentry Team) | NO. Forbidden. |
App ? end user (e.g. pdf-tools-app offers Free / Pro / Ultra / Max tiers) | YES. Allowed and encouraged for revenue. |
User-facing subscription tiers on the apps follow Google-style naming: Free ? Pro ? Ultra ? Max. Each tier unlocks more advanced features, removes ads, raises quotas. Implementation per one-subscription-unlocks-all.md (one Razorpay/LS subscription covers every app in the family).
The developer-side constraint below is what makes the user-side subscription possible: by keeping the cost stack at zero, the user-side margin is high.
Decision
Every service we depend on must have a free tier sufficient for the family’s expected usage. Services that gate core functionality behind a recurring subscription are excluded at selection time, even if they otherwise look superior.
Why
The mission’s third non-negotiable is “cost zero to host and run, forever.” A subscription is a recurring liability with cancellation risk and price-hike risk; its failure mode is “the family stops working when the card expires.” Free tiers fail closed at quota, which is the acceptable failure mode. This rule complements the no-card-on-file rule — together they make the stack’s cost ceiling zero by construction.
Implications
- Service catalog entries must state the free-tier limit and the “we never hit this because…” justification.
- New services that don’t have a free tier are rejected during selection, period — no pilots, no “we’ll downgrade later”.
- Services that move FROM free to paid get replaced via the package-isolation rule (e.g. swap
@chirag127/email-sendfrom Resend to AhaSend with a package version bump). - Build-time GitHub Actions cron and browser-side compute become the preferred placement for any heavy work, since both are free.
- This rule applies to AI inference too: only OpenRouter free models, Pollinations.AI, Puter.js, etc. — never paid OpenAI/Anthropic API direct.
Cross-refs
- Never hit free-tier quotas
- No card-on-file rule
- Firebase Spark forever
- Cloudflare Pages for all sites
- AGENTS.md service catalog
- No paid tier policy — the policy-version of this decision