Strip personal data from templates so the theme ships clean for any deployer. Collection pages now use generatePageOnEmptyData so empty post types show encouraging placeholders instead of 404s. Navigation is conditional on enabled post types and installed plugins. Sidebar widgets split into individual components with plugin-aware visibility. Slashes page explains required plugins for root-level page creation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Indiekit Eleventy Theme
A modern, IndieWeb-native Eleventy theme designed for Indiekit-powered personal websites. Own your content, syndicate everywhere.
IndieWeb Features
This theme is built from the ground up for the IndieWeb:
Microformats2 Support
- h-card: Complete author profile with photo, name, bio, location, social links
- h-entry: All post types properly marked up for parsing
- h-feed: Machine-readable feeds for readers and services
- rel="me": Identity verification links for IndieAuth
Post Types
Full support for IndieWeb post types via Indiekit:
- Articles: Long-form blog posts
- Notes: Short status updates (like tweets)
- Photos: Image posts with galleries
- Bookmarks: Save and share links
- Likes: Appreciate others' content
- Replies: Respond to posts across the web
- Reposts: Share others' content
- RSVPs: Respond to events
Webmentions
- Receive and display webmentions via webmention.io
- Reply contexts for responses to external posts
- Grouped display: likes, reposts, and replies
Syndication
Works with Indiekit's syndication plugins:
- Post to Bluesky and Mastodon from your site
- POSSE (Publish Own Site, Syndicate Elsewhere)
Integration Plugins
This theme integrates with custom Indiekit endpoint plugins:
@rmdes/indiekit-endpoint-github
Display your GitHub activity:
- Recent commits across repositories
- Starred repositories
- Featured project showcase
Configuration:
GITHUB_USERNAME="your-username"
GITHUB_TOKEN="ghp_xxxx"
GITHUB_FEATURED_REPOS="user/repo1,user/repo2"
@rmdes/indiekit-endpoint-funkwhale
Share your listening activity from Funkwhale:
- Now playing / recently played
- Listening statistics
- Top artists and albums
- Favorite tracks
Configuration:
FUNKWHALE_INSTANCE="https://your-instance.com"
FUNKWHALE_USERNAME="your-username"
FUNKWHALE_TOKEN="your-api-token"
@rmdes/indiekit-endpoint-youtube
Display your YouTube channel(s):
- Channel info with subscriber counts
- Latest videos grid
- Live stream status (live/upcoming/offline)
- Multi-channel support
Configuration:
YOUTUBE_API_KEY="your-api-key"
YOUTUBE_CHANNELS="@channel1,@channel2"
Social Feeds
The sidebar displays your social activity:
Bluesky
BLUESKY_HANDLE="you.bsky.social"
Mastodon
MASTODON_INSTANCE="https://mastodon.social"
MASTODON_USER="your-username"
Installation
As a Git Submodule (Recommended)
# In your Indiekit deployment repo
git submodule add https://github.com/rmdes/indiekit-eleventy-theme.git eleventy-site
git submodule update --init
Standalone
git clone https://github.com/rmdes/indiekit-eleventy-theme.git
cd indiekit-eleventy-theme
npm install
Configuration
All configuration is done via environment variables, making the theme fully portable.
Required Variables
# Site basics
SITE_URL="https://your-site.com"
SITE_NAME="Your Site Name"
SITE_DESCRIPTION="A short description of your site"
# Author info (displayed in h-card)
AUTHOR_NAME="Your Name"
AUTHOR_BIO="A short bio about yourself"
AUTHOR_AVATAR="/images/avatar.jpg"
AUTHOR_TITLE="Your Title" # Optional
AUTHOR_LOCATION="City, Country" # Optional
AUTHOR_EMAIL="you@example.com" # Optional
Social Links
Format: Name|URL|icon,Name|URL|icon
SITE_SOCIAL="GitHub|https://github.com/you|github,Mastodon|https://mastodon.social/@you|mastodon,Bluesky|https://bsky.app/profile/you|bluesky"
Full Configuration Reference
| Variable | Description | Default |
|---|---|---|
SITE_URL |
Your site's full URL | https://example.com |
SITE_NAME |
Site title | My IndieWeb Blog |
SITE_DESCRIPTION |
Meta description | An IndieWeb-powered blog |
SITE_LOCALE |
Language code | en |
AUTHOR_NAME |
Your display name | Blog Author |
AUTHOR_BIO |
Short biography | - |
AUTHOR_AVATAR |
Path to avatar image | /images/default-avatar.svg |
AUTHOR_TITLE |
Job title or tagline | - |
AUTHOR_LOCATION |
Where you're based | - |
AUTHOR_EMAIL |
Contact email | - |
SITE_SOCIAL |
Social links (see format above) | - |
GITHUB_USERNAME |
GitHub username for activity | - |
GITHUB_TOKEN |
GitHub personal access token | - |
GITHUB_FEATURED_REPOS |
Comma-separated repos | - |
BLUESKY_HANDLE |
Bluesky handle | - |
MASTODON_INSTANCE |
Mastodon instance URL | - |
MASTODON_USER |
Mastodon username | - |
FUNKWHALE_INSTANCE |
Funkwhale instance URL | - |
FUNKWHALE_USERNAME |
Funkwhale username | - |
FUNKWHALE_TOKEN |
Funkwhale API token | - |
YOUTUBE_API_KEY |
YouTube Data API key | - |
YOUTUBE_CHANNELS |
Comma-separated channel handles | - |
Directory Structure
├── _data/ # Data files (fetch from APIs, site config)
│ ├── site.js # Site configuration from env vars
│ ├── blueskyFeed.js # Bluesky posts fetcher
│ ├── mastodonFeed.js # Mastodon posts fetcher
│ ├── githubActivity.js
│ ├── funkwhaleActivity.js
│ └── youtubeChannel.js
├── _includes/
│ ├── layouts/ # Page layouts (base, home, post)
│ └── components/ # Reusable components (sidebar, h-card, etc.)
├── css/
│ └── tailwind.css # Tailwind CSS source
├── images/ # Static images
├── *.njk # Page templates
├── eleventy.config.js # Eleventy configuration
└── package.json
Customization
Personal Overrides
When using as a submodule, place override files in your parent repo's overrides/ directory:
your-repo/
├── overrides/
│ └── eleventy-site/
│ ├── _data/
│ │ └── cv.js # Your CV data
│ └── images/
│ └── avatar.jpg # Your photo
└── eleventy-site/ # This theme (submodule)
Override files are copied over the submodule during build.
Styling
The theme uses Tailwind CSS. To customize:
- Edit
tailwind.config.jsfor colors, fonts, spacing - Edit
css/tailwind.cssfor custom utilities - Run
npm run build:cssto regenerate
Development
# Install dependencies
npm install
# Development server with hot reload
npm run dev
# Build for production
npm run build
# Build CSS only
npm run build:css
Pages Included
| Page | URL | Description |
|---|---|---|
| Home | / |
Recent posts with sidebar |
| About | /about/ |
Author h-card and bio |
| Blog | /blog/ |
All posts chronologically |
| Articles | /articles/ |
Long-form articles |
| Notes | /notes/ |
Short status updates |
| Photos | /photos/ |
Photo posts |
| Bookmarks | /bookmarks/ |
Saved links |
| Likes | /likes/ |
Liked posts |
| Replies | /replies/ |
Responses to others |
| Reposts | /reposts/ |
Shared content |
| Interactions | /interactions/ |
Combined social activity |
| GitHub | /github/ |
GitHub activity |
| Funkwhale | /funkwhale/ |
Listening history |
| YouTube | /youtube/ |
YouTube channel(s) |
| Categories | /categories/ |
Posts by category |
| RSS Feed | /feed.xml |
RSS 2.0 feed |
| JSON Feed | /feed.json |
JSON Feed 1.1 |
License
MIT
Credits
- Built for Indiekit by Paul Robert Lloyd
- Styled with Tailwind CSS
- Icons from Heroicons
- Part of the IndieWeb community