Compare commits

..

No commits in common. "e4f6cdbbc2a80ab7b4670e29d5aae1c04fdb4182" and "89b482fa9724dd9c442679f01619f9d1a8e6e916" have entirely different histories.

19 changed files with 81 additions and 227 deletions

View file

@ -1,12 +1,9 @@
import { RenderPlugin, IdAttributePlugin } from "@11ty/eleventy";
import eleventyNavigationPlugin from "@11ty/eleventy-navigation";
import { feedPlugin } from "@11ty/eleventy-plugin-rss";
import markdownIt from "markdown-it";
import markdownItFootnote from "markdown-it-footnote";
import { DateTime } from "luxon";
import { chunk } from "lodash-es";
export default function (eleventyConfig) {
const MARKDOWN_OPTIONS = {
@ -86,7 +83,7 @@ export default function (eleventyConfig) {
eleventyConfig.setFrontMatterParsingOptions({ excerpt: true });
// COLLECTIONS
////// Categories
////// Journal categories
eleventyConfig.addCollection("categories", function (collectionApi) {
let categories = new Set();
let posts = collectionApi.getFilteredByTag("post");
@ -98,137 +95,11 @@ export default function (eleventyConfig) {
return Array.from(categories);
});
////// Paginated tags (by @zachleat)
// See: https://github.com/11ty/eleventy/issues/332#issuecomment-445236776
// note that this uses the lodash.chunk method, so youll have to require that
eleventyConfig.addCollection("tagPagination", function (collectionApi) {
// Get unique list of tags
let tagSet = new Set();
collectionApi.getAllSorted().map(function (item) {
if ("tags" in item.data) {
let tags = item.data.tags;
// optionally filter things out before you iterate over?
for (let tag of tags) {
tagSet.add(tag);
}
}
});
// Get each item that matches the tag
let paginationSize = 10;
let tagMap = [];
let tagArray = [...tagSet];
for (let tagName of tagArray) {
let tagItems = collectionApi.getFilteredByTag(tagName);
let pagedItems = chunk(tagItems, paginationSize);
//console.log( tagName, tagItems.length, pagedItems.length );
for (
let pageNumber = 0, max = pagedItems.length;
pageNumber < max;
pageNumber++
) {
tagMap.push({
tagName: tagName,
pageNumber: pageNumber,
pageSize: pagedItems.length,
pageData: pagedItems[pageNumber],
});
}
}
/* return data looks like:
[{
tagName: "tag1",
pageNumber: 0
pageData: [] // array of items
},{
tagName: "tag1",
pageNumber: 1
pageData: [] // array of items
},{
tagName: "tag1",
pageNumber: 2
pageData: [] // array of items
},{
tagName: "tag2",
pageNumber: 0
pageData: [] // array of items
}]
*/
//console.log( tagMap );
return tagMap;
});
////// Paginated categories (by @zachleat)
eleventyConfig.addCollection("catPagination", function (collectionApi) {
// Get unique list of tags
let catSet = new Set();
collectionApi.getAllSorted().map(function (item) {
if ("categories" in item.data) {
let cats = item.data.categories;
// optionally filter things out before you iterate over?
for (let cat of cats) {
catSet.add(cat);
}
}
});
// Get each item that matches the tag
let paginationSize = 10;
let catMap = [];
let catArray = [...catSet];
for (let catName of catArray) {
let catItems = collectionApi.getAllSorted().filter(function (item) {
if ("categories" in item.data) {
return item.data.categories.includes(catName);
} else {
return false;
}
});
let pagedItems = chunk(catItems, paginationSize);
//console.log( tagName, tagItems.length, pagedItems.length );
for (
let pageNumber = 0, max = pagedItems.length;
pageNumber < max;
pageNumber++
) {
catMap.push({
catName: catName,
pageNumber: pageNumber,
pageSize: pagedItems.length,
pageData: pagedItems[pageNumber],
});
}
}
/* return data looks like:
[{
tagName: "tag1",
pageNumber: 0
pageData: [] // array of items
},{
tagName: "tag1",
pageNumber: 1
pageData: [] // array of items
},{
tagName: "tag1",
pageNumber: 2
pageData: [] // array of items
},{
tagName: "tag2",
pageNumber: 0
pageData: [] // array of items
}]
*/
//console.log( tagMap );
return catMap;
});
return {
dir: {
input: "src",
includes: "_includes",
layouts: "_layouts",
},
};
}

7
package-lock.json generated
View file

@ -11,7 +11,6 @@
"dependencies": {
"@11ty/eleventy-navigation": "^1.0.4",
"@11ty/eleventy-plugin-rss": "^2.0.4",
"lodash-es": "^4.17.21",
"luxon": "^3.6.1",
"markdown-it": "^14.1.0",
"markdown-it-footnote": "^4.0.0",
@ -2550,12 +2549,6 @@
"node": ">=4"
}
},
"node_modules/lodash-es": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
"license": "MIT"
},
"node_modules/luxon": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz",

View file

@ -16,7 +16,6 @@
"dependencies": {
"@11ty/eleventy-navigation": "^1.0.4",
"@11ty/eleventy-plugin-rss": "^2.0.4",
"lodash-es": "^4.17.21",
"luxon": "^3.6.1",
"markdown-it": "^14.1.0",
"markdown-it-footnote": "^4.0.0",

View file

@ -38,7 +38,6 @@ $font-mono: "Hack", monospace;
--font-sans: #{$font-sans};
--font-disp: #{$font-disp};
--font-mono: #{$font-mono};
--border-radius: 15px;
}
/*
@ -91,20 +90,23 @@ a {
}
h1 {
color: var(--color-tx);
color: var(--color-primary);
}
h2,
h3,
h4,
h5,
h6 {
color: var(--color-tx);
color: var(--color-secondary);
}
hr {
background-color: var(--text-normal);
border: none;
border-top: solid 1px var(--color-ui-2);
margin-top: 15px;
}
.muted {
color: var(--text-subtle); // Muted color
}
.site {
@ -132,7 +134,7 @@ hr {
#{$green} 99%
);
border: solid var(--color-bg-2) 2px;
border-radius: var(--border-radius);
border-radius: 15px;
&__header {
padding: 15px;
border-radius: inherit;
@ -171,7 +173,7 @@ hr {
}
.box {
border-radius: var(--border-radius);
border-radius: 15px;
border: dashed 1px var(--color-ui);
background-color: var(--color-bg-2);
}

View file

@ -4,6 +4,8 @@ layout: single
permalink: "404.html"
---
# Error 404: Not found
# Error 404
Couldn't find the page requested. Check the URL for typos or [go home](/).
Uh-oh! Couldn't find that URL on this server. Maybe you had a typo?
[Go home](/)

View file

@ -6,7 +6,7 @@
<meta name="description" content="{% if excerpt %}{{ excerpt }}{% else %}{{ meta.description }}{% endif %}">
<meta property="og:site_name" content="{{ meta.name }}">
<meta property="og:title" content="{% if title %}{{ title or metaTitle | safe }}{% else %}{{ meta.name }}{% endif %}">
<meta property="og:description" content="{% if description %}{{ description }}{% else %}{{ meta.description }}{% endif %}">
<meta property="og:description" content="{% if excerpt %}{{ excerpt }}{% else %}{{ meta.description }}{% endif %}">
<meta property="og:type" content="website">
<meta property="og:url" content="https://gil.ink{{ page.url }}">
<meta name="fediverse:creator" content="{{ meta.fediverseAuthor }}">

View file

@ -1,9 +1,9 @@
{% set navPages = collections.all | eleventyNavigation %}
<nav class="navcontainer">
<nav class="nav">
<ul class="navbar">
{% for entry in navPages %}
<li class="navbar__item">
<a class="navlink{% if entry.url == page.url %} navlink--current{% endif %}" href="{{ entry.url }}"{% if entry.url == page.url %} aria-current="page"{% endif %}>
<li>
<a class="navlink {% if entry.url == page.url %}navlink--current{% endif %}" href="{{ entry.url }}" {% if entry.url == page.url %} aria-current="page" {% endif %}>
{{ entry.title }}
</a>
</li>

View file

@ -7,22 +7,36 @@ eleventyNavigation:
order: 0
---
# About
# Me
My name's Gil ([he/they](https://en.pronouns.page/@kalanggam)). I'm a wizard, talisman developer, and spell-slinging cowboy mage.
My name's Gil ([he/they](https://en.pronouns.page/@kalanggam)). I'm a Filipino american wizard, spell developer, and cowboy mage based in the southern united states.
By daylight I'm a writer, managing editor of a local grassroots newspaper, community organizer, tax preparer, and game developer.
I am a writer, managing editor of a local grassroots newspaper, community organizer, and game developer.
I am also part of the ogra.ph collective, a small community of holograms working towards greater digital agency and a cozy internet. So far, we've set up microblogging on [hol.ogra.ph](https://hol.ogra.ph) and a Git service on [ide.ogra.ph](https://ide.ogra.ph).
Professionally I am working as a part-time/seasonal tax preparer, but in the past I've worked as a student leadership educator, a student ambassador for my school's DEI program, and _very_ briefly in a package delivery warehouse.
In the past I've been a student leadership educator, a college DEI program ambassador, and briefly a package handler in a delivery warehouse.
I'm also a leading member of the ogra.ph collective, a group of people interested in alternatives to mainstream corporate-operated social media. Together we host a microblogging platform called [hol.ogra.ph](https://hol.ogra.ph) and we have a Git service called [ide.ogra.ph](https://ide.ogra.ph).
## About this website
Gil•INK is an arcane mirror that reflects my personal interests and related shenanigans. Take a look at my [journal](/journal), teleport through [portals](/portals) to other websites, read tomes and grimoires in the [library]() (coming soon), or [explore]() (coming soon) other parts of the surrounding town.
If you're curious to know what ingredients went into this website, see [Colophon](/colophon).
## Contact
## Contact me
You can send your letters, scrolls, and other correspondence to `hello@gil.ink`.
## This website
Gil•INK is an arcane mirror that reflects my personal interests and related shenanigans.
You can take a look at my [journal](/journal), teleport through [portals](/portals) to other websites, read tomes and grimoires in the [library]() (coming soon), or [explore]() (coming soon) other parts of the surrounding town.
### Colophon
This mystic plane was created primarily using [Eleventy](https://www.11ty.dev/), a static site generator, and [Sass](https://sass-lang.com/), a CSS extension language. Hosting is provided by [IONOS](https://www.ionos.com/). All of the templates were made by me and the source scrolls are [publicly available](https://ide.ogra.ph/gil/gil.ink). This website additionally contains no trackers. The only cookie this website will ever use is one that stores your preferred theme. Besides a bit of JS to provide theme stuff, my website is mostly static HTML and CSS files.
### Fonts
The fonts used are:
+ [Poppins](https://github.com/itfoundry/Poppins) (display)
+ [Inter](https://rsms.me/inter) (body)
+ [Hack](https://sourcefoundry.org/hack/) (code, monospace)
Poppins and Inter are licensed under [OFL 1.1](https://openfontlicense.org/open-font-license-official-text/). Hack is licensed under [MIT/Bitstream Vera](https://github.com/source-foundry/Hack/blob/master/LICENSE.md).

View file

@ -135,7 +135,6 @@ Themes
--font-sans: Inter, sans-serif;
--font-disp: Poppins, sans-serif;
--font-mono: Hack, monospace;
--border-radius: 15px;
}
/*
@ -187,7 +186,7 @@ a:active {
}
h1 {
color: var(--color-tx);
color: var(--color-primary);
}
h2,
@ -195,13 +194,16 @@ h3,
h4,
h5,
h6 {
color: var(--color-tx);
color: var(--color-secondary);
}
hr {
background-color: var(--text-normal);
border: none;
border-top: solid 1px var(--color-ui-2);
margin-top: 15px;
}
.muted {
color: var(--text-subtle);
}
.site {
@ -213,7 +215,7 @@ hr {
background: rgb(252.7769230769, 248.3307692308, 242.7730769231);
background: linear-gradient(120deg, #594 5%, #39a 19%, rgba(0, 0, 0, 0) 19%, rgba(0, 0, 0, 0) 20%, #39a 20%, #39a 21%, rgba(0, 0, 0, 0) 21%, rgba(0, 0, 0, 0) 86%, #39a 86%, #39a 87%, rgba(0, 0, 0, 0) 87%, rgba(0, 0, 0, 0) 88%, #39a 88%, #594 99%);
border: solid var(--color-bg-2) 2px;
border-radius: var(--border-radius);
border-radius: 15px;
}
.idcard__header {
padding: 15px;
@ -249,7 +251,7 @@ hr {
}
.box {
border-radius: var(--border-radius);
border-radius: 15px;
border: dashed 1px var(--color-ui);
background-color: var(--color-bg-2);
}

View file

@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["../../../scss/_font.scss","../../../scss/_theme.scss","../../../scss/pages/_about.scss","../../../scss/mixins/_media.scss","../../../scss/pages/_home.scss","../../../scss/main.scss"],"names":[],"mappings":"AAAA;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA,kFACmB;;AAGrB;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA,kFACmB;;AAGrB;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;ACpIF;AAAA;AAAA;AAuBA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAAA;AAAA;AAGA;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;EACE;EACA;;AACA;EACE;EACA;;AAEF;EACE;;;AAIJ;EACE;;;AAEF;AAAA;AAAA;AAAA;AAAA;EAKE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EAiBA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;;AACA;EACE;;AAIJ;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;ACrMF;EACE;EACA;;ACFE;EDAJ;IAKI;IACA,MACE;;;ACHF;EDJJ;IAeI,MACE;;;AAOJ;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;;;AE3CF;EACE;;ADDE;ECAJ;IAII,MACE;;EAOF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;;;ACtBN;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;EACA","file":"main.css"}
{"version":3,"sourceRoot":"","sources":["../../../scss/_font.scss","../../../scss/_theme.scss","../../../scss/pages/_about.scss","../../../scss/mixins/_media.scss","../../../scss/pages/_home.scss","../../../scss/main.scss"],"names":[],"mappings":"AAAA;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA,kFACmB;;AAGrB;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA,kFACmB;;AAGrB;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;ACpIF;AAAA;AAAA;AAuBA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAAA;AAAA;AAGA;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;EACE;EACA;;AACA;EACE;EACA;;AAEF;EACE;;;AAIJ;EACE;;;AAEF;AAAA;AAAA;AAAA;AAAA;EAKE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EAiBA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;;AACA;EACE;;AAIJ;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;ACvMF;EACE;EACA;;ACFE;EDAJ;IAKI;IACA,MACE;;;ACHF;EDJJ;IAeI,MACE;;;AAOJ;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;;;AE3CF;EACE;;ADDE;ECAJ;IAII,MACE;;EAOF;IACE;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;;;;ACtBN;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;EACA","file":"main.css"}

View file

@ -1,15 +0,0 @@
---
layout: single
pagination:
data: collections.catPagination
size: 1
alias: cat
permalink: /category/{{ cat.catName }}{% if cat.pageNumber %}/{{ cat.pageNumber + 1 }}{% endif %}/index.html
---
<header><h1>Posts categorized under "{{ cat.catName }}"</h1></header>
{% for post in cat.pageData %}
{% endfor %}
Current page: {{ cat.pageNumber + 1 }}

View file

@ -31,9 +31,9 @@ This is a list of changes to my website, organized by date.
### Done
- Settled on `/entry/YYYY/MM/DD/slug` for journal permalinks
- Settled on YYYY/MM/slug for post permalinks
- Added favicon
- Paginated category and tag pages (not enough content to have pages but it works, trust me)
- Category pages (may change this more later)
### To-do
- Get theme switcher to work

View file

@ -1,18 +0,0 @@
---
title: 'Colophon'
layout: single
---
# Colophon
This mystic plane was created primarily using [Eleventy](https://www.11ty.dev/), a static site generator, and [Sass](https://sass-lang.com/), a CSS extension language. Hosting is provided by [IONOS](https://www.ionos.com/). All of the templates were made by me and the source scrolls are [publicly available](https://ide.ogra.ph/gil/gil.ink). This website additionally contains no trackers. The only cookie this website will ever use is one that stores your preferred theme. Besides a bit of JS to provide theme stuff, my website is mostly static HTML and CSS files.
## Fonts
The fonts used are:
+ [Poppins](https://github.com/itfoundry/Poppins) (display)
+ [Inter](https://rsms.me/inter) (body)
+ [Hack](https://sourcefoundry.org/hack/) (code, monospace)
Poppins and Inter are licensed under [OFL 1.1](https://openfontlicense.org/open-font-license-official-text/). Hack is licensed under [MIT/Bitstream Vera](https://github.com/source-foundry/Hack/blob/master/LICENSE.md).

View file

@ -6,4 +6,4 @@ lastmod: 2025-02-20T02:26:54.00-06:00
# Feeds
View a feed of posts at [/feed.xml](/feed.xml).
View a feed of posts at [/feed.xml](/feed.xml){:target="_blank"}.

View file

@ -12,6 +12,8 @@ elsewhere:
This is my first public attempt at stream of consciousness. Now I dont _feel_ as creative of a mind as I mightve been as a kid. Somewhere between now and adolescence I suppose Ive become caught up in life and the world. Perhaps I still have a creative spirit, but Ive been experiencing so much blockage with the creative process lately that I feel completely disconnected from it. Its like when you look at an empty canvas or a blank page, and your mind goes just as blank. I get a bit paralyzed at the thought of actually creating something, unless I come prepared with an already well-formed idea. It could be just that my inner critic is taking over before I even begin.
---
Thats precisely why I want to start writing more stream of consciousness, so that I can silence my inner critic, unlearn that sense of “cringe” that inhibits me from creating, and develop my creative process more — which itself is part of the art and art in its own right. To me and many others, art is a means of touching truth, a way to convey the soul of something, someone, or the world around us. I feel that learning to express myself authentically and with less restraint is essential to creating, since I am not as capable of revealing other peoples truths as I can my own.
Knowing that, I chose to frame this writing with two quotes from Tita Lacambra-Ayala, an Ilocano/Filipina poet whose work I discovered through her children Cynthia Alexander and Joey Ayala, Filipino musicians who themselves have found ways to articulate the weaves of truth that run through their souls. The first is, “The art is always you.” The second is about her poetry practice and what she sought to do through poetry:

View file

@ -0,0 +1,19 @@
---
layout: single
pagination:
data: collections.categories
size: 1
alias: category
permalink: "/journal/category/{{ category | slugify }}/index.html"
---
<h2>Category: {{ category }}</h2>
{% set posts = collections.post | filterByCategory(category) %}
<ol>
{% for post in posts | reverse %}
<li>
{{ post.date | formatDate('yyyy-MM-dd') }} /
<a href="{{ post.url }}">{{ post.data.title }}</a>
</li>
{% endfor %}
</ol>

View file

@ -14,8 +14,6 @@ eleventyNavigation:
All my journal entries.
[Feed](/feed.xml)
<ol>
{% for entry in collections.post reversed %}
<li>{{ entry.date | formatDate: "yyyy-MM-dd" }} / <a href="{{ entry.url }}">{{ entry.data.title }}</a></li>

View file

@ -1 +1 @@
{ "layout": "entry", "permalink": "/entry/{{ page.date | date: '%Y/%m/%d' }}/{{ page.fileSlug }}/index.html" }
{ "layout": "entry", "permalink": "/{{ page.date | date: '%Y/%m' }}/{{ page.fileSlug }}/index.html" }

View file

@ -1,15 +0,0 @@
---
layout: single
pagination:
data: collections.tagPagination
size: 1
alias: tag
permalink: /tag/{{ tag.tagName }}{% if tag.pageNumber %}/{{ tag.pageNumber + 1 }}{% endif %}/index.html
---
<header><h1>Posts tagged "{{ tag.tagName }}"</h1></header>
{% for post in tag.pageData %}
{% endfor %}
Current page: {{ tag.pageNumber + 1 }}