Blue Rose, an 11ty Starter Kit

A lightweight, responsive, and highly performant gallery for photos and videos for use with 11ty

Demo

What is in a name?

This project is provided under the Gay Agenda License for a reason. The name comes from Twin Peaks as a reminder of what David Lynch thought of transphobic individuals.

I told all of your colleagues, those clown comics, to fix their hearts or die.

Rest in peace, David Lynch (1946-2025), you were too good for this world.

Oh, and this template was made in Portland, Oregon which is also known as Rose City, so you know, there's that.

Features

  • Photo and video support
    • Multiple types can be combined in a single post
    • Ability to cite authors and sources where appropriate
    • Alt-text highly encouraged
    • Pixel-preserving support for pixel art
  • OpenGraph embed support for places like iMessage and Discord
  • RSS, Atom, and JSON feeds
  • High performance
    • Images and videos are unloaded when not in view
    • Image optimization with @11ty/eleventy-img
  • Keyboard navigation
    • Pages are fully tab-able.
    • Navigate pages with left and right arrow keys
  • Share buttons that use your OS's native share function where available, and ShareOpenly when it's not.
  • Minimal JavaScript used for:
    • Keyboard navigation
    • Share sheet
    • Pausing videos out of view

Developer Features

If you don't like Tailwind or Biome, you can remove it.

Important Notes

  • Uses ai.txt, robots.txt, and a norobots meta tag to ask bots not to allowing indexing or scraping. Remove them if you feel otherwise. It feels irresponsible to default a photo gallery to fully public at this time.
  • When using @11ty/eleventy-img for image optimization, build times increase. If it gets to be too much, you can remove this and try to pre-optimize your images as best you can.

Installation

  • Clone the repo git clone [email protected]:melanie/blue-rose.git
  • Edit ./data/metadata.js with your details.
    • I recommend keeping page size and ignored tags the same.
  • Replace these images with your own:
    • apple-touch-icon.png
    • cover.png
    • favicon.svg
    • profile.jpg

Post Template

Create new posts in ./content/p.

  • Make a markdown file slug.md and place your image in the folder next to it, which will let you reference it by typing ./picture.jpg in the markdown file.
---
author: Author Name
date: 2025-07-15T17:01:23.812Z
attachments:
  - altText: Alt text for sample1.png
    type: image/png
    url: ./sample1.png
  - altText: Alt text for sample2.jpg
    type: image/jpeg
    url: ./sample2.jpg
  - altText: Alt-text for sample3.mp4
    type: video/mp4
    url: ./sample3.mp4
    pixel: true
redirect_from: my-old-webpage
source: https://melkat.pics
tags: [sample, tags]
---

Caption and body content here.

Frontmatter specs

  • date: 11ty date syntax supported
  • attachments: Array of pictures and videos
    • altText: Make your content accessible
    • type: Mimetype, typically image/jpeg, image/png, or video/mp4
    • url: path to the picture or video, usually in the same directory as this file, so we reference it like ./my-photo.jpg
    • pixel: Boolean, optional, for preserving pixels in pixel art
  • tags: Array of strings
  • redirect_from: String, optional, makes a redirect for old urls. For example if you want to make the url example.com/my-old-page forward to the new page determined by the slug of your markdown file, type my-old-page
  • author: String, optional, cite the original author
  • source: URL, optional but requires author, puts a link on the author

FAQ

  • Deploying on Netlify? You may need to add a netlify.toml file, like this one, to the root of this project.

Support

Got a question? Reach out to me on Mastodon, @[email protected] and I will do my best.

Did you find this useful? Donate to Trans Lifeline or The Trevor Project.

Description
A lightweight, responsive, and highly performant gallery for photos and videos.
https://bluerose.melkat.dev Readme 903 KiB
Languages
Nunjucks 54%
JavaScript 33.4%
CSS 12.6%