A fully config-driven, SEO-optimized, linktree-style landing page powered by Eleventy (11ty).
- 🚀 Blazing fast — static HTML, no JavaScript required for the page itself
- 🎨 Themeable — 3 built-in themes (
devleader,minimal,neon), or create your own - 📱 Responsive — mobile-first layout
- 🔍 SEO-optimized — title, meta description, canonical, Open Graph, Twitter Card, JSON-LD Schema.org
- 🤖 AEO/GEO-optimized —
llms.txtfor AI answer engines (Perplexity, ChatGPT Browse, etc.) - 🎬 YouTube embed — lite-youtube thumbnail → iframe (zero perf cost until clicked)
- 📄 sitemap.xml + robots.txt — auto-generated from config
- 🔒 No secrets in repo — deploy token is a GitHub Actions secret only
- Fork this repo on GitHub
- Edit
_data/site.yaml— change the profile, links, theme, and SEO fields to your own - Set up the deploy token — see docs/cicd.md
- Push to
main— GitHub Actions builds and deploys automatically
That's it. No code changes needed.
homebase/
├── _data/
│ └── site.yaml ← ALL personalization lives here (edit this!)
├── src/
│ ├── index.njk ← main page template
│ ├── llms.txt.njk ← AI/LLM crawler file
│ ├── robots.txt.njk ← search engine crawler file
│ ├── sitemap.xml.njk ← sitemap
│ ├── CNAME ← custom domain (edit or delete)
│ ├── _includes/ ← Nunjucks partials
│ ├── assets/ ← base CSS + lite-youtube.js
│ ├── themes/ ← theme CSS files
│ └── icons/ ← SVG brand icons
├── .eleventy.js ← 11ty configuration
├── package.json
└── .github/workflows/
├── deploy.yml ← CI/CD (builds + pushes to Pages repo; manual trigger also builds docs)
└── scheduled-rebuild.yml ← periodic rebuild (keeps YouTube feed fresh)
All content is controlled by a single YAML file. Key sections:
profile:
name: "Your Name"
username: "@yourhandle"
bio: "Your bio here."
avatar: "https://your-avatar-url.com/photo.jpg"seo:
title: "Page Title"
description: "Meta description for search engines."
canonical: "https://your-domain.com"
og_image: "https://your-og-image-url.com/image.jpg"
keywords: ["keyword1", "keyword2"]GA4 is injected at build time via a CI secret — it's never stored in the repo.
Add GOOGLE_ANALYTICS_ID as a GitHub Actions secret (see docs/cicd.md).
Leave the secret unset to disable analytics entirely.
theme: devleader # devleader | minimal | neon | <custom folder name>Option A — Live YouTube channel feed (fetches latest video at build time, no API key needed):
youtube_channels:
- channel_id: "UCxxxxxxxxxxxxxxxxxxxxx" # find at youtube.com/@handle/about
name: "My Channel"
max_videos: 1Option B — Hard-coded specific videos (fallback if youtube_channels is empty):
featured_videos:
- youtube_id: "dQw4w9WgXcQ"
title: "Video title"Leave both empty to hide the video section entirely.
sections:
- links:
- title: "My Website"
url: "https://example.com"
icon: "globe"
- title: "Social"
links:
- title: "Twitter"
url: "https://twitter.com/yourhandle"
icon: "twitter"Available icons: devto, discord, dzone, facebook, github, globe, hackernoon, hashnode, instagram, linkedin, mastodon, medium, patreon, quora, reddit, stackoverflow, tiktok, twitter, youtube
See docs/themes.md for details on built-in themes and creating custom themes.
npm install
npm start # dev server at http://localhost:8080 with live reload
npm run build # production build to _site/See docs/cicd.md for full setup instructions.
The workflow in .github/workflows/deploy.yml builds the site and force-pushes _site/ to your GitHub Pages repo on every push to main.
A second docs job in the same workflow builds and publishes the MkDocs documentation site. It runs on push to main and manual dispatch, but is skipped on the scheduled cron rebuild to avoid unnecessary doc regeneration.
- docs/themes.md — using and creating themes
- docs/cicd.md — deploy token setup and workflow configuration
- docs/seo.md — SEO fields reference and best practices