Guide · Path two: ship apps for free
The free app stack
This site costs $0 to run — and this guide teaches the whole pattern behind it: static sites vs server-rendered apps, repos, deployment platforms, serverless functions, domains, and environment variables. PlainLogic is the worked example, not the recipe. Free-tier terms change, so this teaches patterns and tells you where to verify each limit.
No affiliate links anywhere on this page. Nothing here earns PlainLogic a commission. Free-tier terms change over time, so the guide tells you where to verify each limit instead of quoting numbers that go stale.
The founding choice
Static vs server-rendered: the decision that makes free possible
Every app you ship answers one question first: does the page exist before the visitor arrives, or is it built fresh for every visit? That answer decides your whole cost structure.
Static: the page already exists
A static site is a folder of files — HTML, CSS, JavaScript — built once and served as-is to everyone. This whole PlainLogic site is static: pages, PDF tools, mini games, even the animated labs. Static hosting is nearly free, scales to sudden traffic without flinching, and has almost nothing an attacker can break into, because there is no running server to attack.
Best for: sites, docs, portfolios, and tools that run in the visitor's browser.
Server-rendered: the page is built per visit
A server-rendered (dynamic) app assembles each page on request, usually with a database behind it — user accounts, comments, saved dashboards, anything where each visitor sees something different. It needs a running server process, which costs money, needs monitoring, and can break in ways a static site cannot.
Best for: apps where the page genuinely depends on who is looking at it.
The teaching point: start static and add dynamic pieces only where a static page physically cannot do the job. Every server-rendered piece is a cost and a responsibility you accept on purpose. Most projects overestimate how much dynamism they need.
The pieces
The stack, at a glance
Five concepts. Learn each one and you can ship almost anything for $0; misunderstand one and it will leak your keys or bill you at 3 AM.
Repos: your code, your history, your deploy button
A repo (GitHub, GitLab, and friends) holds your code plus its full history — every change, who made it, and how to undo it. Modern deployment starts here: you never upload files to a server by hand. You push to the repo, and the platform does the rest. Private repos are free for individuals, so half-finished experiments can stay private while they are half-finished.
The real limit: published caps on very large files and heavy automation. A normal site or app repo will not come close. Check the provider's pricing page before assuming anything about the caps.
Deployment platforms: push, and you are live
Platforms like Vercel, Netlify, and Cloudflare Pages watch your repo. Every push rebuilds and redeploys automatically, with a preview URL for every change before it goes live. Free tiers are aimed at personal projects and small sites — generous enough that most side projects never leave them.
The real limit: published caps on bandwidth, build minutes, and function runtime. The dashboard shows you exactly which cap bit, if one ever does.
Serverless functions: the middle ground
A serverless function is a small snippet of code that runs on the platform's servers each time it is called — no server to set up, patch, or keep awake. This is where dynamic work lives in a static-first stack: hiding API keys (below), handling a contact form, verifying a webhook. You get a URL; the platform handles the machine.
The real limit: short execution timeouts by design. Seconds-long work is perfect; minute-long background jobs are not.
Domains: the one thing that costs money
Your site can live on a free platform subdomain forever. A custom domain — like plainlogic.org — is a registered name you rent yearly from a registrar, then point at your platform with DNS records. It is the only genuinely unavoidable cost in this whole guide: one yearly line item.
The real limit: it is money, every year, and forgetting to renew can lose the name. Set auto-renew.
Environment variables: where keys actually live
An environment variable is a named value your server code can read but your visitors never see — set in the deployment platform's dashboard, injected at runtime. API keys, tokens, and configuration all live here. The rule that keeps you safe: keys go in environment variables, browsers call your server function, and the function calls the API. A key that appears in page source is already leaked — rotate it and fix the pattern.
The real limit: env vars are per-environment (preview vs production). A key set on production is not automatically on your preview deploys.
Live data
APIs: free data with and without keys
Some of the best data on the internet is free with no key at all: weather forecasts, earthquake feeds, space-weather readings, public event data. For these, the visitor's browser can call the API directly — nothing secret is involved.
When an API does require a key, the key never reaches the browser. It lives in an environment variable, and a small serverless function attaches it to the request server-side. The pattern, in simplified form:
// Serverless function: runs on the platform's servers, never in the browser export default async function handler(req, res) { // The key lives in an env var set in the deploy dashboard. The browser never sees it. const key = process.env.DATA_API_KEY; // Attach the key however this API expects it, then forward the reply. const upstream = await fetch(buildKeyedUrl(req.query, key)); res.status(200).json(await upstream.json()); } // The browser only ever calls YOUR endpoint: fetch('/api/data')
Simplified illustration of the pattern. Your real function fills in that API's URL and key scheme. The most common beginner mistake is pasting a key into frontend JavaScript — which ships it to every visitor.
- Cache responses for a few minutes. Free public APIs are shared resources with rate limits and fair-use policies. A short cache means you almost never touch the limit.
- Rate-limit your own endpoint so one enthusiastic visitor cannot burn your upstream quota.
- Disclose what you call. If your page fetches live data, say where it comes from — it builds trust and it is honest about freshness.
Why free exists
Free-tier economics: the honest business model
Free tiers are not charity. They are customer acquisition: the platform pays for your compute today because some fraction of free users grow into paid teams tomorrow. Understanding that makes the limits make sense:
- The limits are the product. Bandwidth caps, build minutes, and function timeouts are where the free tier ends and the paid pitch begins. They are published on purpose.
- Free owes you nothing. No SLA, no support queue, no promise the terms stay put. Never run something business-critical — or someone else's business — on a tier that guarantees nothing.
- Terms change. A generous free tier today can tighten tomorrow. The guides that quote exact limits go stale; the guides that teach you where the limits are published stay useful.
None of this is a reason to avoid free tiers. It is the reason to treat them as the on-ramp, not the whole road — and to know exactly where the road starts charging.
Know when to pay
How costs grow as projects grow
Cost growth follows a predictable ladder. Each rung is one new need, not a rewrite:
- $0 — static site on a subdomain. Pages, browser tools, and no-key APIs. This is where everything starts.
- One yearly line item — a custom domain. The name you actually want. Still $0 for hosting.
- First paid step — a published limit bites. Bandwidth or build minutes run out mid-month, or serverless functions time out because the work genuinely needs minutes instead of seconds. The dashboard tells you which cap hit. That is the tier telling you the project is real.
- Next — persistent data and background work. A real database with private user data, long-running jobs, or heavy server computation. That is a paid-tier or dedicated-service job, and that is fine.
- Finally — guarantees and teams. SLAs, support queues, collaboration features, access controls. The moment someone else's business depends on your uptime, pay for the tier that promises it.
The rule never changes: upgrade when a published limit actually bites, not before. The $0 pattern is not a phase you are supposed to feel guilty about outgrowing — it is the on-ramp, and the dashboard tells you when you have arrived at the next one.
Get the deployment checklist
One reusable page for any project: environment variables set, keyed APIs moved server-side, domain and DNS pointed, caches and rate limits in place, analytics confirmed, and a rollback plan for when a deploy goes sideways. Join the list and it lands in your inbox — plus new tools, plain-English guides, and prompt techniques as they ship.
Do it today
Start from zero, in order
Six steps. Nothing here costs money and nothing here is irreversible.
Step 1Put code in a repo
Create a repo and push a single index.html. Ugly is fine. It is live-able the moment it exists.
Step 2Connect a deployment platform
Import the repo on a free tier. Every push now deploys automatically, with a preview URL for each change. Your site has an address.
Step 3Make it real with a free API
Fetch one no-key API from the browser and render the answer on the page. You now have live data.
Step 4Hide one key properly
Pick an API that needs a key, store it in an environment variable, and write the tiny server function from the pattern above. Verify the key never appears in the browser's network tab.
Step 5Ship something small
One page that does one useful thing beats a ten-page plan. PlainLogic started as experiments that genuinely worked, not as a big launch.
Step 6Watch the dashboard
Check bandwidth and build usage once in a while. The day a cap bites is the day you have something worth paying for.
Honest answers
Questions this guide actually answers
Is it really $0? What is the catch?
The hosting, deploys, and the no-key APIs named here are $0 on their free tiers. The catch is the limits: bandwidth, build minutes, and function runtime are all capped, and free tiers can change their terms. The only unavoidable cost is a custom domain if you want one.
Will my API key leak if I do it wrong?
Yes, and that is the most common beginner mistake: pasting a key into frontend JavaScript ships it to every visitor. The rule is simple. Keys live in server environment variables, browsers call your server function, and the function calls the API. If you can find the key in your page's source, it is already leaked: rotate it and fix the pattern.
Static or server-rendered — which should I pick?
Static, unless you can name the thing a static page cannot do. User accounts, saved per-user data, and content that changes per visitor need a server. Everything else — sites, tools, dashboards of public data — is cheaper, faster, and safer as static files plus a few serverless functions.
Why no exact prices or limits here?
Because they change. Quoting a number that goes stale turns a guide into misinformation. Every section above tells you where the real limit is published so you can check the current number in one click.
Part of the Learn section. Want the AI theory first? Start with How an LLM Works.