<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>Rhian van Esch</title>
	<link href="https://rhianvanesch.com/feed.xml" rel="self"/>
	<link href="https://rhianvanesch.com"/>
	<updated>2021-02-09T00:00:00Z</updated>
	<id>https://rhianvanesch.com</id>
	<author>
		<name>Rhian van Esch</name>
	</author>
	
	<entry>
		<title>Adding heading anchor links to an Eleventy site</title>
		<link href="https://rhianvanesch.com/posts/2021/02/09/adding-heading-anchor-links-to-an-eleventy-site/"/>
		<updated>2021-02-09T00:00:00Z</updated>
		<id>https://rhianvanesch.com/posts/2021/02/09/adding-heading-anchor-links-to-an-eleventy-site/</id>
		<content type="html">&lt;h2 id=&quot;what-are-heading-anchor-links&quot;&gt;What are heading anchor links? &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2021/02/09/adding-heading-anchor-links-to-an-eleventy-site/#what-are-heading-anchor-links&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Heading anchor links sit next to a heading on a page, and provide a URL to that particular heading when clicked on. They&#39;re useful for directing someone to a particular part of a long article. A common pattern is for the link to be shown as an icon which only appears when you hover over the heading.&lt;/p&gt;
&lt;p&gt;They&#39;re made up of two things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a fragment identifier: an &lt;code&gt;id&lt;/code&gt; on an element that is/introduces the start of a section on the page, e.g. the heading element)&lt;/li&gt;
&lt;li&gt;an anchor element which links to the fragment identifier&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here&#39;s how it might look in HTML. Note that to make this accessible, I&#39;ve hidden the &lt;code&gt;svg&lt;/code&gt; icon with &lt;code&gt;aria-hidden=&amp;quot;true&amp;quot;&lt;/code&gt; and added some text to describe the link - this would be visually hidden from the user with the use of the &lt;code&gt;.screen-reader-only&lt;/code&gt; class.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;here-is-a-heading&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#here-is-a-heading&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;svg&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-hidden&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- icon goes here --&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;svg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;screen-reader-only&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Direct link to this heading&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  Here is a heading&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A good live example of this can be seen when viewing a Markdown file on GitHub (like a &lt;code&gt;README.md&lt;/code&gt;), where hovering over the headings shows you the link icon:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://rhianvanesch.com/images/posts/2019/2019-11-16-heading-anchors-github.png&quot; alt=&quot;A readme file on GitHub with a heading anchor link.&quot; /&gt;&lt;/figure&gt;
&lt;h2 id=&quot;generating-heading-anchor-links-in-markdown&quot;&gt;Generating heading anchor links in Markdown &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2021/02/09/adding-heading-anchor-links-to-an-eleventy-site/#generating-heading-anchor-links-in-markdown&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In &lt;a href=&quot;https://www.11ty.io/&quot;&gt;Eleventy&lt;/a&gt; (the static site generator used to build this site), content is written in Markdown. Rather than manually write the HTML for heading anchor links, I wanted to auto-generate them.&lt;/p&gt;
&lt;p&gt;With some variants of Markdown there&#39;s syntax to generate ids on some elements (e.g. &lt;a href=&quot;https://michelf.ca/projects/php-markdown/extra/#spe-attr&quot;&gt;Markdown Extra&lt;/a&gt;), but Eleventy uses &lt;a href=&quot;https://github.com/markdown-it/markdown-it&quot;&gt;&lt;code&gt;markdown-it&lt;/code&gt;&lt;/a&gt; which does not include this feature by default. However, there are several plugins which extend the capabilities of &lt;code&gt;markdown-it&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;option-1-markdown-it-github-headings&quot;&gt;Option 1: &lt;a href=&quot;https://github.com/Flet/markdown-it-github-headings&quot;&gt;&lt;code&gt;markdown-it-github-headings&lt;/code&gt;&lt;/a&gt; &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2021/02/09/adding-heading-anchor-links-to-an-eleventy-site/#option-1-markdown-it-github-headings&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This plugin completely replicates the GitHub style of heading anchor links - even including the GitHub icon (though you can replace it if you want). It will give you HTML like this:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;this-is-a-heading&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;anchor&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#this-is-a-heading&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token attr-name&quot;&gt;aria-hidden&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;svg&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;aria-hidden&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;true&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- icon code --&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;svg&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  This is a heading&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It could be a good choice for you if you don&#39;t want to do much setup and don&#39;t need to customise the way the link renders.&lt;/p&gt;
&lt;h4 id=&quot;a-note-on-accessibility&quot;&gt;A note on accessibility &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2021/02/09/adding-heading-anchor-links-to-an-eleventy-site/#a-note-on-accessibility&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Due to the &lt;code&gt;aria-hidden=&amp;quot;true&amp;quot;&lt;/code&gt; attributes on both the anchor element and the svg, the link generated by this plugin will be inaccessible to screen readers. While users of screen readers can navigate through a document by headings, they might still want to use the direct link feature, so bear that in mind.&lt;/p&gt;
&lt;h3 id=&quot;option-2-markdown-it-anchor&quot;&gt;Option 2: &lt;a href=&quot;https://github.com/valeriangalliat/markdown-it-anchor&quot;&gt;&lt;code&gt;markdown-it-anchor&lt;/code&gt;&lt;/a&gt; &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2021/02/09/adding-heading-anchor-links-to-an-eleventy-site/#option-2-markdown-it-anchor&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This plugin has many more options than &lt;code&gt;markdown-it-github-headings&lt;/code&gt;, and attaches the &lt;code&gt;id&lt;/code&gt; to the heading element instead of the anchor. The HTML looks like this:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;this-is-a-heading&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  This is a heading&lt;br /&gt;  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;header-anchor&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;#this-is-a-heading&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; ¶ &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;another-note-on-accessibility&quot;&gt;Another note on accessibility &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2021/02/09/adding-heading-anchor-links-to-an-eleventy-site/#another-note-on-accessibility&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;In screen readers, the paragraph symbol (¶) that&#39;s used by default for the anchor link is read out as &amp;quot;paragraph&amp;quot; (&lt;a href=&quot;https://www.deque.com/blog/dont-screen-readers-read-whats-screen-part-1-punctuation-typographic-symbols/&quot;&gt;source&lt;/a&gt;) which is not very descriptive. However, you can completely control the way the link renders with an optional render function in the options, which I&#39;ll show below.&lt;/p&gt;
&lt;h2 id=&quot;installing-markdown-it-plugins-on-eleventy&quot;&gt;Installing &lt;code&gt;markdown-it&lt;/code&gt; plugins on Eleventy &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2021/02/09/adding-heading-anchor-links-to-an-eleventy-site/#installing-markdown-it-plugins-on-eleventy&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Out of the two plugins above, I prefer &lt;a href=&quot;https://github.com/valeriangalliat/markdown-it-anchor&quot;&gt;&lt;code&gt;markdown-it-anchor&lt;/code&gt;&lt;/a&gt; because of the greater control you have over the output of the anchor link.&lt;/p&gt;
&lt;p&gt;Add the plugin as a project dependency by running &lt;code&gt;npm install markdown-it-anchor --save-dev&lt;/code&gt; in the root of the project, or wherever your &lt;code&gt;package.json&lt;/code&gt; file is.&lt;/p&gt;
&lt;p&gt;In your &lt;code&gt;.eleventy.js&lt;/code&gt; config file, modify the default markdown install as shown below. Note: we don&#39;t need to install the &lt;code&gt;markdown-it&lt;/code&gt; library because it&#39;s a dependency of Eleventy, but we do need to grab a reference to it to install the &lt;code&gt;markdown-it-anchor&lt;/code&gt; plugin.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; markdownIt &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;markdown-it&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; markdownItAnchor &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;markdown-it-anchor&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;eleventyConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Options for the `markdown-it` library&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; markdownItOptions &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Options for the `markdown-it-anchor` library&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; markdownItAnchorOptions &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;permalink&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; markdownLib &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;markdownIt&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;markdownItOptions&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;br /&gt;    markdownItAnchor&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    markdownItAnchorOptions&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  eleventyConfig&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setLibrary&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;md&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; markdownLib&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token comment&quot;&gt;// Eleventy config options go here&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that we need to provide a set of options for &lt;em&gt;both&lt;/em&gt; the &lt;code&gt;markdown-it&lt;/code&gt; and the &lt;code&gt;markdown-it-anchor&lt;/code&gt; libraries, because we&#39;re overriding the default &lt;code&gt;markdown-it&lt;/code&gt; setup that Eleventy uses under the hood. By default, Eleventy only sets &lt;code&gt;html: true&lt;/code&gt; (&lt;a href=&quot;https://github.com/11ty/eleventy/blob/b85a9b5eca0891ea5b9b737ecc758c6eabecdd94/src/Engines/Markdown.js#L41&quot;&gt;see source file&lt;/a&gt;) but you could provide &lt;a href=&quot;https://github.com/markdown-it/markdown-it#init-with-presets-and-options&quot;&gt;other &lt;code&gt;markdown-it&lt;/code&gt; options&lt;/a&gt; here - or remove the options entirely.&lt;/p&gt;
&lt;p&gt;To render the permalink, we have to pass &lt;code&gt;permalink: true&lt;/code&gt; to the &lt;code&gt;markdown-it-anchor&lt;/code&gt; options, and there are &lt;a href=&quot;https://github.com/valeriangalliat/markdown-it-anchor#usage&quot;&gt;several other options&lt;/a&gt; available.&lt;/p&gt;
&lt;h3 id=&quot;modifying-the-rendered-permalink-for-markdown-it-anchor&quot;&gt;Modifying the rendered permalink for &lt;code&gt;markdown-it-anchor&lt;/code&gt; &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2021/02/09/adding-heading-anchor-links-to-an-eleventy-site/#modifying-the-rendered-permalink-for-markdown-it-anchor&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Provide an additional key, &lt;code&gt;renderPermalink&lt;/code&gt;, to the options object. The value must be a function, which we can base off of the &lt;a href=&quot;https://github.com/valeriangalliat/markdown-it-anchor/blob/master/index.js#L13-L34&quot;&gt;&lt;code&gt;renderPermalink&lt;/code&gt; function&lt;/a&gt; in the plugin&#39;s source code.&lt;/p&gt;
&lt;p&gt;In the commented section of code below, I&#39;ve modified the output HTML inside the heading anchor link. I don&#39;t want the symbol inside the link to be read out by screen readers, so it&#39;s wrapped in a &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; element with the attribute &lt;code&gt;aria-hidden=&amp;quot;true&amp;quot;&lt;/code&gt;. This will also be helpful when styling the link later on. And I do want more descriptive link text for users of screen readers, so I&#39;ve added some screen-reader-only text which reads &amp;quot;Direct link to this section&amp;quot;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// This object is required inside the renderPermalink function.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// It&#39;s copied directly from the plugin source code.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; position &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;push&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;unshift&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Copied directly from the plugin source code, with one edit&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// (marked with comments)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;renderPermalink&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;slug&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; opts&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; state&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; idx&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;space&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;&lt;br /&gt;    Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;assign&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;state&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Token&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;text&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token literal-property property&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot; &quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; linkTokens &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;br /&gt;    Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;assign&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;state&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Token&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;link_open&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token literal-property property&quot;&gt;attrs&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;class&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; opts&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;permalinkClass&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;href&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; opts&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;permalinkHref&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;slug&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; state&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    Object&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;assign&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;state&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Token&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;html_block&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token comment&quot;&gt;// Edit starts here:&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token literal-property property&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&amp;lt;span aria-hidden=&quot;true&quot; class=&quot;header-anchor__symbol&quot;&gt;#&amp;lt;/span&gt;&lt;br /&gt;      &amp;lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&amp;lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token comment&quot;&gt;// Edit ends&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;state&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Token&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;link_close&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;opts&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;permalinkSpace&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    linkTokens&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;position&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;opts&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;permalinkBefore&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;space&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;  state&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;tokens&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;idx &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;children&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;position&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;opts&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;permalinkBefore&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;linkTokens&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function-variable function&quot;&gt;exports&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;eleventyConfig&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Eleventy config goes here...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Options for the `markdown-it-anchor` library&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; markdownItAnchorOptions &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token literal-property property&quot;&gt;permalink&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;br /&gt;    renderPermalink&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// Provide our custom function&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Eleventy config goes here...&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;styling-the-anchor-link&quot;&gt;Styling the anchor link &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2021/02/09/adding-heading-anchor-links-to-an-eleventy-site/#styling-the-anchor-link&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I had several requirements for styling the heading anchor link:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Users who can navigate with the mouse should see it when they hover the heading&lt;/li&gt;
&lt;li&gt;Users who navigate via the keyboard should see the link when tabbing through the page&lt;/li&gt;
&lt;li&gt;Users who are on a device without hover, or on smaller screens, should see the link at all times
&lt;ul&gt;
&lt;li&gt;We can test for hover capabilities with the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/@media/hover&quot;&gt;hover media feature&lt;/a&gt;, part of the Media Queries Level 4 specification, and supported in all modern browsers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;language-scss&quot;&gt;&lt;code class=&quot;language-scss&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// Only targeting h2 and downwards, because we&#39;ll only use an h1&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// once per page for the title, which doesn&#39;t need a heading&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// anchor link&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token selector&quot;&gt;.post &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token selector&quot;&gt;h2,&lt;br /&gt;  h3,&lt;br /&gt;  h4,&lt;br /&gt;  h5,&lt;br /&gt;  h6 &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; relative&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token selector&quot;&gt;.header-anchor &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Above this viewport width, there&#39;s space to position the link&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// to the left of the heading. On smaller screens, it will have&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// the implicit `position: static` and be shown after the&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// heading.&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@media&lt;/span&gt; screen &lt;span class=&quot;token operator&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;min-width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 700px&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;left&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; -0.8em&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; absolute&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0.8em&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token selector&quot;&gt;.header-anchor__symbol &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// Only hide the link on larger screens and when hover is&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// available. Also, show it when headings are hovered OR&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token comment&quot;&gt;// the heading anchor link itself is focused.&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token atrule&quot;&gt;&lt;span class=&quot;token rule&quot;&gt;@media&lt;/span&gt; screen &lt;span class=&quot;token operator&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;min-width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 700px&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;hover&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hover&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token property&quot;&gt;visibility&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class=&quot;token selector&quot;&gt;h2:hover &lt;span class=&quot;token parent important&quot;&gt;&amp;amp;&lt;/span&gt;,&lt;br /&gt;    h3:hover &lt;span class=&quot;token parent important&quot;&gt;&amp;amp;&lt;/span&gt;,&lt;br /&gt;    h4:hover &lt;span class=&quot;token parent important&quot;&gt;&amp;amp;&lt;/span&gt;,&lt;br /&gt;    h5:hover &lt;span class=&quot;token parent important&quot;&gt;&amp;amp;&lt;/span&gt;,&lt;br /&gt;    h6:hover &lt;span class=&quot;token parent important&quot;&gt;&amp;amp;&lt;/span&gt;,&lt;br /&gt;    .header-anchor:focus &lt;span class=&quot;token parent important&quot;&gt;&amp;amp;&lt;/span&gt; &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span class=&quot;token property&quot;&gt;visibility&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; visible&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;token comment&quot;&gt;// Used for the text in the anchor link.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token selector&quot;&gt;.screen-reader-only &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;border&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;clip&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;0 0 0 0&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;margin&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; -1px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;overflow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; hidden&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;padding&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; absolute&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 1px&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2021/02/09/adding-heading-anchor-links-to-an-eleventy-site/#conclusion&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I finished up this process by testing the links in several ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Using &lt;a href=&quot;https://www.nvaccess.org/&quot;&gt;NVDA&lt;/a&gt; (a free screen reader available on Windows) to jump through the headings&lt;/li&gt;
&lt;li&gt;Checking I could tab through the site with just the keyboard&lt;/li&gt;
&lt;li&gt;Resizing the browser viewport to test different screen sizes&lt;/li&gt;
&lt;li&gt;Viewing the site on a touchscreen device&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Heading anchor links are a nice addition to a site, especially for documentation, where you may want to quickly direct someone to a particular section. While implementing this on my own site I was also reminded that it&#39;s a good idea to check how third-party libraries handle accessibility, as the results might not be what you expected.&lt;/p&gt;
&lt;p&gt;Finally, I&#39;d like to note that I&#39;m not a daily user of screen readers, so this solution is what made sense to &lt;em&gt;me&lt;/em&gt;, but there&#39;s always room for improvement. I&#39;d love to hear from any screen reader users if that&#39;s the case.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Staying organised with GitHub project boards</title>
		<link href="https://rhianvanesch.com/posts/2019/11/10/staying-organised-with-github-project-boards/"/>
		<updated>2019-11-10T00:00:00Z</updated>
		<id>https://rhianvanesch.com/posts/2019/11/10/staying-organised-with-github-project-boards/</id>
		<content type="html">&lt;p&gt;One of my biggest problems with side projects is that I have too many of them, and too little time to work on them. Then, when I come back to a project after a break, I often find it difficult to remember:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what I was working on last&lt;/li&gt;
&lt;li&gt;what I wanted to do next&lt;/li&gt;
&lt;li&gt;if there are any existing issues I need to tackle&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-doesnt-work&quot;&gt;What doesn&#39;t work &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2019/11/10/staying-organised-with-github-project-boards/#what-doesnt-work&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I&#39;ve tried a few things without success:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trello board: I forget it&#39;s there and never look at it&lt;/li&gt;
&lt;li&gt;TODO notes in the code: they&#39;re too scattered, and I forget to address them
&lt;ul&gt;
&lt;li&gt;similarly, a separate TODO list file requires maintenance, and I don&#39;t like committing it with the code&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a physical notebook: I misplace the notebook, forget which notebook I was using, or just don&#39;t look at those pages again&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I don&#39;t have this problem at my day job, primarily because there we use Jira, do more focused work, and have a very effective Product Owner who keeps everyone on track. Jira would be overkill for my use case, and somehow I don&#39;t think my PO wants to help manage my side projects...&lt;/p&gt;
&lt;h2 id=&quot;enter-github-project-boards&quot;&gt;Enter GitHub project boards &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2019/11/10/staying-organised-with-github-project-boards/#enter-github-project-boards&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;What &lt;em&gt;has&lt;/em&gt; been working for me is a &lt;a href=&quot;https://help.github.com/en/github/managing-your-work-on-github/about-project-boards&quot;&gt;GitHub project board&lt;/a&gt;. They&#39;re free with all account types and can work in combination with your project&#39;s issues, or as a stand-alone kanban board. When you set up the board, you can pick from a few pre-defined templates, and my favourite is the &#39;Automated kanban&#39;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Kanban-style board with built-in triggers to automatically move issues and pull requests across To do, In progress and Done columns.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you work with other people, the &#39;Automated kanban with reviews&#39; might be better, as it includes automation related to pull request reviews.&lt;/p&gt;
&lt;h3 id=&quot;my-workflow&quot;&gt;My workflow &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2019/11/10/staying-organised-with-github-project-boards/#my-workflow&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;As soon as I think of something I need to tackle in a project (a new feature, a bug or anything else) I open an issue on the project&#39;s issue tracker. When creating the issue, I assign it to my project board.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://rhianvanesch.com/images/posts/2019/2019-11-10-add-new-issue.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Because I chose the &#39;Automated kanban&#39; board template, these issues become cards in the &#39;To do&#39; column of my board.&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://rhianvanesch.com/images/posts/2019/2019-11-10-project-board-overview.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When I have time to work on the issue, I create a branch.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When the work is done, I open a new pull request, making sure to use &lt;a href=&quot;https://help.github.com/en/github/managing-your-work-on-github/closing-issues-using-keywords&quot;&gt;a keyword&lt;/a&gt; in the description so the issue will be closed when the &lt;abbr title=&quot;Pull Request&quot;&gt;PR&lt;/abbr&gt; is merged. As when creating an issue, I assign the PR to my project board, which moves the card to the &#39;In progress&#39; column of the project board.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Once the &lt;abbr title=&quot;Pull Request&quot;&gt;PR&lt;/abbr&gt; is merged and the issue is closed, the card is moved automatically into the &#39;Done&#39; column of the project board.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;why-it-works&quot;&gt;Why it works &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2019/11/10/staying-organised-with-github-project-boards/#why-it-works&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;When I return to a project after some time away, I can go to the project board and scan through the columns to get a refresher on what work&#39;s been completed, and what&#39;s left to be done. It also gives me a sense of accomplishment to see what I&#39;ve already worked on, which often gives me a little boost of incentive to move on the project.&lt;/p&gt;
&lt;p&gt;Forcing myself to create an issue for each piece of work means I also end up breaking the project down into manageable pieces - again, this is really helpful when I haven&#39;t looked at the project in a while and feel a bit overwhelmed by what still needs to be done.&lt;/p&gt;
&lt;p&gt;Other benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The issues and project board are co-located with my code on GitHub, so it&#39;s the single source of truth for anything related to the project.&lt;/li&gt;
&lt;li&gt;The automation helps me keep on top of things without extra busywork.&lt;/li&gt;
&lt;li&gt;Being able to tag issues means I can use this workflow for post ideas, bugs, features, investigation tasks - anything at all.&lt;/li&gt;
&lt;li&gt;While it&#39;s not as full-featured as a tool like Jira, that means it&#39;s also not as overwhelming. The UI is clean and straight-forward.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;more-resources&quot;&gt;More resources &lt;a class=&quot;heading-anchor&quot; href=&quot;https://rhianvanesch.com/posts/2019/11/10/staying-organised-with-github-project-boards/#more-resources&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;heading-anchor__symbol&quot;&gt;#&lt;/span&gt;
      &lt;span class=&quot;screen-reader-only&quot;&gt;Direct link to this section&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For larger projects (or projects with other collaborators) you could add multiple project boards for different aspects of the work. You can create user-owned boards, organisation boards, or repository boards (as I&#39;ve done here). &lt;a href=&quot;https://help.github.com/en/github/managing-your-work-on-github/managing-project-boards&quot;&gt;Read more about managing project boards&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you&#39;re not using GitHub, you could give &lt;a href=&quot;https://about.gitlab.com/product/issueboard/&quot;&gt;GitLab&#39;s issue boards&lt;/a&gt; a go, or try &lt;a href=&quot;https://bitbucket.org/product/features/trello-boards&quot;&gt;Bitbucket&#39;s Trello integration&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
</feed>
