# How to get a website for free with (almost) no strings attached!
:::warning
If you're not a programmer, please click off this guide. This is for people who code, not for people who use SquareSpace and Wix.
:::
### Introduction
You are a budding programmer who just made his first website, running on `localhost`. Then you realize that nobody other than you can see the website, so you probably googled "How to get a website for free?"
But then, you realize, there is no way to get a website for free. And you sink into depression.
However, there is a way, and I will show you.
<hr>
First of all, you need a working website. Doesn't matter if it's in python, javascript, .net, or whatever. You just need a webserver that works at localhost.
Now you need to decide whether you would like to host your website online, or self-host it. Self hosting gives you freedom of installing whatever you want, customizing to your desire, updating packages, and all that. Hosting online may not let you do all that.
If you want to have as much of the benefits of self hosting you possibly can with hosting online, I would recommend HelioHost, but we'll talk about that later.
## Domain Name
Next you have to choose your domain name. You can find all available top level domains (things like .com and .net) you can get for free at getfreedomain.name, but this guide will show you how to use Freenom specifically.
Personally, I prefer domain names that end in .tk, as they look much nicer in comparison to the others.
### Freenom
1. First you need to sign up for an account on freenom. This shouldn't be too hard.
3. Secondly, search for a domain name. Specifically, search for it with a top level domain, like don't search "rehanali", but search "rehanali.tk". 
3. Click on checkout, and then change the period to 12 months. Unfortunately, that is the limitations of freenom. Then click continue.

4. Finally, agree to the terms and conditions and get the domain. You're all set. It should **not** cost any money whatsoever, so if it does, check if you did something wrong.
## Self Hosting
Now if you wanted to do self hosting, the best way to go is to use cloudflare tunnels.
Steps:
1. Sign up with cloudflare account
2. Add domain
3. Follow instructions and change nameservers
4. Wait for the changes to update
6. Follow the rest of [this](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide/local/#set-up-a-tunnel-locally-cli-setup) guide.
## Web Hosting
If you wanted to however do web hosting, there are several choices.
- Heliohost, my personal favorite. Three servers to choose from, two of which being up almost always. Supports almost all forms of webhosting, with great speed.
- Heroku. Not the greatest, but it supports nearly all forms of webhosting. Unfortunately cannot stay up 24/7, and takes time to load after around 4 hours.
- Vercel. Great hosting, but only really good for next js.
Each of these have seperate guides on their websites, so I won't mention how to use them.
-- Rehan