# linkyee - Your Own Link Pages
A fully customized, open-source LinkTree alternative deployed directly on GitHub Pages.
Inspired by Jekyllrb and LinkTree.
[](../../actions/workflows/build.yml) [](../../actions/workflows/pages/pages-build-deployment)
[**Live Demo**→](http://link.zhgchg.li/)

- [Features](https://github.com/ZhgChgLi/linkyee/edit/main/README.md#features)
- [Get Started – Deploy on GitHub Pages](https://github.com/ZhgChgLi/linkyee/edit/main/README.md#get-started--deploy-on-github-pages)
- [Configuration & Customized & Automatic Redeployment](https://github.com/ZhgChgLi/linkyee/edit/main/README.md#configuration)
- [Custom Domain](https://en.zhgchg.li/posts/483af5d93297/)
## Features
- 100% Customized
- 100% Free
- Supports plugins and dynamic variable injection (e.g., displaying current Medium follower count, GitHub repo stars)
- Deployed directly on GitHub Pages
- SEO and performance optimization
- Theme switching and custom themes supported (the default theme is generated by ChatGPT :\))
### Buy me a coffee ❤️❤️❤️
[**If this project has helped you, please consider starring the repo, recommending it to your friends, or sponsoring me a cup of coffee. Thank you for your support!**](https://www.buymeacoffee.com/zhgchgli)
Feel free to open an issue or submit a fix/contribution via pull request. :)
## Get Started – Deploy on GitHub Pages
### About Github Pages
> GitHub Pages is a free hosting service provided by GitHub, designed for creating and publishing websites directly from a GitHub repository. It allows developers, designers, and anyone with a GitHub account to host personal, project, or organizational websites without needing external hosting services. GitHub Pages works seamlessly with GitHub repositories, automatically generating a static website whenever new content is pushed.
#### Step 1. Click the “Use this template” button at the top-right corner of the [linkyee](https://github.com/ZhgChgLi/linkyee) Template Repo -> “Create a new repository”:

#### Step 2. Check “Include all branches,” enter your desired GitHub Pages repo name, and click “Create repository” once finished:

> The GitHub Pages repo name will affect the access URL. If you enter `your-username.github.io` as the Repo Name, that will be the direct URL to your GitHub Pages site.
> If you already have a `your-username.github.io` repo, the GitHub Pages URL will be `your-username.github.io/Repo-Name`.
#### Wait for the fork to complete. You might encounter deployment errors during the initial setup due to forked repo permission issues. Let’s proceed with the steps to adjust this.

#### Step 4. Go to Settings -> Actions -> General, ensure the following options are selected:

- Actions permissions: `Allow all actions and reusable workflows`
- Workflow permissions: `Read and write permissions`
After selecting, click the Save button to save your changes.
#### Step 5. Go to Settings -> Pages and ensure the selected branch for GitHub Pages is set to “gh-pages”:

> The message `Your site is live at: XXXX` above is your public GitHub Pages access URL.
#### Step 6. Go to Settings -> Actions and wait for the first deployment to complete:

#### Step 7. Access the GitHub Pages URL to ensure the fork was successful:

> Congratulations! Deployment successful. You can now modify the configuration files with your own data. 🎉🎉🎉
### Configuration
Edit The [config.yml](./config.yml) file located in the root directory.
```yaml
# Site Configuration
# Theme, mapped to the directory: ./theme/xxxx
theme: default
# HTML Language setting
lang: "en"
# Plugins, implemented in ./plugins/PLUGIN_NAME
# Use {{ vars.PLUGIN_NAME }} in the settings below
# The output of the plugin can be used below, e.g., {{vars.MediumFollowersCountPlugin}}
plugins:
# Automatically fetch Medium follower count
- MediumFollowersCountPlugin:
username: zhgchgli
# Automatically fetch Github repo star count
- GithubRepoStarsCountPlugin:
- ZhgChgLi/ZMarkupParser
- ZhgChgLi/ZReviewTender
- ZhgChgLi/ZMediumToMarkdown
- ZhgChgLi/linkyee
# Google Analytics tracking id
google_analytics_id:
# Google Analytics tracking id
google_analytics_id:
# HTML Title
title: "ZhgChgLi's Links"
# Avatar image path
avatar: "./images/profile.jpeg"
# Name section text
name: "@zhgchgli"
# Tagline section text
tagline: >-
An iOS, web, and automation developer from Taiwan 🇹🇼 who also loves sharing, traveling, and writing.
# List of links
# icon: Use Font Awesome icons (https://fontawesome.com/search?o=r&m=free)
# text: The displayed text for the link
# title: The url title
# url: The URL of the link
# alt: Alternative text for accessibility
# target: `_blank` opens in a new tab, `_self` opens in the same frame
links:
- link:
icon: "fa-brands fa-medium"
text: "Tech Blog ({{vars.MediumFollowersCountPlugin}} Followers)"
url: "https://blog.zhgchg.li"
alt: "ZhgChgLi's Tech Blog"
title: "ZhgChgLi's Tech Blog"
target: "_blank"
- link:
icon: "fa-brands fa-medium"
text: "Travelog ({{vars.MediumFollowersCountPlugin}} Followers)"
url: "https://medium.com/ztravel"
alt: "ZhgChgLi's Travelog"
title: "ZhgChgLi's Travelog"
target: "_blank"
- link:
icon: "fa-solid fa-rss"
text: "Website"
url: "https://zhgchg.li/"
alt: "ZhgChgLi's Website"
title: "ZhgChgLi's Website"
target: "_blank"
- link:
icon: "fa-brands fa-swift"
text: "ZMarkupParser ({{vars.GithubRepoStarsCountPlugin['ZhgChgLi/ZMarkupParser']}} Stars)"
url: "https://github.com/ZhgChgLi/ZMarkupParser"
alt: "ZMarkupParser is a pure-Swift library that helps you to convert HTML strings to NSAttributedString with customized style and tags."
title: "ZMarkupParser is a pure-Swift library that helps you to convert HTML strings to NSAttributedString with customized style and tags."
target: "_blank"
- link:
icon: "fa-brands fa-app-store-ios"
text: "ZReviewTender ({{vars.GithubRepoStarsCountPlugin['ZhgChgLi/ZReviewTender']}} Stars)"
url: "https://github.com/ZhgChgLi/ZReviewTender"
alt: "ZReviewTender is a tool for fetching app reviews from the App Store and Google Play Console and integrating them into your workflow."
title: "ZReviewTender is a tool for fetching app reviews from the App Store and Google Play Console and integrating them into your workflow."
target: "_blank"
- link:
icon: "fa-brands fa-markdown"
text: "ZMediumToMarkdown ({{vars.GithubRepoStarsCountPlugin['ZhgChgLi/ZMediumToMarkdown']}} Stars)"
url: "https://github.com/ZhgChgLi/ZMediumToMarkdown"
alt: "ZMediumToMarkdown is a powerful tool that allows you to effortlessly download and convert your Medium posts to Markdown format."
title: "ZMediumToMarkdown is a powerful tool that allows you to effortlessly download and convert your Medium posts to Markdown format."
target: "_blank"
- link:
icon: "fa-brands fa-github"
text: "linkyee ({{vars.GithubRepoStarsCountPlugin['ZhgChgLi/linkyee']}} Stars)"
url: "https://github.com/ZhgChgLi/linkyee"
alt: "linkyee is a fully customized, open-source LinkTree alternative deployed directly on GitHub Pages."
title: "linkyee is a fully customized, open-source LinkTree alternative deployed directly on GitHub Pages."
target: "_blank"
# List of social media links
# icon: Use Font Awesome icons (https://fontawesome.com/search?o=r&m=free)
# title: The url title
# url: The URL of the social media link
# alt: Alternative text for accessibility
# target: _blank opens in a new tab, _self opens in the same frame
socials:
- social:
icon: "fa-brands fa-medium"
url: "https://blog.zhgchg.li"
title: "ZhgChgLi's Medium"
alt: "ZhgChgLi's Medium"
target: "_blank"
- social:
icon: "fa-brands fa-github"
url: "https://github.com/ZhgChgLi"
title: "ZhgChgLi's GitHub"
alt: "ZhgChgLi's GitHub"
target: "_blank"
- social:
icon: "fa-brands fa-twitter"
url: "https://twitter.com/zhgchgli"
title: "ZhgChgLi's Twitter"
alt: "ZhgChgLi's Twitter"
target: "_blank"
- social:
icon: "fa-brands fa-linkedin"
url: "https://www.linkedin.com/in/zhgchgli/"
title: "ZhgChgLi's LinkedIn"
alt: "ZhgChgLi's LinkedIn"
target: "_blank"
- social:
icon: "fa-brands fa-instagram"
url: "https://www.instagram.com/zhgchgli/"
title: "Instagram"
alt: "ZhgChgLi's Instagram"
target: "_blank"
- social:
icon: "fa-solid fa-envelope"
url: "mailto:zhgchgli@gmail.com"
title: "Email: zhgchgli@gmail.com"
alt: "zhgchgli@gmail.com"
target: "_blank"
# Footer text
footer: >
Welcome to my website! Follow me on Medium or GitHub, or stay connected on Instagram or LinkedIn.
# Footer copyright message
# Linkyee is a 100% free, open-source project—feel free to modify the copyright message as you like. :)
copyright: >
© 2024 ZhgChgLi. Powered by linkyee
```
#### Please note that after each files modification, you need to wait for GitHub Actions to complete the `Automatic build` and `pages build and deployment` tasks.

Refresh the page for the changes to take effect. 🚀
### Customized
#### Modify Default Theme
- `./themes/default/index.html`
- `./themes/default/styles.css`
- `./themes/default/scripts.js`
#### Create a New Theme
1. `./themes/YOUR_THEME`
2. Update `theme:YOUR_THEME` in `config.yml` file
> Yes, you can use GenAI tools like ChatGPT to help you create your own custom link pages!
#### Automatic Redeployment
By default, the project redeploys automatically once a day to refresh the values of plugin's dynamic variables. You can adjust the [cron](https://crontab.guru/#0_0_*_*_*) settings in [build.yml](../../actions/workflows/build.yml):
```
schedule:
- cron: '0 0 * * *' # Runs daily at midnight (00:00 UTC)
```
If you don’t need scheduled redeployment, simply delete the schedule block.
## Custom Domain ❤️❤️❤️
You can set a custom GitHub Pages domain, such as my own: [https://link.zhgchg.li](https://link.zhgchg.li).
Follow [my tutorial for domain binding.](https://en.zhgchg.li/posts/483af5d93297/) If you’d like, you can [purchase a domain through my Namecheap referral](https://namecheap.pxf.io/P0jdZQ) link—I’ll earn a small commission, which will help me continue contributing to open-source projects.
---
## About
- [ZhgChg.Li](https://zhgchg.li/)
- [ZhgChgLi's Medium](https://blog.zhgchg.li/)
## Other works
### Swift Libraries
- [ZMarkupParser](https://github.com/ZhgChgLi/ZMarkupParser) is a pure-Swift library that helps you to convert HTML strings to NSAttributedString with customized style and tags.
- [ZPlayerCacher](https://github.com/ZhgChgLi/ZPlayerCacher) is a lightweight implementation of the AVAssetResourceLoaderDelegate protocol that enables AVPlayerItem to support caching streaming files.
- [ZNSTextAttachment](https://github.com/ZhgChgLi/ZNSTextAttachment) enables NSTextAttachment to download images from remote URLs, support both UITextView and UILabel.
### Integration Tools
- [ZReviewTender](https://github.com/ZhgChgLi/ZReviewTender) is a tool for fetching app reviews from the App Store and Google Play Console and integrating them into your workflow.
- [ZMediumToMarkdown](https://github.com/ZhgChgLi/ZMediumToMarkdown) is a powerful tool that allows you to effortlessly download and convert your Medium posts to Markdown format.