Awesome
<!-- markdownlint-disable-next-line --> <div align="center"> <!-- markdownlint-disable-next-line -->linkyee - Your Own Link Pages
A fully customized, open-source LinkTree alternative deployed directly on GitHub Pages.
Inspired by Jekyllrb and LinkTree.
</div>- Features
- Get Started – Deploy on GitHub Pages
- Configuration & Customized & Automatic Redeployment
- Custom Domain
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 ❤️❤️❤️
<a href="https://www.buymeacoffee.com/zhgchgli" target="_blank"><img width="545" alt="bmc-button" src="https://github.com/user-attachments/assets/5983bfc9-27fd-49e0-a7f4-eb07657c6e31"></a>
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 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 ayour-username.github.io
repo, the GitHub Pages URL will beyour-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 file located in the root directory.
# 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 <span class='link-button-text'>({{vars.MediumFollowersCountPlugin}} Followers)</span>"
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 <span class='link-button-text'>({{vars.MediumFollowersCountPlugin}} Followers)</span>"
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 <span class='link-button-text'>({{vars.GithubRepoStarsCountPlugin['ZhgChgLi/ZMarkupParser']}} Stars)</span>"
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 <span class='link-button-text'>({{vars.GithubRepoStarsCountPlugin['ZhgChgLi/ZReviewTender']}} Stars)</span>"
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 <span class='link-button-text'>({{vars.GithubRepoStarsCountPlugin['ZhgChgLi/ZMediumToMarkdown']}} Stars)</span>"
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 <span class='link-button-text'>({{vars.GithubRepoStarsCountPlugin['ZhgChgLi/linkyee']}} Stars)</span>"
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 <a href="https://zhgchg.li" target="_blank">ZhgChgLi</a>. Powered by <a href="https://github.com/ZhgChgLi/linkyee" target="_blank">linkyee</a>
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
./themes/YOUR_THEME
- Update
theme:YOUR_THEME
inconfig.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 settings in 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.
Follow my tutorial for domain binding. If you’d like, you can purchase a domain through my Namecheap referral link—I’ll earn a small commission, which will help me continue contributing to open-source projects.
About
Other works
Swift Libraries
- ZMarkupParser is a pure-Swift library that helps you to convert HTML strings to NSAttributedString with customized style and tags.
- ZPlayerCacher is a lightweight implementation of the AVAssetResourceLoaderDelegate protocol that enables AVPlayerItem to support caching streaming files.
- ZNSTextAttachment enables NSTextAttachment to download images from remote URLs, support both UITextView and UILabel.
Integration Tools
- ZReviewTender is a tool for fetching app reviews from the App Store and Google Play Console and integrating them into your workflow.
- ZMediumToMarkdown is a powerful tool that allows you to effortlessly download and convert your Medium posts to Markdown format.