"Where do I actually put this once it's built?" is a question that trips up a lot of beginners right after they've finished their first real project — and unlike most coding questions, it's not really a coding problem at all. It's a logistics problem, and the right answer depends entirely on what kind of project you've built. Having now deployed both static sites and a Flask backend application, here's the practical breakdown.
Step one: figure out what kind of project you actually have
This sounds obvious, but it's the single most common point of confusion. If your project is HTML, CSS, and JavaScript files that look the same for every visitor, it's a static site. If it has a backend language (Python, Node.js) actually running on a server — handling logins, databases, or per-user logic — it's a dynamic application. These two categories need genuinely different hosting, and using the wrong one either won't work at all, or will work in a needlessly complicated way.
For static sites: Netlify (and similar)
| Platform | Good for | Notable trait |
|---|---|---|
| Netlify | Static HTML/CSS/JS sites | Free tier never sleeps; GitHub auto-deploy; generous free bandwidth |
| GitHub Pages | Static sites, especially docs/portfolios | Tightly integrated with GitHub; slightly less flexible config than Netlify |
| Vercel | Static sites and JS frameworks (React, Next.js) | Excellent for JS-framework projects specifically |
For a beginner's first static project, Netlify is hard to beat: connect a GitHub repository, and every git push automatically redeploys the live site within roughly a minute, completely free, with no sleep delay ever.
For backend apps: Render (and similar)
| Platform | Good for | Notable trait |
|---|---|---|
| Render | Flask, Django, Node.js backend apps | Free tier sleeps after ~15 min idle; ~30-60s wake delay on next visit |
| PythonAnywhere | Simple Flask/Python apps specifically | Doesn't sleep on free tier, but more limited configuration |
| Railway | Various backend languages | Free tier is usage-credit based rather than unlimited |
RonnyBank runs on Render's free tier. The trade-off is real: after 15 minutes without a visitor, the server sleeps, and the next person to visit waits up to a minute for it to wake. For a learning project or portfolio demo, that's a perfectly acceptable trade-off for $0/month. For something needing instant response at all times, it would be worth the upgrade to a paid always-on tier.
The mistake worth avoiding: picking hosting before picking the project type
It's tempting to pick a hosting platform because it's popular or because a tutorial used it, then try to force a project to fit. This causes real, avoidable pain — like trying to get a Flask app's login system working on Netlify, which structurally cannot run backend Python code at all, no matter how it's configured. Decide what the project actually needs first; the hosting choice should follow from that, not the other way around.
A genuinely free path exists for almost everything
It's worth saying directly: for a first project, a portfolio, or a learning exercise, there is essentially always a free hosting path available — for both static sites and backend apps. The only real cost of the free tier on the backend side is the sleep/wake delay, which is a fair trade for zero monthly cost while learning and building a portfolio.
What to actually do
- Static site (portfolio, brochure, content hub): Netlify. Connect GitHub, push code, get a live URL in minutes.
- Backend app (logins, databases, per-user logic): Render free tier to start. Accept the sleep delay as the cost of $0/month while learning.
- Either way: use GitHub for version control regardless of where you host — it's what makes the "push code, auto-deploy" workflow possible on both platforms.
Want help deploying your own project?
I offer mentorship and hands-on help getting beginner projects properly deployed — static or full-stack.
Get In Touch → Read the RonnyBank Deploy Story