Browse Source

Add Nightfall theme and integrate Umami analytics

- Introduced the Nightfall theme with various layout and style files.
- Added support for RSS feed in the configuration.
- Integrated Umami analytics script for tracking.
- Updated multiple HTML files to include the new theme and analytics.
- Created new vendor modules for images and theme dependencies.
codeskraps 2 days ago
parent
commit
d73eb83e9c
88 changed files with 1336 additions and 581 deletions
  1. 2 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/archetypes/default.md
  2. 39 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/_global.scss
  3. 11 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/components/_footer.scss
  4. 121 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/components/_header.scss
  5. 61 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/components/_post.scss
  6. 19 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/components/_social.scss
  7. 17 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/main.scss
  8. 38 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/pages/_baseof.scss
  9. 9 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/pages/_index.scss
  10. 3 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/pages/_list.scss
  11. 34 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/pages/_single.scss
  12. 21 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/utils/_fonts.scss
  13. 36 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/utils/_variables.scss
  14. 3 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/config.toml
  15. 36 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/i18n/en.toml
  16. 8 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/404.html
  17. 31 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/_default/baseof.html
  18. 40 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/_default/list.html
  19. 39 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/_default/single.html
  20. 37 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/index.html
  21. 0 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/custom-head.html
  22. 11 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/footer.html
  23. 27 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/head.html
  24. 22 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/header.html
  25. 15 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/social.html
  26. 8 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/taxonomy/authors.html
  27. 8 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/taxonomy/categories.html
  28. 8 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/taxonomy/tags.html
  29. BIN
      _vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/FiraMono/FiraMono-Medium.eot
  30. BIN
      _vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/FiraMono/FiraMono-Medium.otf
  31. BIN
      _vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/FiraMono/FiraMono-Medium.ttf
  32. BIN
      _vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/FiraMono/FiraMono-Medium.woff
  33. BIN
      _vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/FiraMono/FiraMono-Medium.woff2
  34. BIN
      _vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/OpenSans/OpenSans-Regular.eot
  35. BIN
      _vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/OpenSans/OpenSans-Regular.ttf
  36. BIN
      _vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/OpenSans/OpenSans-Regular.woff
  37. 13 0
      _vendor/github.com/LordMathis/hugo-theme-nightfall/theme.toml
  38. 12 0
      _vendor/github.com/hugomods/images/hugo.toml
  39. 6 0
      _vendor/github.com/hugomods/images/layouts/_default/_markup/render-image.html
  40. 4 0
      _vendor/github.com/hugomods/images/layouts/partials/images/figure.html
  41. 4 0
      _vendor/github.com/hugomods/images/layouts/partials/images/functions/format.html
  42. 2 0
      _vendor/github.com/hugomods/images/layouts/partials/images/functions/page-featured-image-resource.html
  43. 1 0
      _vendor/github.com/hugomods/images/layouts/partials/images/functions/page-image-resources.html
  44. 17 0
      _vendor/github.com/hugomods/images/layouts/partials/images/functions/page-thumbnail.html
  45. 18 0
      _vendor/github.com/hugomods/images/layouts/partials/images/functions/params.html
  46. 250 0
      _vendor/github.com/hugomods/images/layouts/partials/images/image.html
  47. 37 0
      _vendor/github.com/hugomods/images/layouts/partials/images/picture.html
  48. 17 0
      _vendor/github.com/hugomods/images/package.json
  49. 2 0
      _vendor/modules.txt
  50. 15 3
      hugo.toml
  51. 7 0
      layouts/partials/custom-head.html
  52. 1 2
      layouts/partials/header.html
  53. 5 16
      public/404.html
  54. 5 16
      public/about/index.html
  55. 9 16
      public/index.html
  56. 5 16
      public/posts/2024/git_ssh_command/index.html
  57. 5 16
      public/posts/2024/gitignore_not_working/index.html
  58. 5 16
      public/posts/2024/mvi_architecture/index.html
  59. 5 16
      public/posts/2024/react_vs_kmp/index.html
  60. 5 16
      public/posts/2025/evolution_software_development_ai/index.html
  61. 5 16
      public/posts/2025/move_home_folder/index.html
  62. 11 22
      public/posts/2025/public_pool_android/index.html
  63. 5 16
      public/posts/index.html
  64. 5 16
      public/projects/index.html
  65. 5 16
      public/tags/ai/index.html
  66. 5 16
      public/tags/android/index.html
  67. 5 16
      public/tags/architecture/index.html
  68. 14 25
      public/tags/cryptocurrency/index.html
  69. 5 5
      public/tags/cryptocurrency/index.xml
  70. 14 25
      public/tags/cursor/index.html
  71. 5 5
      public/tags/cursor/index.xml
  72. 14 25
      public/tags/development/index.html
  73. 5 5
      public/tags/development/index.xml
  74. 5 16
      public/tags/future/index.html
  75. 5 16
      public/tags/git/index.html
  76. 5 18
      public/tags/index.html
  77. 5 16
      public/tags/ios/index.html
  78. 5 16
      public/tags/kmp/index.html
  79. 5 16
      public/tags/kotlin/index.html
  80. 5 16
      public/tags/linux/index.html
  81. 14 25
      public/tags/mining/index.html
  82. 5 5
      public/tags/mining/index.xml
  83. 5 16
      public/tags/mvi/index.html
  84. 5 16
      public/tags/mvvm/index.html
  85. 5 16
      public/tags/react-native/index.html
  86. 5 16
      public/tags/software-development/index.html
  87. 5 16
      public/tags/ssh/index.html
  88. 5 16
      public/tags/viewmodel/index.html

+ 2 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/archetypes/default.md

@@ -0,0 +1,2 @@
++++
++++

+ 39 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/_global.scss

@@ -0,0 +1,39 @@
+@use "utils/variables" as v;
+
+body {
+  font-family: v.$fontParagraph;
+  color: v.$white;
+  background-color: v.$backgroundDark;
+  margin: 0;
+  display: flex;
+  flex-direction: column;
+  min-height: 100vh;
+}
+
+a {
+  @include v.primary-color;
+}
+
+pre code {
+  font-family: v.$fontCode;
+  font-size: 75%;
+  display: block;
+  background: v.$backgroundDarker;
+  padding: 10px;
+  overflow: auto;
+}
+
+code {
+  font-family: v.$fontCode;
+  font-size: 75%;
+}
+
+@for $i from 1 through 6 {
+  h#{$i} {
+    font-family: v.$fontHeader;
+  }
+}
+
+@-ms-viewport{
+  width: device-width;
+}

+ 11 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/components/_footer.scss

@@ -0,0 +1,11 @@
+@use "../utils/variables" as v;
+
+.footer {
+  padding: 15px;
+  text-align: center;
+  background-color: v.$backgroundDarker;
+}
+
+.footerLink {
+  color: v.$white;
+}

+ 121 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/components/_header.scss

@@ -0,0 +1,121 @@
+@use "../utils/variables" as v;
+
+.header {
+  font-family: v.$fontHeader;
+  padding: 0 20px;
+  height: 60px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  width: v.$width;
+}
+
+.headerWrapper {
+  overflow: auto;
+  box-sizing: border-box;
+  background-color: v.$backgroundDarker;
+  display: flex;
+  justify-content: center;
+  flex-shrink: 0;
+}
+
+.headerLinks {
+  ul {
+    list-style: none;
+    padding: 0;
+    margin: 0;
+    li {
+      display: inline;
+      margin: 5px;
+      a {
+        color: v.$white;
+        text-decoration: none;
+      }
+    }
+  }
+}
+
+.terminal,
+.terminal:hover {
+  color: v.$white;
+  text-decoration: none;
+}
+
+.hamb {
+  cursor: pointer;
+  float: right;
+  display: none;
+  padding: 10px 4px;
+}
+
+.hamb-line {
+  background: v.$white;
+  display: block;
+  height: 2px;
+  position: relative;
+  width: 24px;
+} /* Style span tag */
+
+.hamb-line::before,
+.hamb-line::after {
+  background: v.$white;
+  content: "";
+  display: block;
+  height: 100%;
+  position: absolute;
+  transition: all 0.2s ease-out;
+  width: 100%;
+}
+.hamb-line::before {
+  top: 5px;
+}
+.hamb-line::after {
+  top: -5px;
+}
+
+.side-menu {
+  display: none;
+}
+
+.side-menu:checked ~ .headerLinks {
+  max-height: 100%;
+}
+.side-menu:checked ~ .hamb .hamb-line {
+  background: transparent;
+}
+.side-menu:checked ~ .hamb .hamb-line::before {
+  transform: rotate(-45deg);
+  top: 0;
+}
+.side-menu:checked ~ .hamb .hamb-line::after {
+  transform: rotate(45deg);
+  top: 0;
+}
+
+@media screen and (max-width: 768px) {
+  .headerLinks {
+    width: 100%;
+    height: 100%;
+    position: fixed;
+    top: 60px;
+    left: 0;
+    background-color: v.$backgroundDark;
+    overflow: hidden;
+    max-height: 0;
+    transition: max-height 0.5s ease-out;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+
+    ul {
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+    }
+  }
+
+  .hamb {
+    display: block;
+  }
+}

+ 61 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/components/_post.scss

@@ -0,0 +1,61 @@
+@use "../utils/variables" as v;
+
+.postDate {
+  float: right;
+  color: v.$white;
+}
+
+.postTitle {
+  
+  @include v.primary-color;
+
+  text-decoration: none;
+  text-transform: capitalize;
+  font-family: v.$fontHeader;
+  font-size: 1.2em;
+  float: left;
+}
+
+.postHeader {
+  overflow: hidden;
+}
+
+.postsList {
+  margin-top: 20px;
+}
+
+.postListItem {
+  padding: 20px;
+  background-color: v.$black;
+  margin-bottom: 20px;
+}
+
+.postListLink:hover {
+  text-decoration: none;
+}
+
+.postExcerpt {
+  text-align: initial;
+  text-decoration: none;
+  color: v.$white;
+}
+
+.headerContainer {
+  display: flex;
+  justify-content: space-between;
+}
+
+.noDecoration {
+  text-decoration: none;
+}
+
+a,
+a:link,
+a:visited,
+a:active{
+  text-decoration: none;
+}
+
+a:hover{
+  text-decoration: underline;
+}

+ 19 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/components/_social.scss

@@ -0,0 +1,19 @@
+@use "../utils/variables" as v;
+
+
+.socialNavbar {
+  ul {
+    list-style: none;
+    padding: 0;
+    li {
+      display: inline;
+    }
+  }
+  a {
+    color: v.$white;
+    text-shadow: v.$black 0px 0px 2px;
+    -webkit-font-smoothing: antialiased;
+    display: inline-block;
+    margin: 10px;
+  }
+}

+ 17 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/main.scss

@@ -0,0 +1,17 @@
+@use "global";
+
+// utils
+@use "utils/variables";
+@use "utils/fonts";
+
+// components
+@use "components/footer";
+@use "components/header";
+@use "components/post";
+@use "components/social";
+
+// pages
+@use "pages/single";
+@use "pages/list";
+@use "pages/index";
+@use "pages/baseof";

+ 38 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/pages/_baseof.scss

@@ -0,0 +1,38 @@
+@use "../utils/variables" as v;
+
+.content {
+  text-align: center;
+  flex: 1 auto;
+  display: flex;
+  justify-content: center;
+}
+
+.content img {
+  max-width: 100%;
+}
+
+.vertical {
+  flex-direction: column;
+  align-items: center;
+}
+
+.flexWrapper {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  min-height: 100vh;
+  flex: 1 auto;
+
+}
+
+.main {
+  height: 100%;
+
+  @media only screen and (min-width: v.$breakLarge) {
+    width: v.$width;
+  }
+
+  @media screen and (max-width: v.$breakLarge) {
+    width: 100%;    
+  }
+}

+ 9 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/pages/_index.scss

@@ -0,0 +1,9 @@
+.indexWrapper {
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+}
+
+.indexHeader {
+    font-size: 3em;
+}

+ 3 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/pages/_list.scss

@@ -0,0 +1,3 @@
+.listHeader, .listContent {
+    text-align: left;
+}

+ 34 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/pages/_single.scss

@@ -0,0 +1,34 @@
+@use "../utils/variables" as v;
+
+.postWrapper {
+    text-align: left;
+    padding: 20px;    
+}
+
+.postMetadata {
+    font-family: v.$fontCode;
+    display: block;
+    background: v.$backgroundDarker;
+    padding: 10px;
+}
+
+dt, dd {
+    line-height: 1.5;
+}
+
+dl {
+    display: grid;
+    grid-template-columns: max-content auto;
+}
+
+dt {
+    grid-column-start: 1;
+}
+
+dd {
+    grid-column-start: 2;
+}
+
+dt::after {
+    content: ":";
+}

+ 21 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/utils/_fonts.scss

@@ -0,0 +1,21 @@
+@font-face{
+    font-family: "Fira Mono";
+    src: url("../fonts/FiraMono/FiraMono-Medium.eot");
+    src: local("Fira Mono"),
+         url("../fonts/FiraMono/FiraMono-Medium.eot") format("embedded-opentype"),
+         url("../fonts/FiraMono/FiraMono-Medium.woff") format("woff"),
+         url("../fonts/FiraMono/FiraMono-Medium.ttf") format("truetype");
+    font-weight: 500;
+    font-style: normal;
+}
+
+@font-face {
+    font-family: "Open Sans";
+    src: url("../fonts/OpenSans/OpenSans-Regular.eot");
+    src: url("../fonts/OpenSans/OpenSans-Regular.eot?#iefix") format("embedded-opentype"),
+    url("../fonts/OpenSans/OpenSans-Regular.woff") format("woff"),
+    url("../fonts/OpenSans/OpenSans-Regular.ttf") format("truetype"),
+    url("../fonts/OpenSans/OpenSans-Regular.svg#OpenSansRegular") format("svg");
+    font-weight: normal;
+    font-style: normal;
+}

+ 36 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/assets/sass/utils/_variables.scss

@@ -0,0 +1,36 @@
+@use "hugo:vars" as h;
+@use "sass:map";
+
+// Colors
+$darkGrey: #323232;
+$white: #f8f8ff;
+$black: #2f2f2f;
+
+$backgroundDarker: #252627;
+$backgroundDark: #292a2d;
+
+//Fonts
+$fontHeader: 'Fira Mono', monospace;
+$fontParagraph: 'Open Sans', sans-serif;
+$fontCode: 'Fira Mono', monospace;
+
+// Content
+$breakLarge: 992px;
+$width: 760px;
+
+$primary-colors: (
+    'blue': #80AADD,
+    'orange': #FFB300,
+    'green': #33D17A,
+    'red': #F26E74
+);
+
+@mixin primary-color {
+
+    @if map.has-key($primary-colors, h.$color) {
+        color: map.get($primary-colors, h.$color);
+    } @else {
+        color: h.$color;
+    }
+
+}

+ 3 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/config.toml

@@ -0,0 +1,3 @@
+[module]
+  [module.hugoVersion]
+    min = "0.114.0"

+ 36 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/i18n/en.toml

@@ -0,0 +1,36 @@
+[not_found]
+    other = "NOT FOUND"
+
+[not_found_desc]
+    other = "You just hit a route that doesn't exist..."
+
+[home]
+    other = "Home"
+
+[published]
+    other = "published"
+
+[reading_time]
+    other = "reading time"
+
+[reading_time_desc]
+  one = "1 minute"
+  other = "{{ .Count }} minutes"
+
+[authors]
+  other = "authors"
+
+[tags]
+  other = "tags"
+
+[categories]
+  other = "categories"
+
+[and]
+  other = "and"
+
+[powered_by]
+  other = "Built with"
+
+[theme]
+  other = "theme"

+ 8 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/404.html

@@ -0,0 +1,8 @@
+{{ define "title"}}
+404 | {{ .Site.Params.author.name }}
+{{ end }}
+
+{{ define "main"}}
+<h1>{{ i18n "not_found" }}</h1>
+<p>{{ i18n "not_found_desc" }}</p>
+{{ end }}

+ 31 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/_default/baseof.html

@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="{{ .Site.LanguageCode }}">
+
+<head>
+    <title>{{ block "title" . }}
+        {{ .Site.Title }}
+        {{ end }}</title>
+
+    {{ partial "head.html" . }}
+
+</head>
+
+<body>
+
+    <div class="flexWrapper">
+        {{ partial "header.html" . }}
+
+        <div class="content">
+            <main class="main">
+                {{ block "main" . }}
+                {{ end }}
+            </main>
+        </div>
+
+
+        {{ partial "footer.html" . }}
+    </div>
+
+</body>
+
+</html>

+ 40 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/_default/list.html

@@ -0,0 +1,40 @@
+{{ define "title"}}
+{{ .Title }} | {{ .Site.Params.author.name }}
+{{ end }}
+
+{{ define "main" }}
+
+<div>
+    <div class="listHeader">
+        <h1>{{ .Title }}</h1>
+    </div>
+
+    {{ with .Content }}
+    <div class="listContent">
+        {{- . -}}
+    </div>
+    {{ end }}
+
+    <div>
+        {{ range .Pages }}
+
+        <a class="postListLink" href="{{ .Permalink }}">
+            <!-- [html-validate-disable-next prefer-native-element] -->
+            <div class="postListItem" role="listitem">
+                <div class="postHeader">
+                    <span class="postTitle">{{ .Title }}</span>
+                    {{ $formattedDate := .Date.Format "2006-01-02" }}
+                    <time class="postDate" datetime="{{ $formattedDate }}">{{ .Date | time.Format ":date_long" }}</time>
+                </div>
+                <div class="postExcerpt">
+                    <p>{{ .Summary }}</p>
+                </div>
+            </div>
+        </a>
+
+
+        {{end}}
+    </div>
+</div>
+
+{{ end }}

+ 39 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/_default/single.html

@@ -0,0 +1,39 @@
+{{ define "title"}}
+{{ .Title }} | {{ .Site.Params.author.name }}
+{{ end }}
+
+{{ define "main" }}
+<div class="postWrapper">
+    <h1>{{ .Title }}</h1>
+    {{ if .Description}}
+    	<p>{{.Description}}</p>
+    {{ end }}
+    {{ if .Params.showMetadata | default true }}
+    <section class="postMetadata">
+        <dl>
+            {{ with .GetTerms "tags" }}
+                {{ partial "taxonomy/tags.html" . }}
+            {{ end }}
+            {{ with .GetTerms "authors" }}
+                {{ partial "taxonomy/authors.html" . }}
+            {{ end }}
+            {{ with .GetTerms "categories" }}
+                {{ partial "taxonomy/categories.html" . }}
+            {{ end }}
+            {{ if .Site.Params.published | default true }}
+                <dt>{{ i18n "published" }}</dt>
+                {{ $formattedDate := .Date.Format "2006-01-02" }}
+                <dd><time datetime="{{ $formattedDate }}">{{ .Date | time.Format ":date_long" }}</time></dd>
+            {{ end }}
+            {{ if .Site.Params.readingTime | default true }}
+                <dt>{{ i18n "reading_time" }}</dt>
+                <dd>{{ i18n "reading_time_desc" .ReadingTime }}</dd>
+            {{ end }}
+        </dl>
+    </section>
+    {{ end }}
+    <div>
+        {{ .Content }}
+    </div>
+</div>
+{{ end }}

+ 37 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/index.html

@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="{{ .Site.LanguageCode }}">
+
+<head>
+    <title>
+        {{ i18n "home" }} | {{ .Site.Params.author.name }}
+    </title>
+
+    {{ partial "head.html" . }}
+
+</head>
+
+<body>
+
+    <div class="flexWrapper">
+        {{ partial "header.html" . }}
+
+        <div class="content vertical">
+            <main class="main">
+                <div class="indexWrapper">
+                    <div>
+                        <h1 class="indexHeader">{{ .Site.Params.author.name }}</h1>
+                    </div>
+                    {{ if isset .Site.Params "social" }}
+                        {{ partial "social.html" . }}
+                    {{ end }}
+                </div>
+            </main>
+        </div>
+
+
+        {{ partial "footer.html" . }}
+    </div>
+
+</body>
+
+</html>

+ 0 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/custom-head.html


+ 11 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/footer.html

@@ -0,0 +1,11 @@
+<footer class="footer">
+    {{ with .Site.Params.footerHtml }}
+        <span>{{ . | safeHTML }}</span>
+    {{ else }}
+        <span>
+            © {{ now.Format "2006" }} {{ .Site.Params.author.name }}, {{ i18n "powered_by" }}
+            <a href="https://gohugo.io" class="footerLink">Hugo</a> {{ i18n "and" }}
+            <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> {{ i18n "theme" }}
+        </span>
+    {{ end }}
+</footer>

+ 27 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/head.html

@@ -0,0 +1,27 @@
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="{{.Description | default .Site.Params.SiteDescription}}">
+
+{{ hugo.Generator }}
+
+<!-- Permalink & RSSlink -->
+<link rel="canonical" href="{{ .Permalink }}" >
+{{- with .OutputFormats.Get "RSS" }}
+  <link href="{{ .Permalink }}" rel="alternate" type="application/rss+xml" title="{{ $.Site.Title }}" >
+  <link href="{{ .Permalink }}" rel="feed" type="application/rss+xml" title="{{ $.Site.Title }}" >
+{{- end -}}
+
+{{ $vars := dict
+  "color" (or site.Params.styles.color "blue")
+}}
+
+{{ $options := dict
+  "targetPath" "css/style.css"
+  "transpiler" "dartsass"
+  "vars" $vars
+}}
+
+{{ $style := resources.Get "sass/main.scss" | toCSS $options | minify | fingerprint }}
+<link href="{{ $style.RelPermalink }}" rel="stylesheet">
+
+{{ partial "custom-head.html" . }}

+ 22 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/header.html

@@ -0,0 +1,22 @@
+<header class="headerWrapper">
+    <div class="header">
+        <div>
+            <a class="terminal" href="{{ .Site.BaseURL }}">
+                <span>{{ .Site.Params.user }}@{{ .Site.Params.hostname }} ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                {{ range .Site.Menus.header }}
+                <li>
+                    <a href="{{ .URL | absURL }}" title="{{ .Title }}" >
+                        ~/{{- .Name -}}
+                    </a>
+                </li>
+                {{ end }}
+            </ul>
+        </nav>
+    </div>
+</header>

+ 15 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/social.html

@@ -0,0 +1,15 @@
+<div class="socialNavbar">
+    <ul>
+        {{ range sort .Site.Params.social "key"}}
+        <li>
+            {{ if isset . "icon" }}
+                <a href="{{ .url | safeURL }}" {{ if .target }} target="{{ .target }}" {{ end }} {{ if .aria }} aria-label="{{ .aria }}" {{ else }} aria-hidden="true" {{ end }} title="{{ .name }}" {{ if .rel }} rel="{{ .rel }}"{{ end }}>
+                    <i class="{{ .icon }}"></i>
+                </a>
+            {{ else }}
+                <a href="{{ .url | safeURL }}" {{ if .target }} target="{{ .target }}" {{ if .aria }} aria-label="{{ .aria }}" {{ else }} aria-hidden="true" {{ end }} {{ end }} {{ if .rel }} rel="{{ .rel }}"{{ end }}>{{ .name }}</a>
+            {{ end }}
+        </li>
+        {{ end }}
+    </ul>
+</div>

+ 8 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/taxonomy/authors.html

@@ -0,0 +1,8 @@
+<!-- [html-validate-disable element-required-ancestor] -->
+<dt>{{ i18n "authors" }}</dt>
+<dd>
+{{- range $index, $el := . -}}
+    <span></span>
+    <a href="{{ .RelPermalink }}">{{- .LinkTitle -}}</a>
+{{- end -}}
+</dd>

+ 8 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/taxonomy/categories.html

@@ -0,0 +1,8 @@
+<!-- [html-validate-disable element-required-ancestor] -->
+<dt>{{ i18n "categories" }}</dt>
+<dd>
+{{- range $index, $el := . -}}
+    <span></span>
+    <a href="{{ .RelPermalink }}">{{- .LinkTitle -}}</a>
+{{- end -}}
+</dd>

+ 8 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/layouts/partials/taxonomy/tags.html

@@ -0,0 +1,8 @@
+<!-- [html-validate-disable element-required-ancestor] -->
+<dt>{{ i18n "tags" }}</dt>
+<dd>
+{{- range $index, $el := . -}}
+    <span></span>
+    <a href="{{ .RelPermalink }}">#{{ .LinkTitle }}</a>
+{{- end -}}
+</dd>

BIN
_vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/FiraMono/FiraMono-Medium.eot


BIN
_vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/FiraMono/FiraMono-Medium.otf


BIN
_vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/FiraMono/FiraMono-Medium.ttf


BIN
_vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/FiraMono/FiraMono-Medium.woff


BIN
_vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/FiraMono/FiraMono-Medium.woff2


BIN
_vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/OpenSans/OpenSans-Regular.eot


BIN
_vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/OpenSans/OpenSans-Regular.ttf


BIN
_vendor/github.com/LordMathis/hugo-theme-nightfall/static/fonts/OpenSans/OpenSans-Regular.woff


+ 13 - 0
_vendor/github.com/LordMathis/hugo-theme-nightfall/theme.toml

@@ -0,0 +1,13 @@
+name = "Nightfall"
+license = "MIT"
+licenselink = "https://github.com/LordMathis/hugo-theme-nightfall//blob/master/LICENSE"
+description = "Minimal dark theme for Hugo"
+homepage = "https://github.com/LordMathis/hugo-theme-nightfall/"
+demosite = "https://hugo-theme-nightfall.netlify.app/"
+tags = ["minimal", "dark", "blog", "sass", "multilingual"]
+features = ["blog", "sass", "dark", "multilingual"]
+min_version = "0.114.0"
+
+[author]
+name = "Matúš Námešný"
+homepage = "https://namesny.com"

+ 12 - 0
_vendor/github.com/hugomods/images/hugo.toml

@@ -0,0 +1,12 @@
+[module.hugoVersion]
+min = "0.123.5"
+
+[params.hugomods.images]
+class_name = "img-fluid"
+alignment_center_class_name = "d-block text-center"
+alignment_start_class_name = "float-start me-2"
+alignment_end_class_name = "float-end ms-2"
+figure_class_name = "figure"
+figure_caption_class_name = "figure-caption"
+figure_image_class_name = "figure-img"
+modern_format = "webp"

+ 6 - 0
_vendor/github.com/hugomods/images/layouts/_default/_markup/render-image.html

@@ -0,0 +1,6 @@
+{{- partial "images/image" (dict
+  "Filename" .Destination
+  "Alt" .Text
+  "Caption" .Title
+  "Page" .Page)
+-}}

+ 4 - 0
_vendor/github.com/hugomods/images/layouts/partials/images/figure.html

@@ -0,0 +1,4 @@
+<figure class="{{ .figureClass }} {{ .wrapperClass }}">
+  {{ partial "images/picture" (merge .ctx (dict "className" (printf "%s %s" .figureImgClass .className))) }}
+  <figcaption class="{{ .figureCaptionClass }}">{{ .ctx.caption }}</figcaption>
+</figure>

+ 4 - 0
_vendor/github.com/hugomods/images/layouts/partials/images/functions/format.html

@@ -0,0 +1,4 @@
+{{/* Format an image with original size. */}}
+{{/* - Img: the image resource. */}}
+{{/* - Format: the target format. */}}
+{{- return .Img.Resize (printf "%dx%d %s" .Img.Width .Img.Height .Format) -}}

+ 2 - 0
_vendor/github.com/hugomods/images/layouts/partials/images/functions/page-featured-image-resource.html

@@ -0,0 +1,2 @@
+{{- $images := partialCached "images/functions/page-image-resources" . . }}
+{{- return $images.GetMatch "feature*" -}}

+ 1 - 0
_vendor/github.com/hugomods/images/layouts/partials/images/functions/page-image-resources.html

@@ -0,0 +1 @@
+{{- return .Resources.ByType "image" -}}

+ 17 - 0
_vendor/github.com/hugomods/images/layouts/partials/images/functions/page-thumbnail.html

@@ -0,0 +1,17 @@
+{{- $page := .Page }}
+{{- $images := partial "_funcs/get-page-images" $page }}
+{{- $html := "" }}
+{{- with $images }}
+  {{- $image := index . 0 }}
+  {{- $filename := $image.RelPermalink }}
+  {{- if $image.Image }}
+    {{- $filename = $image.Image.Name }}
+  {{- end }}
+  {{- $html = partial "images/image" (dict
+    "Filename" $filename
+    "Page" $page
+    "Style" $.Style
+    "ClassName" $.ClassName)
+  }}
+{{- end }}
+{{- return $html }}

+ 18 - 0
_vendor/github.com/hugomods/images/layouts/partials/images/functions/params.html

@@ -0,0 +1,18 @@
+{{- $default := dict
+  "class_name" "img-fluid"
+  "alignment_center_class_name" "d-block text-center"
+  "alignment_start_class_name" "float-start me-2"
+  "alignment_end_class_name" "float-end ms-2"
+  "figure_class_name" "figure"
+  "figure_caption_class_name" "figure-caption"
+  "figure_image_class_name" "figure-img"
+  "modern_format" "webp"
+}}
+{{- $params := default dict site.Params.hugomods.images }}
+{{- with site.Params.images }}
+  {{- if reflect.IsMap . }}
+    {{- warnf "[images] please rename the images site parameter to hugomods.images, since it's conflict with some internal templates, see https://github.com/hugomods/images/issues/26." }}
+    {{- $params = . }}
+  {{- end }}
+{{- end }}
+{{- return merge $default $params }}

+ 250 - 0
_vendor/github.com/hugomods/images/layouts/partials/images/image.html

@@ -0,0 +1,250 @@
+{{/* The image partial generates accept the following parameters: */}}
+{{/* - Filename    : the filename or url of image, required. */}}
+{{/* - Alt         : the alternative text of image, optional. */}}
+{{/* - Caption     : the caption text of image, optional. */}}
+{{/* - Page        : the page for finding image resources, optional. */}}
+{{/* - ClassName   : the class name of the img tag, optional. */}}
+{{/* - Original    : whether to describe the original image info via data-* attributes, default to false. */}}
+{{/* - LazyLoading : whether enable lazy loading, default true. */}}
+{{/* - Style       : additional inline style for <img> tag. */}}
+{{/* - Height      : the natural height of image, typically used for external image. */}}
+{{/* - Width       : the natural width of image, typically used for external image. */}}
+{{/* - Alignment   : the alignment of image. */}}
+{{- $formats := slice "bmp" "jpeg" "jpg" "png" "tif" "tiff" "webp" }}
+{{- $modernFormat := "webp" }}
+{{- $siteParams := partialCached "images/functions/params" . }}
+{{- if isset $siteParams "modern_format" }}
+  {{- $modernFormat = $siteParams.modern_format }}
+{{- end }}
+{{- $lazyLoading := default true .LazyLoading }}
+{{/* Parse the image filename. */}}
+{{- $filename := .Filename }}
+{{- $page := default page .Page }}
+{{- $url := urls.Parse $filename }}
+{{- $params := $url.Query }}
+{{- $ext := path.Ext $url.Path }}
+{{/* Initialize image properties. */}}
+{{- $src := "" }}
+{{- $style := default slice .Style }}
+{{- $original := default false .Original }}
+{{- $originalSrc := "" }}
+{{- $alt := default "" .Alt }}
+{{- $caption := default "" .Caption }}
+{{- $className := default (default "img-fluid" $siteParams.class_name) .ClassName }}
+{{- $height := default (default "" .Height) ($params.Get "height" | strings.TrimSuffix "px") }}
+{{- $originalHeight := 0 }}
+{{- $naturalHeight := default $height ($params.Get "naturalHeight" | strings.TrimSuffix "px") }}
+{{- $width := default (default "" .Width) ($params.Get "width" | strings.TrimSuffix "px") }}
+{{- $originalWidth := 0 }}
+{{- $naturalWidth := default $width ($params.Get "naturalWidth" | strings.TrimSuffix "px") }}
+{{- $quality := $params.Get "quality" }}
+{{- $wrapperClass := "" }}
+{{- $sources := slice }}
+{{/* Image alignment. */}}
+{{- $alignment := default .Alignment $url.Fragment }}
+{{- if eq $alignment "center" }}
+  {{- $wrapperClass = default "d-block text-center" $siteParams.alignment_center_class_name }}
+{{- else if eq $alignment "float-start" }}
+  {{- $wrapperClass = default "float-start me-2" $siteParams.alignment_start_class_name }}
+{{- else if eq $alignment "float-end" }}
+  {{- $wrapperClass = default "float-end ms-2" $siteParams.alignment_end_class_name }}
+{{- end }}
+{{/* Check if the image is external. */}}
+{{- if not $url.Scheme }}
+  {{/* Process internal image. */}}
+  {{- $path := $url.Path }}
+  {{- $res := false }}
+  {{/* Filename begin with leading slash will be treated as global image resource. */}}
+  {{- if hasPrefix $path "/" }}
+    {{- $path = strings.TrimPrefix "/" $path }}
+    {{- $res = resources.GetMatch $path }}
+  {{- else }}
+    {{- $res = $page.Resources.GetMatch $path }}
+  {{- end }}
+  {{- $mediaMainType := "" }}
+  {{- $mediaSubType := "" }}
+  {{- with $res }}
+    {{- $mediaMainType = .MediaType.MainType }}
+    {{- $mediaSubType = .MediaType.SubType }}
+  {{- end }}
+  {{/* Check if the image resource is valid. */}}
+  {{- if and (ne $mediaMainType "") (ne $mediaMainType "image") }}
+    {{- errorf "the image is invalid: %s" $filename }}
+  {{- end }}
+  {{- $unsupportedFormats := slice "avif" "svg" }}
+  {{- if and (ne $mediaSubType "") (in $unsupportedFormats $mediaSubType) }}
+    {{/* Leave it as it is for unsupported formats. */}}
+    {{- $src = ($res | fingerprint "md5").RelPermalink }}
+  {{- end }}
+  {{- if and (eq $mediaMainType "image") (not (in $unsupportedFormats $mediaSubType)) }}
+    {{- $originalSrc = ($res | fingerprint "md5").RelPermalink }}
+    {{- $originalWidth = $res.Width }}
+    {{- $originalHeight = $res.Height }}
+    {{/* Resize the image. */}}
+    {{- $resizeSpec := slice }}
+    {{- if and $width $height }}
+      {{- $resizeSpec = $resizeSpec | append (printf "%sx%s" (strings.TrimSuffix "px" $width) (strings.TrimSuffix "px" $height)) }}
+    {{- else if $width }}
+      {{- $resizeSpec = $resizeSpec | append (printf "%sx" (strings.TrimSuffix "px" $width)) }}
+    {{- else if $height }}
+      {{- $resizeSpec = $resizeSpec | append (printf "x%s" (strings.TrimSuffix "px" $height)) }}
+    {{- end }}
+    {{- with $quality }}
+      {{- $resizeSpec = $resizeSpec | append (printf "q%s" .) }}
+    {{- end }}
+    {{- with $resizeSpec }}
+      {{- $res = $res.Resize (delimit . " ") }}
+    {{- end }}
+    {{/* Cropping image. */}}
+    {{- with $params.Get "crop" }}
+      {{- $opts := delimit (split . ",") " " | string }}
+      {{- $res = $res.Crop $opts }}
+    {{- end }}
+    {{/* Filling image. */}}
+    {{- with $params.Get "fill" }}
+      {{- $opts := delimit (split . ",") " " | string }}
+      {{- $res = $res.Fill $opts }}
+    {{- end }}
+    {{/* Fitting image. */}}
+    {{- with $params.Get "fit" }}
+      {{- $res = $res.Fit . }}
+    {{- end }}
+    {{/* Filtering image. */}}
+    {{- $filters := slice }}
+    {{- with $params.Get "brightness" }}
+      {{- $filters = $filters | append (images.Brightness .) }}
+    {{- end }}
+    {{- with $params.Get "gaussianBlur" }}
+      {{- $filters = $filters | append (images.GaussianBlur .) }}
+    {{- end }}
+    {{- with $params.Get "pixelate" }}
+      {{- $filters = $filters | append (images.Pixelate .) }}
+    {{- end }}
+    {{- with $params.Get "contrast" }}
+      {{- $filters = $filters | append (images.Contrast .) }}
+    {{- end }}
+    {{- with $params.Get "gamma" }}
+      {{- $filters = $filters | append (images.Gamma .) }}
+    {{- end }}
+    {{- with $params.Has "grayscale" }}
+      {{- $filters = $filters | append images.Grayscale }}
+    {{- end }}
+    {{- with $params.Get "hue" }}
+      {{- $filters = $filters | append (images.Hue .) }}
+    {{- end }}
+    {{- with $params.Has "invert" }}
+      {{ $filters = $filters | append images.Invert }}
+    {{- end }}
+    {{- with $params.Get "opacity" }}
+      {{- $filters = $filters | append (images.Opacity .) }}
+    {{- end }}
+    {{- with $params.Get "saturation" }}
+      {{- $filters = $filters | append (images.Saturation .) }}
+    {{- end }}
+    {{- with $params.Get "sepia" }}
+      {{- $filters = $filters | append (images.Sepia .) }}
+    {{- end }}
+    {{- with $params.Get "sigmoid" }}
+      {{- $balance := split . "," -}}
+      {{- $filters = $filters | append (images.Sigmoid (index $balance 0) (index $balance 1)) }}
+    {{- end }}
+    {{- with $params.Get "unsharpMask" }}
+      {{- $balance := split . "," -}}
+      {{- $filters = $filters | append (images.UnsharpMask (index $balance 0) (index $balance 1) (index $balance 2)) }}
+    {{- end }}
+    {{- with $params.Get "colorBalance" }}
+      {{- $balance := split . "," -}}
+      {{- $filters = $filters | append (images.ColorBalance (index $balance 0) (index $balance 1) (index $balance 2)) }}
+    {{- end }}
+    {{- with $params.Get "colorize" }}
+      {{- $balance := split . "," -}}
+      {{- $filters = $filters | append (images.Colorize (index $balance 0) (index $balance 1) (index $balance 2)) }}
+    {{- end }}
+    {{- with $filters }}
+      {{- $res = $res | images.Filter $filters }}
+    {{- end }}
+    {{/* Modern format. */}}
+    {{- if and $modernFormat (ne $modernFormat $res.MediaType.SubType) (in $formats $res.MediaType.SubType) }}
+      {{- $modernImg := partial "images/functions/format" (dict "Img" $res "Format" $modernFormat) }}
+      {{- $sources = $sources | append (dict "srcset" $modernImg.RelPermalink "type" $modernImg.MediaType) }}
+    {{- end }}
+    {{/* Reset image properties. */}}
+    {{- $src = ($res | fingerprint "md5").RelPermalink }}
+    {{- $height = $res.Height }}
+    {{- $naturalHeight = $res.Height }}
+    {{- $width = $res.Width }}
+    {{- $naturalWidth = $res.Width }}
+  {{- else }}
+    {{- $filepath := path.Join "static" $url.Path }}
+    {{- if fileExists $filepath }}
+      {{/* Process static image. */}}
+      {{- $src = absURL $url.Path }}
+      {{- if not (in (slice ".avif" ".jxl") $ext) }}
+        {{- with imageConfig $filepath }}
+          {{- $naturalHeight = .Height }}
+          {{- $naturalWidth = .Width }}
+        {{- end }}
+      {{- end }}
+      {{/* hash by the date. */}}
+      {{- $hash := "" }}
+      {{- with os.Stat $filepath }}
+        {{- $hash = .ModTime.Format "20060102150405" | md5 }}
+      {{- end }}
+      {{- with $hash }}
+        {{- $fragment := "" }}
+        {{- if $url.Fragment }}
+          {{- $fragment = printf "#%s" $url.Fragment }}
+        {{- end }}
+        {{- if $url.Query }}
+          {{- $src = printf "%s?%s&v=%s%s" $src $url.RawQuery $hash $fragment }}
+        {{- else }}
+          {{- $src = printf "%s?v=%s%s" $src $hash $fragment }}
+        {{- end }}
+      {{- end }}
+    {{- else if not $res }}
+      {{- warnf "[github.com/hugomods/images] image not found: %s" $filename }}
+    {{- end }}
+  {{- end }}
+{{- else }}
+  {{/* Process external image. */}}
+  {{- $src = $filename }}
+{{- end }}
+{{- if $src }}
+  {{/* Inline style. */}}
+  {{- if and $height (ne $height $naturalHeight) }}
+    {{- $style = $style | append (printf "height: %spx" $height) }}
+  {{- end }}
+  {{- if and $width (ne $width $naturalWidth) }}
+    {{- $style = $style | append (printf "width: %spx" $width) }}
+  {{- end }}
+  {{- $ctx := dict
+    "sources" $sources
+    "className" $className
+    "src" $src
+    "alt" $alt
+    "caption" $caption
+    "lazyLoading" $lazyLoading
+    "naturalHeight" $naturalHeight
+    "naturalWidth" $naturalWidth
+    "style" $style
+    "original" $original
+    "originalSrc" $originalSrc
+    "originalWidth" $originalWidth
+    "originalHeight" $originalHeight
+  }}
+  {{- if $caption }}
+    {{- $figureClass := default "figure" $siteParams.figure_class_name }}
+    {{- $figureCaptionClass := default "figure-caption" $siteParams.figure_caption_class_name }}
+    {{- $figureImgClass := default "figure-img" $siteParams.figure_image_class_name }}
+    {{- partial "images/figure" (dict
+      "figureClass" $figureClass
+      "wrapperClass" $wrapperClass
+      "figureImgClass" $figureImgClass
+      "className" $className
+      "figureCaptionClass" $figureCaptionClass
+      "ctx" $ctx
+    ) }}
+  {{- else }}
+    {{- partial "images/picture" (merge $ctx (dict "wrapperClass" $wrapperClass)) }}
+  {{- end }}
+{{- end -}}

+ 37 - 0
_vendor/github.com/hugomods/images/layouts/partials/images/picture.html

@@ -0,0 +1,37 @@
+<picture{{ with .wrapperClass }} class="{{ . }}"{{ end }}>
+  {{- range .sources }}
+    <source srcset="{{ .srcset }}" type="{{ .type }}" />
+  {{- end }}
+  {{- $attrs := slice
+    (printf `class="%s"` .className)
+    (printf `src="%s"` .src)
+    (printf `alt="%s"` .alt)
+  }}
+  {{- with .caption }}
+    {{- $attrs = $attrs | append (printf `title="%s"` .) }}
+  {{- end }}
+  {{- if .lazyLoading }}
+    {{- $attrs = $attrs | append `loading="lazy"` }}
+  {{- end }}
+  {{- with .naturalHeight }}
+    {{- $attrs = $attrs | append (printf `height="%s"` (string .)) }}
+  {{- end }}
+  {{- with .naturalWidth }}
+    {{- $attrs = $attrs | append (printf `width="%s"` (string .)) }}
+  {{- end }}
+  {{- with .style }}
+    {{- $attrs = $attrs | append (printf `style="%s"` (delimit . `; `)) }}
+  {{- end }}
+  {{- if .original }}
+    {{- with .originalSrc }}
+      {{- $attrs = $attrs | append (printf `data-src="%s"` .) }}
+    {{- end }}
+    {{- with .originalWidth }}
+      {{- $attrs = $attrs | append (printf `data-width="%s"` (string .)) }}
+    {{- end }}
+    {{- with .originalHeight }}
+      {{- $attrs = $attrs | append (printf `data-height="%s"` (string .)) }}
+    {{- end }}
+  {{- end }}
+  <img {{ delimit $attrs " " | safeHTMLAttr }} />
+</picture>

+ 17 - 0
_vendor/github.com/hugomods/images/package.json

@@ -0,0 +1,17 @@
+{
+  "name": "Hugo Images Module",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/hugomods/images.git"
+  },
+  "author": "Razon Yang <razonyang@gmail.com>",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/hugomods/images/issues"
+  },
+  "homepage": "https://github.com/hugomods/images",
+  "devDependencies": {
+    "prettier": "^2.7.1",
+    "prettier-plugin-go-template": "^0.0.13"
+  }
+}

+ 2 - 0
_vendor/modules.txt

@@ -0,0 +1,2 @@
+# github.com/hugomods/images v0.11.2
+# github.com/LordMathis/hugo-theme-nightfall v0.7.1

+ 15 - 3
hugo.toml

@@ -16,9 +16,11 @@ description = 'Mobile development blog focused on Android, iOS, and cross-platfo
     lineNos = false
     style = 'dracula'
 
-[services]
-    [services.googleAnalytics]
-        id = 'G-YP8WK3KZF1'
+[outputs]
+  home = ["HTML", "RSS"]
+  section = ["HTML", "RSS"]
+  taxonomy = ["HTML"]
+  term = ["HTML", "RSS"]
 
 [module]
     [[module.imports]]
@@ -52,6 +54,9 @@ published = true
 footerHtml = 'CC 2025, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a>'
 enableOpenGraph = true
 enableTwitterCards = true
+umami = true
+umamiScript = "https://umami.codeskraps.com/script.js"
+umamiWebsiteId = "a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"
 
     [params.author]
         name = "codeskraps"
@@ -96,3 +101,10 @@ name = "email"
 url = "mailto:me@codeskraps.com"
 aria = "Email me"
 
+[[params.social]]
+key = 5
+name = "rss"
+url = "/index.xml"
+target = "_blank"
+aria = "RSS Feed"
+

+ 7 - 0
layouts/partials/custom-head.html

@@ -0,0 +1,7 @@
+{{ if and .Site.Params.umami .Site.Params.umamiScript .Site.Params.umamiWebsiteId -}}
+<script defer src="{{ .Site.Params.umamiScript }}" data-website-id="{{ .Site.Params.umamiWebsiteId }}"></script>
+{{- end }}
+
+<!-- Code copy functionality -->
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 

+ 1 - 2
layouts/partials/header.html

@@ -18,6 +18,5 @@
                 {{ end }}
             </ul>
         </nav>
-    </divi>
-    {{ template "_internal/google_analytics.html" . }}
+    </div>
 </header>

+ 5 - 16
public/404.html

@@ -20,8 +20,12 @@
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -57,22 +61,7 @@
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/about/index.html

@@ -20,8 +20,12 @@ About Me | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -57,22 +61,7 @@ About Me | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 9 - 16
public/index.html

@@ -22,8 +22,12 @@
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 
@@ -108,6 +97,10 @@
                 email
             </a>
             
+            <a href="/index.xml" target="_blank" aria-label="RSS Feed">
+                rss
+            </a>
+            
         </div>
         
     </div>

+ 5 - 16
public/posts/2024/git_ssh_command/index.html

@@ -20,8 +20,12 @@ Configuring SSH Keys for Individual Git Commands | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -57,22 +61,7 @@ Configuring SSH Keys for Individual Git Commands | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/posts/2024/gitignore_not_working/index.html

@@ -20,8 +20,12 @@ When .gitignore Doesnt Seem to Work: A Quick Fix | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -57,22 +61,7 @@ When .gitignore Doesnt Seem to Work: A Quick Fix | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/posts/2024/mvi_architecture/index.html

@@ -20,8 +20,12 @@ Simplifying MVI Architecture | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -57,22 +61,7 @@ Simplifying MVI Architecture | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/posts/2024/react_vs_kmp/index.html

@@ -20,8 +20,12 @@ React Native vs Kotlin Multiplatform | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -57,22 +61,7 @@ React Native vs Kotlin Multiplatform | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/posts/2025/evolution_software_development_ai/index.html

@@ -20,8 +20,12 @@ The Evolution of Software Development in the AI Era | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -57,22 +61,7 @@ The Evolution of Software Development in the AI Era | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/posts/2025/move_home_folder/index.html

@@ -20,8 +20,12 @@ Move /home Folder | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -57,22 +61,7 @@ Move /home Folder | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 11 - 22
public/posts/2025/public_pool_android/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en-us">
 
-<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=58679&amp;path=livereload" data-no-instant defer></script>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=62876&amp;path=livereload" data-no-instant defer></script>
     <title>
 Building PublicPoolAndroid in One Day with Cursor | codeskraps
 </title>
@@ -13,15 +13,19 @@ Building PublicPoolAndroid in One Day with Cursor | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 
 
-<link rel="canonical" href="http://localhost:58679/posts/2025/public_pool_android/" >
+<link rel="canonical" href="http://localhost:62876/posts/2025/public_pool_android/" >
 
 
 
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -31,7 +35,7 @@ Building PublicPoolAndroid in One Day with Cursor | codeskraps
         <header class="headerWrapper">
     <div class="header">
         <div>
-            <a class="terminal" href="http://localhost:58679/">
+            <a class="terminal" href="http://localhost:62876/">
                 <span>me@codeskraps.com ~ $</span>
             </a>
         </div>
@@ -41,38 +45,23 @@ Building PublicPoolAndroid in One Day with Cursor | codeskraps
             <ul>
                 
                 <li>
-                    <a href="http://localhost:58679/posts/" title="" >
+                    <a href="http://localhost:62876/posts/" title="" >
                         ~/posts</a>
                 </li>
                 
                 <li>
-                    <a href="http://localhost:58679/projects/" title="" >
+                    <a href="http://localhost:62876/projects/" title="" >
                         ~/projects</a>
                 </li>
                 
                 <li>
-                    <a href="http://localhost:58679/about/" title="" >
+                    <a href="http://localhost:62876/about/" title="" >
                         ~/about</a>
                 </li>
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/posts/index.html

@@ -22,8 +22,12 @@ Posts | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Posts | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/projects/index.html

@@ -20,8 +20,12 @@ Projects | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -57,22 +61,7 @@ Projects | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/tags/ai/index.html

@@ -22,8 +22,12 @@ Ai | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Ai | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/tags/android/index.html

@@ -22,8 +22,12 @@ Android | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Android | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/tags/architecture/index.html

@@ -22,8 +22,12 @@ Architecture | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Architecture | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 14 - 25
public/tags/cryptocurrency/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en-us">
 
-<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=58776&amp;path=livereload" data-no-instant defer></script>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=62876&amp;path=livereload" data-no-instant defer></script>
     <title>
 Cryptocurrency | codeskraps
 </title>
@@ -13,17 +13,21 @@ Cryptocurrency | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 
 
-<link rel="canonical" href="http://localhost:58776/tags/cryptocurrency/" >
-  <link href="http://localhost:58776/tags/cryptocurrency/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="http://localhost:58776/tags/cryptocurrency/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:62876/tags/cryptocurrency/" >
+  <link href="http://localhost:62876/tags/cryptocurrency/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:62876/tags/cryptocurrency/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -33,7 +37,7 @@ Cryptocurrency | codeskraps
         <header class="headerWrapper">
     <div class="header">
         <div>
-            <a class="terminal" href="http://localhost:58776/">
+            <a class="terminal" href="http://localhost:62876/">
                 <span>me@codeskraps.com ~ $</span>
             </a>
         </div>
@@ -43,38 +47,23 @@ Cryptocurrency | codeskraps
             <ul>
                 
                 <li>
-                    <a href="http://localhost:58776/posts/" title="" >
+                    <a href="http://localhost:62876/posts/" title="" >
                         ~/posts</a>
                 </li>
                 
                 <li>
-                    <a href="http://localhost:58776/projects/" title="" >
+                    <a href="http://localhost:62876/projects/" title="" >
                         ~/projects</a>
                 </li>
                 
                 <li>
-                    <a href="http://localhost:58776/about/" title="" >
+                    <a href="http://localhost:62876/about/" title="" >
                         ~/about</a>
                 </li>
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 
@@ -93,7 +82,7 @@ Cryptocurrency | codeskraps
 
     <div>
         
-        <a class="postListLink" href="http://localhost:58776/posts/2025/public_pool_android/">
+        <a class="postListLink" href="http://localhost:62876/posts/2025/public_pool_android/">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                     <span class="postTitle">Building PublicPoolAndroid in One Day with Cursor</span>

+ 5 - 5
public/tags/cryptocurrency/index.xml

@@ -2,20 +2,20 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
     <title>Cryptocurrency on codeskraps</title>
-    <link>http://localhost:58776/tags/cryptocurrency/</link>
+    <link>http://localhost:62876/tags/cryptocurrency/</link>
     <description>Recent content in Cryptocurrency on codeskraps</description>
     <generator>Hugo</generator>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Fri, 04 Apr 2025 10:00:00 +0100</lastBuildDate>
-    <atom:link href="http://localhost:58776/tags/cryptocurrency/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:62876/tags/cryptocurrency/index.xml" rel="self" type="application/rss+xml" />
     <item>
       <title>Building PublicPoolAndroid in One Day with Cursor</title>
-      <link>http://localhost:58776/posts/2025/public_pool_android/</link>
+      <link>http://localhost:62876/posts/2025/public_pool_android/</link>
       <pubDate>Fri, 04 Apr 2025 10:00:00 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>http://localhost:58776/posts/2025/public_pool_android/</guid>
-      <description>&lt;p&gt;Today I want to share how I built a complete cryptocurrency mining monitoring app in just one day, from initial concept to Google Play Store submission, using Cursor as my IDE.&lt;/p&gt;&#xA;&lt;figure class=&#34;responsive-image&#34;&gt;&lt;img src=&#34;http://localhost:58776/posts/2025/public_pool_android/feature_graphic.png&#34;&#xA;    alt=&#34;Public Pool Android App&#34; width=&#34;800&#34; height=&#34;400&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;style&gt;&#xA;.responsive-image {&#xA;    max-width: 800px;&#xA;    width: 100%;&#xA;    height: auto;&#xA;    display: block;&#xA;    margin: 0 auto;&#xA;}&#xA;&lt;/style&gt;</description>
+      <guid>http://localhost:62876/posts/2025/public_pool_android/</guid>
+      <description>&lt;p&gt;Today I want to share how I built a complete cryptocurrency mining monitoring app in just one day, from initial concept to Google Play Store submission, using Cursor as my IDE.&lt;/p&gt;&#xA;&lt;figure class=&#34;responsive-image&#34;&gt;&lt;img src=&#34;http://localhost:62876/posts/2025/public_pool_android/feature_graphic.png&#34;&#xA;    alt=&#34;Public Pool Android App&#34; width=&#34;800&#34; height=&#34;400&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;style&gt;&#xA;.responsive-image {&#xA;    max-width: 800px;&#xA;    width: 100%;&#xA;    height: auto;&#xA;    display: block;&#xA;    margin: 0 auto;&#xA;}&#xA;&lt;/style&gt;</description>
     </item>
   </channel>
 </rss>

+ 14 - 25
public/tags/cursor/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en-us">
 
-<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=58776&amp;path=livereload" data-no-instant defer></script>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=62876&amp;path=livereload" data-no-instant defer></script>
     <title>
 Cursor | codeskraps
 </title>
@@ -13,17 +13,21 @@ Cursor | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 
 
-<link rel="canonical" href="http://localhost:58776/tags/cursor/" >
-  <link href="http://localhost:58776/tags/cursor/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="http://localhost:58776/tags/cursor/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:62876/tags/cursor/" >
+  <link href="http://localhost:62876/tags/cursor/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:62876/tags/cursor/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -33,7 +37,7 @@ Cursor | codeskraps
         <header class="headerWrapper">
     <div class="header">
         <div>
-            <a class="terminal" href="http://localhost:58776/">
+            <a class="terminal" href="http://localhost:62876/">
                 <span>me@codeskraps.com ~ $</span>
             </a>
         </div>
@@ -43,38 +47,23 @@ Cursor | codeskraps
             <ul>
                 
                 <li>
-                    <a href="http://localhost:58776/posts/" title="" >
+                    <a href="http://localhost:62876/posts/" title="" >
                         ~/posts</a>
                 </li>
                 
                 <li>
-                    <a href="http://localhost:58776/projects/" title="" >
+                    <a href="http://localhost:62876/projects/" title="" >
                         ~/projects</a>
                 </li>
                 
                 <li>
-                    <a href="http://localhost:58776/about/" title="" >
+                    <a href="http://localhost:62876/about/" title="" >
                         ~/about</a>
                 </li>
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 
@@ -93,7 +82,7 @@ Cursor | codeskraps
 
     <div>
         
-        <a class="postListLink" href="http://localhost:58776/posts/2025/public_pool_android/">
+        <a class="postListLink" href="http://localhost:62876/posts/2025/public_pool_android/">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                     <span class="postTitle">Building PublicPoolAndroid in One Day with Cursor</span>

+ 5 - 5
public/tags/cursor/index.xml

@@ -2,20 +2,20 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
     <title>Cursor on codeskraps</title>
-    <link>http://localhost:58776/tags/cursor/</link>
+    <link>http://localhost:62876/tags/cursor/</link>
     <description>Recent content in Cursor on codeskraps</description>
     <generator>Hugo</generator>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Fri, 04 Apr 2025 10:00:00 +0100</lastBuildDate>
-    <atom:link href="http://localhost:58776/tags/cursor/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:62876/tags/cursor/index.xml" rel="self" type="application/rss+xml" />
     <item>
       <title>Building PublicPoolAndroid in One Day with Cursor</title>
-      <link>http://localhost:58776/posts/2025/public_pool_android/</link>
+      <link>http://localhost:62876/posts/2025/public_pool_android/</link>
       <pubDate>Fri, 04 Apr 2025 10:00:00 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>http://localhost:58776/posts/2025/public_pool_android/</guid>
-      <description>&lt;p&gt;Today I want to share how I built a complete cryptocurrency mining monitoring app in just one day, from initial concept to Google Play Store submission, using Cursor as my IDE.&lt;/p&gt;&#xA;&lt;figure class=&#34;responsive-image&#34;&gt;&lt;img src=&#34;http://localhost:58776/posts/2025/public_pool_android/feature_graphic.png&#34;&#xA;    alt=&#34;Public Pool Android App&#34; width=&#34;800&#34; height=&#34;400&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;style&gt;&#xA;.responsive-image {&#xA;    max-width: 800px;&#xA;    width: 100%;&#xA;    height: auto;&#xA;    display: block;&#xA;    margin: 0 auto;&#xA;}&#xA;&lt;/style&gt;</description>
+      <guid>http://localhost:62876/posts/2025/public_pool_android/</guid>
+      <description>&lt;p&gt;Today I want to share how I built a complete cryptocurrency mining monitoring app in just one day, from initial concept to Google Play Store submission, using Cursor as my IDE.&lt;/p&gt;&#xA;&lt;figure class=&#34;responsive-image&#34;&gt;&lt;img src=&#34;http://localhost:62876/posts/2025/public_pool_android/feature_graphic.png&#34;&#xA;    alt=&#34;Public Pool Android App&#34; width=&#34;800&#34; height=&#34;400&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;style&gt;&#xA;.responsive-image {&#xA;    max-width: 800px;&#xA;    width: 100%;&#xA;    height: auto;&#xA;    display: block;&#xA;    margin: 0 auto;&#xA;}&#xA;&lt;/style&gt;</description>
     </item>
   </channel>
 </rss>

+ 14 - 25
public/tags/development/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en-us">
 
-<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=58776&amp;path=livereload" data-no-instant defer></script>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=62876&amp;path=livereload" data-no-instant defer></script>
     <title>
 Development | codeskraps
 </title>
@@ -13,17 +13,21 @@ Development | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 
 
-<link rel="canonical" href="http://localhost:58776/tags/development/" >
-  <link href="http://localhost:58776/tags/development/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="http://localhost:58776/tags/development/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:62876/tags/development/" >
+  <link href="http://localhost:62876/tags/development/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:62876/tags/development/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -33,7 +37,7 @@ Development | codeskraps
         <header class="headerWrapper">
     <div class="header">
         <div>
-            <a class="terminal" href="http://localhost:58776/">
+            <a class="terminal" href="http://localhost:62876/">
                 <span>me@codeskraps.com ~ $</span>
             </a>
         </div>
@@ -43,38 +47,23 @@ Development | codeskraps
             <ul>
                 
                 <li>
-                    <a href="http://localhost:58776/posts/" title="" >
+                    <a href="http://localhost:62876/posts/" title="" >
                         ~/posts</a>
                 </li>
                 
                 <li>
-                    <a href="http://localhost:58776/projects/" title="" >
+                    <a href="http://localhost:62876/projects/" title="" >
                         ~/projects</a>
                 </li>
                 
                 <li>
-                    <a href="http://localhost:58776/about/" title="" >
+                    <a href="http://localhost:62876/about/" title="" >
                         ~/about</a>
                 </li>
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 
@@ -93,7 +82,7 @@ Development | codeskraps
 
     <div>
         
-        <a class="postListLink" href="http://localhost:58776/posts/2025/public_pool_android/">
+        <a class="postListLink" href="http://localhost:62876/posts/2025/public_pool_android/">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                     <span class="postTitle">Building PublicPoolAndroid in One Day with Cursor</span>

+ 5 - 5
public/tags/development/index.xml

@@ -2,20 +2,20 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
     <title>Development on codeskraps</title>
-    <link>http://localhost:58776/tags/development/</link>
+    <link>http://localhost:62876/tags/development/</link>
     <description>Recent content in Development on codeskraps</description>
     <generator>Hugo</generator>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Fri, 04 Apr 2025 10:00:00 +0100</lastBuildDate>
-    <atom:link href="http://localhost:58776/tags/development/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:62876/tags/development/index.xml" rel="self" type="application/rss+xml" />
     <item>
       <title>Building PublicPoolAndroid in One Day with Cursor</title>
-      <link>http://localhost:58776/posts/2025/public_pool_android/</link>
+      <link>http://localhost:62876/posts/2025/public_pool_android/</link>
       <pubDate>Fri, 04 Apr 2025 10:00:00 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>http://localhost:58776/posts/2025/public_pool_android/</guid>
-      <description>&lt;p&gt;Today I want to share how I built a complete cryptocurrency mining monitoring app in just one day, from initial concept to Google Play Store submission, using Cursor as my IDE.&lt;/p&gt;&#xA;&lt;figure class=&#34;responsive-image&#34;&gt;&lt;img src=&#34;http://localhost:58776/posts/2025/public_pool_android/feature_graphic.png&#34;&#xA;    alt=&#34;Public Pool Android App&#34; width=&#34;800&#34; height=&#34;400&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;style&gt;&#xA;.responsive-image {&#xA;    max-width: 800px;&#xA;    width: 100%;&#xA;    height: auto;&#xA;    display: block;&#xA;    margin: 0 auto;&#xA;}&#xA;&lt;/style&gt;</description>
+      <guid>http://localhost:62876/posts/2025/public_pool_android/</guid>
+      <description>&lt;p&gt;Today I want to share how I built a complete cryptocurrency mining monitoring app in just one day, from initial concept to Google Play Store submission, using Cursor as my IDE.&lt;/p&gt;&#xA;&lt;figure class=&#34;responsive-image&#34;&gt;&lt;img src=&#34;http://localhost:62876/posts/2025/public_pool_android/feature_graphic.png&#34;&#xA;    alt=&#34;Public Pool Android App&#34; width=&#34;800&#34; height=&#34;400&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;style&gt;&#xA;.responsive-image {&#xA;    max-width: 800px;&#xA;    width: 100%;&#xA;    height: auto;&#xA;    display: block;&#xA;    margin: 0 auto;&#xA;}&#xA;&lt;/style&gt;</description>
     </item>
   </channel>
 </rss>

+ 5 - 16
public/tags/future/index.html

@@ -22,8 +22,12 @@ Future | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Future | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/tags/git/index.html

@@ -22,8 +22,12 @@ Git | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Git | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 18
public/tags/index.html

@@ -14,16 +14,18 @@ Tags | codeskraps
 
 
 <link rel="canonical" href="https://codeskraps.com/tags/" >
-  <link href="https://codeskraps.com/tags/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +61,7 @@ Tags | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/tags/ios/index.html

@@ -22,8 +22,12 @@ Ios | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Ios | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/tags/kmp/index.html

@@ -22,8 +22,12 @@ Kmp | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Kmp | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/tags/kotlin/index.html

@@ -22,8 +22,12 @@ Kotlin | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Kotlin | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/tags/linux/index.html

@@ -22,8 +22,12 @@ Linux | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Linux | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 14 - 25
public/tags/mining/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en-us">
 
-<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=58776&amp;path=livereload" data-no-instant defer></script>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=62876&amp;path=livereload" data-no-instant defer></script>
     <title>
 Mining | codeskraps
 </title>
@@ -13,17 +13,21 @@ Mining | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 
 
-<link rel="canonical" href="http://localhost:58776/tags/mining/" >
-  <link href="http://localhost:58776/tags/mining/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="http://localhost:58776/tags/mining/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:62876/tags/mining/" >
+  <link href="http://localhost:62876/tags/mining/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:62876/tags/mining/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -33,7 +37,7 @@ Mining | codeskraps
         <header class="headerWrapper">
     <div class="header">
         <div>
-            <a class="terminal" href="http://localhost:58776/">
+            <a class="terminal" href="http://localhost:62876/">
                 <span>me@codeskraps.com ~ $</span>
             </a>
         </div>
@@ -43,38 +47,23 @@ Mining | codeskraps
             <ul>
                 
                 <li>
-                    <a href="http://localhost:58776/posts/" title="" >
+                    <a href="http://localhost:62876/posts/" title="" >
                         ~/posts</a>
                 </li>
                 
                 <li>
-                    <a href="http://localhost:58776/projects/" title="" >
+                    <a href="http://localhost:62876/projects/" title="" >
                         ~/projects</a>
                 </li>
                 
                 <li>
-                    <a href="http://localhost:58776/about/" title="" >
+                    <a href="http://localhost:62876/about/" title="" >
                         ~/about</a>
                 </li>
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 
@@ -93,7 +82,7 @@ Mining | codeskraps
 
     <div>
         
-        <a class="postListLink" href="http://localhost:58776/posts/2025/public_pool_android/">
+        <a class="postListLink" href="http://localhost:62876/posts/2025/public_pool_android/">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                     <span class="postTitle">Building PublicPoolAndroid in One Day with Cursor</span>

+ 5 - 5
public/tags/mining/index.xml

@@ -2,20 +2,20 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
     <title>Mining on codeskraps</title>
-    <link>http://localhost:58776/tags/mining/</link>
+    <link>http://localhost:62876/tags/mining/</link>
     <description>Recent content in Mining on codeskraps</description>
     <generator>Hugo</generator>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Fri, 04 Apr 2025 10:00:00 +0100</lastBuildDate>
-    <atom:link href="http://localhost:58776/tags/mining/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:62876/tags/mining/index.xml" rel="self" type="application/rss+xml" />
     <item>
       <title>Building PublicPoolAndroid in One Day with Cursor</title>
-      <link>http://localhost:58776/posts/2025/public_pool_android/</link>
+      <link>http://localhost:62876/posts/2025/public_pool_android/</link>
       <pubDate>Fri, 04 Apr 2025 10:00:00 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>http://localhost:58776/posts/2025/public_pool_android/</guid>
-      <description>&lt;p&gt;Today I want to share how I built a complete cryptocurrency mining monitoring app in just one day, from initial concept to Google Play Store submission, using Cursor as my IDE.&lt;/p&gt;&#xA;&lt;figure class=&#34;responsive-image&#34;&gt;&lt;img src=&#34;http://localhost:58776/posts/2025/public_pool_android/feature_graphic.png&#34;&#xA;    alt=&#34;Public Pool Android App&#34; width=&#34;800&#34; height=&#34;400&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;style&gt;&#xA;.responsive-image {&#xA;    max-width: 800px;&#xA;    width: 100%;&#xA;    height: auto;&#xA;    display: block;&#xA;    margin: 0 auto;&#xA;}&#xA;&lt;/style&gt;</description>
+      <guid>http://localhost:62876/posts/2025/public_pool_android/</guid>
+      <description>&lt;p&gt;Today I want to share how I built a complete cryptocurrency mining monitoring app in just one day, from initial concept to Google Play Store submission, using Cursor as my IDE.&lt;/p&gt;&#xA;&lt;figure class=&#34;responsive-image&#34;&gt;&lt;img src=&#34;http://localhost:62876/posts/2025/public_pool_android/feature_graphic.png&#34;&#xA;    alt=&#34;Public Pool Android App&#34; width=&#34;800&#34; height=&#34;400&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;style&gt;&#xA;.responsive-image {&#xA;    max-width: 800px;&#xA;    width: 100%;&#xA;    height: auto;&#xA;    display: block;&#xA;    margin: 0 auto;&#xA;}&#xA;&lt;/style&gt;</description>
     </item>
   </channel>
 </rss>

+ 5 - 16
public/tags/mvi/index.html

@@ -22,8 +22,12 @@ Mvi | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Mvi | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/tags/mvvm/index.html

@@ -22,8 +22,12 @@ Mvvm | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Mvvm | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/tags/react-native/index.html

@@ -22,8 +22,12 @@ React-Native | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ React-Native | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/tags/software-development/index.html

@@ -22,8 +22,12 @@ Software-Development | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Software-Development | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/tags/ssh/index.html

@@ -22,8 +22,12 @@ Ssh | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Ssh | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>
 
 

+ 5 - 16
public/tags/viewmodel/index.html

@@ -22,8 +22,12 @@ Viewmodel | codeskraps
 
 <link href="/css/style.min.ef8e99489b0b85e34523800e588426b1b4c05e27adcb9d7193952cef205afe6d.css" rel="stylesheet">
 
+<script defer src="https://umami.codeskraps.com/script.js" data-website-id="a80a52da-0b7d-4faf-9dfc-ee6ca5a8421f"></script>
 
 
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 
+
 
 </head>
 
@@ -59,22 +63,7 @@ Viewmodel | codeskraps
                 
             </ul>
         </nav>
-    </divi>
-    
-      <script async src="https://www.googletagmanager.com/gtag/js?id=G-YP8WK3KZF1"></script>
-      <script>
-        var doNotTrack = false;
-        if ( false ) {
-          var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
-          var doNotTrack = (dnt == "1" || dnt == "yes");
-        }
-        if (!doNotTrack) {
-          window.dataLayer = window.dataLayer || [];
-          function gtag(){dataLayer.push(arguments);}
-          gtag('js', new Date());
-          gtag('config', 'G-YP8WK3KZF1');
-        }
-      </script>
+    </div>
 </header>