Deploy your own Linktree with LittleLink on GitHub Pages
Tags: github, programming, beginners, webdev
Published: 2022-12-21 12:02:58

## Introduction

As you may have heard, Elon Musk's Twitter recently banned links to social media reference landing pages such as [Linktree](https://linktr.ee/), [many.link](https://many.link/), and [Lnk.Bio](https://lnk.bio/). That resulted in mayhem.

Fortunately, the decision was reversed after a short while, but that experience showed me how easily a company could arbitrarily ban harmless links to popular platforms.

For that reason, I started looking for an open-source alternative that is easy to customize and deployable on GitHub Pages.

## What is LittleLink

Shortly after I started my search, I found a perfect candidate, [LittleLink](https://littlelink.io/), developed by Seth Cottle. LittleLink is a lightweight self-managed-no-server-required Linktree substitute. Above all, easily deployable to GitHub pages.

## Deploy LittleLink to GitHub Pages in 3 simple steps

### Step 1 - fork LittleLink

Although the LittleLink tutorial is a good starter, it only shows the deployment process to [Vercel](https://vercel.com). That is a bit of overkill, in my opinion. The process can be simpler by utilizing GitHub Pages.

As the first step, head to [LittleLink GitHub repository](https://github.com/sethcottle/littlelink) and fork the repo by clicking the `Fork` button on the top right.

### Step 2 - create the `gh-pages` branch from the `main` branch

Once you forked the repo, create a new branch called `gh-pages`.

Then open a new tab in your browser and type: `https://<your_github_username>.github.io/littlelink/`. 

Example: [https://kasramp.github.io/littlelink/](https://kasramp.github.io/littlelink/)

Viola! You should see a page like below:

![LittleLink default](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k7zltole5fl2u6kgea8c.png)

### Step 3 - customization

The next step is to apply some customizations and add links to your social media. 

Clone the repository, 

```bash
$ git clone <your_little_link_fork_url>
```

Switch to the `gh-pages` branch,

```bash
$ git checkout gh-pages
```

Then open the `index.html` file in your favorite editor and replace the `href` of any social media you want with your profile link.

Example:

```html
<!-- GitHub -->
<a class="button button-github" href="https://github.com/kasramp" target="_blank" rel="noopener">
    <img class="icon" src="images/icons/github.svg" alt="GitHub Logo">GitHub</a>
<br>
```

You can also change the order of links. 

For the avatar, go to the `images` directory and replace the `avatar.png` and `avatar@2x.png` files with your preferred pictures. You have to keep the file names the same. You also don't need to resize the images. Any size should work.

If you don't want to have your profile image as `favicon`, either reference the below line in `index.html` to a different image or remove it,

```html
<link rel="icon" type="image/png" href="images/avatar.png">
```

LittleLink has a `privacy.html` page. You can keep it, edit it, or delete it. If you decide to remove the `privacy` page, don't forget to remove its reference from the `index.html` file. Modify the line below.

From:

```bash
<p><a href="privacy.html">Privacy Policy</a> | Build your own by forking <a href="https://littlelink.io" target="_blank" rel="noopener">LittleLink</a>.</p>
```

To:

```bash
<p>Build your own by forking <a href="https://littlelink.io" target="_blank" rel="noopener">LittleLink</a>.</p>
```

You can change the theme by modifying the CSS files under the `css` directory. There are four files, each with specific functionality. You don't need to change anything there for now.

Once you have finished with the customization, commit and push the changes. Then wait a minute or two and refresh `https://<your_github_username>.github.io/littlelink/`. You should see your changes.

Technically you are done. Congratulations 🎉 🥳

You successfully managed to self-host your own version of LittleLink. Nobody can ban you anymore.

![Elon Musk](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r8fmu0c5s03jpy4ok5jo.jpg)

But, if you are uncomfortable with the `github.io` domain and want to have your own domain, proceed with the next section.

## Add a custom domain

The `https://<your_github_username>.github.io/littlelink/` can be ugly and difficult to memorize. Don't worry! You can link your domain to that.

For that, you must do two things:

1. Create the `CNAME` file in your repository
2. Add an `A record` to your DNS via your host/domain provider

Let's begin with the simpler one.

### Add the `CNAME` file to your Git repository

Create a file named `CNAME` containing your domain address without  `https://`.

```bash
$ echo "your_awesome_domain_name.com" > CNAME
```

Commit and push the change. Don't forget you should do the above change on the `gh-pages` branch only.

### Add `A record` to DNS

Unfortunately, the process varies from vendor to vendor. Each host or domain provider has a different UI. I recommend you do some search on your provider portal first. You should find a tutorial to set an `A record`. Here are example tutorials of [GoDaddy](https://my.godaddy.com/help/add-an-a-record-19238) and [Cloudflare](https://developers.cloudflare.com/dns/manage-dns-records/how-to/create-dns-records/).

For the sake of completeness, I show mine though.

First, you need to go to your DNS manager page. Then click on `A record` and fill it with the details below:

![A record under DNS configuration](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3lbfa6lznafwkto4l30z.png)

Change the `host record` value to your domain (`example.com`) or subdomain (`contact.example.com`). The value should be the same as the `CNAME` file.

Modify `points to` to your GitHub Pages (`johnwick.github.io`).

Save the changes and wait a few minutes, usually 5 to 10 minutes. Then open a tab on your browser and type your domain address. You should see your LittleLink profile.

## Bonus - `https` support

By default, GitHub Pages uses the `http` protocol, which is a bit off-putting even though no sensitive info is served.

That's easily fixable with a single setting change. 

Go to your LittleLink repository page and click on the setting button. In the setting page, click on `pages` and tick `Enforce HTTPS`.

![GitHub Pages setting](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lw1ni3axqfzxbueithql.png)

Now your LittleLink profile works with `https`.