summaryrefslogtreecommitdiffstats
path: root/indieweb-micro
diff options
context:
space:
mode:
authorPinapelz <yukais@pinapelz.com>2025-12-01 22:27:26 -0800
committerPinapelz <yukais@pinapelz.com>2025-12-01 22:28:46 -0800
commit743d1e3d4c421385111dfd63482cd92a5fff02c1 (patch)
tree8b79dfd7b89297b1c8c6864d57943f03e0a183fe /indieweb-micro
parent4d75a6ded99babeffc3c264a9f38b510a7c59ce7 (diff)
move micro to its own site (better compatability with indieweb feats)
Diffstat (limited to 'indieweb-micro')
-rw-r--r--indieweb-micro/.hugo_build.lock0
-rw-r--r--indieweb-micro/archetypes/default.md5
-rw-r--r--indieweb-micro/content/posts/hello-world.md34
-rw-r--r--indieweb-micro/hugo.toml63
-rw-r--r--indieweb-micro/themes/MinIndie/LICENSE.md22
-rw-r--r--indieweb-micro/themes/MinIndie/README.md100
-rw-r--r--indieweb-micro/themes/MinIndie/archetypes/default.md4
-rw-r--r--indieweb-micro/themes/MinIndie/archetypes/posts.md11
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/_default/_markup/render-image.html11
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/_default/baseof.html26
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/_default/list.html57
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/_default/single.html74
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/_default/summary.html13
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/_default/taxonomy.html45
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/bookmarks/single.html44
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/index.html8
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/notes/notes.html42
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/notes/single.html44
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/partials/article-extra.html0
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/partials/article-old-content.html6
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/partials/article-precontent.html0
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/partials/article-prevnext.html17
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/partials/article-related.html10
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/partials/bio-hcard.html8
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/partials/footer-extra.html0
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/partials/footer.html14
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/partials/head-extra.html20
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/partials/header.html17
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/partials/homepage-body.html5
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/partials/pagination.html9
-rw-r--r--indieweb-micro/themes/MinIndie/layouts/partials/single-title-extra.html3
-rw-r--r--indieweb-micro/themes/MinIndie/static/css/style.css250
-rw-r--r--indieweb-micro/themes/MinIndie/theme.toml17
33 files changed, 979 insertions, 0 deletions
diff --git a/indieweb-micro/.hugo_build.lock b/indieweb-micro/.hugo_build.lock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/indieweb-micro/.hugo_build.lock
diff --git a/indieweb-micro/archetypes/default.md b/indieweb-micro/archetypes/default.md
new file mode 100644
index 0000000..25b6752
--- /dev/null
+++ b/indieweb-micro/archetypes/default.md
@@ -0,0 +1,5 @@
++++
+date = '{{ .Date }}'
+draft = true
+title = '{{ replace .File.ContentBaseName "-" " " | title }}'
++++
diff --git a/indieweb-micro/content/posts/hello-world.md b/indieweb-micro/content/posts/hello-world.md
new file mode 100644
index 0000000..a82c543
--- /dev/null
+++ b/indieweb-micro/content/posts/hello-world.md
@@ -0,0 +1,34 @@
+---
+title: "Hello World - Why This"
+date: 2025-12-01T20:11:57-08:00
+slug: 2025-12-01-hello-world
+type: posts
+draft: false
+categories:
+ - default
+tags:
+ - default
+---
+I think having control of your own data is great. The same is true for decentralized social media. I've always been a primary user of microblog platforms (like Twitter/X). Having experienced both the traditional and "decentralized" approaches to microblogs, they both have some particular shortcoming in terms of what I want to get out of "social media".
+
+## Twitter/X
+This is fairly self explanatory. The rebranding of Twitter to X and Musk's new ownership of the platform shifted the direction of the platform to be ever more political. X Premium boosting visibility is also something I wasn't a particular fan of. You can't view anything without signing in either, so goodbye viewing stuff anonymously. There's just a lot of "features" here I'm not a fan of. Needless to say, there's a lot of reasons to not post stuff there.
+
+
+## Fediverse
+I initally moved to the `Fediverse` (on Misskey/Sharkey). Interoperability between different platforms is very cool, and the wide variety of platforms to choose from means that picking any platform never made me feel like "missing out" elsewhere.
+
+However, this in itself has a problem. If you create an account on someone else's instance, you are a part of their *walled garden*. Now I'm sure that they are a wonderful person who equally values data ownership/agency, however it doesn't change the fact that someone else holds your content/data and you rely on them for that service.
+
+So then the alternative here is self-hosting a single person instance. This solves everything, **BUT** the fact that its quite expensive to pay for the bandwidth + storage if you are a small instance and end up federating with a lot of instances. This wasn't a compromise I wanted, since the name of the game with the Fediverse is being able to connect cross-platform. Great if you have the resources, but not particularly worth it for a single person starting fresh. There's not really a good way to handle this right now, which is why federation with a very large platform like Threads is limited.
+
+## Bluesky
+`Bluesky` is one of the drop-in alternatives for Twitter. Its built on the AT-Protocol, which does actually solve a lot of the problems of ActivityPub (Fediverse) in terms of handling small self-hosted instance with large ones.
+AtProto allows you to host a `PDS (Personal Data Server)` which stores all your own posts, profile info, and follows. This boils down to meaning that you really only need to be responsible for serving your own content, which you also own on your own machine. There's also a lot of fine-grain features that help with not getting overwhelmed by firehose traffic.
+
+While this is great, the issue is that the service is not truly "federated" (yet?). Its still early days for the platform and protocol, Most people are still on `bsky.social`. This means that to get anything to read at all you'd still need to pull from the big central relay. Even if we were successful in this, its not entirely clear what the costs would be for running all these components together (is it even worth it for a single person?). I think AtProto is promising, but its still early days and who knows where it'll go...
+
+# Now What
+Its time to try something new. From a surface view the idea of [IndieWeb](https://indieweb.org/) is a good solution from the perspective of creating the content. You basically just build a website/blog (which nowadays is dirt cheap to host something static), you then just add some special HTML ([microformats](https://indieweb.org/microformats)) and now you've got a common protocol similar to a post (only now you can leverage the power of HTML/CSS and customize it however you want). Then implemtning [webmentions](https://indieweb.org/Webmention) gives the ability for other people to interact with your content. Using a bridging/syndication service like [Bridgy Fed](https://fed.brid.gy/) you can post to the Fediverse and Bluesky as well as allow others from there to interact with your post.
+
+So that's what this is. Let's see how it goes.
diff --git a/indieweb-micro/hugo.toml b/indieweb-micro/hugo.toml
new file mode 100644
index 0000000..633719e
--- /dev/null
+++ b/indieweb-micro/hugo.toml
@@ -0,0 +1,63 @@
+languageCode = 'en-us'
+title = 'micro.pinapelz.moe'
+theme = "MinIndie"
+baseURL = "https://micro.pinapelz.moe"
+publishDir = "../micro.pinapelz.moe"
+
+[params]
+subtitle = "check it out. I'm in the house like carpet"
+dateFmt = "Monday, January 2, 2006"
+# tagPostOlderThanXDays = 555 # To display a message if the post is older than this number of days.
+# xslpath = "/rss.xsl" # If you want to theme your RSS feed. Optional.
+
+[params.author]
+ name = "Pinapelz"
+ email = "yukais@pinapelz.com"
+ avatar = "https://pinapelz.moe/assets/pfp.webp"
+ bio = '''hi, this is an informal (micro) blog of sorts. This site was made cause <a href="https://indieweb.org/">IndieWeb</a> seems like a great approach for the type of data agency I wanted out of social media (including the <a href="https://jointhefediverse.net">Fediverse</a> and <a href="https://atproto.com/">AtProto/Bluesky</a> at a fraction of the resources.<br/><br/>
+ There's a lot of stuff that doesn't fit well in a full-length formal blog post. I thought it'd be cool to have something like this on <a href="https://nekoweb.org">Nekoweb</a> since it fits the theme pretty well.'''
+[params.indieweb]
+ authorizationEndpoint = "https://indieauth.com/auth"
+ tokenEndpoint = "https://tokens.indieauth.com/token"
+ webmentionEndpoint = "https://webmention.io/micro.pinapelz.moe/webmention"
+ relmepgp = "/path/to//public/key.asc"
+ [[params.indieweb.relme]]
+ url = "https://github.com/pinapelz"
+ [[params.indieweb.relme]]
+ url = "mailto:yukais@pinapelz.com"
+ [[params.indieweb.relme]]
+ url = "https://sakurajima.social/@pinapelz"
+ [[params.indieweb.relme]]
+ url = "https://bsky.app/profile/pinapelz.moe"
+
+
+# Menus:
+[menu]
+[[menu.main]]
+ identifier = "posts"
+ name = "Posts"
+ url = "/posts/"
+ weight = 1
+
+[[menu.main]]
+ identifier = "categories"
+ name = "Categories"
+ url = "/categories/"
+ weight = 2
+
+[[menu.main]]
+ identifier = "tags"
+ name = "Tags"
+ url = "/tags/"
+ weight = 3
+
+## Footer
+[[menu.footer]]
+ name = "Github"
+ url = "https://github.com/pinapelz"
+ weight = 1
+
+[[menu.footer]]
+ name = "pinapelz.moe"
+ url = "https://pinapelz.moe"
+ weight = 1
diff --git a/indieweb-micro/themes/MinIndie/LICENSE.md b/indieweb-micro/themes/MinIndie/LICENSE.md
new file mode 100644
index 0000000..630c225
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/LICENSE.md
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Vimux
+
+Copyright (c) 2020 colorchestra
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/indieweb-micro/themes/MinIndie/README.md b/indieweb-micro/themes/MinIndie/README.md
new file mode 100644
index 0000000..cef0972
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/README.md
@@ -0,0 +1,100 @@
+# MinIndie
+
+This theme is **heavily** based on [smol](https://themes.gohugo.io/themes/smol/), a minimalist hugo theme, thanks to their work!
+
+MinIndie is a very minimal hugo theme with indieweb markups. A demo can be found on my blog at https://bacardi55.io
+
+## Features
+
+- No JavaScript
+- No Google spyware or tracking of any kind
+- No other external dependencies, embedded fonts or comment sections
+- Dark mode support (depending on your OS's setting)
+- Indieweb markup
+
+## Installation
+
+In your Hugo site `themes` directory, run:
+
+```
+git clone https://
+```
+
+Next, open `config.toml` in the base of the Hugo site and ensure the theme option is set to `smol`.
+
+```
+theme = "minindie"
+```
+
+Lastly, add the following lines to your `config.toml` to set site parameters and make use of all the menu entries in the header and footer sections if you need them.
+
+```
+title = "Site Name"
+baseURL = "https://your.domain.tld"
+copyright = "A copyright message"
+
+# Parameters
+[params]
+ subtitle = "ἕν οἶδα ὅτι οὐδὲν οἶδα"
+ dateFmt = "Monday, January 2, 2006"
+ # tagPostOlderThanXDays = 555 # To display a message if the post is older than this number of days.
+ # xslpath = "/rss.xsl" # If you want to theme your RSS feed. Optional.
+
+[params.author]
+ name = "your name" # required for h-card
+ email = "your@email.tld"
+ avatar = "/path/to/avatar.png"
+ bio = "A bio description<br />Html is accepted."
+
+[params.indieweb]
+ authorizationEndpoint = "https://indieauth.com/auth"
+ tokenEndpoint = "https://tokens.indieauth.com/token"
+ webmentionEndpoint = "https://webmention.io/your.domain.tld/webmention"
+ relmepgp = "/path/to//public/key.asc"
+ [[params.indieweb.relme]]
+ url = "https://"
+ [[params.indieweb.relme]]
+ url = "https://"
+
+# Menus:
+## Header
+[menu]
+ [[menu.main]]
+ identifier = "posts"
+ name = "Posts"
+ url = "/posts/"
+ weight = 1
+
+ [[menu.main]]
+ identifier = "categories"
+ name = "Categories"
+ url = "/categories/"
+ weight = 2
+
+ [[menu.main]]
+ identifier = "tags"
+ name = "Tags"
+ url = "/tags/"
+ weight = 3
+
+## Footer
+ [[menu.footer]]
+ name = "Github"
+ url = "https://github.com/example"
+ weight = 1
+
+ [[menu.footer]]
+ name = "Mastodon"
+ url = "https://example.com/@user"
+ weight = 2
+
+ [[menu.footer]]
+ name = "Imprint"
+ url = "/imprint"
+ weight = 3
+
+```
+
+## License
+
+This theme is released under the [MIT license](https://github.com/colorchestra/smol/blob/master/LICENSE).
diff --git a/indieweb-micro/themes/MinIndie/archetypes/default.md b/indieweb-micro/themes/MinIndie/archetypes/default.md
new file mode 100644
index 0000000..ef75f76
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/archetypes/default.md
@@ -0,0 +1,4 @@
++++
+title = "{{ replace .Name "-" " " | title }}"
+date = {{ .Date }}
++++
diff --git a/indieweb-micro/themes/MinIndie/archetypes/posts.md b/indieweb-micro/themes/MinIndie/archetypes/posts.md
new file mode 100644
index 0000000..11182ff
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/archetypes/posts.md
@@ -0,0 +1,11 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+slug: {{ now.Format "2006-01-02" }}-{{ .Name | urlize }}
+type: posts
+draft: true
+categories:
+ - default
+tags:
+ - default
+---
diff --git a/indieweb-micro/themes/MinIndie/layouts/_default/_markup/render-image.html b/indieweb-micro/themes/MinIndie/layouts/_default/_markup/render-image.html
new file mode 100644
index 0000000..41008ca
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/_default/_markup/render-image.html
@@ -0,0 +1,11 @@
+{{ if .Title }}
+<figure>
+ <img src="{{ .Destination | safeURL }}" alt="{{ .Text }}" />
+ <figcaption>{{ .Title }}</figcaption>
+</figure>
+{{ else }}
+<figure>
+ <img src="{{ .Destination | safeURL }}" alt="{{ .Text }}" />
+</figure>
+{{ end }}
+
diff --git a/indieweb-micro/themes/MinIndie/layouts/_default/baseof.html b/indieweb-micro/themes/MinIndie/layouts/_default/baseof.html
new file mode 100644
index 0000000..e8b6411
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/_default/baseof.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="{{ .Site.LanguageCode | default "en-us" }}">
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <style type=text/css>body{font-family:monospace;}</style>
+ <title>{{ .Title }} | {{ .Site.Title }}</title>
+ {{ with .Site.Params.description }}<meta name="description" content="{{ . }}">{{ end }}
+ {{ with .Site.Params.author }}<meta name="author" content="{{ . }}">{{ end }}
+ <link rel="stylesheet" href="{{ "css/style.css" | relURL }}">
+ {{ range .Site.Params.customCSS -}}
+ <link rel="stylesheet" href="{{ . | relURL }}?rnd={{ now.Unix }}">
+ {{- end }}
+ {{- with .OutputFormats.Get "RSS" -}}
+ {{ printf `<link rel="%s" type="%s" href="%s" title="%s">` .Rel .MediaType.Type .RelPermalink $.Site.Title | safeHTML }}
+ {{- end }}
+
+ {{ partial "head-extra.html" . }}
+</head>
+<body>
+ {{ partial "header" . }}
+ {{ block "main" . }}{{ end }}
+ {{ partial "footer" . }}
+</body>
+</html>
diff --git a/indieweb-micro/themes/MinIndie/layouts/_default/list.html b/indieweb-micro/themes/MinIndie/layouts/_default/list.html
new file mode 100644
index 0000000..f3639a1
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/_default/list.html
@@ -0,0 +1,57 @@
+{{ define "main" }}
+<main class="content-list">
+ {{ $pageKind := .Kind }}
+ {{ if or .Title .Content }}
+ <div>
+ {{ if .Title }}
+ <h1>
+ {{ .Title }}
+ {{ partial "single-title-extra.html" . }}
+ </h1>
+ {{ end }}
+ {{ with .Content }}<div class="justify">{{ . }}</div>{{ end }}
+ </div>
+ {{ end }}
+
+ <div class="h-feed">
+ {{ $yearCptr := "" }}
+ {{ $monthCptr := "" }}
+ {{ range .Paginator.Pages }}
+ {{ $postYear := .Date.Year }}
+ {{ $postMonth := .Date.Month }}
+
+ {{ if or (ne $monthCptr $postMonth) (and (eq $yearCptr "") (eq $monthCptr "")) }}
+ {{ $yearCptr = $postYear }}
+ {{ $monthCptr = $postMonth }}
+ {{ if and (ne $yearCptr "") (ne $monthCptr "") }}
+ </ul>
+ </div>
+ {{ end }}
+ <div>
+ <h3>{{ $monthCptr }} {{ $yearCptr }}</h3>
+ <ul>
+ {{ end }}
+
+ <li class="h-entry">
+ <div hidden>
+ {{ partial "bio-hcard.html" . }}
+ </div>
+ <div class="post-title">
+ <time class="date dt-published" datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "02" }}</time>:
+ {{ if eq $pageKind "term" }}[{{ .Type }}] {{ end }}
+ <a href="{{ .Permalink }}" class="u-url p-name title">
+ {{.Title }}
+ </a>
+ </div>
+ </li>
+
+ {{ $yearCptr = $postYear }}
+ {{ $monthCptr = $postMonth }}
+ {{ end }}
+ </ul>
+ </div>
+ </div>
+
+ {{ partial "pagination.html" . }}
+</main>
+{{ end }}
diff --git a/indieweb-micro/themes/MinIndie/layouts/_default/single.html b/indieweb-micro/themes/MinIndie/layouts/_default/single.html
new file mode 100644
index 0000000..425efc1
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/_default/single.html
@@ -0,0 +1,74 @@
+{{ define "main" }}
+{{ $ageDays := div (sub now.Unix .Date.Unix) 86400 }}
+ <main>
+ <article class="h-entry">
+ <h1 class="p-name">{{ .Title }}</h1>
+
+ <div hidden>{{ partial "bio-hcard.html" . }}</div>
+
+ {{ if .Date }}
+ <div><b>
+ <time class="dt-published" datetime="{{ .Date.Format "2006-01-02" }}">
+ {{ .Date.Format (default "2006-01-02 15:04:05" .Site.Params.dateFmt) }}
+ </time>
+ - <a href="{{ .Permalink }}" class="u-url u-uid" >Permalink</a>
+ </b></div>
+ {{ end }}
+
+ {{- if or .Params.categories .Params.tags -}}
+ <div class="article-meta">
+ {{- with .Params.categories -}}
+ <span class="categories">
+ Categories:
+ {{ range . }}
+ <a href="{{ "/categories/" | relLangURL }}{{ . | urlize }}">{{ . }}</a>
+ {{ end }}
+ </span>
+ {{- end -}}
+ {{- if and .Params.categories .Params.tags -}}
+ --
+ {{- end -}}
+ {{- with .Params.tags -}}
+ <span class="tags">
+ Tags:
+ {{ range . }}
+ #<a href="{{ "/tags/" | relLangURL }}{{ . | urlize }}" class="p-category">{{ . }}</a>
+ {{ end }}
+ </span>
+ {{- end -}}
+ </div>
+ {{- end -}}
+
+ {{- with .Site.Params.tagPostOlderThanXDays -}}
+ {{- if and (gt $ageDays .) (eq $.Type "posts") -}}
+ {{ partial "article-old-content.html" . }}
+ {{- end -}}
+ {{- end -}}
+
+ {{- partial "article-precontent.html" . -}}
+
+ {{- if .Params.toc -}}
+ <div class="toc noprint">
+ <h2>Table of Content</h2>
+ <aside>
+ {{ .TableOfContents }}
+ </aside>
+ </div>
+ {{- end -}}
+
+ <div class="e-content">
+ {{ .Content }}
+ </div>
+
+ {{ partial "article-extra.html" . }}
+
+ {{ if .Site.Params.enableNextPrevPages }}
+ {{ partial "article-prevnext.html" . }}
+ {{ end }}
+
+ {{ if .Site.Params.enableRelatedPages }}
+ {{ partial "article-related.html" . }}
+ {{ end }}
+ </article>
+ </main>
+{{ end }}
diff --git a/indieweb-micro/themes/MinIndie/layouts/_default/summary.html b/indieweb-micro/themes/MinIndie/layouts/_default/summary.html
new file mode 100644
index 0000000..a347932
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/_default/summary.html
@@ -0,0 +1,13 @@
+<article>
+ <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
+ <b><time>{{ .Date.Format (default "2006-01-02 15:04:05" .Site.Params.dateFmt) }}</time></b>
+ {{ range .Params.tags }}
+ <a href="{{ "/tags/" | relLangURL }}{{ . | urlize }}">{{ . }}</a>
+ {{ end }}
+ <div>
+ {{ .Summary }}
+ {{ if .Truncated }}
+ <a href="{{ .Permalink }}">Read more...</a>
+ {{ end }}
+ </div>
+</article>
diff --git a/indieweb-micro/themes/MinIndie/layouts/_default/taxonomy.html b/indieweb-micro/themes/MinIndie/layouts/_default/taxonomy.html
new file mode 100644
index 0000000..3e10031
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/_default/taxonomy.html
@@ -0,0 +1,45 @@
+{{ define "main" }}
+{{ $pageTitle := .Title }}
+<main>
+ <div>
+ <h1>
+ {{ .Title }}
+ <a href="{{ .Permalink }}index.xml">
+ <img style="height:1.5rem; display: inline;" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-label='RSS' role='img' viewBox='0 0 512 512'%3E%3Cpath d='M0 0h512v512H0' fill='%23f80'/%3E%3Cpath d='M109 271A132 133 0 0 1 241 403h60A192 193 0 0 0 109 211v-54A246 247 0 0 1 355 403h60A306 307 0 0 0 109 97m35 235a35 35 0 1 0 2 0' fill='%23fff'/%3E%3C/svg%3E" alt="RSS icon" />
+ </a>
+ </h1>
+ <div>
+ {{ .Content }}
+ </div>
+ {{- if eq .Kind "taxonomy" -}}
+ <ul>
+ {{ range .Pages.ByTitle }}
+ <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
+ {{ end }}
+ </ul>
+ {{ end }}
+ {{- if eq .Kind "term" -}}
+ <p>Content linked to the taxonomy term « {{ strings.ToUpper .Title }} »:</p>
+ {{ $currentType := "" }}
+ {{ range sort .Pages.ByDate.Reverse ".Type" "desc" }}
+ {{ if or (eq $currentType "") (ne $currentType .Type) }}
+ {{ if ne $currentType "" }}
+ </ul>
+ </div>
+ {{ end }}
+ <div>
+ <h3>{{ strings.FirstUpper .Type }}</h3>
+ <ul>
+ {{ end }}
+ <li>
+ <time class="date dt-published" datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "2006-01-02" }}</time>
+ <a href="{{ .RelPermalink }}">{{ .Title }}</a>
+ </li>
+ {{ $currentType = .Type }}
+ {{ end }}
+ </ul>
+ </div>
+ {{- end -}}
+ </div>
+</main>
+{{ end }}
diff --git a/indieweb-micro/themes/MinIndie/layouts/bookmarks/single.html b/indieweb-micro/themes/MinIndie/layouts/bookmarks/single.html
new file mode 100644
index 0000000..8ee4bf1
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/bookmarks/single.html
@@ -0,0 +1,44 @@
+{{ define "main" }}
+ <main>
+ <article class="h-entry">
+ <div hidden>{{ partial "bio-hcard.html" . }}</div>
+
+ <h1 class="p-name">
+ <a href="{{ .Params.bookmark_url }}" target="_blank" class="">
+ {{ .Title }}
+ </a>
+ </h1>
+ <div><b>
+ <time class="dt-published" datetime="{{ .Date.Format "2006-01-02" }}">
+ {{ .Date.Format (default "2006-01-02 15:04:05" .Site.Params.dateFmt) }}
+ </time>
+ - <a href="{{ .Permalink }}" class="u-url u-uid" >Permalink</a>
+ </b></div>
+ <div class="tags">
+ Tags:
+ {{ range .Params.tags }}
+ <a href="{{ "/tags/" | relLangURL }}{{ . | urlize }}" class="p-category">{{ . }}</a>
+ {{ end }}
+ </div>
+
+ {{ with .Params.description }}
+ <div class="bookmark-description">
+ Description:
+ <blockquote>{{ . }}</blockquote>
+ </div>
+ {{ end }}
+
+ {{ with .Content }}
+ <div class="e-content justify">{{ . }}</div>
+ {{ end }}
+
+ <div>
+ → <a href="{{ .Params.bookmark_url }}" target="_blank" class="u-bookmark-of h-cite">
+ {{ .Params.bookmark_url }}
+ </a><br /><br />
+ </div>
+
+ {{ partial "article-extra.html" . }}
+ </article>
+ </main>
+{{ end }}
diff --git a/indieweb-micro/themes/MinIndie/layouts/index.html b/indieweb-micro/themes/MinIndie/layouts/index.html
new file mode 100644
index 0000000..777a2fd
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/index.html
@@ -0,0 +1,8 @@
+{{ define "main" }}
+ <main>
+ <hr />
+ <h1 class="site-title">{{ .Site.Title }}</h1>
+ {{- partial "bio-hcard.html" . -}}
+ {{- partial "homepage-body.html" . -}}
+ </main>
+{{ end }}
diff --git a/indieweb-micro/themes/MinIndie/layouts/notes/notes.html b/indieweb-micro/themes/MinIndie/layouts/notes/notes.html
new file mode 100644
index 0000000..e0e0d17
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/notes/notes.html
@@ -0,0 +1,42 @@
+{{ define "main" }}
+ <main>
+ {{ $pageKind := .Kind }}
+ {{ if or .Title .Content }}
+ <div>
+ {{ with .Title }}
+ <h1>
+ {{ . }}
+ <a href="/notes/index.xml"><img style="height:1.5rem; display: inline;" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-label='RSS' role='img' viewBox='0 0 512 512'%3E%3Cpath d='M0 0h512v512H0' fill='%23f80'/%3E%3Cpath d='M109 271A132 133 0 0 1 241 403h60A192 193 0 0 0 109 211v-54A246 247 0 0 1 355 403h60A306 307 0 0 0 109 97m35 235a35 35 0 1 0 2 0' fill='%23fff'/%3E%3C/svg%3E" alt="RSS icon" /></a>
+ <a href="https://indieweb.org/h-feed" target="_blank"><img style="height:1.5rem; display: inline;" src="/images/H_Feed_icon.svg" alt="h-feed icon" /></a>
+ </h1>
+ {{ end }}
+ {{ with .Content }}<div class="justify">{{ . }}</div>{{ end }}
+ </div>
+ {{ end }}
+
+ <div class="h-feed">
+ {{ range .Pages }}
+ <div class="h-entry note">
+ <div hidden>
+ {{ partial "bio-hcard.html" . }}
+ </div>
+ <p class="p-content">
+ {{ .Content }}
+ </p>
+
+ <time class="date dt-published" datetime="{{ .Date.Format "2006-01-02 15:04" }}">
+ <a href="{{ .RelPermalink }}">{{ .Date.Format "2006-01-02 15:04" }}</a>
+ </time>
+
+ {{ with .Params.Tags }}
+ - Tags:
+ {{ range . }}
+ #<a href="{{ "/tags/" | relLangURL }}{{ . | urlize }}" class="p-category">{{ . }}</a>
+ {{ end }}
+ {{ end }}
+ </div>
+ {{ end }}
+ </div>
+
+ </main>
+{{ end }}
diff --git a/indieweb-micro/themes/MinIndie/layouts/notes/single.html b/indieweb-micro/themes/MinIndie/layouts/notes/single.html
new file mode 100644
index 0000000..32afcea
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/notes/single.html
@@ -0,0 +1,44 @@
+{{ define "main" }}
+{{ $ageDays := div (sub now.Unix .Date.Unix) 86400 }}
+ <main>
+ <article class="h-entry">
+ <div hidden>{{ partial "bio-hcard.html" . }}</div>
+ <div><b>
+ <time class="dt-published" datetime="{{ .Date.Format "2006-01-02" }}">
+ {{ .Date.Format (default "2006-01-02 15:04:05" .Site.Params.dateFmt) }}
+ </time>
+ - <a href="{{ .Permalink }}" class="u-url u-uid" >Permalink</a>
+ </b></div>
+
+ {{- if or .Params.categories .Params.tags -}}
+ <div class="article-meta">
+ {{- with .Params.categories -}}
+ <span class="categories">
+ Categories:
+ {{ range . }}
+ <a href="{{ "/categories/" | relLangURL }}{{ . | urlize }}">{{ . }}</a>
+ {{ end }}
+ </span>
+ {{- end -}}
+ {{- if and .Params.categories .Params.tags -}}
+ --
+ {{- end -}}
+ {{- with .Params.tags -}}
+ <span class="tags">
+ Tags:
+ {{ range . }}
+ #<a href="{{ "/tags/" | relLangURL }}{{ . | urlize }}" class="p-category">{{ . }}</a>
+ {{ end }}
+ </span>
+ {{- end -}}
+ </div>
+ {{- end -}}
+
+ {{- partial "article-precontent.html" . -}}
+
+ <div class="e-content">
+ {{ .Content }}
+ </div>
+ </article>
+ </main>
+{{ end }}
diff --git a/indieweb-micro/themes/MinIndie/layouts/partials/article-extra.html b/indieweb-micro/themes/MinIndie/layouts/partials/article-extra.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/partials/article-extra.html
diff --git a/indieweb-micro/themes/MinIndie/layouts/partials/article-old-content.html b/indieweb-micro/themes/MinIndie/layouts/partials/article-old-content.html
new file mode 100644
index 0000000..785f3be
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/partials/article-old-content.html
@@ -0,0 +1,6 @@
+<div class="alert noprint">
+ <strong
+ >/!\ Warning: This article is older than {{ . }} days, make sure the content
+ is still relevant!</strong
+ >
+</div>
diff --git a/indieweb-micro/themes/MinIndie/layouts/partials/article-precontent.html b/indieweb-micro/themes/MinIndie/layouts/partials/article-precontent.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/partials/article-precontent.html
diff --git a/indieweb-micro/themes/MinIndie/layouts/partials/article-prevnext.html b/indieweb-micro/themes/MinIndie/layouts/partials/article-prevnext.html
new file mode 100644
index 0000000..d89b779
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/partials/article-prevnext.html
@@ -0,0 +1,17 @@
+<div class="article-nextprev noprint">
+ <div class="next-post">
+ {{ if .NextInSection }}
+ <a class="link-reverse" href="{{ .NextInSection.Permalink }}?ref=footer"
+ >« {{ .NextInSection.Title | truncate 30 "..." }}</a
+ >
+ {{ end }}
+ </div>
+
+ <div class="previous-post">
+ {{ if .PrevInSection }}
+ <a class="link-reverse" href="{{ .PrevInSection.Permalink }}?ref=footer"
+ >{{ .PrevInSection.Title | truncate 30 "..."}} »</a
+ >
+ {{ end }}
+ </div>
+</div>
diff --git a/indieweb-micro/themes/MinIndie/layouts/partials/article-related.html b/indieweb-micro/themes/MinIndie/layouts/partials/article-related.html
new file mode 100644
index 0000000..5a6fe50
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/partials/article-related.html
@@ -0,0 +1,10 @@
+{{ $related := .Site.RegularPages.Related . | first 5 }} {{ with $related }}
+<div class="noprint">
+ <h2>Releated Posts</h2>
+ <ul>
+ {{ range . }}
+ <li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
+ {{ end }}
+ </ul>
+</div>
+{{ end }}
diff --git a/indieweb-micro/themes/MinIndie/layouts/partials/bio-hcard.html b/indieweb-micro/themes/MinIndie/layouts/partials/bio-hcard.html
new file mode 100644
index 0000000..0a476e4
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/partials/bio-hcard.html
@@ -0,0 +1,8 @@
+<div class="h-card p-author bio-card" style="text-align:center;">
+ <div class="bio">
+ <img class="u-photo avatar" src="{{ .Site.Params.Author.avatar }}" alt="{{ .Site.Params.Author.name }}'s avatar">
+ <p class="p-note">{{ .Site.Params.Author.Bio | safeHTML }}</p>
+ </div>
+ <p class="bio-name"><a href="{{ .Site.BaseURL }}" rel="me" class="p-nickname p-name u-url">{{ .Site.Params.Author.name }}</a></p>
+</div>
+<hr/>
diff --git a/indieweb-micro/themes/MinIndie/layouts/partials/footer-extra.html b/indieweb-micro/themes/MinIndie/layouts/partials/footer-extra.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/partials/footer-extra.html
diff --git a/indieweb-micro/themes/MinIndie/layouts/partials/footer.html b/indieweb-micro/themes/MinIndie/layouts/partials/footer.html
new file mode 100644
index 0000000..978a390
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/partials/footer.html
@@ -0,0 +1,14 @@
+<hr />
+<footer>
+ <p>
+ {{- range .Site.Menus.footer }}
+ <a href="{{ .URL }}"><b>{{ .Name }}</b></a>.
+ {{- end }}
+ </p>
+
+ {{ partial "footer-extra.html" . }}
+
+ <p style="text-align: center" class="copyright">
+ &copy; <a href="{{ .Site.BaseURL }}"><b>{{ if .Site.Copyright }}{{ .Site.Copyright }}{{ else }}{{ .Site.Title }}{{ end }}</b></a>.
+ </p>
+</footer>
diff --git a/indieweb-micro/themes/MinIndie/layouts/partials/head-extra.html b/indieweb-micro/themes/MinIndie/layouts/partials/head-extra.html
new file mode 100644
index 0000000..8c3984f
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/partials/head-extra.html
@@ -0,0 +1,20 @@
+{{- range .Site.Params.indieweb.relme }}
+ <link rel="me" href="{{ .url }}" />
+{{- end -}}
+
+{{- with .Site.Params.indieweb.relmepgp -}}
+ <link rel="pgpkey" href="{{ . }}">
+{{- end -}}
+
+{{ with .Site.Params.indieweb }}
+ <link
+ rel="authorization_endpoint"
+ href="{{ .authorizationEndpoint | default "https://indieauth.com/auth" }}"
+ />
+ <link
+ rel="token_endpoint"
+ href="{{ .tokenEndpoint | default "https://tokens.indieauth.com/token" }}"
+ />
+ <link rel="webmention" href="{{ .webmentionEndpoint }}" />
+{{ end }}
+
diff --git a/indieweb-micro/themes/MinIndie/layouts/partials/header.html b/indieweb-micro/themes/MinIndie/layouts/partials/header.html
new file mode 100644
index 0000000..efbd8e1
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/partials/header.html
@@ -0,0 +1,17 @@
+<header>
+ <div style="display:flex;flex-flow:row wrap;justify-content:space-between">
+ <div style="align-self:flex-start;">
+ {{ strings.Repeat ( .Site.Params.Author.Name | len | add 6 ) "=" }}<br>
+ == <a href="{{ .Site.BaseURL }}">{{ .Site.Params.Author.Name }}</a> ==<br>
+ {{ strings.Repeat ( .Site.Params.Author.Name | len | add 6 ) "=" }}
+ </div>
+ <div style="align-self:center;">{{ .Site.Params.subtitle }}</div>
+ </div>
+ <nav style="margin: 1rem auto;">
+ {{ with .Site.Menus.main }}
+ {{ range . }}
+ <a href="{{ .URL | relURL }}"><b>{{ .Name }}</b></a>.
+ {{ end }}
+ {{ end }}
+ </nav>
+</header>
diff --git a/indieweb-micro/themes/MinIndie/layouts/partials/homepage-body.html b/indieweb-micro/themes/MinIndie/layouts/partials/homepage-body.html
new file mode 100644
index 0000000..151ef62
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/partials/homepage-body.html
@@ -0,0 +1,5 @@
+{{ $paginator := .Paginate (where .Site.RegularPages "Type" "in" .Site.Params.mainSections) }}
+{{ range $paginator.Pages }}
+ {{ .Render "summary" }}
+{{ end }}
+{{ partial "pagination.html" . }}
diff --git a/indieweb-micro/themes/MinIndie/layouts/partials/pagination.html b/indieweb-micro/themes/MinIndie/layouts/partials/pagination.html
new file mode 100644
index 0000000..79f8053
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/partials/pagination.html
@@ -0,0 +1,9 @@
+<div>
+{{ if .Paginator.HasPrev }}
+ <a href="{{ .Paginator.Prev.URL }}">Previous Page</a>
+{{ end }}
+{{ .Paginator.PageNumber }} of {{ .Paginator.TotalPages }}
+{{ if .Paginator.HasNext }}
+ <a href="{{ .Paginator.Next.URL }}">Next Page</a>
+{{ end }}
+</div>
diff --git a/indieweb-micro/themes/MinIndie/layouts/partials/single-title-extra.html b/indieweb-micro/themes/MinIndie/layouts/partials/single-title-extra.html
new file mode 100644
index 0000000..bd79e22
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/layouts/partials/single-title-extra.html
@@ -0,0 +1,3 @@
+{{ with .AlternativeOutputFormats.Get "rss" }}
+<a href="{{ .RelPermalink }}"><img style="height:1.5rem; display: inline;" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-label='RSS' role='img' viewBox='0 0 512 512'%3E%3Cpath d='M0 0h512v512H0' fill='%23f80'/%3E%3Cpath d='M109 271A132 133 0 0 1 241 403h60A192 193 0 0 0 109 211v-54A246 247 0 0 1 355 403h60A306 307 0 0 0 109 97m35 235a35 35 0 1 0 2 0' fill='%23fff'/%3E%3C/svg%3E" alt="RSS icon" /></a>
+{{ end }}
diff --git a/indieweb-micro/themes/MinIndie/static/css/style.css b/indieweb-micro/themes/MinIndie/static/css/style.css
new file mode 100644
index 0000000..26bd17b
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/static/css/style.css
@@ -0,0 +1,250 @@
+html {
+ overflow-y: scroll;
+}
+
+/* 🌸 PASTEL PALETTE */
+:root {
+ --bgcolor: #fff7fb;
+ --fontcolor: #3a2c3d;
+
+ --linkcolor: #ff77c8;
+ --visitedcolor: #d76dff;
+
+ --precolor: #4a3e4f;
+ --prebgcolor: #ffe6f4;
+
+ --alertbgcolor: #ffe0f1;
+ --hrcolor: #ffbde6;
+
+ --blockquotecolor: #ffe8f6;
+ --pcodecolor: #f7d2f0;
+
+ --sitetitlecolor: #ff99dd;
+ --titlecolor: #c77fff;
+}
+
+/* 🌙 DARK MODE PASTEL NIGHT */
+@media (prefers-color-scheme: dark) {
+ :root {
+ --bgcolor: #241b2b;
+ --fontcolor: #f8e8ff;
+
+ --linkcolor: #ff9be9;
+ --visitedcolor: #e49cff;
+
+ --precolor: #ffeefe;
+ --prebgcolor: #35263f;
+
+ --alertbgcolor: #3f304a;
+ --hrcolor: #f4cfff;
+
+ --blockquotecolor: #3a2b45;
+ --pcodecolor: #614c70;
+
+ --sitetitlecolor: #ffd1f6;
+ --titlecolor: #d9a7ff;
+ }
+}
+
+/* 🌸 TYPO + BASE */
+body {
+ max-width: 800px;
+ margin: 40px auto;
+ padding: 0 10px;
+
+ font: 15px/1.6 "IBM Plex Mono", "Fira Mono", monospace;
+ color: var(--fontcolor);
+ background: var(--bgcolor);
+
+ transition: background 0.3s ease, color 0.3s ease;
+}
+
+/* 🌸 LINKS */
+a {
+ color: var(--linkcolor);
+ text-decoration: none;
+ transition: color 0.2s ease, text-shadow 0.2s ease;
+}
+
+a:hover {
+ color: var(--visitedcolor);
+ text-shadow: 0 0 6px currentColor;
+}
+
+a:visited {
+ color: var(--visitedcolor);
+}
+
+/* 🌸 HEADERS */
+h1, h2, h3 {
+ line-height: 1.25;
+ color: var(--titlecolor);
+ margin-top: 1.6rem;
+ font-weight: 700;
+}
+
+h1.site-title {
+ color: var(--sitetitlecolor);
+ text-align: center;
+ font-size: 2rem;
+ margin-bottom: 1rem;
+}
+
+/* 🌸 PARAGRAPHS */
+p {
+ margin-top: 1.3rem;
+}
+
+/* 🌸 INLINE CODE */
+p > code,
+li > code {
+ color: var(--precolor);
+ background: var(--pcodecolor);
+ padding: 3px 5px;
+ border-radius: 6px;
+}
+
+/* 🌸 FULL CODE */
+code {
+ color: var(--precolor);
+ background: var(--prebgcolor);
+ padding: 3px 5px;
+ border-radius: 6px;
+}
+
+pre {
+ color: var(--precolor);
+ background: var(--prebgcolor);
+ padding: 24px;
+ overflow-x: auto;
+ border-radius: 12px;
+ box-shadow: 0 0 10px rgba(255, 180, 220, 0.25);
+}
+
+/* 🌸 ARTICLES */
+article {
+ padding: 24px 0;
+}
+
+/* 🌸 IMAGES */
+img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+ margin: auto;
+ border-radius: 12px;
+}
+
+/* cute avatar */
+.avatar {
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ box-shadow: 0 0 8px rgba(255, 140, 200, 0.4);
+}
+
+/* 🌸 ALERTS */
+.alert {
+ color: var(--fontcolor);
+ background: var(--alertbgcolor);
+ padding: 20px;
+ border-radius: 12px;
+ box-shadow: 0 0 12px rgba(255, 180, 220, 0.3);
+ overflow-x: auto;
+}
+
+/* 🌸 NEXT/PREV */
+.article-nextprev {
+ display: flex;
+ flex-flow: row wrap-reverse;
+ justify-content: space-between;
+}
+
+/* 🌸 DIVIDERS */
+hr {
+ margin: 35px 33% 15px;
+ border-color: var(--hrcolor);
+ border-width: 3px;
+ border-radius: 3px;
+}
+
+hr.small {
+ margin: 35px 44% 25px;
+ border: 1px dashed var(--hrcolor);
+}
+
+/* 🌸 BLOCKQUOTE */
+blockquote {
+ background: var(--blockquotecolor);
+ margin: 1.2rem 0;
+ padding: 12px 20px;
+ border-radius: 12px;
+ box-shadow: 0 0 8px rgba(255, 200, 240, 0.25);
+ border-left: 4px solid var(--hrcolor);
+}
+
+/* 🌸 LISTS */
+ol, ul {
+ padding-left: 1.1rem;
+}
+
+ul > li {
+ list-style-type: disclosure-closed;
+}
+
+/* 🌸 TABLES */
+table {
+ text-align: left;
+ border: 1px solid var(--hrcolor);
+ border-radius: 10px;
+ overflow: hidden;
+}
+
+thead th, tfoot th, tfoot td {
+ padding: 6px 10px;
+ background-color: var(--alertbgcolor);
+ color: var(--titlecolor);
+}
+
+td {
+ padding: 8px 10px;
+}
+
+tbody tr:nth-child(even) {
+ background-color: var(--alertbgcolor);
+}
+
+/* 🌸 RESPONSIVE MOE */
+@media all and (max-width: 800px) {
+ .bio-card .bio {
+ justify-content: space-around;
+ flex-direction: column;
+ }
+ .bio-card .bio > img {
+ align-self: center;
+ margin: auto;
+ }
+ .bio-card .bio > p {
+ align-self: center;
+ text-align: center;
+ }
+}
+
+/* PRINT */
+@media print {
+ a, a:visited {
+ color: #000;
+ text-decoration: none;
+ }
+ a::after {
+ content: " (" attr(href) ") ";
+ }
+ nav, footer, hr, .noprint {
+ display: none !important;
+ }
+ pre, blockquote, code {
+ background: #fff;
+ border: none;
+ box-shadow: none;
+ }
+}
diff --git a/indieweb-micro/themes/MinIndie/theme.toml b/indieweb-micro/themes/MinIndie/theme.toml
new file mode 100644
index 0000000..313427c
--- /dev/null
+++ b/indieweb-micro/themes/MinIndie/theme.toml
@@ -0,0 +1,17 @@
+name = "minindie"
+license = "MIT"
+licenselink = "https://git.sr.ht/~bacardi55/MinIndie/tree/main/item/LICENCE.md"
+description = "Minimal Hugo theme for the indieweb."
+homepage = "https://sr.ht/~bacardi55/MinIndie"
+tags = ["blog", "minimal", "monospace", "dark mode", "simple", "clean", "light", "responsive", "fast", "no-js", "no-tracking", "privacy", "indieweb"]
+features = ["blog", "privacy", "responsive", "fast", "indieweb"]
+min_version = "0.0.1"
+
+[author]
+ name = "bacardi55"
+ homepage = "bacardi55.io"
+
+[original]
+ author = "Morph"
+ homepage = "https://morph.sh"
+ repo = "https://github.com/colorchestra/smol"
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage