{"course":{"slug":"building-apps-with-ai","title":"Building Apps with AI","url":"https://addaly.com/learn/building-apps-with-ai","level":"beginner","track":"build"},"lesson":{"slug":"the-free-tiers-and-where-they-end","title":"The free tiers, and exactly where they end","url":"https://addaly.com/learn/building-apps-with-ai/the-free-tiers-and-where-they-end","position":79,"of":87,"minutes":8,"answer":"Each free tier ends by one of three mechanisms (it pauses, it slows.","keyIdea":"Each free tier ends by one of three mechanisms (it pauses, it slows, or it bills) and reading which one applies to each service you depend on is what decides whether a busy day is a dead site or an invoice."},"body":{"format":"markdown","text":"## Three ways a free tier ends\n\nThe cost lesson said free tiers end quietly. This one says how, because the how decides what your users see. Every free tier ends by one of three mechanisms, and each service you depend on uses one of them. The figures below are the published ones at the time of writing; the mechanisms are what to learn, since the numbers move.\n\n**It pauses.** The service stops until you act. Supabase pauses free projects after about a week without activity, and the app's every query fails until somebody presses restore in the dashboard. Render's free web services spin down after fifteen idle minutes and take half a minute or more to wake, during which the first visitor waits or gives up. A paused service is a dead site with a working deploy.\n\n**It slows.** Compute suspends and resumes on demand. Neon's free tier suspends the database after a few idle minutes and wakes it on the next connection, in a second or two, which is the question above: the first request after a quiet stretch can exceed a tight connection timeout, and the second sails through. The fix is a slightly longer timeout on the first attempt, or a scheduled ping that keeps it warm during hours you care about.\n\n**It bills.** A card on file, and the meter starts. Cloudflare's paid plans, Vercel's Pro plan and most providers' paid tiers behave this way, and it is only a problem when the usage was not yours: the abuse scenarios from the security block.\n\nSome tiers combine mechanisms: free until a limit, then refuse, then bill if you add a card. Read the specific behaviour for each service you use and write it in the README under a heading called *what happens when we exceed the free tier*.\n\n## The limits that get hit first\n\nNot storage, which small apps rarely fill. The ones that bite:\n\n- **Bandwidth.** Vercel's Hobby plan allows around 100 GB a month; a page with a 2 MB hero image and a thousand visitors a day is 60 GB before anyone uploads anything. Images through the uploads lesson's resizing, and static assets on a CDN, are what keep this small.\n- **Function invocations and compute time.** Each request to a serverless route counts. A page that makes eight fetches to its own API on load is eight invocations per view.\n- **Database compute hours.** Neon's free tier measures active compute; a keep-warm ping spends them. Supabase counts projects and rows.\n- **Requests per day.** Cloudflare Workers' free plan allows about 100,000 requests a day; a scraper can spend that by breakfast.\n- **Egress from storage.** Downloading files out of S3 costs per gigabyte; R2 and B2 charge nothing for it, which is why the uploads lesson named them.\n\n## The clause nobody reads\n\nVercel's Hobby plan, and several others, are for non-commercial use. An app that takes payment, or serves a business, is outside the terms on a free tier even if it never exceeds a limit, and the platform can ask you to upgrade or leave. The honest reading: the free tiers are for learning, side projects and the first weeks of something; the moment money changes hands, the smallest paid plan (usually $5 to $25 a month) is both required and cheap relative to what the app now is.\n\n## The cheapest step up\n\nWhen a tier ends, the next one is rarely the one being advertised. Options in rough order of cost:\n\n1. Reduce the usage: cache the page, resize the images, stop the scraper, fix the eight fetches.\n2. Move one component: the database to a different free tier, static files to a free CDN.\n3. The smallest paid plan of the one service that is the constraint, not of everything.\n4. A persistent small server (Fly, Railway, Hetzner) where a fixed monthly fee replaces a meter, which suits steady traffic and frightens people used to free.\n\n## The two numbers to know\n\nFor each service: what the limit is, and what happens at it. Write both down. A site that pauses needs a monitor (the shipping block's health ping) and a person who will press the button. A site that bills needs a spending cap and an alert at half of it. A site that slows needs a timeout that tolerates the wake. Knowing which is which turns the first busy day from a surprise into an expected event with a known cost.\n\n> Figure: One month at a thousand visitors a day. Bars (GB of bandwidth in a month): Hobby plan allowance 100; Page with a 2 MB hero image 60; Same page, images resized to 200 KB 6. Bandwidth is the limit that bites first, and it is bought back by resizing images rather than by upgrading. The same page with its hero image at 200 KB uses a sixteenth of the allowance."},"check":{"question":"A small app on a free database tier has had no visitors for ten days. The first visitor of the month gets a database connection error; the second, a minute later, gets the page. What happened?","options":[{"text":"The database was corrupted by ten days of inactivity and repaired itself when queried, which is why the second request worked and why the provider recommends regular activity on free projects.","correct":false,"tempting":"Databases do not decay when idle; nothing was broken, something was asleep."},{"text":"The first visitor was a bot that was refused by the provider's firewall, and the second was a person.","correct":false,"tempting":"A firewall refusal returns a distinct error and would not explain the same page succeeding a minute later for any caller."},{"text":"The provider rotates free-tier credentials monthly and the app had the old ones until it retried.","correct":false,"tempting":"A credential change would fail every request until the variable was updated, not only the first one."},{"text":"The free tier suspends idle compute, and the first request arrived while it was waking, which took longer than the app's connection timeout.","correct":true}]},"prev":{"slug":"what-it-costs","title":"What it actually costs","url":"https://addaly.com/learn/building-apps-with-ai/what-it-costs"},"next":{"slug":"knowing-it-broke-before-users-tell-you","title":"Knowing it broke before users tell you","url":"https://addaly.com/learn/building-apps-with-ai/knowing-it-broke-before-users-tell-you"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'The free tiers, and exactly where they end', in Building Apps with AI. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/building-apps-with-ai/the-free-tiers-and-where-they-end (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"The free tiers, and exactly where they end","courseTitle":"Building Apps with AI","module":{"index":9,"slug":"what-it-costs-and-where-this-stops","title":"What it costs, running it, and where this stops"},"answer":null,"keyIdea":"Each free tier ends by one of three mechanisms (it pauses, it slows, or it bills) and reading which one applies to each service you depend on is what decides whether a busy day is a dead site or an invoice.","hero":{"kind":"figure","figure":{"t":"figure","label":"Figure","figure":{"type":"bars","unit":"GB of bandwidth in a month","title":"One month at a thousand visitors a day","series":[{"label":"Hobby plan allowance","value":100},{"label":"Page with a 2 MB hero image","value":60,"highlight":true},{"label":"Same page, images resized to 200 KB","value":6}],"caption":"Bandwidth is the limit that bites first, and it is bought back by resizing images rather than by upgrading. The same page with its hero image at 200 KB uses a sixteenth of the allowance."},"alt":"Figure: One month at a thousand visitors a day. Bars (GB of bandwidth in a month): Hobby plan allowance 100; Page with a 2 MB hero image 60; Same page, images resized to 200 KB 6. Bandwidth is the limit that bites first, and it is bought back by resizing images rather than by upgrading. The same page with its hero image at 200 KB uses a sixteenth of the allowance."}},"blocks":[{"t":"h2","id":"three-ways-a-free-tier-ends","runs":[{"text":"Three ways a free tier ends"}]},{"t":"p","runs":[{"text":"The cost lesson said free tiers end quietly. This one says how, because the how decides what your users see. Every free tier ends by one of three mechanisms, and each service you depend on uses one of them. The figures below are the published ones at the time of writing; the mechanisms are what to learn, since the numbers move."}]},{"t":"p","runs":[{"text":"It pauses.","b":true},{"text":" The service stops until you act. Supabase pauses free projects after about a week without activity, and the app’s every query fails until somebody presses restore in the dashboard. Render’s free web services spin down after fifteen idle minutes and take half a minute or more to wake, during which the first visitor waits or gives up. A paused service is a dead site with a working deploy."}]},{"t":"p","runs":[{"text":"It slows.","b":true},{"text":" Compute suspends and resumes on demand. Neon’s free tier suspends the database after a few idle minutes and wakes it on the next connection, in a second or two, which is the question above: the first request after a quiet stretch can exceed a tight connection timeout, and the second sails through. The fix is a slightly longer timeout on the first attempt, or a scheduled ping that keeps it warm during hours you care about."}]},{"t":"p","runs":[{"text":"It bills.","b":true},{"text":" A card on file, and the meter starts. Cloudflare’s paid plans, Vercel’s Pro plan and most providers’ paid tiers behave this way, and it is only a problem when the usage was not yours: the abuse scenarios from the security block."}]},{"t":"p","runs":[{"text":"Some tiers combine mechanisms: free until a limit, then refuse, then bill if you add a card. Read the specific behaviour for each service you use and write it in the README under a heading called "},{"text":"what happens when we exceed the free tier","i":true},{"text":"."}]},{"t":"h2","id":"the-limits-that-get-hit-first","runs":[{"text":"The limits that get hit first"}],"role":"limit"},{"t":"p","runs":[{"text":"Not storage, which small apps rarely fill. The ones that bite:"}]},{"t":"ul","items":[[{"text":"Bandwidth.","b":true},{"text":" Vercel’s Hobby plan allows around 100 GB a month; a page with a 2 MB hero image and a thousand visitors a day is 60 GB before anyone uploads anything. Images through the uploads lesson’s resizing, and static assets on a CDN, are what keep this small."}],[{"text":"Function invocations and compute time.","b":true},{"text":" Each request to a serverless route counts. A page that makes eight fetches to its own API on load is eight invocations per view."}],[{"text":"Database compute hours.","b":true},{"text":" Neon’s free tier measures active compute; a keep-warm ping spends them. Supabase counts projects and rows."}],[{"text":"Requests per day.","b":true},{"text":" Cloudflare Workers’ free plan allows about 100,000 requests a day; a scraper can spend that by breakfast."}],[{"text":"Egress from storage.","b":true},{"text":" Downloading files out of S3 costs per gigabyte; R2 and B2 charge nothing for it, which is why the uploads lesson named them."}]]},{"t":"h2","id":"the-clause-nobody-reads","runs":[{"text":"The clause nobody reads"}]},{"t":"p","runs":[{"text":"Vercel’s Hobby plan, and several others, are for non-commercial use. An app that takes payment, or serves a business, is outside the terms on a free tier even if it never exceeds a limit, and the platform can ask you to upgrade or leave. The honest reading: the free tiers are for learning, side projects and the first weeks of something; the moment money changes hands, the smallest paid plan (usually $5 to $25 a month) is both required and cheap relative to what the app now is."}]},{"t":"h2","id":"the-cheapest-step-up","runs":[{"text":"The cheapest step up"}]},{"t":"p","runs":[{"text":"When a tier ends, the next one is rarely the one being advertised. Options in rough order of cost:"}]},{"t":"ol","start":1,"items":[[{"text":"Reduce the usage: cache the page, resize the images, stop the scraper, fix the eight fetches."}],[{"text":"Move one component: the database to a different free tier, static files to a free CDN."}],[{"text":"The smallest paid plan of the one service that is the constraint, not of everything."}],[{"text":"A persistent small server (Fly, Railway, Hetzner) where a fixed monthly fee replaces a meter, which suits steady traffic and frightens people used to free."}]]},{"t":"h2","id":"the-two-numbers-to-know","runs":[{"text":"The two numbers to know"}]},{"t":"p","runs":[{"text":"For each service: what the limit is, and what happens at it. Write both down. A site that pauses needs a monitor (the shipping block’s health ping) and a person who will press the button. A site that bills needs a spending cap and an alert at half of it. A site that slows needs a timeout that tolerates the wake. Knowing which is which turns the first busy day from a surprise into an expected event with a known cost."}]}],"check":{"question":[{"text":"A small app on a free database tier has had no visitors for ten days. The first visitor of the month gets a database connection error; the second, a minute later, gets the page. What happened?"}],"options":[{"text":[{"text":"The database was corrupted by ten days of inactivity and repaired itself when queried, which is why the second request worked and why the provider recommends regular activity on free projects."}],"correct":false,"tempting":[{"text":"Databases do not decay when idle; nothing was broken, something was asleep."}]},{"text":[{"text":"The first visitor was a bot that was refused by the provider’s firewall, and the second was a person."}],"correct":false,"tempting":[{"text":"A firewall refusal returns a distinct error and would not explain the same page succeeding a minute later for any caller."}]},{"text":[{"text":"The provider rotates free-tier credentials monthly and the app had the old ones until it retried."}],"correct":false,"tempting":[{"text":"A credential change would fail every request until the variable was updated, not only the first one."}]},{"text":[{"text":"The free tier suspends idle compute, and the first request arrived while it was waking, which took longer than the app’s connection timeout."}],"correct":true,"tempting":null}],"order":[2,3,1,0],"why":null},"prev":{"slug":"what-it-costs","title":"What it actually costs","minutes":7},"next":{"slug":"knowing-it-broke-before-users-tell-you","title":"Knowing it broke before users tell you","minutes":8}}}