Table of Contents
Introduction, Getting started, Editing, Common pitfalls, Tools I use, OC-specific galleries, Webhosts & domain registrars, Tips & Advice, Questions.
March 28, 2026: Version 2 is available. See the list of changes.
Introduction
This is to provide artists (or anyone whose needs overlap) a pre-packaged art gallery, with pages for OCs (and their own individual galleries) similar to my own website.
Being able to see a folder setup for reference, is one of the things that would've helped me back when I was getting started with 11ty/Eleventy.
Check out the demo.
"What's 11ty?"
11ty is a Static Site Generator, SSG for short. You'll edit your website via markdown (and minimal HTML) both of which I include cheatsheets for.
I've included layouts. You can customize the CSS and HTML of those, or you can use any other template if you have the permission to.
"I'm a noob and I'm scared..."
*puts my paw on your shoulder* I know... It's okay... You're on unknown territory, and that can be overwhelming. But you are capable.
Take breaks if you feel hopeless. Return the next day with more energy. You'll have processed the things you learned, and you'll find yourself chipping away at the problem. Celebrate your victories, and if you think there's none; simply by trying there's one. Get yourself a rubberducky. Ask me for help.
Don't listen to nerds who say "You literally just florp your dingus and sudo to dookie.Nerd gibberish. Don't worry about it. It's so easy." Cuz nothing kills the mood faster...
Maybe you'll be able to get this to work easy within a day. But it's okay if not. Again, it's new, and as artists we know what it's like to learn a new skill.
It's fine if this way of learning isn't what you prefer, but you are capable. Don't let that little brain goblin tell you otherwise.
Getting started
- Extract the
.zipfile wherever you prefer. I put mine in Documents. The folder contains files and several more folders, as listed below. - Install 11ty in this folder. I recommend PetraPixel's tutorial for this.
Your support
Give coin?!
Consider tipping Kalechips and PetraPixel if you got some spare coin.
As for me, uhhh, donate to Wikipedia cuz without it I'll go feral.
If the starterpack was useful to you, let people know. Maybe it could help them too.
Folders
Markdownfolder: Where you'll edit your pages; the welcome page, gallery entries, blog posts, your "about me" page, etc._datafolder:.jsonfiles can be used to store information which your pages can then output for you quickly in a list or as a shortcut.e.jsonis the setup I use for emoji shortcuts. Visitors on my website will see HTML in place of emojis if they inspect my code, but I use a shortcode as I'm editing my pages. You can add more by copypasting the lines. Remember commas after each new emoji, except the very last on the list.navigation.jsonis where you add or remove which pages you want to be accessible from the menu/navigation. This is seperate from the sitemap (edited throughsitemap.md) page, which is intended to contain everything, meanwhile the navigation can be limited to the most important links.
_includesfolder:- All your
.mdfiles in the Markdown folder haslayout:at the top. You can change that, either per page, or (for example in VSCode) by going to edit > replace in files, then "find" =layout: default-main.njkand "replace with" =layout: simple-main.njk- Since using "replace all" affects all the files, be specific. If you just "find" =
defaultand "replace with" =simpleit's also going to mess with any regular text you've written.- Keep spaces in mind. If you "find" =
cooland "replace with" =super, (There's a space at the end!) it's no longer "wow thats cool man" it's "wow thats superman". Yeah I'm speaking from experience...
- Keep spaces in mind. If you "find" =
- Since using "replace all" affects all the files, be specific. If you just "find" =
- All your
_sitefolder: This is the "output" that 11ty generates for you. It's the files that'll make up your entire website once they're online.IGNOREfolder: These files are ignored by 11ty. They won't be processed for the _site folder; they're not intended to be uploaded. Storage, reference, whatever else.imgfolder is where you'll be sorting your image files.jsfolder is for javascript.assetsis for any other files, like fonts, audio, what have you.cssfolder already has some files, such asdefault.css, which is to style the default layout. You can change the colors for both dark mode and light mode here. You can also add backgrounds, borders, or style the whole thing all over though it takes know-how.- "root" folder: This refers to the folder all of the above are stored in. So the folder you extracted after downloading the starterpack.
- The first 2 lines in the
robots.txtfile is set to disallow all bots (indicated by *) from root (indicated by /) and up, meaning your entire site. By "all" bots, it means both search engines and AI scrapers. Even then, some won't respect therobots.txtfile.- Beyond line 3, it's all AI. If you have the first 2 lines remain as they are, the rest are rebundant, but I kept these in case you want to allow search engines to index your website, but disallow AI scrapers.
- You can put a
favicon.icoin root. If your layout is set to include a favicon (The default one is), it'll show up. You can use some PNG-to-ICO converter, like this one.
- The first 2 lines in the
Editing
Adding to the gallery
Markdown
- In the
Markdownfolder, make a new.mdfile. You can sort theMarkdownfolder however you want.
- Copy-paste the content from an older gallery entry, and fill out the info (title, file extension, tags, permalink, date) as shown in the image below.
Image files
- Prepare your images. You'll need 2 per gallery entry; 1 for the full view image, and 1 for the thumbnail.
- Gallery images go in
/img/gallerywhich then splits into folders per year. Drawings from 2025 would be in/img/gallery/2025, and corresponding thumbnails would be in/img/gallery/2025/thumb - Both images should have the same name, and be the same as the "title" you gave it except slugified. Basically, all lowercase, spaces and special characters are replaced with
-, etc. ... If that sounds wack, copy the "title" which you entered on line 2 (e.g. in the example image, this would beman shell sea sand) and paste the text in (for example) this slugify converter thinger. It'll outputman-shell-sea-sand, which means our images would be namedman-shell-sea-sand.pngand yeah, there you have it.
slugify
In the above example, it seems repundant, yeah.
But say you made a drawing, and you wanted to title it He/him Lesbians Are Cool!!, the issue you'd run into (without slugify) would be that you can't add slashes (or exclamation points) in an image file name. But with slugify, 11ty will look for a file named he-him-lesbians-are-cool.png. Win!!
Tags
The wonders of "tags" isn't shown here, but they're what tells 11ty to add the page to the a collection named gallery (which is the main gallery) and a collection named ocSteellion (which is OC-specific). More on OC-specific here.
Updating the "cool sites" page
In your _data folder you have a .json file for "cool sites". Like with gallery.md, you generally don't need to edit cool sites.md to add more.
Instead, you go to _data/coolsites.json...
...and there's then a list of different cool sites. All of which, by default, are Wikipedia.
Edit them, make more, add more fields, whatever you want. For example, you could add a line called "description":"" and then write "description":"Learned about the dancing plague of 1518. Very interesting. Thank you Wikipedia. 10/10."
Then, add {{feature.description}} in my links.md, somewhere between line 9 and line 13. Then, it'll also output descriptions you've made for all sites.
navigation
The same goes for navigation.json, where you can add/remove categories and subcategories from the navigation in the left sidebar. You can add as many categories as you want, but the layout holds max 7 subcategories by default.
In one of the cheatsheets, I've included a snippet you can copypaste, which generates your navigation. If you know some HTML/CSS, you could implement that into a new layout.
Common pitfalls
Which means pitfalls I've personally fallen in several times...
Uppercase/lowercase characters
This was fixed in Version 2, so I've collapsed this section.
Only relevant in Version 1
This has messed with my gallery sometimes. Keep your images named the same as you want their title in the gallery to appear. You can make it so that the two can be seperate, but it's just another field to fill out when posting your art. (Edit: Would you look at that! A few hours later, and I realize I made an uppercase/lowercase error, LOL. Come, brother, let us troubleshoot together.)
Special characters are also a no-go, as far as I know. Even + or / messes with the setup I have.
Permalink already in use
If you (after copypasting to make a new page) forget to change the permalink:, it might mess with the 11ty preview, since several .md files are trying to write to the same permalink: ! If this happens, stop 11ty, adjust the new page's permalink, save the file, then run 11ty again.
And slashes... Oh my god, slashes. The way I've set up permalink: the value be for example home/ or home.html.
home/becomeshome/index.htmlhome.htmlbecomes...home.html- As far as I know,
homeor/homedoesn't work in my setup.
Images not showing up
If you're having trouble with images not showing up as expected, right-click > open image in new tab. Then you can see where 11ty is trying to search for the file. Compare it to figure out where it went wrong.
A lot of the time, it ended up being the file extension, where I told 11ty to search for a /img/cool image.png and then my "cool image" wasn't even a PNG. Those times, you may feel like you have bricks for brains, but I extend to you bricks-for-brains solidarity.
File paths
This was fixed in Version 2, so I've collapsed this section.
Only relevant in Version 1
Confound those file paths. Oh, how I hate them. They drive me to drink!!! *glug glug glug* Anyway, so few hours after posting this, I realized I'm stupid. And I'm owning up to it, because hopefully then you'll then feel less stupid whenever you mess up.
So, in the demo, when you go to the characters page, yeah? It only states the character names. (Currently, there's only Steellion, but y'know, imagine there's 50 horses or whatever.)
It was supposed to show an avatar along with it... And why doesn't it show up...?
C'mere. Lemme show ya.
See this?
That's the beginning of steellion.md which contains Steellion's character page.
Now, in the folder you've extracted on your computer, find characters.md and take a look.
This is what it looks like, yeah? Nice. So far so good. The src= in <img> (so, the image source) is set to output /img/avatar/characters/Steellion/clopsiverse/avatar.png
Which... should be it, right?
Ding dong, I are wrong!!
Because this is where the image is actually located:
Yeah... Seriously. The "world" folder (Clopsiverse) starts with a capital C. Meanwhile, "clopsiverse" in Steellion's info, was spelled with a lowercase C.
In steellion.md, change world: clopsiverse to world: Clopsiverse.
Boom baby. Day saved.
Tools & Services
Useful stuff
- Bulk Resize Photos to resize images in bulk. Useful if you have gallery entries in bulk and need smaller versions and/or thumbnails for them. I keep "full view" gallery entries at a maximum of 1000 pixels wide.
- TinyPNG to compress PNG files. Usually it shaves 50% to 70% off and I very rarely see any loss in quality.
- JPG files get super crusty, and personally I find the PNG files end up taking up less space anyway.
- EzGif to compress (optimize) GIF files.
Webhosts
Check my bookmarks for a list of webhosts along with other useful stuff. You can also check this webhost list by Kale and this post by Snake. Snake's post focuses on webhosts that allow adult content.
If you wanna talk about oatmeal in a very Normal way, and only post drawings of your Normal human OCs smiling happily at the camera while they polish their white picket fence, finding a webhost ain't hard.
But if you plan to post anything which conservative bootlickers might find obsceneErotica, queer art, fairy wings, cat-eared anime girls, ASMR, fantasy, lolisho/cub, feral, furries, noncon, incest age gap yaoi, toxic yuri, etc. ... your options are slimmed down. But it's the options that are worth supporting.
What you get with this starterpack is a static website, so you don't need a lot of power to get it running.
Domains
I use Namecheap and I've been happy with them. I've also heard people use Porkbun.
Tips & Advice
- If you host adult content on your website, I suggest adding an RTA label. I've added it on mine even if I don't post porn. I just don't care to be some 14 year old's favorite philosopher, lol...
Need help?
I love to help!! But I also suck, LOL, sorry.
If I'm slow, it's cuz I'm recuperating by drawing het yaoi. Whiskey on the rocks and a cigarette in hand. Y'know, life veteran uhh hot girl behavior...
Ask away
Already answered
Hello! I was wondering how you added an 'alert' onto a gallery preview image? I want to use that to warn for like... noncon or gore or whatever when I post art. I'm also having trouble figuring out how to put multiple characters on the character page and having their avatars show. :( Please Halp.
Ohh huh, yeah... It would've been useful for me to include that option by default LOL!! Well, here goes--
Adding gallery warnings (CWs)
Version 2 includes the first part by default, so I've collapsed it.
Only relevant in Version 1
The way I do it is a little messy, but what can I say. *says nothing else, proceeds to explain*
- Open your
.CSSfile (whichever in the/cssfolder is relevant). Paste this.CW- {display:none;}somewhere. It doesn't matter where unless you wanna sort it; it just tells 11ty that elements with theCW-class should be hidden when not in use. - Then, in
gallery.md, where it calls for the specified collection, on the line before<a>begins, paste this line:
<div class="alert CW-{{post.data.warningToggle}}">{{post.data.warning}}</div>
That whole weird-looking line.
- Then, on gallery entries you want to apply a warning to, you have to add 2 extra fields to the info at the top, like this:
warningToggle: show
warning: sensual horse
If you have a gallery entry that doesn't need these, you either don't include those lines at all, or you leave them empty.
The way that it works isn't the most graceful approach, but it works, lol; if you specify no input for warningToggle then the class CW- remains the same. But if you input warningToggle: show (or even just warningToggle: sexyyy for that matter...) it changes the class from CW- to CW-show which (unlike CW-) isn't set to be hidden.
So it's purposefully sabotaging your own code, LOL. It doesn't break things. Maybe a little messy, but it works for me.
Character icons
I suspect you're dealing with the same bug that I was, LOL. It's a problem with the file path, and I wrote a walkthrough of how to untangle it. Hopefully that should work...? Let me know if that wasn't the issue.
How did you make the characters all link to specific gallery entries? How did you put together your worlds pages? I'm amazed at how easy it is to navigate your site, if you'd be down to share your workflow I'd be your #1 appreciator
Wooooh thank you!! Yes!! I'd love for more people to have a fun time making webbysites, so I'll gladly try to explain how to do the same.
As you may know, my site is built using 11ty/Eleventy. I'll explain without assuming you're very familiar with it, so maybe it can be useful to others as well.
But long story short; 11ty collections.
general set-up
All my pages start as an .md file, which 11ty then uses to generate the .html file that's published online. My gallery starts as any other page, as an .md file, but it includes a "collection" at the bottom of the page.
- gallery.md (Pastebin link)
That's the whole file. The part that's important is line 16, which tells 11ty to search for all .md files in the art collection.
Using my latest gallery entry, here's what that looks like.
- .md of gallery entry (Pastebin link)
Then, gallery.md fills out line 17 to line 27 with information I specified (posttitle, imageformat, etc.) in all posts tagged art.
Butt!!! Notice how it isn't just tagged with art but also ocOrion and nmocCain? Yeap, that's the trick, LOL... It's in several "collections". That's all there is to it.
Just like gallery.md yoinks posts tagged with art, Orion.md yoinks posts tagged with ocOrion, and Cain.md yoinks posts tagged with nmocCain.
Tadaaahh...?
11ty pros would probably have way more efficient ways to do this. But I'm not a 11ty pro, so this is how I do it...
worlds page
The pages for each world is pretty much built up entirely the same as the gallery. It just uses several collections.
Orion.md is tagged with charainWysteria. Wysteria.md then yoinks all posts tagged with charainWysteria, and smacks them all together under "characters". Meanwhile, it also yoinks all posts tagged with wysteriaWiki and lists them under "wiki".
adding new posts
Now, to add something to the gallery, I just have to --
- upload 2 images (1 for full view, 1 for the thumbnail)
- make a new
.mdfile - fill it out with info and tags
-- and 11ty does the rest.
I hope that's helpful, even if a bit rambly... *scratches head* Good luck with any website endeavors, Anon!
Changelog
Version 2
- URL outputs now use "slugify". Instead of being restricted to file names and gallery titles to be the exact same, a gallery entry that's titled
Man, Shell, Sea, Sandwill be translated toman-shell-sea-sand+.pngor whatever file extension you use. This prevents uppercase/lowercase errors in the file path.- You'd still need to name your images and folders accordingly. The instructions have been updated to explain this.
- The navigation can now hold more subcategories by default. In
navigation.json, if you leave any subcategory's "Hyperlink" fields empty, they won't show up. You can add or remove categories by copypasting or deleting. - Fixed an issue where the oldest gallery entries were at the top... Oops...!?
- The gallery now includes the option for CWs by default.
- Added another page (Found in the blog!) with snippets of code to give people some reference or copypaste opportunities.
- Added the option for a logo image on top of the header background. If you don't want the image, open
site.json, change"LogoPath":"/img/layout/logo.png", to"LogoPath":"", or remove the line entirely! - Tweaked the CSS a little.