# linkyee — Your Own Link Page
A fully customized, **100% free**, open-source LinkTree alternative — deployed straight to GitHub Pages.
Inspired by Jekyllrb and LinkTree.
[](../../actions/workflows/build.yml) [](../../actions/workflows/pages/pages-build-deployment)
[**Live Demo →**](https://zhgchg.li/linkyee/)
> **In one sentence:** click *Use this template*, edit one YAML file, push — your link page is live on GitHub Pages with a free `*.github.io` domain (or your own). No SaaS, no monthly fee, no vendor lock-in. AI-assisted theming and plugin development included.
## Table of contents
- [Why linkyee?](#why-linkyee)
- [Configuration](#configuration)
- [Themes 🎨](#themes-)
- [Plugins 🔌](#plugins-)
- [Get Started – Deploy on GitHub Pages](#get-started--deploy-on-github-pages)
- [Local testing](#local-testing)
- [Custom Domain](#custom-domain-)
- [Showcase ✨](#showcase-)
- [Donate](#donate)
---
## Why linkyee?
- **100% free.** Hosted on GitHub Pages. No subscriptions, no ads, no upsells.
- **100% yours.** Your config, themes, plugins, and content live in your own GitHub repo. Take it offline whenever you want.
- **8 ready-made themes** — switch by editing a single line in `config.yml`.
- **AI Style Designer.** Describe the look you want in plain English; the bundled [`linkyee-style-designer`](./.claude/skills/linkyee-style-designer/SKILL.md) Claude skill writes the full theme for you (HTML + CSS + JS).
- **6 built-in plugins** for live data — GitHub stars, last commit, profile stats, RSS/Atom feeds, date countdowns, latest YouTube video.
- **AI Plugin Builder.** Want data from somewhere else? Describe the source; the bundled [`linkyee-plugin-builder`](./.claude/skills/linkyee-plugin-builder/SKILL.md) skill writes the Ruby plugin and wires it in.
- **SEO + accessibility built-in.** WCAG AA contrast, dark mode, responsive down to 320 px, OG/Twitter meta, keyboard-friendly focus states.
- **Local preview with auto-rebuild.** `./preview.sh` rebuilds on save; refresh the browser, no plugins needed.
### Buy me a beer ❤️❤️❤️
[](https://www.paypal.com/ncp/payment/CMALMPT8UUTY2)
[**If this project has helped you, feel free to sponsor me a cup of coffee, thank you.**](https://www.paypal.com/ncp/payment/CMALMPT8UUTY2)
Feel free to open an issue or submit a fix/contribution via pull request. :)
---
## Configuration
Everything that ends up on your page is driven by a single file: [`config.yml`](./config.yml). It's a Liquid-rendered YAML file with five top-level sections:
```yaml
theme: default # ← directory under ./themes/
lang: "en"
plugins: # ← optional dynamic data fetched at build time
- GithubRepoStarsCountPlugin: [ZhgChgLi/linkyee]
title: "Your Name" # ← profile header
avatar: "./images/profile.jpeg"
name: "@yourhandle"
tagline: "One line about you."
links: # ← buttons in the link list
- link:
icon: "fa-brands fa-github"
text: "GitHub ({{ vars.GithubRepoStarsCountPlugin['ZhgChgLi/linkyee'] }} ⭐)"
url: "https://github.com/yourname"
target: "_blank"
socials: [ ... ] # ← icon-only social row
footer: "Free-form HTML."
copyright: "© 2026 You."
```
The shipped [`config.yml`](./config.yml) is a fully working example that exercises **every built-in plugin** — read it as the canonical reference. Edit fields in place, push, wait for GitHub Actions to rebuild, refresh.
### Multi-language sites
Configure `i18n` to render one static site for each locale. The root page
chooses a saved or browser-matching locale, then falls back to
`default_locale`.
```yaml
i18n:
default_locale: en
locales:
en: locales/en.yml
es: locales/es.yml
```
Each locale file overrides profile content and may supply UI labels:
```yaml
lang: es
og_locale: es_ES
locale_label: Español
title: Página de enlaces
name: Ejemplo
ui:
language_switcher: Idioma
primary_links: Enlaces principales
```
Locale hashes merge with `config.yml`; locale arrays such as `links` and
`socials` replace their base values. Builds create `/