All pages referring or tutorials for GitHub.
This is the multi-page printable view of this section. Click here to print.
Github
- Getting started with GitHub Pages
- Upload multiple Github repositories into a single Azure Static Web App
Getting started with GitHub Pages
Requirements
- A GitHub account (free)
- A domain name for your website, or you can use the default domain name of GitHub
youraccount.github.io
- A template website to upload to your domain name
- Some basic knowledge about websites and DNS
What is GitHub Pages?
GitHub Pages allows you to host a static website directly from a GitHub repository. This can be done without managing a server, infrastructure, or hosting provider. The only thing you do is create a repository, upload a website, and optionally connect it to a domain name of your choice. We can compare this to Azure Static Web Apps if you are familiar with that.
GitHub Pages supports static websites, which means it can only do frontend code like:
- HTML
- CSS
- JavaScript
- Markdown
You cannot host complex websites with PHP, APIs, Node.js, or Python, or other complex code. For that, I would advise using Azure or your own hosting service.
Step 1: Creating a repository
To start hosting a website on GitHub, we need to create a repository. This is a space where we place all code used for a certain solution, like frontend code and assets. This will be clear in a few minutes.
Open GitHub at https://github.com/ and log in to your account.
Now in the top-right corner, click on the “+” and create a new repository.

Now give the repository a name and description.

Now the creation of the repository is finished.
Step 2: Uploading the template site
I will create a template site with a Rick Roll meme on it, to make the guide a little bit fun. This is a very simple website with a GIF and sound which you can download and also use. You can also choose to run your own website code of course.
Now finish the repository creation wizard. Then click on uploading some files.

Download the files from my example repository:
Download template site from my GitHub
Click “Code” and then click “Download ZIP”.

Then upload these files into your own repository.

Your repository should have those three files in the root/main branch now:

Step 3: Enable GitHub Pages
Now we have prepared our repository to host a website, so we can enable the GitHub Pages service. In the repository, go to “Settings”:

Then go to “Pages”.

We can now build the website by selecting the branch main and finishing by clicking “Save”.

After waiting a few minutes, the website will be up and running with a github.io link. In the meantime, you can continue with Step 4.
Step 4: Linking a custom domain to your GitHub Page
In the meantime, the page will be built, and we can link a custom domain to our repository. You can choose to use the default github.io domain, but a custom domain is more scalable and more professional.
On the same blade where you ended Step 3, fill in your custom domain. This can be a normal domain or subdomain. In my case, I will use a subdomain.

Now we have to do a simple DNS change in our domain, linking this name to your GitHub so the whole world knows where to find your page. Head to the DNS hosting provider of your domain and create a CNAME record.
In my case, I created this CNAME record:
| Type record | Name | Destination |
|---|---|---|
| CNAME | rickroll | justinverstijnen.github.io. |
Make sure to end the destination with a trailing dot .. This is required because it is an external domain in the context of your own domain.

The TTL does not really matter. I stuck to the best practice of 60 minutes / 1 hour.
Save your DNS settings and wait for a few minutes. Heading back to GitHub, you will see this in the meantime:

Keep this page open. Then after waiting some minutes, and possibly getting yourself a coffee, you will see a notification that the website is up and running and live:

Step 5: Enabling HTTPS
After the custom domain is successfully validated and configured, we need to enable HTTPS for a secure transfer of data to our site. Otherwise users can get this error when visiting the website:

In the GitHub Pages blade, we have to wait for GitHub linking a certificate to your new website. I have seen cases where this takes a few minutes but also up to a few hours.

After this is done, we can check this checkmark on the GitHub Pages blade:


Now the site is fully up and running and secured. Yes, even if we are hosting a meme.
Step 6: Testing the page
After waiting for all the preparations to complete, we can finally test our page on the internet. Go to your custom domain in your favorite browser and test if everything works:
It looks like we are ready and done :).
Summary
GitHub Pages provides a simple and reliable way to host static websites for free. It integrates directly with Git, requires no server maintenance, and supports custom domains with HTTPS.
You can easily host documentation, portfolios, memes, and lightweight projects, and it offers a practical hosting solution without added complexity. If backend functionality is required, you will need to combine it with an external service or choose an alternative hosting platform, like Microsoft Azure or AWS.
Thank you for visiting my website and I hope it was helpful.
Sources
These sources helped me with writing and research for this post:
- https://docs.github.com/en/pages/getting-started-with-github-pages/creating-a-github-pages-site
- https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/about-custom-domains-and-github-pages
End of the page 🎉
You have reached the end of the page. You can navigate through other blog posts as well, share this post on X, LinkedIn and Reddit or return to the blog posts collection page. Thank you for visiting this post.
If you think something is wrong with this post or you want to know more, you can send me a message to one of my social profiles at: https://justinverstijnen.nl/about/
If you find this page and blog very useful and you want to leave a donation, you can use the button below to buy me a beer. Hosting and maintaining a website takes a lot of time and money. Thank you in advance and cheers :)
The terms and conditions apply to this post.
Upload multiple Github repositories into a single Azure Static Web App
In this guide, I will describe how I now host multiple Github applications/tools into one single Static Web App environment in Azure. This mostly captures the simple, single task, tools which can be found on my website:
- https://justinverstijnen.nl/tools or jvapp.nl if you need a shortcut.
Because I started with a single tool, then built another and another and another one, I needed a sort of scalable way of doing this. Each tool means doing the following stuff:
- Creating a repo
- Creating a static web app
- Creating a DNS record
In this guide, I will describe the steps I have taken to accomplish what I’ve built now. A single Static Web App instance with all my tools running.
The GitHub repository topology
To prepare for this setup, we need to have our GitHub repository topology right. I already had all my tools in place. Then I have built my repositories to be as the following diagram:
In every repository I have placed a new YML GitHub Action file, stating that the content of the repository must be mirrored to another repository, instead of pushing it to Azure. All of the repos at the top have this Action in place an they all mirror to the repository at the bottom: “swa-jv-tools” which is my collective repository. This is the only repository connected to Azure.

What are GitHub Actions?
GitHub Actions are automated scripts that can run every time a repository is updated or on schedule. It basically has a trigger, and then does an action. This can be mirroring the repository to another or to upload the complete repository to a Static Web App instance on Microsoft Azure.
GitHub Actions are stored in your Repository under the .Github folder and then Workflows:

In this guide, I will show you how to create your first GitHub Action.
Step 1: Prepare your collective repository
To configure one Repository to act as a collective repository, we must first prepare our collective repository. The other repos must have access to write to their destination, which we will do with a Personal Access Token (PAT).

In Github, go to your Settings, and then scroll down to “Developer settings”.

Then on the left, select “Personal access tokens” and then “Fine-grained tokens”.

Click on the “Generate new token” button here to create a new token.
Fill in the details and select the Expiration date as you want.

Then scroll down to “Repository access” and select “Only selected repositories”. We will create a token that only writes to a certain repository. We will select our destination repository only.

Under permissions, add the Actions permission and set the access scope to “Read and write”.

Then create your token and save this in sa safe place (like a password manager).
Step 2: Insert PAT into every source repository
Now that we have our secret/PAT created with permissions on the destination, we will have to give our source repos access by setting this secret.
For every source repository, perform these actions:
In your source repo, go to “Settings” and then “Secrets and variables” and click “Actions”.

Create a new Repository secret here. I have named all secrets: “COLLECTIVE_TOOLS_REPO” but you can use your own name. It must be set later on in the Github Action in Step 3.
Paste the secret value you have copied during Step 1 and click “Add secret”.

After this is done, go to Step 3.
Step 3: Insert GitHub Actions file
Now the Secret has been added to the repository, we can insert the GitHub Actions file into the repo. Go to the Code tab and create a new file:

Type in:
- .github/workflows/your-desired-name.yml
Github automatically will put you in the subfolders while typing.
There paste the whole content of this code block:
name: Mirror repo A into subdirectory of repo B
on:
push:
branches:
- main
workflow_dispatch: {}
permissions:
contents: read
jobs:
mirror:
runs-on: ubuntu-latest
steps:
- name: Checkout source repo (repo A)
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Checkout target repo (repo B)
uses: actions/checkout@v4
with:
repository: JustinVerstijnen/swa-jv-toolspage
token: ${{ secrets.COLLECTIVE_TOOLS_REPO }}
path: target
ref: main
fetch-depth: 0
- name: Sync repo A into subfolder in repo B (lowercase name)
shell: bash
run: |
set -euo pipefail
# Get name for organization in target repo
REPO_NAME="${GITHUB_REPOSITORY##*/}"
# Set lowercase
REPO_NAME_LOWER="${REPO_NAME,,}"
TARGET_DIR="target/${REPO_NAME_LOWER}"
mkdir -p "$TARGET_DIR"
rsync -a --delete \
--exclude ".git/" \
--exclude "target/" \
--exclude ".github/" \
./ "$TARGET_DIR/"
- name: Commit & push changes to repo B
shell: bash
run: |
set -euo pipefail
cd target
if git status --porcelain | grep -q .; then
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add -A
git commit -m "Mirror ${GITHUB_REPOSITORY}@${GITHUB_SHA}"
git push origin HEAD:main
else
echo "No changes to push."
fiOn line 25 and 26, paste the name of your own User/Repository and Secret name. These are just the values I used.
Save the file by commiting and the Action will run for the first time.
On the “Actions” tab, you can check the status:


I created a file and deleted it to trigger the action.
You will now see that the folder is mirrored to the collective repository:

Step 4: Linking collective repository to Azure Static Web App
Now we have to head over to Microsoft Azure, to create a Static Web App:

Place it in a resource group of your likings and give it a name:

Scroll down to “Deployment details” and here we have to make a connection between GitHub and Azure which is basically logging in and giving permissions.
Then select the right GitHub repository from the list:

Then in the “Build details” section, I have set “/” as app location, telling Azure that all the required files start in the root of the repository.
Click “Review + create” to create the static web app and that will automatically create a new GitHub action that uploads everything from the repository into the new created Static Web App.

Step 5: Link custom domain name (optional)
An optional step but highly recommended is to add a custom domain name to the Static Web App. So your users can access your great stuff with a nice and whitelabeled URL instead of e.g. happy-bush-0a245ae03.6.azurestaticapps.net.
In the Static Web App go to “Custom Domains”.

Click on “+ Add” to add a new custom domain you own, and copy the CNAME record. Then head to your DNS hosting company and create this CNAME record to send all traffic to the Static Web App:

Do not forget to add a trailing dot “.” at the end as this is an external hostname.
Then in Azure we can finish the domain verification and the link will now be active.

After this step, wait for around 15 minutes for Azure to process everything. It also takes a few minutes before Azure has added a SSL certificate to visit your web application without problems.
Summary
This new setup helps me utilizing Github and Azure Static Web Apps way better in a more scalable way. If I want to add different tools, I have to do less steps to accomplish this, while maintaining overview and a clean Azure environment.
Thank you for reading this post and I hope it was helpful.
Sources
These sources helped me by writing and research for this post;
End of the page 🎉
You have reached the end of the page. You can navigate through other blog posts as well, share this post on X, LinkedIn and Reddit or return to the blog posts collection page. Thank you for visiting this post.
If you think something is wrong with this post or you want to know more, you can send me a message to one of my social profiles at: https://justinverstijnen.nl/about/
If you find this page and blog very useful and you want to leave a donation, you can use the button below to buy me a beer. Hosting and maintaining a website takes a lot of time and money. Thank you in advance and cheers :)
The terms and conditions apply to this post.