Ricardo 46f4559fe3 feat: add Last.fm integration to listening page
- Add lastfmActivity.js data fetcher for Indiekit Last.fm API
- Add listening.njk combined page with Funkwhale + Last.fm data
- Source filter tabs, combined stats, recent listens timeline
- Loved tracks section for Last.fm

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 14:59:39 +01:00

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

# 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

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:

  1. Edit tailwind.config.js for colors, fonts, spacing
  2. Edit css/tailwind.css for custom utilities
  3. Run npm run build:css to 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

Description
No description provided
Readme 1.5 MiB
Languages
Nunjucks 70.9%
JavaScript 20.7%
HTML 4.8%
CSS 3.6%