Add pages for markmark and my links.mark.md

This commit is contained in:
2025-03-25 22:53:59 -04:00
parent d8dcfbcda1
commit 295f424922
7 changed files with 681 additions and 4 deletions

View File

@@ -0,0 +1,6 @@
extends ./obsidian
block content
img(src='/assets/markmark-light.svg' eleventy:ignore)
header.hero-2 Standard MarkMark (v1.1)
.markmark.content-wrapper !{content}

View File

@@ -73,7 +73,7 @@ code {
} }
p, h1, h2, h3, h4, h5, h6, li { p, h1, h2, h3, h4, h5, h6, li {
font-size: 1.3em; font-size: 1.3rem;
} }
h1:before, h2:before, h3:before, h4:before, h5:before, h6:before { h1:before, h2:before, h3:before, h4:before, h5:before, h6:before {
@@ -110,7 +110,7 @@ h3:before {
/*margin-left: -27px;*/ /*margin-left: -27px;*/
} }
h4 { h4 {
font-size: 1.3em; font-size: 1.3rem;
color: var(--color-2); color: var(--color-2);
margin: 0; margin: 0;
margin-top: 50px; margin-top: 50px;
@@ -120,7 +120,7 @@ h4:before {
/*margin-left: -27px;*/ /*margin-left: -27px;*/
} }
h5 { h5 {
font-size: 1.3em; font-size: 1.3rem;
color: var(--color-2); color: var(--color-2);
margin: 0; margin: 0;
margin-top: 50px; margin-top: 50px;
@@ -130,7 +130,7 @@ h5:before {
/*margin-left: -27px;*/ /*margin-left: -27px;*/
} }
h6 { h6 {
font-size: 1.3em; font-size: 1.3rem;
color: var(--color-2); color: var(--color-2);
margin: 0; margin: 0;
margin-top: 50px; margin-top: 50px;
@@ -179,6 +179,13 @@ p {
margin-top: 0; margin-top: 0;
} }
.hero-2 {
font-size: 3rem;
margin-top: 10px;
margin-bottom: 30px;
font-weight: bold;
}
nav { nav {
margin-top: 25px; margin-top: 25px;
padding-bottom: 25px; padding-bottom: 25px;
@@ -257,6 +264,10 @@ button:hover {
border-color: var(--color-2); border-color: var(--color-2);
} }
ul li {
margin: 3px 0;
}
ul.plain { ul.plain {
list-style-type: none; list-style-type: none;
margin: 0; margin: 0;

View File

@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg:svg
width="208"
height="128"
viewBox="0 0 208 128"
version="1.1"
id="svg1"
sodipodi:docname="ink-markmark-dark.svg"
inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:svg="http://www.w3.org/2000/svg">
<svg:defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="6.4081552"
inkscape:cx="85.281954"
inkscape:cy="73.109965"
inkscape:window-width="2544"
inkscape:window-height="1331"
inkscape:window-x="26"
inkscape:window-y="23"
inkscape:window-maximized="0"
inkscape:current-layer="svg1" />
<svg:rect
width="198"
height="118"
x="5"
y="5"
ry="10"
stroke="#000000"
stroke-width="10"
fill="none"
id="rect1" />
<svg:path
d="M 30,98 V 30 H 50 L 70,55 90,30 h 20 V 98 H 90 V 59 L 70,84 50,59 v 39 z"
id="path1"
sodipodi:nodetypes="ccccccccccccc" />
<script />
<svg:rect
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:21.7013;stroke-linecap:round"
id="rect2"
width="46.446552"
height="45.751724"
x="130.91896"
y="30" />
<svg:path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
d="M 131.41896,75.742009 V 97.990285 L 154.64223,75.742009 Z"
id="path3" />
<svg:path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
d="M 176.86551,75.751724 V 98 L 153.64224,75.751724 Z"
id="path3-6" />
</svg:svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg:svg
width="208"
height="128"
viewBox="0 0 208 128"
version="1.1"
id="svg1"
sodipodi:docname="inkmarkmark-light.svg"
inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:svg="http://www.w3.org/2000/svg">
<svg:defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="6.4081552"
inkscape:cx="85.281954"
inkscape:cy="73.109965"
inkscape:window-width="2544"
inkscape:window-height="1331"
inkscape:window-x="26"
inkscape:window-y="23"
inkscape:window-maximized="0"
inkscape:current-layer="svg1" />
<svg:rect
width="198"
height="118"
x="5"
y="5"
ry="10"
stroke="#000"
stroke-width="10"
fill="none"
id="rect1"
style="stroke:#ffffff;stroke-opacity:1" />
<svg:path
d="M 30,98 V 30 H 50 L 70,55 90,30 h 20 V 98 H 90 V 59 L 70,84 50,59 v 39 z"
id="path1"
sodipodi:nodetypes="ccccccccccccc"
style="fill:#fcfcfc;fill-opacity:1" />
<script />
<svg:rect
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:21.7013;stroke-linecap:round"
id="rect2"
width="46.446552"
height="45.751724"
x="130.91896"
y="30" />
<svg:path
style="fill:#fcfcfc;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
d="M 131.41896,75.742009 V 97.990285 L 154.64223,75.742009 Z"
id="path3" />
<svg:path
style="fill:#fcfcfc;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1"
d="M 176.86551,75.751724 V 98 L 153.64224,75.751724 Z"
id="path3-6" />
</svg:svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

328
src/links.mark.md Normal file
View File

@@ -0,0 +1,328 @@
---
layout: obsidian
permalink: /links/
---
[//]: # (markmark-syntax: v1)
[//]: # (markmark-author-name: Garrett Mills)
[//]: # (markmark-author-email: shout@garrettmills.dev)
[//]: # (markmark-author-href: https://garrettmills.dev/)
# Read-it-Later
- Why and how I got my own ASN! - Daniel Jakots (2024-01-07)
- https://chown.me/blog/getting-my-own-asn
- Regular Expression Matching with a Trigram Index (2025-01-24)
- https://swtch.com/\~rsc/regexp/regexp4.html
- Debloating containers paper (2025-02-24)
- https://www.reddit.com/r/selfhosted/s/IjbayL3ExW
- ClickHouse - Agent-facing Analytics (2025-02-24)
- https://clickhouse.com/blog/agent-facing-analytics
- https://github.com/ClickHouse/mcp-clickhouse
# Blogs Without RSS
- Dan Luu #dev
- https://danluu.com/
- https://danluu.com/everything-is-broken/
- The Grug Brained Developer #dev
- https://grugbrain.dev/
- Sarah Ting #dev
- https://sarahjting.com/blog
- Reuben Son’s *absolutely stunning* personal site
- https://reubenson.com/
- Mike Hoye
- https://exple.tive.org/blarg/
- Untapped Journal #architecture #urbanism
- https://www.untappedjournal.com/
- Milk Kommunikations Ko-Op - an all-time classic
- https://milk.com/
- Martin Fowler
- https://martinfowler.com/
- Mikroverlag - New blog about European tech stories (2025-11-12)
- https://www.mikroverlag.com/en
# Other Blogging
- Webrings
- https://endgameviable.com/post/2024/08/webrings-really/
- https://ring.recurse.com/
- Ask HN: Great Blogs by Programmers
- https://news.ycombinator.com/item?id=30245247
- George Hotelling - RSS Tricks (2025-01-09)
- https://george.hotell.ing/2025/01/07/rss-tricks/
- Your Favorite Newsletter’s Favorite Newsletters (2025-01-20)
- https://linksiwouldgchatyou.substack.com/p/your-favorite-newsletters-favorite
# Games
- Riddl.ing (2025-01-11)
- https://riddl.ing/
- Survive the Tyrant - An RPG-style guide to surviving an authoritarian regime (2025-01-26)
- https://survivethetyrant.infy.uk/
# Cycling
- Spencer McCullough’s bike trip to 48 national parks (+ an excellent bike camping map)
- https://onelongtrip.bike/
- https://gobikecamping.com/map
- Helmet Wind Straps
- https://youtube.com/shorts/8-Ph6CjKopY?si=QGVb7HrKT7FejGZI
- A love letter to bicycle maintenance and repair
- https://tegowerk.eu/posts/bicycle-repair/
# Art
- Scott Boms’ “Ignore All Previous Instructions” print set
- https://scottboms.com/shop/ignore-all-previous-instructions-print-set
- Public Domain Image Archive (2025-01-11)
- https://pdimagearchive.org/
- “everyday” by Noah Kalina (2025-01-21)
- https://everyday.photo/
- Lachlan Turczan - incredible exploration of light and nature (2025-02-16)
- https://www.lachlanturczan.com/
# Places
- Indianapolis
- https://www.indianapolismonthly.com/best-of-indy/best-of-indy-dining-2/
- https://cbs4indy.com/indiana-news/downtown-indianapolis-lunch-spot-to-be-featured-on-diners-drive-ins-and-dives
- https://www.indianapolismonthly.com/uncategorized/review-shadow-lounge-restaurant/
- https://www.devourindy.com/
- https://www.filigreebakery.com/
- Chicago
- https://joymachine.art/
- Switzerland
- https://glacierexpress.ch/en
# Evergreen Posts
- Command Line Interface Guidelines #dev
- https://clig.dev/
- Code Rant - The Configuration Complexity Clock #dev
- https://mikehadlow.blogspot.com/2012/05/configuration-complexity-clock.html
- Terence Eden - The Unreasonable Effectiveness of Simple HTML #dev
- https://shkspr.mobi/blog/2021/01/the-unreasonable-effectiveness-of-simple-html/
- Mark L Irons - Patterns for Personal Websites #dev #archive
- https://web.archive.org/web/20190904131208/http://www.rdrop.com/\~half/Creations/Writings/Web.patterns/index.html
- https://web.archive.org/web/20190826113439/http://www.rdrop.com/\~half/Creations/Writings/Web.patterns/standard.header.and.footer.html
- https://web.archive.org/web/20200107155946/http://www.rdrop.com/\~half/Creations/Writings/Web.patterns/history.page.html
- https://web.archive.org/web/20200107162931/http://www.rdrop.com/\~half/Creations/Writings/Web.patterns/index.pages.html
- https://web.archive.org/web/20230314204244/http://www.rdrop.com/\~half/Creations/Writings/Web.patterns/gift.to.the.community.html
- https://web.archive.org/web/20211102185515/http://www.rdrop.com/\~half/Creations/Writings/Web.patterns/downloadable.weblet.html
- https://web.archive.org/web/20220120050151/http://www.rdrop.com/\~half/Creations/Writings/Web.patterns/site.map.html
- Sally Rooney: When are we going to have the courage to stop the climate crisis?
- https://www.irishtimes.com/life-style/people/2024/11/23/sally-rooney-when-are-we-going-to-have-the-courage-to-stop-the-climate-crisis/
- The Beautiful Mess: Can Do vs. Should Do
- https://cutlefish.substack.com/p/tbm-1652-can-do-vs-should-do
- Manifesto for a Humane Web
- https://humanewebmanifesto.com/
- SELinux is unmanageable; just turn it off if it gets in your way (it’s more nuanced than that, I promise -G)
- https://www.ctrl.blog/entry/selinux-unmanageable.html
- programming is terrible: Write code that is easy to delete, not easy to extend
- https://programmingisterrible.com/post/139222674273/write-code-that-is-easy-to-delete-not-easy-to
- The home as a place of production (not sure I totally agree w/ it, but an excellent read)
- https://cityquitters.substack.com/p/the-home-as-a-place-of-production
- Habitat Chronicles - You Can’t Tell People Anything (2024-01-08)
- http://habitatchronicles.com/2004/04/you-cant-tell-people-anything/
- JangaFX - The Atrocious State Of Binary Compatability on Linux and How To Address It (2025-03-17)
- https://jangafx.com/insights/linux-binary-compatibility
# Favorite XKCDs
- 356 - Nerd Sniping
- https://xkcd.com/356/
- 927 - Standards
- https://xkcd.com/927/
- 1172 - Workflow
- https://xkcd.com/1172/
- 1425 - Tasks
- https://xkcd.com/1425/
# 3D-Printing - Things
- Universal Phone Stand - simple and classic, I use this at work
- https://www.thingiverse.com/thing:1464340
- xkcd characters
- https://www.thingiverse.com/thing:1172630
# Recipes
- Apple Pie by Grandma Ople (made it)
- https://www.allrecipes.com/recipe/12682/apple-pie-by-grandma-ople/
- Homemade Blueberry Pie (made it)
- https://www.allrecipes.com/recipe/12196/blueberry-pie/
# Games
- We Need To Talk - interesting split trick-taker (2025-01-30)
- https://spacebiff.com/2025/01/29/we-need-to-talk/
# Tech Projects
Tech projects that I found interesting, funny, or wanted to experiment with later.
- LadyBird Browser
- https://github.com/LadybirdBrowser/ladybird
- ScratchDB - Open-Source Snowflake on ClickHouse
- https://www.scratchdb.com/
- https://github.com/scratchdata/ScratchDB
- COBOL for GCC Development #lang
- https://cobolworx.com/pages/cobforgcc.html
- Bruno API Client
- https://www.usebruno.com/
- Solar Protocol
- https://solarprotocol.net/
- Trivy - open-source vulnerability scanner
- https://trivy.dev/latest/
- Prowler - open-source cloud security scanner (2025-01-22)
- https://github.com/prowler-cloud/prowler
- https://docs.prowler.com/projects/prowler-open-source/en/latest/tutorials/mutelist/
- SonarQube - automated code scanner w/ community edition (2025-01-22)
- https://github.com/SonarSource/sonarqube
- https://github.com/cnescatlab/sonar-cnes-report
- Linux Mint: `webapp-manager` - run websites as if they were apps
- https://github.com/linuxmint/webapp-manager
- Zed: Structured data queries for the CLI
- https://zed.brimdata.io/
- Spacedrive: “A file explorer from the future”
- https://github.com/spacedriveapp/spacedrive
- Wasmer - WebAssembly-based run-anywhere containers
- https://github.com/wasmerio/wasmer
- Kirby CMS (2025-01-13)
- https://getkirby.com/
- Eleventy SSG (2025-01-27)
- https://www.11ty.dev/
- DeepSeek R1 LLM - open weights (2025-01-26)
- https://github.com/deepseek-ai/DeepSeek-R1
- iRedMail Mail Server - Releases (2025-01-29)
- https://docs.iredmail.org/iredmail.releases.html
- KubeVirt - first-class virtualization on Kubernetes (2025-01-29)
- https://kubevirt.io/user-guide/
- Bash++ — object-oriented Bash (2025-02-24)
- https://bpp.sh/
- Catala - describing legislation as code (2025-02-24)
- https://catala-lang.org/en/
- GNOME Extensions
- https://extensions.gnome.org/extension/4839/clipboard-history/
# Misc. Other Projects
- JPL’s Small-Body Mission Design Tool (2025-02-24)
- https://ssd.jpl.nasa.gov/tools/mdesign.html#/accessible/ballistic
# Self-Hosting TODOs
- Kiwix — offline knowledge bases like Wikipedia (2025-01-29)
- https://kiwix.org/en/applications/
- https://flathub.org/apps/org.kiwix.desktop
- https://library.kiwix.org/#lang=eng
- Pinchflat — YouTube media manager (2025-01-29)
- https://github.com/kieraneglin/pinchflat
- Audiobookshelf - Self hosted podcast server with app. (2025-03-03)
- https://github.com/advplyr/audiobookshelf?tab=readme-ov-file
- Matrix / Element chat server (2025-03-18)
- https://matrix.org/ecosystem/clients/element/
- ChangeDetection.io — website change detection (2025-03-18)
- https://changedetection.io/
- Duplicati — centralized backup manager (2025-03-18)
- https://duplicati.com/
- HomeBox — Home inventory tracker (2025-03-18)
- https://homebox.software/en/
# Issue Tracking
- Jellyfin - multi-backend DB support (e.g. to run against Postgres instead of SQLite)
- https://github.com/jellyfin/jellyfin/pull/12798
- Fedora - full SELinux relabel after every update (2025-02-24)
- https://discussion.fedoraproject.org/t/full-selinux-re-label-after-every-dnf-update/145900
- https://bugzilla.redhat.com/show_bug.cgi?id=2326999
- https://bugzilla.redhat.com/show_bug.cgi?id=2318279
- TODO - Eleventy Pug plugin — add support for `renderFile` shortcode like the `RenderFile` plugin (2025-03-21)
- https://github.com/11ty/eleventy/blob/3ae32242085f707fe1a8996bca994728c62c6297/src/Plugins/RenderPlugin.js#L140
- https://github.com/11ty/eleventy-plugin-template-languages/tree/main/pug
- Thinkpad X1 Carbon 13th Gen - Missing Sleep State BIOS Setting (2025-03-21)
- https://askubuntu.com/questions/1398674/battery-drain-during-suspend-mode-when-lid-is-closed-20-in-8-hours
- https://askubuntu.com/questions/1469680/how-to-change-sys-power-mem-sleep-nothing-is-able-to-change-it-and-all-advice
# Technical Guides
- EV Code Certificates + Automated Builds for Windows
- https://medium.com/@joshualipson/ev-code-certificates-automated-builds-for-windows-6100fb8e8be6
- ARM Gen 6 on the Thinkpad T14s
- https://github.com/jhovold/linux/wiki/t14s
- https://fedoraproject.org/wiki/Thinkpad_t14s
- https://discourse.ubuntu.com/t/ubuntu-24-10-concept-snapdragon-x-elite/48800
- AWS - Programmatic Access to EKS Versions #aws
- https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-eks-access-kubernetes-version-availability/
- From Zero to main(): Bare metal C
- https://interrupt.memfault.com/blog/zero-to-main-1
- The Derivative of a Regular Type is its Type of One-Hole Contexts - Conor McBride
- http://strictlypositive.org/diff.pdf
- Let’s build a distributed Postgres proof of concept
- https://notes.eatonphil.com/distributed-postgres.html
- Comby: structural refactoring tool
- https://comby.dev/
- Production Ready EKS CoreDNS Configuration (because the default config is stupid -G) #aws
- https://serkancapkan.medium.com/production-ready-eks-coredns-configuration-6fea830606f8
- COMMON-LISP “The Tutorial” Series (Learn CLOG)
- https://github.com/rabbibotton/clog/blob/main/LEARN.md
- DKIM - RFCs and notes on how to verify signatures in code (2024-01-08)
- https://github.com/kmille/dkim-verify/blob/master/verify-dkim.py
- https://datatracker.ietf.org/doc/html/rfc6376#section-3.4
- https://datatracker.ietf.org/doc/html/rfc6376#section-3.6.1
- https://datatracker.ietf.org/doc/html/rfc6376#section-3.6.2.2
- https://code.garrettmills.dev/garrettmills/chorus/src/branch/main/src/dkim.ts
- Dynamic Dependency Injection in Angular (2025-01-27)
- https://www.damirscorner.com/blog/posts/20170526-DynamicDependencyInjectionInAngular.html
- Running DeepSeek R1 locally (2025-01-28)
- https://www.reddit.com/r/selfhosted/s/PlczKBukhy
- How to Delete the Recovery Partition in Windows 10 (works for 11) (2025-03-20)
- https://superuser.com/questions/1023765/how-to-delete-the-recovery-partition-in-windows-10/1824309#1824309
- Local LLM utilizing Intel NPU (2025-03-21)
- https://copr.fedorainfracloud.org/coprs/xanderlent/intel-npu-driver
- https://discussion.fedoraproject.org/t/figuring-out-npu-support-in-fedora/143717/2
- https://huggingface.co/blog/phi2-intel-meteor-lake
- https://github.com/google/mozc/issues/742
- Very-Simple SCORM — an incredible guide to implementing SCORM 1.2 (2025-03-24)
- http://www.vsscorm.net/page/9/
# Quotes
- Richard II - “You wretches detestable on land and sea…”
- https://en.wikiquote.org/wiki/Richard_II_of_England#Quotes
# Soft Skills That Aren't BS
- The Art of Calling Out Room Dynamics (2025-02-03)
- https://leadership.garden/calling-out-room-dynamics/
# All About MarkMark
Links, resources, and tools related to MarkMark itself. (*[What's MarkMark?](https://garrettmills.dev/markmark)*)
- Standard MarkMark (v1.1)
- https://garrettmills.dev/markmark
- https://garrettmills.dev/markmark/standard
- `mark-mark`: a WIP TypeScript MarkMark parser/renderer collection
- https://code.garrettmills.dev/garrettmills/www/src/branch/master/src/markmark

41
src/markmark/index.md Normal file
View File

@@ -0,0 +1,41 @@
---
layout: markmark
permalink: /markmark/
---
MarkMark is a free ([as in freedom](https://en.wikipedia.org/wiki/Free_as_in_Freedom)) bookmark format designed to be machine-readable and easy to use.
The goal of MarkMark is to standardize "link sharing" pages to build connections between small websites on the Internet.
You can view the [full standard here](/markmark/standard).
MarkMark was inspired by the post [_The Small Website Discoverability Crisis_](https://www.marginalia.nu/log/19-website-discoverability-crisis/) on the Marginalia blog.
# Example
```markdown
[//]: #(markmark-syntax: v1)
[//]: #(markmark-author-name: Garrett Mills)
[//]: #(markmark-author-email: shout@garrettmills.dev)
[//]: #(markmark-author-href: https://garrettmills.dev/)
# My Sites
Here are links to various sites created by yours truly.
- Garrett Mills
- https://garrettmills.dev/
- My Code
- https://code.garrettmills.dev/garrettmills
- Post: Mitigating CVE-2024-2961 (2024-04-22) #blog
- https://garrettmills.dev/blog/2024/04/22/Mitigating-the-iconv-Vulnerability-for-PHP-CVE-2024-2961
```
# Resources
- [Spec: Standard MarkMark (v1.0)](/markmark/standard)
- MarkMark Icons ([Light](/assets/markmark-light.svg), [Dark](https://garrettmills.dev/assets/markmark-dark.svg))
- [`mark-mark`: a TypeScript MarkMark parser/renderer collection](https://code.garrettmills.dev/garrettmills/www/src/branch/master/src/markmark)
- Heads up! Unlike the MarkMark Spec, the `mark-mark` library is licensed CC BY-NC-SA 4.0. [Learn more.](/technical/#source-code-and-licensing)

163
src/markmark/standard.md Normal file
View File

@@ -0,0 +1,163 @@
---
layout: markmark
permalink: /markmark/standard/
---
**MarkMark is an extremely simple, standard, plain-text format for collecting bookmarks in such a way that they can be shared and federated.**
## File Format & Rel-Links
MarkMark files SHOULD be stored as plain-text Markdown files with the extension `.mark.md`.
Example: `john-doe.mark.md`
You MAY refer to a MarkMark file in the `<head>` tag of an HTML document as you would with, for example, and RSS feed using the media type `text/markdown;variant=markmark`. This media type is derived from [RFC 7763](https://www.rfc-editor.org/rfc/rfc7763).
Example:
```html
<link rel="alternate" href="/john-doe.mark.md" title="My Bookmarks" type="text/markdown;variant=markmark"/>
```
## Syntax
MarkMark is a subset of Markdown (specifically [CommonMark](https://spec.commonmark.org/)) designed to render properly in vanilla Markdown clients.
```text
MARKMARK := FRONTMATTER \n LINES
LINES :=
LINE LINES
| LINE EOF
| EOF
LINE := SECTION | LINK
```
### Frontmatter
```txt
FRONTMATTER := \n [//]: # (FRONTMATTER_VALUE)
FRONTMATTER_VALUE :=
markmark-syntax: v1
| markmark-author-name: STRING
| markmark-author-email: STRING
| markmark-author-href: STRING
```
MarkMark uses a subset of Markdown Link Reference Definitions (CommonMark §4.7) to add MarkMark-specific metadata to the file. These values MUST appear at the top of the file. These values SHOULD be provided. The first FrontMatter item MUST be prefixed with a newline character (`\n`). You MAY prefix subsequent FrontMatter items with a newline character (`\n`). You MUST suffix the last FrontMatter item with a newline character (`\n`).
#### Supported Properties
- `markmark-syntax` - The MarkMark spec version (supported values: `v1`)
- `markmark-author-name` - The name of the author of this bookmark collection
- `markmark-author-email` - The email address of the author
- `markmark-author-href` - The URL of the author's website
#### Example
```markdown
[//]: # (markmark-syntax: v1)
[//]: # (markmark-author-name: John Doe)
[//]: # (markmark-author-email: john.doe@example.com)
[//]: # (markmark-author-href: https://john-doe.example.com/)
```
### Sections
```text
SECTION := # STRING
| # STRING \n STRING
```
In MarkMark, authors MAY organize their bookmarks into sections. These sections MUST be indicated using a Markdown Heading 1 syntax (CommonMark §4.2) and MAY be followed by a Markdown Paragraph (CommonMark §4.8) describing the section.
#### Example
```markdown
# Technical Blogs
This is a description of the Technical Blogs section in my MarkMark file.
```
### Links
```text
LINK :=
- STRING DATE TAGS\nINDENT HREFS
DATE := (ISO8601) | EOL
TAGS :=
TAG TAGS
| EOL
TAG := #SLUG
INDENT := ␣␣␣␣ | \t
HREFS :=
- URL
| - [URL](URL)
```
Links are individual entries in a bookmark collection and represent a bookmark title and one or more URLs relevant to that bookmark. These URLs SHOULD be limited to less than 5.
A link is a Markdown Bullet List item (CommonMark §5.2) with a sub-list of URLs. Each URL MUST be either a plain-text URL OR a Markdown Link (CommonMark §6.3). Markdown Link URLs MUST use the URL as the only text for the link.
#### Dates (v1.1)
Each link MAY have one date associated with it. The date associated with a link SHOULD refer to the date the link was accessed by the author and added to the collection. The date MAY refer to the publication date of the associated media.
Dates MUST be in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Calendar_dates) format and MUST minimally include the year, month, and day.
#### Tags
Each link MAY have one or more tags associated with it. Tags provide an additional organizational scheme as they can be used to associate links across sections.
Tags are composed of a `#`-sign followed by a slug composed of alpha-numeric-underscore-dash `a-zA-Z0-9_\-` characters. Multiple tags MUST be separated by one or more space characters.
If a link has tags, those tags MUST appear at the end of the line containing the link's title, after one or more space characters.
#### Example
```markdown
- My Blog #personal-site #blog
- https://john-doe.example.com/blog
- Jane's Blog #blogs
- https://jane-doe.example.com/blog
- Example.com
- [https://example.com](https://example.com)
```
## Full Example
```markdown
[//]: # (markmark-syntax: v1)
[//]: # (markmark-author-name: John Doe)
[//]: # (markmark-author-email: john.doe@example.com)
[//]: # (markmark-author-href: https://john-doe.example.com/)
# Doe-Family Sites
Here is a collection of personal blogs and homepages from members of the Doe family.
- My Blog #personal-site #blog
- https://john-doe.example.com/blog
- Jane's Blog #blogs
- https://jane-doe.example.com/blog
- Example.com
- [https://example.com](https://example.com)
```
## License
[Standard MarkMark](https://garrettmills.dev/markmark) by [Garrett Mills](https://garrettmills.dev/) is marked with [CC0 1.0 Universal](http://creativecommons.org/publicdomain/zero/1.0?ref=chooser-v1).
## Change Log
- `v1.1`: Added spec for optional dates
- `v1.0`: Initial Standard