summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyren223 <contact@kyren.codes>2026-10-09 03:40:03 +0300
committerKyren223 <contact@kyren.codes>2026-10-09 03:40:03 +0300
commitd3aa8982bfb70cda8d04130347e2a870aebd2d19 (patch)
treeebc477e34e054ed9d33fc78cef78c1841b51dcb9
parent9b03d2790b8b8db1b5a6755b6130f37e5f7f2455 (diff)
New blog post and a bunch of unrelated website changes
-rw-r--r--blogs/2026-10-09-simple-made-easy.md70
-rw-r--r--public/my_uptime.js7
-rw-r--r--public/style.css952
-rw-r--r--website.go110
-rw-r--r--website.templ286
-rw-r--r--website_templ.go1335
6 files changed, 2491 insertions, 269 deletions
diff --git a/blogs/2026-10-09-simple-made-easy.md b/blogs/2026-10-09-simple-made-easy.md
new file mode 100644
index 0000000..9399da0
--- /dev/null
+++ b/blogs/2026-10-09-simple-made-easy.md
@@ -0,0 +1,70 @@
+---
+title: "Simple Made Easy"
+description: ""
+date: 2026-10-09
+---
+
+Due to a recent conversation I had, I remembered a talk I watched a while ago that was really
+influetial to how I view software develop and life in general, so I thought it'd be valuable
+to write this short blog to hopefully make more people aware of it.
+
+The original talk: https://www.youtube.com/watch?v=SxdOUGdseq4
+
+How I discovered the talk: https://www.youtube.com/watch?v=8eXiWkPSb50
+
+## Simple Made Easy
+
+As a non-native English speaker, I always treated "easy" and "simple" and "complex" and "hard" as
+just synonyms to each other, but there is actually a very important distinction between them.
+
+Simple <-> Complex
+Easy <-> Hard
+
+Simple and Complex come from Latin, where Complex used to mean braid, as in many interleaved things
+while Simple used to mean 0 braiding (no braid, no interleaving)[^1]
+
+Whether there is interleaving, and how much interleaving there is, is a completely objective
+question, and so is Simple and Complex, they are objective.
+
+Easy and Hard on the other hand, are subjective, for example, German is very Easy to Germans, or
+languages that are similar to it, and Japanese is Easy for a Japanese person, yet a German person
+finds Japanese Hard, and a Japanese finds German Hard, hence it's subjective.
+While kids learning language learn it all at about the same age, showing the Complexity of the
+languages themselves is indistinguishably similar[^2]
+
+When we say a codebase is Complex or a programming language is Simple, we specificaly don't mean
+how Easy or Hard is it to learn or understand, we specifically mean _how much interleaving there is_.
+And in a programming context, 2 concepts are considered interleaved if it's impossible to understand
+them separately, they must be looked at together to understand them.
+
+Assembly language is generally very Simple[^3] -- there are a few main instructions, which can be
+looked at separately, which do very basic operations that are Easy to reason about, yet, assembly
+is notoriously difficult to read and write, while a language such as python is way more Complex,
+there there is a lot more going on even in a single `a + b` expression, it is a very common
+"beginner language" due to how Easy it is to learn.
+
+"Coupling" is the act of _interleaving_ things, making them intertwined, having to consider them
+together to understand them, while "Decoupling" is the opposite, taking things that used to be
+interleaved and separating them so they can be looked at independently, "Separation of Concerns".
+
+I'd like to introduce a new concept, "Unnecessary Complexity" and "Inherent Complexity", to quote Terry Davis -
+"An idiot admires Complexity, a genius admires Simplicity".
+As the name suggest, Unnecessary Complexity is unnecessary, it is additional complexity layered
+on top, while Inherent Complexity is instrinc to the problem at hand, it cannot be avoided.
+While real languages developed naturally, they have obtained a bunch of unnecessary complexity
+while something such as the Quadratic formula is entirely filled with Inherent Complexity, or in
+other words, it's impossible to simplify it, it cannot be made more simple.
+
+To end it on a programming related note, I'd leave you with this quote:
+
+> (Unnecessary) Complexity is the root of all evil
+
+[^1]: this is from memory, I might have butchered the explanation a bit, watch the original talk.
+
+[^2]:
+ All languages... except Danish, which shows slower development in children compared to other
+ languages, likely due to the difficulty identifying word boundaries.
+
+[^3]:
+ The basic instruction set needed for turing complete programs (move, jump, load, store, etc),
+ I, of course, don't mean the entirety of, say, x86_64 is simple.
diff --git a/public/my_uptime.js b/public/my_uptime.js
index 25f549a..1fdb457 100644
--- a/public/my_uptime.js
+++ b/public/my_uptime.js
@@ -13,6 +13,7 @@ async function updateUptime() {
}
// Run on page load after all DOM elements loaded
-DOMContentLoaded(updateUptime());
-
-setInterval(updateUptime, 5 * 1000); // in ms
+document.addEventListener("DOMContentLoaded", () => {
+ updateUptime();
+ setInterval(updateUptime, 5 * 1000); // in ms
+});
diff --git a/public/style.css b/public/style.css
index c555b7d..d972f06 100644
--- a/public/style.css
+++ b/public/style.css
@@ -7,12 +7,34 @@
sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',
monospace;
+ --color-red-400: oklch(70.4% 0.191 22.216);
+ --color-red-800: oklch(44.4% 0.177 26.899);
+ --color-red-950: oklch(25.8% 0.092 26.042);
+ --color-emerald-400: oklch(76.5% 0.177 163.223);
+ --color-emerald-800: oklch(43.2% 0.095 166.913);
+ --color-emerald-950: oklch(26.2% 0.051 172.552);
--color-gray-700: oklch(37.3% 0.034 259.733);
+ --color-zinc-200: oklch(92% 0.004 286.32);
+ --color-zinc-300: oklch(87.1% 0.006 286.286);
+ --color-zinc-400: oklch(70.5% 0.015 286.067);
+ --color-zinc-500: oklch(55.2% 0.016 285.938);
+ --color-black: #000;
+ --color-white: #fff;
--spacing: 0.25rem;
+ --container-3xl: 48rem;
+ --text-xs: 0.75rem;
+ --text-xs--line-height: calc(1 / 0.75);
+ --text-sm: 0.875rem;
+ --text-sm--line-height: calc(1.25 / 0.875);
+ --text-2xl: 1.5rem;
+ --text-2xl--line-height: calc(2 / 1.5);
--text-3xl: 1.875rem;
--text-3xl--line-height: calc(2.25 / 1.875);
--font-weight-normal: 400;
--font-weight-bold: 700;
+ --tracking-wider: 0.05em;
+ --leading-relaxed: 1.625;
+ --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
--default-transition-duration: 150ms;
--default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
--default-font-family: var(--font-sans);
@@ -225,6 +247,9 @@
.col-span-2 {
grid-column: span 2 / span 2;
}
+ .col-span-3 {
+ grid-column: span 3 / span 3;
+ }
.-m-\[0\.4rem\] {
margin: calc(0.4rem * -1);
}
@@ -243,6 +268,39 @@
.mx-\[1vw\] {
margin-inline: 1vw;
}
+ .my-0 {
+ margin-block: 0px;
+ }
+ .my-\[-0\.5rem\] {
+ margin-block: -0.5rem;
+ }
+ .my-\[-0\.10rem\] {
+ margin-block: -0.10rem;
+ }
+ .my-\[-0\.15rem\] {
+ margin-block: -0.15rem;
+ }
+ .my-\[-0\.20rem\] {
+ margin-block: -0.20rem;
+ }
+ .my-\[-0\.25\] {
+ margin-block: -0.25;
+ }
+ .my-\[-0\.25rem\] {
+ margin-block: -0.25rem;
+ }
+ .my-\[-0\.30rem\] {
+ margin-block: -0.30rem;
+ }
+ .my-\[-0\.50rem\] {
+ margin-block: -0.50rem;
+ }
+ .my-\[-0\.rem\] {
+ margin-block: -0.rem;
+ }
+ .my-\[0\.0rem\] {
+ margin-block: 0.0rem;
+ }
.my-\[0\.625vw\] {
margin-block: 0.625vw;
}
@@ -255,12 +313,21 @@
.my-\[5vw\] {
margin-block: 5vw;
}
+ .mt-0 {
+ margin-top: 0px;
+ }
+ .mt-\[0\.0rem\] {
+ margin-top: 0.0rem;
+ }
.mt-\[0\.5rem\] {
margin-top: 0.5rem;
}
.mt-\[0\.625vw\] {
margin-top: 0.625vw;
}
+ .mt-\[0\.rem\] {
+ margin-top: 0.rem;
+ }
.mt-\[1vw\] {
margin-top: 1vw;
}
@@ -282,9 +349,30 @@
.mb-0 {
margin-bottom: 0px;
}
+ .mb-2 {
+ margin-bottom: calc(var(--spacing) * 2);
+ }
+ .mb-4 {
+ margin-bottom: calc(var(--spacing) * 4);
+ }
.mb-6 {
margin-bottom: calc(var(--spacing) * 6);
}
+ .mb-10 {
+ margin-bottom: calc(var(--spacing) * 10);
+ }
+ .mb-12 {
+ margin-bottom: calc(var(--spacing) * 12);
+ }
+ .mb-\[0\.0rem\] {
+ margin-bottom: 0.0rem;
+ }
+ .mb-\[0\.1rem\] {
+ margin-bottom: 0.1rem;
+ }
+ .mb-\[0\.5rem\] {
+ margin-bottom: 0.5rem;
+ }
.mb-\[0\.30rem\] {
margin-bottom: 0.30rem;
}
@@ -306,6 +394,15 @@
.ml-\[-4vw\] {
margin-left: -4vw;
}
+ .ml-auto {
+ margin-left: auto;
+ }
+ .line-clamp-2 {
+ overflow: hidden;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+ }
.block {
display: block;
}
@@ -321,15 +418,24 @@
.inline-block {
display: inline-block;
}
+ .inline-flex {
+ display: inline-flex;
+ }
.table {
display: table;
}
.h-0 {
height: 0px;
}
+ .h-2 {
+ height: calc(var(--spacing) * 2);
+ }
.h-38 {
height: calc(var(--spacing) * 38);
}
+ .h-\[0\.1rem\] {
+ height: 0.1rem;
+ }
.h-\[9\.5vw\] {
height: 9.5vw;
}
@@ -339,6 +445,9 @@
.h-\[62\%\] {
height: 62%;
}
+ .h-\[80\%\] {
+ height: 80%;
+ }
.h-\[80svh\] {
height: 80svh;
}
@@ -363,12 +472,27 @@
.w-0 {
width: 0px;
}
+ .w-2 {
+ width: calc(var(--spacing) * 2);
+ }
.w-8 {
width: calc(var(--spacing) * 8);
}
+ .w-\[\%\] {
+ width: %;
+ }
+ .w-\[0\%\] {
+ width: 0%;
+ }
+ .w-\[0\.625rem\] {
+ width: 0.625rem;
+ }
.w-\[30\%\] {
width: 30%;
}
+ .w-\[50\%\] {
+ width: 50%;
+ }
.w-\[67\%\] {
width: 67%;
}
@@ -378,6 +502,9 @@
.w-\[75rem\] {
width: 75rem;
}
+ .w-\[80\%\] {
+ width: 80%;
+ }
.w-\[95vw\] {
width: 95vw;
}
@@ -390,9 +517,15 @@
.w-full {
width: 100%;
}
+ .max-w-3xl {
+ max-width: var(--container-3xl);
+ }
.min-w-0 {
min-width: 0px;
}
+ .min-w-\[260px\] {
+ min-width: 260px;
+ }
.flex-1 {
flex: 1;
}
@@ -416,6 +549,9 @@
.transform {
transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
}
+ .animate-pulse {
+ animation: var(--animate-pulse);
+ }
.cursor-grab {
cursor: grab;
}
@@ -431,6 +567,9 @@
.\[scrollbar-width\:none\] {
scrollbar-width: none;
}
+ .grid-cols-1 {
+ grid-template-columns: repeat(1, minmax(0, 1fr));
+ }
.grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
@@ -446,12 +585,30 @@
.flex-col {
flex-direction: column;
}
+ .flex-wrap {
+ flex-wrap: wrap;
+ }
+ .items-baseline {
+ align-items: baseline;
+ }
.items-center {
align-items: center;
}
+ .items-end {
+ align-items: flex-end;
+ }
.justify-between {
justify-content: space-between;
}
+ .gap-1 {
+ gap: var(--spacing);
+ }
+ .gap-2 {
+ gap: calc(var(--spacing) * 2);
+ }
+ .gap-3 {
+ gap: calc(var(--spacing) * 3);
+ }
.gap-4 {
gap: calc(var(--spacing) * 4);
}
@@ -461,6 +618,15 @@
.gap-16 {
gap: calc(var(--spacing) * 16);
}
+ .gap-\[0\.5rem\] {
+ gap: 0.5rem;
+ }
+ .gap-\[0\.25rem\] {
+ gap: 0.25rem;
+ }
+ .gap-\[0\.0625rem\] {
+ gap: 0.0625rem;
+ }
.gap-\[1\.25vw\] {
gap: 1.25vw;
}
@@ -470,6 +636,9 @@
.gap-x-8 {
column-gap: calc(var(--spacing) * 8);
}
+ .gap-x-\[1ch\] {
+ column-gap: 1ch;
+ }
.gap-x-\[5vw\] {
column-gap: 5vw;
}
@@ -481,6 +650,28 @@
.gap-y-4 {
row-gap: calc(var(--spacing) * 4);
}
+ .gap-y-\[0\.4rem\] {
+ row-gap: 0.4rem;
+ }
+ :where(.divide-y > :not(:last-child)) {
+ --tw-divide-y-reverse: 0;
+ border-bottom-style: var(--tw-border-style);
+ border-top-style: var(--tw-border-style);
+ border-top-width: calc(1px * var(--tw-divide-y-reverse));
+ border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
+ }
+ :where(.divide-white > :not(:last-child)) {
+ border-color: var(--color-white);
+ }
+ :where(.divide-white\/5 > :not(:last-child)) {
+ border-color: color-mix(in srgb, #fff 5%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-white) 5%, transparent);
+ }
+ }
+ .self-center {
+ align-self: center;
+ }
.truncate {
overflow: hidden;
text-overflow: ellipsis;
@@ -498,13 +689,33 @@
.overflow-y-auto {
overflow-y: auto;
}
+ .rounded {
+ border-radius: 0.25rem;
+ }
+ .rounded-\[0\.2rem\] {
+ border-radius: 0.2rem;
+ }
+ .rounded-\[0\.3rem\] {
+ border-radius: 0.3rem;
+ }
.rounded-\[0\.4rem\] {
border-radius: 0.4rem;
}
+ .rounded-full {
+ border-radius: calc(infinity * 1px);
+ }
.border {
border-style: var(--tw-border-style);
border-width: 1px;
}
+ .border-1 {
+ border-style: var(--tw-border-style);
+ border-width: 1px;
+ }
+ .border-\[0\.01rem\] {
+ border-style: var(--tw-border-style);
+ border-width: 0.01rem;
+ }
.border-\[0\.1rem\] {
border-style: var(--tw-border-style);
border-width: 0.1rem;
@@ -517,6 +728,26 @@
border-style: var(--tw-border-style);
border-width: 0.2rem;
}
+ .border-\[0\.03rem\] {
+ border-style: var(--tw-border-style);
+ border-width: 0.03rem;
+ }
+ .border-\[0\.06rem\] {
+ border-style: var(--tw-border-style);
+ border-width: 0.06rem;
+ }
+ .border-\[0\.13rem\] {
+ border-style: var(--tw-border-style);
+ border-width: 0.13rem;
+ }
+ .border-\[0\.16rem\] {
+ border-style: var(--tw-border-style);
+ border-width: 0.16rem;
+ }
+ .border-\[0\.25rem\] {
+ border-style: var(--tw-border-style);
+ border-width: 0.25rem;
+ }
.border-\[0\.25vh\] {
border-style: var(--tw-border-style);
border-width: 0.25vh;
@@ -525,6 +756,26 @@
border-style: var(--tw-border-style);
border-width: 0.125rem;
}
+ .border-\[0\.0625rem\] {
+ border-style: var(--tw-border-style);
+ border-width: 0.0625rem;
+ }
+ .border-\[0\.03125rem\] {
+ border-style: var(--tw-border-style);
+ border-width: 0.03125rem;
+ }
+ .border-x-\[0\.1rem\] {
+ border-inline-style: var(--tw-border-style);
+ border-inline-width: 0.1rem;
+ }
+ .border-t {
+ border-top-style: var(--tw-border-style);
+ border-top-width: 1px;
+ }
+ .border-b {
+ border-bottom-style: var(--tw-border-style);
+ border-bottom-width: 1px;
+ }
.border-solid {
--tw-border-style: solid;
border-style: solid;
@@ -541,15 +792,189 @@
.border-\[var\(--alt\)\] {
border-color: var(--alt);
}
+ .border-\[var\(--primary\)\]\/40 {
+ border-color: var(--primary);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--primary) 40%, transparent);
+ }
+ }
+ .border-emerald-800 {
+ border-color: var(--color-emerald-800);
+ }
+ .border-emerald-800\/30 {
+ border-color: color-mix(in srgb, oklch(43.2% 0.095 166.913) 30%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-emerald-800) 30%, transparent);
+ }
+ }
+ .border-red-800 {
+ border-color: var(--color-red-800);
+ }
+ .border-red-800\/30 {
+ border-color: color-mix(in srgb, oklch(44.4% 0.177 26.899) 30%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-red-800) 30%, transparent);
+ }
+ }
+ .border-white {
+ border-color: var(--color-white);
+ }
+ .border-white\/5 {
+ border-color: color-mix(in srgb, #fff 5%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-white) 5%, transparent);
+ }
+ }
+ .border-white\/10 {
+ border-color: color-mix(in srgb, #fff 10%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-white) 10%, transparent);
+ }
+ }
+ .bg-\(--alt\)\/25 {
+ background-color: var(--alt);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--alt) 25%, transparent);
+ }
+ }
.bg-\(--background\) {
background-color: var(--background);
}
+ .bg-\(--extra\)\/0 {
+ background-color: var(--extra);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--extra) 0%, transparent);
+ }
+ }
+ .bg-\(--extra\)\/25 {
+ background-color: var(--extra);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--extra) 25%, transparent);
+ }
+ }
+ .bg-\(--extra\)\/50 {
+ background-color: var(--extra);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--extra) 50%, transparent);
+ }
+ }
+ .bg-\(--extra\)\/70 {
+ background-color: var(--extra);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--extra) 70%, transparent);
+ }
+ }
.bg-\(--secondary\) {
background-color: var(--secondary);
}
+ .bg-\[color\:var\(--alt\)\] {
+ background-color: var(--alt);
+ }
.bg-\[var\(--background\)\] {
background-color: var(--background);
}
+ .bg-black {
+ background-color: var(--color-black);
+ }
+ .bg-black\/20 {
+ background-color: color-mix(in srgb, #000 20%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-black) 20%, transparent);
+ }
+ }
+ .bg-black\/30 {
+ background-color: color-mix(in srgb, #000 30%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-black) 30%, transparent);
+ }
+ }
+ .bg-emerald-400 {
+ background-color: var(--color-emerald-400);
+ }
+ .bg-emerald-950 {
+ background-color: var(--color-emerald-950);
+ }
+ .bg-emerald-950\/40 {
+ background-color: color-mix(in srgb, oklch(26.2% 0.051 172.552) 40%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-emerald-950) 40%, transparent);
+ }
+ }
+ .bg-red-950 {
+ background-color: var(--color-red-950);
+ }
+ .bg-red-950\/40 {
+ background-color: color-mix(in srgb, oklch(25.8% 0.092 26.042) 40%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-red-950) 40%, transparent);
+ }
+ }
+ .bg-transparent {
+ background-color: transparent;
+ }
+ .bg-white {
+ background-color: var(--color-white);
+ }
+ .bg-white\/5 {
+ background-color: color-mix(in srgb, #fff 5%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-white) 5%, transparent);
+ }
+ }
+ .bg-white\/\[0\.01\] {
+ background-color: color-mix(in srgb, #fff 1%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-white) 1%, transparent);
+ }
+ }
+ .bg-white\/\[0\.02\] {
+ background-color: color-mix(in srgb, #fff 2%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-white) 2%, transparent);
+ }
+ }
+ .bg-white\/\[0\.03\] {
+ background-color: color-mix(in srgb, #fff 3%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-white) 3%, transparent);
+ }
+ }
+ .bg-\[linear-gradient\(to_bottom\,\#181825\,var\(--background\)\)\] {
+ background-image: linear-gradient(to bottom,#181825,var(--background));
+ }
+ .bg-\[linear-gradient\(to_bottom\,\,var\(--background\)\)\] {
+ background-image: linear-gradient(to bottom,,var(--background));
+ }
+ .bg-\[linear-gradient\(to_bottom\,var\(\)\,var\(--background\)\)\] {
+ background-image: linear-gradient(to bottom,var(),var(--background));
+ }
+ .bg-\[linear-gradient\(to_bottom\,var\(--backgrou\)\,var\(--background\)\)\] {
+ background-image: linear-gradient(to bottom,var(--backgrou),var(--background));
+ }
+ .bg-\[linear-gradient\(to_bottom\,var\(--background\)\,var\(--background\)\)\] {
+ background-image: linear-gradient(to bottom,var(--background),var(--background));
+ }
+ .bg-\[linear-gradient\(to_bottom\,var\(--background\)\,var\(--cmp-bg\,transparent\)\)\] {
+ background-image: linear-gradient(to bottom,var(--background),var(--cmp-bg,transparent));
+ }
+ .bg-\[linear-gradient\(to_bottom\,var\(--cmp-bg\,\)\,var\(--background\)\)\] {
+ background-image: linear-gradient(to bottom,var(--cmp-bg,),var(--background));
+ }
+ .bg-\[linear-gradient\(to_bottom\,var\(--cmp-bg\,black\)\,var\(--background\)\)\] {
+ background-image: linear-gradient(to bottom,var(--cmp-bg,black),var(--background));
+ }
+ .bg-\[linear-gradient\(to_bottom\,var\(--cmp-bg\,transparent\)\,var\(--background\)\)\] {
+ background-image: linear-gradient(to bottom,var(--cmp-bg,transparent),var(--background));
+ }
+ .bg-\[linear-gradient\(to_bottom\,var\(--cmp-bg\,white\)\,var\(--background\)\)\] {
+ background-image: linear-gradient(to bottom,var(--cmp-bg,white),var(--background));
+ }
+ .bg-\[linear-gradient\(to_bottom\,var\(--text\)\,var\(--background\)\)\] {
+ background-image: linear-gradient(to bottom,var(--text),var(--background));
+ }
+ .bg-\[linear-gradient\(to_bottom\,var\(white\)\,var\(--background\)\)\] {
+ background-image: linear-gradient(to bottom,var(white),var(--background));
+ }
.fill-\[\#7ed4fb\]\/50 {
fill: color-mix(in oklab, #7ed4fb 50%, transparent);
}
@@ -565,12 +990,27 @@
.p-0 {
padding: 0px;
}
+ .p-3 {
+ padding: calc(var(--spacing) * 3);
+ }
+ .p-3\.5 {
+ padding: calc(var(--spacing) * 3.5);
+ }
.p-4 {
padding: calc(var(--spacing) * 4);
}
+ .p-5 {
+ padding: calc(var(--spacing) * 5);
+ }
+ .p-6 {
+ padding: calc(var(--spacing) * 6);
+ }
.p-8 {
padding: calc(var(--spacing) * 8);
}
+ .p-\[0\.2rem\] {
+ padding: 0.2rem;
+ }
.p-\[0\.4rem\] {
padding: 0.4rem;
}
@@ -586,6 +1026,15 @@
.p-\[3vw\] {
padding: 3vw;
}
+ .px-1 {
+ padding-inline: var(--spacing);
+ }
+ .px-1\.5 {
+ padding-inline: calc(var(--spacing) * 1.5);
+ }
+ .px-2 {
+ padding-inline: calc(var(--spacing) * 2);
+ }
.px-3 {
padding-inline: calc(var(--spacing) * 3);
}
@@ -595,6 +1044,9 @@
.px-\[0\.1vw\] {
padding-inline: 0.1vw;
}
+ .px-\[0\.2rem\] {
+ padding-inline: 0.2rem;
+ }
.px-\[0\.4rem\] {
padding-inline: 0.4rem;
}
@@ -607,15 +1059,36 @@
.py-\(--ypad\) {
padding-block: var(--ypad);
}
+ .py-0 {
+ padding-block: 0px;
+ }
+ .py-0\.5 {
+ padding-block: calc(var(--spacing) * 0.5);
+ }
+ .py-2 {
+ padding-block: calc(var(--spacing) * 2);
+ }
.py-16 {
padding-block: calc(var(--spacing) * 16);
}
+ .py-\[0\.1rem\] {
+ padding-block: 0.1rem;
+ }
+ .py-\[0\.25rem\] {
+ padding-block: 0.25rem;
+ }
.py-\[0\.625vw\] {
padding-block: 0.625vw;
}
+ .py-\[var\(--border-py\,0\.875rem\)\] {
+ padding-block: var(--border-py,0.875rem);
+ }
.pt-3 {
padding-top: calc(var(--spacing) * 3);
}
+ .pt-4 {
+ padding-top: calc(var(--spacing) * 4);
+ }
.pt-\[1\.0625em\] {
padding-top: 1.0625em;
}
@@ -631,6 +1104,15 @@
.pr-\[1\.25vw\] {
padding-right: 1.25vw;
}
+ .pb-2 {
+ padding-bottom: calc(var(--spacing) * 2);
+ }
+ .pb-3 {
+ padding-bottom: calc(var(--spacing) * 3);
+ }
+ .pb-4 {
+ padding-bottom: calc(var(--spacing) * 4);
+ }
.text-left {
text-align: left;
}
@@ -643,6 +1125,21 @@
.font-mono {
font-family: var(--font-mono);
}
+ .text-2xl {
+ font-size: var(--text-2xl);
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
+ }
+ .text-sm {
+ font-size: var(--text-sm);
+ line-height: var(--tw-leading, var(--text-sm--line-height));
+ }
+ .text-xs {
+ font-size: var(--text-xs);
+ line-height: var(--tw-leading, var(--text-xs--line-height));
+ }
+ .text-\[0\%\] {
+ font-size: 0%;
+ }
.text-\[0\.8rem\] {
font-size: 0.8rem;
}
@@ -670,22 +1167,69 @@
.text-\[3vw\] {
font-size: 3vw;
}
+ .text-\[5\%\] {
+ font-size: 5%;
+ }
.text-\[5vw\] {
font-size: 5vw;
}
+ .text-\[7\%\] {
+ font-size: 7%;
+ }
+ .text-\[10px\] {
+ font-size: 10px;
+ }
+ .text-\[11px\] {
+ font-size: 11px;
+ }
+ .text-\[50\%\] {
+ font-size: 50%;
+ }
.text-\[60\%\] {
font-size: 60%;
}
+ .text-\[70\%\] {
+ font-size: 70%;
+ }
+ .text-\[75\%\] {
+ font-size: 75%;
+ }
+ .text-\[80\%\] {
+ font-size: 80%;
+ }
+ .text-\[85\%\] {
+ font-size: 85%;
+ }
+ .text-\[90\%\] {
+ font-size: 90%;
+ }
+ .text-\[95\%\] {
+ font-size: 95%;
+ }
+ .text-\[100\%\] {
+ font-size: 100%;
+ }
.text-\[110\%\] {
font-size: 110%;
}
.text-\[130\%\] {
font-size: 130%;
}
+ .text-\[150\%\] {
+ font-size: 150%;
+ }
.leading-\[normal\] {
--tw-leading: normal;
line-height: normal;
}
+ .leading-none {
+ --tw-leading: 1;
+ line-height: 1;
+ }
+ .leading-relaxed {
+ --tw-leading: var(--leading-relaxed);
+ line-height: var(--leading-relaxed);
+ }
.font-\[150\%\] {
--tw-font-weight: 150%;
font-weight: 150%;
@@ -698,6 +1242,10 @@
--tw-font-weight: var(--font-weight-normal);
font-weight: var(--font-weight-normal);
}
+ .tracking-wider {
+ --tw-tracking: var(--tracking-wider);
+ letter-spacing: var(--tracking-wider);
+ }
.wrap-anywhere {
overflow-wrap: anywhere;
}
@@ -710,6 +1258,12 @@
.text-\(--alt\) {
color: var(--alt);
}
+ .text-\(--background\) {
+ color: var(--background);
+ }
+ .text-\(--bg\) {
+ color: var(--bg);
+ }
.text-\(--extra\) {
color: var(--extra);
}
@@ -719,15 +1273,39 @@
.text-\(--secondary\) {
color: var(--secondary);
}
+ .text-\(--text\) {
+ color: var(--text);
+ }
.text-\[\#54D7A9\] {
color: #54D7A9;
}
+ .text-\[\#5874FF\] {
+ color: #5874FF;
+ }
.text-\[\#D8C44B\] {
color: #D8C44B;
}
+ .text-\[\#F5A670\] {
+ color: #F5A670;
+ }
.text-\[\#F16265\] {
color: #F16265;
}
+ .text-\[\#FF0000\] {
+ color: #FF0000;
+ }
+ .text-\[\#FFFFFF\] {
+ color: #FFFFFF;
+ }
+ .text-\[\#\] {
+ color: #;
+ }
+ .text-\[\#ffffff\] {
+ color: #ffffff;
+ }
+ .text-\[\%v\] {
+ color: %v;
+ }
.text-\[--\] {
color: --;
}
@@ -746,9 +1324,33 @@
.text-\[var\(--accent\)\] {
color: var(--accent);
}
+ .text-\[var\(--primary\)\] {
+ color: var(--primary);
+ }
.text-\[var\(--secondary\)\] {
color: var(--secondary);
}
+ .text-emerald-400 {
+ color: var(--color-emerald-400);
+ }
+ .text-red-400 {
+ color: var(--color-red-400);
+ }
+ .text-zinc-200 {
+ color: var(--color-zinc-200);
+ }
+ .text-zinc-300 {
+ color: var(--color-zinc-300);
+ }
+ .text-zinc-400 {
+ color: var(--color-zinc-400);
+ }
+ .text-zinc-500 {
+ color: var(--color-zinc-500);
+ }
+ .uppercase {
+ text-transform: uppercase;
+ }
.no-underline {
text-decoration-line: none;
}
@@ -758,32 +1360,71 @@
.opacity-0 {
opacity: 0%;
}
+ .shadow-\[0_0_15px_rgba\(0\,0\,0\,0\.3\)\] {
+ --tw-shadow: 0 0 15px var(--tw-shadow-color, rgba(0,0,0,0.3));
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
.outline {
outline-style: var(--tw-outline-style);
outline-width: 1px;
}
+ .filter {
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
+ }
+ .transition-all {
+ transition-property: all;
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
+ }
.transition-colors {
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
+ .transition-transform {
+ transition-property: transform, translate, scale, rotate;
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
+ }
+ .duration-150 {
+ --tw-duration: 150ms;
+ transition-duration: 150ms;
+ }
.select-text {
-webkit-user-select: text;
user-select: text;
}
+ .\[--border-py\:0\.0rem\] {
+ --border-py: 0.0rem;
+ }
+ .\[--border-py\:0\.2rem\] {
+ --border-py: 0.2rem;
+ }
+ .\[--border-py\:0\.3rem\] {
+ --border-py: 0.3rem;
+ }
.\[--border-py\:0\.5rem\] {
--border-py: 0.5rem;
}
+ .\[--border-py\:0\.25rem\] {
+ --border-py: 0.25rem;
+ }
.\[--border-py\:0\.75rem\] {
--border-py: 0.75rem;
}
.\[--border-py\:0\.875rem\] {
--border-py: 0.875rem;
}
+ .\[--border-py\:0\.rem\] {
+ --border-py: 0.rem;
+ }
.\[--ypad\:var\(--border-py\,0\.875rem\)\] {
--ypad: var(--border-py,0.875rem);
}
@media (hover: hover) {
+ .group-hover\:text-\[var\(--accent\)\]:is(:where(.group):hover *) {
+ color: var(--accent);
+ }
.group-hover\:text-\[var\(--alt\)\]:is(:where(.group):hover *) {
color: var(--alt);
}
@@ -807,6 +1448,18 @@
}
}
@media (hover: hover) {
+ .hover\:translate-x-1:hover {
+ --tw-translate-x: var(--spacing);
+ translate: var(--tw-translate-x) var(--tw-translate-y);
+ }
+ .hover\:border-white\/20:hover {
+ border-color: color-mix(in srgb, #fff 20%, transparent);
+ }
+ @supports (color: color-mix(in lab, red, red)) {
+ .hover\:border-white\/20:hover {
+ border-color: color-mix(in oklab, var(--color-white) 20%, transparent);
+ }
+ }
.hover\:bg-\(--alt\)\/25:hover {
background-color: var(--alt);
}
@@ -815,21 +1468,134 @@
background-color: color-mix(in oklab, var(--alt) 25%, transparent);
}
}
+ .hover\:bg-black\/0:hover {
+ background-color: color-mix(in srgb, #000 0%, transparent);
+ }
+ @supports (color: color-mix(in lab, red, red)) {
+ .hover\:bg-black\/0:hover {
+ background-color: color-mix(in oklab, var(--color-black) 0%, transparent);
+ }
+ }
+ .hover\:bg-black\/20:hover {
+ background-color: color-mix(in srgb, #000 20%, transparent);
+ }
+ @supports (color: color-mix(in lab, red, red)) {
+ .hover\:bg-black\/20:hover {
+ background-color: color-mix(in oklab, var(--color-black) 20%, transparent);
+ }
+ }
+ .hover\:bg-black\/50:hover {
+ background-color: color-mix(in srgb, #000 50%, transparent);
+ }
+ @supports (color: color-mix(in lab, red, red)) {
+ .hover\:bg-black\/50:hover {
+ background-color: color-mix(in oklab, var(--color-black) 50%, transparent);
+ }
+ }
+ .hover\:bg-white\/0:hover {
+ background-color: color-mix(in srgb, #fff 0%, transparent);
+ }
+ @supports (color: color-mix(in lab, red, red)) {
+ .hover\:bg-white\/0:hover {
+ background-color: color-mix(in oklab, var(--color-white) 0%, transparent);
+ }
+ }
+ .hover\:bg-white\/1:hover {
+ background-color: color-mix(in srgb, #fff 1%, transparent);
+ }
+ @supports (color: color-mix(in lab, red, red)) {
+ .hover\:bg-white\/1:hover {
+ background-color: color-mix(in oklab, var(--color-white) 1%, transparent);
+ }
+ }
+ .hover\:bg-white\/2:hover {
+ background-color: color-mix(in srgb, #fff 2%, transparent);
+ }
+ @supports (color: color-mix(in lab, red, red)) {
+ .hover\:bg-white\/2:hover {
+ background-color: color-mix(in oklab, var(--color-white) 2%, transparent);
+ }
+ }
+ .hover\:bg-white\/5:hover {
+ background-color: color-mix(in srgb, #fff 5%, transparent);
+ }
+ @supports (color: color-mix(in lab, red, red)) {
+ .hover\:bg-white\/5:hover {
+ background-color: color-mix(in oklab, var(--color-white) 5%, transparent);
+ }
+ }
+ .hover\:bg-white\/10:hover {
+ background-color: color-mix(in srgb, #fff 10%, transparent);
+ }
+ @supports (color: color-mix(in lab, red, red)) {
+ .hover\:bg-white\/10:hover {
+ background-color: color-mix(in oklab, var(--color-white) 10%, transparent);
+ }
+ }
+ .hover\:bg-white\/20:hover {
+ background-color: color-mix(in srgb, #fff 20%, transparent);
+ }
+ @supports (color: color-mix(in lab, red, red)) {
+ .hover\:bg-white\/20:hover {
+ background-color: color-mix(in oklab, var(--color-white) 20%, transparent);
+ }
+ }
+ .hover\:bg-white\/50:hover {
+ background-color: color-mix(in srgb, #fff 50%, transparent);
+ }
+ @supports (color: color-mix(in lab, red, red)) {
+ .hover\:bg-white\/50:hover {
+ background-color: color-mix(in oklab, var(--color-white) 50%, transparent);
+ }
+ }
+ .hover\:bg-white\/\[0\.04\]:hover {
+ background-color: color-mix(in srgb, #fff 4%, transparent);
+ }
+ @supports (color: color-mix(in lab, red, red)) {
+ .hover\:bg-white\/\[0\.04\]:hover {
+ background-color: color-mix(in oklab, var(--color-white) 4%, transparent);
+ }
+ }
+ .hover\:bg-white\/\[0\.05\]:hover {
+ background-color: color-mix(in srgb, #fff 5%, transparent);
+ }
+ @supports (color: color-mix(in lab, red, red)) {
+ .hover\:bg-white\/\[0\.05\]:hover {
+ background-color: color-mix(in oklab, var(--color-white) 5%, transparent);
+ }
+ }
.hover\:text-\(--accent\):hover {
color: var(--accent);
}
.hover\:text-\[var\(--alt\)\]:hover {
color: var(--alt);
}
+ .hover\:text-\[var\(--primary\)\]:hover {
+ color: var(--primary);
+ }
.hover\:text-\[var\(--secondary\)\]:hover {
color: var(--secondary);
}
.hover\:text-gray-700:hover {
color: var(--color-gray-700);
}
+ .hover\:text-white:hover {
+ color: var(--color-white);
+ }
.hover\:no-underline:hover {
text-decoration-line: none;
}
+ .hover\:underline:hover {
+ text-decoration-line: underline;
+ }
+ .hover\:brightness-100:hover {
+ --tw-brightness: brightness(100%);
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
+ }
+ .hover\:brightness-200:hover {
+ --tw-brightness: brightness(200%);
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
+ }
}
.data-copied\:animate-\[bump_0\.25s\][data-copied] {
animation: bump 0.25s;
@@ -997,9 +1763,29 @@
}
}
@media (width >= 48rem) {
+ .md\:col-span-2 {
+ grid-column: span 2 / span 2;
+ }
+ .md\:col-span-3 {
+ grid-column: span 3 / span 3;
+ }
.md\:grid-cols-1 {
grid-template-columns: repeat(1, minmax(0, 1fr));
}
+ .md\:grid-cols-6 {
+ grid-template-columns: repeat(6, minmax(0, 1fr));
+ }
+ .md\:flex-row {
+ flex-direction: row;
+ }
+ .md\:items-center {
+ align-items: center;
+ }
+ }
+ @media (width >= 64rem) {
+ .lg\:flex {
+ display: flex;
+ }
}
.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar {
display: none;
@@ -1061,6 +1847,11 @@
inherits: false;
initial-value: 0;
}
+@property --tw-divide-y-reverse {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0;
+}
@property --tw-border-style {
syntax: "*";
inherits: false;
@@ -1074,11 +1865,142 @@
syntax: "*";
inherits: false;
}
+@property --tw-tracking {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
+@property --tw-shadow-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-shadow-alpha {
+ syntax: "<percentage>";
+ inherits: false;
+ initial-value: 100%;
+}
+@property --tw-inset-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
+@property --tw-inset-shadow-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-inset-shadow-alpha {
+ syntax: "<percentage>";
+ inherits: false;
+ initial-value: 100%;
+}
+@property --tw-ring-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-ring-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
+@property --tw-inset-ring-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-inset-ring-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
+@property --tw-ring-inset {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-ring-offset-width {
+ syntax: "<length>";
+ inherits: false;
+ initial-value: 0px;
+}
+@property --tw-ring-offset-color {
+ syntax: "*";
+ inherits: false;
+ initial-value: #fff;
+}
+@property --tw-ring-offset-shadow {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0 0 #0000;
+}
@property --tw-outline-style {
syntax: "*";
inherits: false;
initial-value: solid;
}
+@property --tw-blur {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-brightness {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-contrast {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-grayscale {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-hue-rotate {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-invert {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-opacity {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-saturate {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-sepia {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-drop-shadow {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-drop-shadow-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-drop-shadow-alpha {
+ syntax: "<percentage>";
+ inherits: false;
+ initial-value: 100%;
+}
+@property --tw-drop-shadow-size {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-duration {
+ syntax: "*";
+ inherits: false;
+}
+@keyframes pulse {
+ 50% {
+ opacity: 0.5;
+ }
+}
@layer properties {
@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
*, ::before, ::after, ::backdrop {
@@ -1091,10 +2013,40 @@
--tw-skew-x: initial;
--tw-skew-y: initial;
--tw-space-x-reverse: 0;
+ --tw-divide-y-reverse: 0;
--tw-border-style: solid;
--tw-leading: initial;
--tw-font-weight: initial;
+ --tw-tracking: initial;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-color: initial;
+ --tw-shadow-alpha: 100%;
+ --tw-inset-shadow: 0 0 #0000;
+ --tw-inset-shadow-color: initial;
+ --tw-inset-shadow-alpha: 100%;
+ --tw-ring-color: initial;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-inset-ring-color: initial;
+ --tw-inset-ring-shadow: 0 0 #0000;
+ --tw-ring-inset: initial;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-offset-shadow: 0 0 #0000;
--tw-outline-style: solid;
+ --tw-blur: initial;
+ --tw-brightness: initial;
+ --tw-contrast: initial;
+ --tw-grayscale: initial;
+ --tw-hue-rotate: initial;
+ --tw-invert: initial;
+ --tw-opacity: initial;
+ --tw-saturate: initial;
+ --tw-sepia: initial;
+ --tw-drop-shadow: initial;
+ --tw-drop-shadow-color: initial;
+ --tw-drop-shadow-alpha: 100%;
+ --tw-drop-shadow-size: initial;
+ --tw-duration: initial;
}
}
}
diff --git a/website.go b/website.go
index b8c0e76..fce6efc 100644
--- a/website.go
+++ b/website.go
@@ -23,6 +23,18 @@ import (
//go:embed public blogs
var embedded embed.FS
+func Color(color string) string {
+ var result string
+ if strings.HasPrefix(color, "#") {
+ result = fmt.Sprintf("text-[%v]", color)
+ } else if strings.HasPrefix(color, "--") {
+ result = fmt.Sprintf("text-(%v)", color)
+ } else {
+ result = color
+ }
+ return result
+}
+
func Assert(ok bool) {
if !ok {
panic("assertion failure")
@@ -252,53 +264,53 @@ func latestBlog(blogs []Blog) *Blog {
return &blogs[0]
}
-type Project struct {
- Name string
- Type string
- Desc []string
- Cmd string
- Link string
-}
-
-var projects = []Project{
- {
- Name: "CPU vs AI",
- Type: "Game (made with Zig)",
- Desc: []string{
- "A tower defense game where an AI chip on your motherboard",
- "generates bugs! Place CPUs to destroy the bugs!",
- "Don't let them corrupt your RAM!",
- },
- },
- {
- Name: "Eko",
- Type: "Social Media Platform",
- Desc: []string{
- "A terminal-native alternative",
- "to Discord for Terminal",
- "nerds!",
- },
- },
- {
- Name: "Trident",
- Type: "IntelliJ Plugin",
- Desc: []string{
- "A blazingly fast way to",
- "Navigate to your mosta used",
- "files. Minimize keystrokes",
- "and maximize productivity!",
- },
- },
- {
- Name: "Dotfiles",
- Type: "Configuration",
- Desc: []string{
- "My Linux configuration,",
- "includes Neovim, tmux and",
- "other programs.",
- },
- },
-}
+// type Project struct {
+// Name string
+// Type string
+// Desc []string
+// Cmd string
+// Link string
+// }
+//
+// var projects = []Project{
+// {
+// Name: "CPU vs AI",
+// Type: "Game (made with Zig)",
+// Desc: []string{
+// "A tower defense game where an AI chip on your motherboard",
+// "generates bugs! Place CPUs to destroy the bugs!",
+// "Don't let them corrupt your RAM!",
+// },
+// },
+// {
+// Name: "Eko",
+// Type: "Social Media Platform",
+// Desc: []string{
+// "A terminal-native alternative",
+// "to Discord for Terminal",
+// "nerds!",
+// },
+// },
+// {
+// Name: "Trident",
+// Type: "IntelliJ Plugin",
+// Desc: []string{
+// "A blazingly fast way to",
+// "Navigate to your mosta used",
+// "files. Minimize keystrokes",
+// "and maximize productivity!",
+// },
+// },
+// {
+// Name: "Dotfiles",
+// Type: "Configuration",
+// Desc: []string{
+// "My Linux configuration,",
+// "includes Neovim, tmux and",
+// "other programs.",
+// },
+// },
+// }
func styleHandler(cookie string, lookup func(string) (map[string]string, bool)) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
@@ -384,8 +396,9 @@ func handleUptimePing(w http.ResponseWriter, r *http.Request) {
func main() {
carbonightCat := Theme{
- primary: "#94e2d5",
+ // primary: "#94e2d5",
// secondary: "#b4befe",
+ primary: "#54D7A9",
secondary: "#BB91F0",
accent: "#74c7ec",
extra: "#a6e3a1",
@@ -474,6 +487,7 @@ func main() {
})
mux.HandleFunc("GET /projects", func(w http.ResponseWriter, r *http.Request) {
+ projects := []Project{p, p, p, p, p, p, p, p}
ProjectsPage(currentStyle(r), projects).Render(r.Context(), w)
})
diff --git a/website.templ b/website.templ
index 1f4f636..88b8c40 100644
--- a/website.templ
+++ b/website.templ
@@ -5,7 +5,7 @@ templ HeadComponent(title string, description string) {
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta name="color-scheme" content="dark"/>
- <link rel="icon" type="image/svg+xml" href="/favicon.svg"/>
+ <link rel="icon" type="image/svg+xml" href="/public/favicon.svg"/>
<meta name="darkreader-lock"/>
<meta name="robots" content="index, follow, noarchive"/>
<meta name="keywords" content="Kyren223, Krypton, Compiler, Minecraft, Developer, Language, Langdev, Gamedev, Game, Software, Software Engineer, Game developer"/>
@@ -16,7 +16,7 @@ templ HeadComponent(title string, description string) {
<meta property="og:description" content={ description }/>
<meta property="og:type" content="website"/>
<meta property="og:url" content="https://kyren.codes/"/>
- <meta property="og:image" content="https://kyren.codes/image.png"/>
+ <meta property="og:image" content="https://kyren.codes/public/image.png"/>
<meta property="og:image:alt" content="a cyan sphere with a dark background"/>
<meta property="og:site_name" content="Kyren's Website"/>
<script src="/public/copy.js" defer></script>
@@ -29,7 +29,7 @@ templ HeadComponent(title string, description string) {
}
templ BlogItem(header string, blog Blog, extra string) {
- @TerminalBorder(header, blog.Date.Format("January 2, 2006"), extra) {
+ @TerminalBorder(header, blog.Date.Format("January 2, 2006"), "bg-black/20 hover:bg-white/5 transition-colors duration-150 "+extra) {
<span class="cursor-pointer group block">
<a href={ templ.SafeURL("/blogs/" + blog.Slug) } class="no-underline hover:no-underline">
<h1 class="text-[130%] font-bold text-(--accent) group-hover:underline">
@@ -61,10 +61,15 @@ templ TerminalStack(joined bool, extra string) {
templ TerminalBorder(header string, footer string, extra string) {
<div class={ "relative flex px-3.5 py-(--ypad) pt-[calc(var(--ypad)+0.0625rem)] [--ypad:var(--border-py,0.875rem)] border-[0.1rem] border-solid border-[color:var(--alt)]", extra }>
- <span class="absolute px-[0.625rem] text-[1rem] left-[0.625rem] top-[-0.75rem] bg-[var(--background)] text-[color:var(--alt)]">{ header }</span>
- <span class="absolute px-[0.625rem] text-[1rem] left-[0.625rem] bottom-[-0.75rem] bg-[var(--background)] text-[color:var(--alt)]">{ footer }</span>
+ <span class="absolute px-[0.625rem] text-[1rem] left-[0.625rem] top-[-0.75rem] text-[color:var(--alt)] bg-[linear-gradient(to_bottom,var(--background),var(--cmp-bg,transparent))]">{ header }</span>
+ <span class="absolute px-[0.625rem] text-[1rem] left-[0.625rem] bottom-[-0.75rem] text-[color:var(--alt)] bg-[linear-gradient(to_bottom,#181825,var(--background))]">{ footer }</span>
{ children... }
</div>
+ // <div class={ "relative flex px-3.5 py-(--ypad) pt-[calc(var(--ypad)+0.0625rem)] [--ypad:var(--border-py,0.875rem)] border-[0.1rem] border-solid border-[color:var(--alt)]", extra }>
+ // <span class="bg-transparent absolute px-[0.625rem] text-[1rem] left-[0.625rem] top-[-0.75rem] bg-[var(--background)] text-[color:var(--alt)]">{ header }</span>
+ // <span class="bg-transparent absolute px-[0.625rem] text-[1rem] left-[0.625rem] bottom-[-0.75rem] bg-[var(--background)] text-[color:var(--alt)]">{ footer }</span>
+ // { children... }
+ // </div>
}
templ CopyIcon() {
@@ -224,7 +229,7 @@ func footerClass(connected bool) string {
templ SkillsPage(style Style) {
@TerminalLayout(style, "/home/kyren/skills.md") {
@TerminalStack(false, "") {
- @TerminalBorder("Setup", "", "") {
+ @TerminalBorder("Info", "", "") {
<span>
$ fastfetch
@Fastfetch(fetchRows)
@@ -234,17 +239,223 @@ templ SkillsPage(style Style) {
}
}
+type Project struct {
+ Slug string // e.g. "my-game"
+ Title string // e.g. "MyGame"
+ Category string // e.g. "Game written in Zig"
+ Desc string // 1-2 line description/pitch
+ Tags []ProjectTag // ["Zig", "OpenGL", "Linux"]
+ Status string
+ Icon templ.Component
+ CgitURL string // e.g. "https://cgit.yourdomain.com/my-game"
+ GithubURL string // Fallback mirror link
+ IsFlagship bool
+ IsPinned bool
+}
+
+type ProjectTag struct {
+ Name string
+ Color string
+}
+
+type ProjectFLink struct {
+ URL string
+ Icon templ.Component
+}
+
+var p Project = Project{
+ Slug: "krypton",
+ Title: "Krypton",
+ Category: "Programming Language Compiler",
+ Desc: "A modern Minecraft creator event. As a developer, I helped with minor improvements to the cosmetics system. ",
+ Icon: IconCpu("text-[#F5A670] self-center"),
+ Status: "ON",
+ Tags: []ProjectTag{
+ // {"Programming Language", Color("--extra")},
+ // {"Compiler", Color("--extra")},
+ {"C", Color("text-[#5874FF]")},
+ {"LLVM", Color("text-[#FFFFFF]")},
+ // {"Java", Color("#F5A670")},
+ },
+ CgitURL: "https://whatever",
+ GithubURL: "",
+ IsFlagship: true,
+ IsPinned: false,
+}
+
+templ FlagshipProject(project Project) {
+ <div class="relative border border-[var(--primary)]/40 rounded bg-white/[0.03] p-6 mb-10 shadow-[0_0_15px_rgba(0,0,0,0.3)]">
+ <!-- Header Bar -->
+ <div class="flex items-center justify-between pb-3 mb-4 border-b border-white/10 font-mono text-xs">
+ <div class="flex items-center gap-2">
+ <span class="w-2 h-2 rounded-full bg-emerald-400 animate-pulse"></span>
+ <span class="text-[var(--accent)] font-bold">FLAGSHIP BUILD</span>
+ <span class="text-zinc-500">|</span>
+ <span class="text-zinc-400">{ project.Status }</span>
+ </div>
+ <div class="flex gap-3 text-zinc-400">
+ if project.CgitURL != "" {
+ <a href={ templ.URL(project.CgitURL) } target="_blank" class="hover:text-[var(--primary)] transition-colors">[cgit]</a>
+ }
+ if project.GithubURL != "" {
+ <a href={ templ.URL(project.GithubURL) } target="_blank" class="hover:text-[var(--primary)] transition-colors">[github]</a>
+ }
+ </div>
+ </div>
+ <!-- Title & Category Line -->
+ <div class="flex items-baseline gap-3 mb-2">
+ <h2 class="text-2xl font-bold text-[var(--primary)]">
+ <a href={ templ.URL("/projects/" + project.Slug) } class="hover:underline">{ project.Title }</a>
+ </h2>
+ <span class="text-sm text-zinc-400 font-mono">{ project.Category }</span>
+ </div>
+ <!-- 1-2 Line Pitch -->
+ <p class="text-zinc-300 text-sm leading-relaxed mb-6 max-w-3xl">{ project.Desc }</p>
+ <!-- Tech Tags & Detail Link -->
+ <div class="flex flex-wrap items-center justify-between gap-4 pt-4 border-t border-white/5 font-mono text-xs">
+ <div class="flex flex-wrap gap-2">
+ for _, tag := range project.Tags {
+ <span class="px-2 py-0.5 rounded bg-white/5 border border-white/10 text-zinc-300">{ tag.Name }</span>
+ }
+ </div>
+ <a href={ templ.URL("/projects/" + project.Slug) } class="text-[var(--primary)] hover:translate-x-1 transition-transform inline-flex items-center gap-1">
+ View Project Details &rarr;
+ </a>
+ </div>
+ </div>
+}
+
+templ PinnedGrid(projects []Project) {
+ <div class="mb-12">
+ <div class="text-xs font-mono text-zinc-500 uppercase tracking-wider mb-4">
+ // Notable Projects</div>
+ <div class="grid grid-cols-1 md:grid-cols-6 gap-4">
+ for i, project := range projects {
+ <!-- Top 2 items take col-span-3 (50%), Bottom 3 items take col-span-2 (33%) -->
+ <div
+ class={ "group border border-white/10 rounded bg-white/[0.02] hover:bg-white/[0.05] hover:border-white/20 transition-all p-5 flex flex-col justify-between",
+ templ.KV("md:col-span-3", i < 2),
+ templ.KV("md:col-span-2", i >= 2) }
+ >
+ <div>
+ <!-- Title + Description/Type Line -->
+ <div class="flex items-baseline justify-between gap-2 mb-2">
+ <h3 class="font-bold text-[var(--primary)] group-hover:text-[var(--accent)] transition-colors">
+ <a href={ templ.URL("/projects/" + project.Slug) } class="hover:underline">{ project.Title }</a>
+ </h3>
+ <span class="text-xs text-zinc-400 font-mono shrink-0">{ project.Category }</span>
+ </div>
+ <!-- Pitch -->
+ <p class="text-xs text-zinc-300 mb-4 line-clamp-2 leading-relaxed">{ project.Desc }</p>
+ </div>
+ <!-- Footer: Tags & Outbound Links -->
+ <div class="flex items-center justify-between pt-3 border-t border-white/5 text-[11px] font-mono">
+ <div class="flex flex-wrap gap-1">
+ for _, tag := range project.Tags {
+ <span class="text-zinc-400 bg-white/5 px-1.5 py-0.5 rounded border border-white/5">{ tag.Name }</span>
+ }
+ </div>
+ <div class="flex gap-2 text-zinc-400">
+ if project.CgitURL != "" {
+ <a href={ templ.URL(project.CgitURL) } target="_blank" class="hover:text-white">[cgit]</a>
+ }
+ if project.GithubURL != "" {
+ <a href={ templ.URL(project.GithubURL) } target="_blank" class="hover:text-white">[gh]</a>
+ }
+ </div>
+ </div>
+ </div>
+ }
+ </div>
+ </div>
+ </div>
+}
+
+templ IconLink(href string, label string, extra string) {
+ <a href={ templ.SafeURL(href) } target="_blank" rel="noopener noreferrer" aria-label={ label } title={ label } class={ "text-[90%] block p-[0.2rem] rounded-[0.4rem] transition-colors hover:bg-(--alt)/25" + " " + extra }>
+ { children... }
+ </a>
+}
+
+templ IconGit(color string) {
+ @Icon(color) {
+ <line x1="6" x2="6" y1="3" y2="15"></line>
+ <circle cx="18" cy="6" r="3"></circle>
+ <circle cx="6" cy="18" r="3"></circle>
+ <path d="M18 9a9 9 0 0 1-9 9"></path>
+ }
+}
+
+templ IconGithub(color string) {
+ @Icon(color) {
+ <path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"></path>
+ <path d="M9 18c-4.51 2-5-2-7-2"></path>
+ }
+}
+
+templ IconExternal(color string) {
+ @Icon(color) {
+ <path d="M15 3h6v6"></path>
+ <path d="M10 14 21 3"></path>
+ <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path>
+ }
+}
+
+templ ProjectItem(project Project, extra string) {
+ <div>
+ @TerminalBorder("", "", "[--border-py:0.25rem] py-2 text-[80%] bg-black/20 hover:bg-white/5 transition-colors duration-150"+" "+extra) {
+ <div class="flex flex-col gap-[0.0625rem] w-full">
+ <div class="flex flex-wrap items-baseline gap-x-[1ch] gap-y-[0.4rem]">
+ @project.Icon
+ <a href={ templ.SafeURL("/projects/" + project.Slug) } class="text-[130%] font-bold text-(--accent)">{ project.Title }</a>
+ <span class="text-[80%] text-(--primary)">{ project.Category }</span>
+ for _, tag := range project.Tags {
+ <code class={ "text-[75%] px-[0.4rem] inline-block rounded-[0.3rem] border-[0.01rem] bg-(--alt)/25" + " " + tag.Color }>{ tag.Name }</code>
+ }
+ // for _, tag := range project.Tags {
+ // <code class="text-[75%] px-[0.4rem] inline-block rounded-[0.3rem] bg-(--extra)/70 text-(--background)">{ tag }</code>
+ // }
+ <span class="ml-auto flex items-center self-center">
+ @IconLink("https://git.example.com/foo", "git", "") {
+ @IconGit("text-(--primary)")
+ }
+ @IconLink("https://github.com/foo", "github", "") {
+ @IconGithub("text-(--secondary)")
+ }
+ @IconLink("https://example.com", "website", "") {
+ @IconExternal("text-(--accent)")
+ }
+ </span>
+ </div>
+ <p class="text-[95%]">{ project.Desc }</p>
+ </div>
+ }
+ </div>
+}
+
+func DoubleProject(project Project) Project {
+ project.Desc += project.Desc
+ return project
+}
+
templ ProjectsPage(style Style, projects []Project) {
@TerminalLayout(style, "/home/kyren/projects") {
- <h1>Items</h1>
- <div class="card">
- <ul>
- <li>
- <span>foo</span>
- <span class="badge-active">[ACTIVE]</span>
- </li>
- </ul>
- </div>
+ @FlagshipProject(p)
+ // @PinnedGrid(projects)
+ // All projects
+ @ScrollBox("") {
+ @TerminalStack(false, "mt-[0.5rem]") {
+ for i := 0; i < 1; i++ {
+ for i, project := range projects {
+ if i % 2 == 0 {
+ @ProjectItem(DoubleProject(project), "my-[-0.15rem]")
+ } else {
+ @ProjectItem(project, "my-[-0.15rem]")
+ }
+ }
+ }
+ }
+ }
}
}
@@ -258,14 +469,27 @@ templ NotFoundPage(style Style, path string) {
</span>
}
@TerminalBorder("", "", "") {
- <div class="gap-[1ch]">
- <span>{ ">" }</span>
- <span class="text-(--secondary)">
- @Link("/", false) {
- { "cd $HOME" }
- }
- </span>
- </div>
+ <span>
+ <div class="gap-[1ch]">
+ <span>{ ">" }</span>
+ <span class="text-(--secondary)">
+ @Link("javascript:history.back()", false) {
+ { "cd -" }
+ }
+ </span>
+ <span class="text-(--alt)">
+ # Previous page
+ </span>
+ </div>
+ <div class="gap-[1ch]">
+ <span>{ ">" }</span>
+ <span class="text-(--secondary)">
+ @Link("/", false) {
+ { "cd $HOME" }
+ }
+ </span>
+ </div>
+ </span>
}
}
}
@@ -372,13 +596,13 @@ func row(icon func(color string) templ.Component, color, label, value string) Fe
var fetchRows = []FetchRow{
// row(IconTerminal, "text-(--secondary)", "Terminal", "Ghostty & Zsh"),
- row(IconCode, "text-(--accent)", "Main Language", "C"),
- row(IconScriptLang, "text-(--accent)", "Scripting Langs", "Go and Python"),
- row(IconDebugger, "text-[#F16265]", "Debugger", "Raddebugger"),
- row(IconMonitor, "text-[#54D7A9]", "Operating System", "Fedora KDE Linux"),
- row(IconEditor, "text-[#54D7A9]", "Text Editor", "Neovim"),
- row(IconUptime, "text-[#D8C44B]", "Uptime", GetMyUptime()),
- // row(IconCpu, "text-(--extra)", "Hardware", "..."),
+ row(IconCode, "--accent", "Main Language", "C"),
+ row(IconScriptLang, "--accent", "Scripting Langs", "Go and Python"),
+ row(IconDebugger, "#F16265", "Debugger", "Raddebugger"),
+ row(IconMonitor, "#54D7A9", "Operating System", "Fedora KDE Linux"),
+ row(IconEditor, "#54D7A9", "Text Editor", "Neovim"),
+ row(IconUptime, "#D8C44B", "Uptime", "Asleep"),
+ // row(IconCpu, "--extra", "Hardware", "..."),
}
func branch(i, n int) string {
@@ -414,7 +638,7 @@ templ Fastfetch(rows []FetchRow) {
}
templ Icon(color string) {
- <svg width="1.1em" height="1.1em" class={ "shrink-0", color } viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
+ <svg width="1.1em" height="1.1em" class={ "shrink-0", Color(color) } viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
{ children... }
</svg>
}
diff --git a/website_templ.go b/website_templ.go
index 2798a1a..1efd173 100644
--- a/website_templ.go
+++ b/website_templ.go
@@ -29,7 +29,7 @@ func HeadComponent(title string, description string) templ.Component {
templ_7745c5c3_Var1 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><meta name=\"color-scheme\" content=\"dark\"><link rel=\"icon\" type=\"image/svg+xml\" href=\"/favicon.svg\"><meta name=\"darkreader-lock\"><meta name=\"robots\" content=\"index, follow, noarchive\"><meta name=\"keywords\" content=\"Kyren223, Krypton, Compiler, Minecraft, Developer, Language, Langdev, Gamedev, Game, Software, Software Engineer, Game developer\"><meta name=\"author\" content=\"Kyren223\"><meta name=\"description\" content=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><meta name=\"color-scheme\" content=\"dark\"><link rel=\"icon\" type=\"image/svg+xml\" href=\"/public/favicon.svg\"><meta name=\"darkreader-lock\"><meta name=\"robots\" content=\"index, follow, noarchive\"><meta name=\"keywords\" content=\"Kyren223, Krypton, Compiler, Minecraft, Developer, Language, Langdev, Gamedev, Game, Software, Software Engineer, Game developer\"><meta name=\"author\" content=\"Kyren223\"><meta name=\"description\" content=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -81,7 +81,7 @@ func HeadComponent(title string, description string) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "\"><meta property=\"og:type\" content=\"website\"><meta property=\"og:url\" content=\"https://kyren.codes/\"><meta property=\"og:image\" content=\"https://kyren.codes/image.png\"><meta property=\"og:image:alt\" content=\"a cyan sphere with a dark background\"><meta property=\"og:site_name\" content=\"Kyren's Website\"><script src=\"/public/copy.js\" defer></script><script src=\"/public/theme.js\" defer></script><script src=\"/public/scrollbar.js\" defer></script><script src=\"/public/my_uptime.js\" defer></script><link rel=\"stylesheet\" href=\"/public/style.css\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "\"><meta property=\"og:type\" content=\"website\"><meta property=\"og:url\" content=\"https://kyren.codes/\"><meta property=\"og:image\" content=\"https://kyren.codes/public/image.png\"><meta property=\"og:image:alt\" content=\"a cyan sphere with a dark background\"><meta property=\"og:site_name\" content=\"Kyren's Website\"><script src=\"/public/copy.js\" defer></script><script src=\"/public/theme.js\" defer></script><script src=\"/public/scrollbar.js\" defer></script><script src=\"/public/my_uptime.js\" defer></script><link rel=\"stylesheet\" href=\"/public/style.css\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -175,7 +175,7 @@ func BlogItem(header string, blog Blog, extra string) templ.Component {
}
return nil
})
- templ_7745c5c3_Err = TerminalBorder(header, blog.Date.Format("January 2, 2006"), extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var7), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = TerminalBorder(header, blog.Date.Format("January 2, 2006"), "bg-black/20 hover:bg-white/5 transition-colors duration-150 "+extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var7), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -337,27 +337,27 @@ func TerminalBorder(header string, footer string, extra string) templ.Component
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\"><span class=\"absolute px-[0.625rem] text-[1rem] left-[0.625rem] top-[-0.75rem] bg-[var(--background)] text-[color:var(--alt)]\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\"><span class=\"absolute px-[0.625rem] text-[1rem] left-[0.625rem] top-[-0.75rem] text-[color:var(--alt)] bg-[linear-gradient(to_bottom,var(--background),var(--cmp-bg,transparent))]\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var19 string
templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(header)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 64, Col: 137}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 64, Col: 190}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</span> <span class=\"absolute px-[0.625rem] text-[1rem] left-[0.625rem] bottom-[-0.75rem] bg-[var(--background)] text-[color:var(--alt)]\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</span> <span class=\"absolute px-[0.625rem] text-[1rem] left-[0.625rem] bottom-[-0.75rem] text-[color:var(--alt)] bg-[linear-gradient(to_bottom,#181825,var(--background))]\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var20 string
templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(footer)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 65, Col: 140}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 65, Col: 175}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
if templ_7745c5c3_Err != nil {
@@ -453,7 +453,7 @@ func TerminalBorderWithCopy(header string, footer string, extra string, text str
var templ_7745c5c3_Var24 templ.SafeURL
templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 78, Col: 33}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 83, Col: 33}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
if templ_7745c5c3_Err != nil {
@@ -479,7 +479,7 @@ func TerminalBorderWithCopy(header string, footer string, extra string, text str
var templ_7745c5c3_Var25 string
templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.ResolveAttributeValue(text)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 82, Col: 26}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 87, Col: 26}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var25)
if templ_7745c5c3_Err != nil {
@@ -515,7 +515,7 @@ func TerminalBorderWithCopy(header string, footer string, extra string, text str
var templ_7745c5c3_Var26 string
templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.ResolveAttributeValue(text)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 90, Col: 42}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 95, Col: 42}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var26)
if templ_7745c5c3_Err != nil {
@@ -571,7 +571,7 @@ func CopyPre(text string, preClass string) templ.Component {
var templ_7745c5c3_Var28 string
templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.ResolveAttributeValue(text)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 99, Col: 39}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 104, Col: 39}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var28)
if templ_7745c5c3_Err != nil {
@@ -643,7 +643,7 @@ func NavLink(href string, label string) templ.Component {
var templ_7745c5c3_Var32 templ.SafeURL
templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 108, Col: 30}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 113, Col: 30}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
if templ_7745c5c3_Err != nil {
@@ -656,7 +656,7 @@ func NavLink(href string, label string) templ.Component {
var templ_7745c5c3_Var33 string
templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(label)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 108, Col: 87}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 113, Col: 87}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
if templ_7745c5c3_Err != nil {
@@ -698,7 +698,7 @@ func Nav(path string) templ.Component {
var templ_7745c5c3_Var35 string
templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(path)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 113, Col: 14}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 118, Col: 14}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
if templ_7745c5c3_Err != nil {
@@ -758,7 +758,7 @@ func TerminalLayout(style Style, path string) templ.Component {
var templ_7745c5c3_Var37 string
templ_7745c5c3_Var37, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues(styleToCss(style))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 126, Col: 42}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 131, Col: 42}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))
if templ_7745c5c3_Err != nil {
@@ -921,7 +921,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
var templ_7745c5c3_Var46 string
templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinStringErrs(fingerprint)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 161, Col: 21}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 166, Col: 21}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
if templ_7745c5c3_Err != nil {
@@ -1188,7 +1188,7 @@ func HomePage(style Style, latestBlog *Blog) templ.Component {
var templ_7745c5c3_Var58 string
templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(sshKey)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 210, Col: 12}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 215, Col: 12}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))
if templ_7745c5c3_Err != nil {
@@ -1293,7 +1293,7 @@ func SkillsPage(style Style) templ.Component {
}
return nil
})
- templ_7745c5c3_Err = TerminalBorder("Setup", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var62), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = TerminalBorder("Info", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var62), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1313,7 +1313,51 @@ func SkillsPage(style Style) templ.Component {
})
}
-func ProjectsPage(style Style, projects []Project) templ.Component {
+type Project struct {
+ Slug string // e.g. "my-game"
+ Title string // e.g. "MyGame"
+ Category string // e.g. "Game written in Zig"
+ Desc string // 1-2 line description/pitch
+ Tags []ProjectTag // ["Zig", "OpenGL", "Linux"]
+ Status string
+ Icon templ.Component
+ CgitURL string // e.g. "https://cgit.yourdomain.com/my-game"
+ GithubURL string // Fallback mirror link
+ IsFlagship bool
+ IsPinned bool
+}
+
+type ProjectTag struct {
+ Name string
+ Color string
+}
+
+type ProjectFLink struct {
+ URL string
+ Icon templ.Component
+}
+
+var p Project = Project{
+ Slug: "krypton",
+ Title: "Krypton",
+ Category: "Programming Language Compiler",
+ Desc: "A modern Minecraft creator event. As a developer, I helped with minor improvements to the cosmetics system. ",
+ Icon: IconCpu("text-[#F5A670] self-center"),
+ Status: "ON",
+ Tags: []ProjectTag{
+ // {"Programming Language", Color("--extra")},
+ // {"Compiler", Color("--extra")},
+ {"C", Color("text-[#5874FF]")},
+ {"LLVM", Color("text-[#FFFFFF]")},
+ // {"Java", Color("#F5A670")},
+ },
+ CgitURL: "https://whatever",
+ GithubURL: "",
+ IsFlagship: true,
+ IsPinned: false,
+}
+
+func FlagshipProject(project Project) templ.Component {
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
@@ -1334,7 +1378,453 @@ func ProjectsPage(style Style, projects []Project) templ.Component {
templ_7745c5c3_Var63 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var64 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "<div class=\"relative border border-[var(--primary)]/40 rounded bg-white/[0.03] p-6 mb-10 shadow-[0_0_15px_rgba(0,0,0,0.3)]\"><!-- Header Bar --><div class=\"flex items-center justify-between pb-3 mb-4 border-b border-white/10 font-mono text-xs\"><div class=\"flex items-center gap-2\"><span class=\"w-2 h-2 rounded-full bg-emerald-400 animate-pulse\"></span> <span class=\"text-[var(--accent)] font-bold\">FLAGSHIP BUILD</span> <span class=\"text-zinc-500\">|</span> <span class=\"text-zinc-400\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var64 string
+ templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(project.Status)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 294, Col: 48}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "</span></div><div class=\"flex gap-3 text-zinc-400\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ if project.CgitURL != "" {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "<a href=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var65 templ.SafeURL
+ templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinURLErrs(templ.URL(project.CgitURL))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 298, Col: 41}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "\" target=\"_blank\" class=\"hover:text-[var(--primary)] transition-colors\">[cgit]</a> ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ if project.GithubURL != "" {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "<a href=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var66 templ.SafeURL
+ templ_7745c5c3_Var66, templ_7745c5c3_Err = templ.JoinURLErrs(templ.URL(project.GithubURL))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 301, Col: 43}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var66))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "\" target=\"_blank\" class=\"hover:text-[var(--primary)] transition-colors\">[github]</a>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</div></div><!-- Title & Category Line --><div class=\"flex items-baseline gap-3 mb-2\"><h2 class=\"text-2xl font-bold text-[var(--primary)]\"><a href=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var67 templ.SafeURL
+ templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinURLErrs(templ.URL("/projects/" + project.Slug))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 308, Col: 52}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "\" class=\"hover:underline\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var68 string
+ templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(project.Title)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 308, Col: 94}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "</a></h2><span class=\"text-sm text-zinc-400 font-mono\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var69 string
+ templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(project.Category)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 310, Col: 67}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "</span></div><!-- 1-2 Line Pitch --><p class=\"text-zinc-300 text-sm leading-relaxed mb-6 max-w-3xl\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var70 string
+ templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(project.Desc)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 313, Col: 80}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "</p><!-- Tech Tags & Detail Link --><div class=\"flex flex-wrap items-center justify-between gap-4 pt-4 border-t border-white/5 font-mono text-xs\"><div class=\"flex flex-wrap gap-2\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ for _, tag := range project.Tags {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "<span class=\"px-2 py-0.5 rounded bg-white/5 border border-white/10 text-zinc-300\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var71 string
+ templ_7745c5c3_Var71, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 318, Col: 97}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var71))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "</span>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "</div><a href=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var72 templ.SafeURL
+ templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinURLErrs(templ.URL("/projects/" + project.Slug))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 321, Col: 51}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "\" class=\"text-[var(--primary)] hover:translate-x-1 transition-transform inline-flex items-center gap-1\">View Project Details &rarr;</a></div></div>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func PinnedGrid(projects []Project) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var73 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var73 == nil {
+ templ_7745c5c3_Var73 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "<div class=\"mb-12\"><div class=\"text-xs font-mono text-zinc-500 uppercase tracking-wider mb-4\"><div class=\"grid grid-cols-1 md:grid-cols-6 gap-4\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ for i, project := range projects {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "<!-- Top 2 items take col-span-3 (50%), Bottom 3 items take col-span-2 (33%) --> ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var74 = []any{"group border border-white/10 rounded bg-white/[0.02] hover:bg-white/[0.05] hover:border-white/20 transition-all p-5 flex flex-col justify-between",
+ templ.KV("md:col-span-3", i < 2),
+ templ.KV("md:col-span-2", i >= 2)}
+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var74...)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "<div class=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var75 string
+ templ_7745c5c3_Var75, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var74).String())
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 1, Col: 0}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var75)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "\"><div><!-- Title + Description/Type Line --><div class=\"flex items-baseline justify-between gap-2 mb-2\"><h3 class=\"font-bold text-[var(--primary)] group-hover:text-[var(--accent)] transition-colors\"><a href=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var76 templ.SafeURL
+ templ_7745c5c3_Var76, templ_7745c5c3_Err = templ.JoinURLErrs(templ.URL("/projects/" + project.Slug))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 344, Col: 57}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var76))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "\" class=\"hover:underline\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var77 string
+ templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.JoinStringErrs(project.Title)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 344, Col: 99}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var77))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "</a></h3><span class=\"text-xs text-zinc-400 font-mono shrink-0\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var78 string
+ templ_7745c5c3_Var78, templ_7745c5c3_Err = templ.JoinStringErrs(project.Category)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 346, Col: 81}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var78))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "</span></div><!-- Pitch --><p class=\"text-xs text-zinc-300 mb-4 line-clamp-2 leading-relaxed\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var79 string
+ templ_7745c5c3_Var79, templ_7745c5c3_Err = templ.JoinStringErrs(project.Desc)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 349, Col: 88}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var79))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "</p></div><!-- Footer: Tags & Outbound Links --><div class=\"flex items-center justify-between pt-3 border-t border-white/5 text-[11px] font-mono\"><div class=\"flex flex-wrap gap-1\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ for _, tag := range project.Tags {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "<span class=\"text-zinc-400 bg-white/5 px-1.5 py-0.5 rounded border border-white/5\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var80 string
+ templ_7745c5c3_Var80, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 355, Col: 102}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var80))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "</span>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "</div><div class=\"flex gap-2 text-zinc-400\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ if project.CgitURL != "" {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "<a href=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var81 templ.SafeURL
+ templ_7745c5c3_Var81, templ_7745c5c3_Err = templ.JoinURLErrs(templ.URL(project.CgitURL))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 360, Col: 45}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var81))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "\" target=\"_blank\" class=\"hover:text-white\">[cgit]</a> ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ if project.GithubURL != "" {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "<a href=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var82 templ.SafeURL
+ templ_7745c5c3_Var82, templ_7745c5c3_Err = templ.JoinURLErrs(templ.URL(project.GithubURL))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 363, Col: 47}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var82))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "\" target=\"_blank\" class=\"hover:text-white\">[gh]</a>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</div></div></div>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "</div></div></div>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func IconLink(href string, label string, extra string) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var83 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var83 == nil {
+ templ_7745c5c3_Var83 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ var templ_7745c5c3_Var84 = []any{"text-[90%] block p-[0.2rem] rounded-[0.4rem] transition-colors hover:bg-(--alt)/25" + " " + extra}
+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var84...)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "<a href=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var85 templ.SafeURL
+ templ_7745c5c3_Var85, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(href))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 375, Col: 30}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var85))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var86 string
+ templ_7745c5c3_Var86, templ_7745c5c3_Err = templ.ResolveAttributeValue(label)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 375, Col: 93}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var86)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "\" title=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var87 string
+ templ_7745c5c3_Var87, templ_7745c5c3_Err = templ.ResolveAttributeValue(label)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 375, Col: 109}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var87)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "\" class=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var88 string
+ templ_7745c5c3_Var88, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var84).String())
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 1, Col: 0}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var88)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templ_7745c5c3_Var83.Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "</a>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func IconGit(color string) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var89 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var89 == nil {
+ templ_7745c5c3_Var89 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Var90 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1346,13 +1836,440 @@ func ProjectsPage(style Style, projects []Project) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "<h1>Items</h1><div class=\"card\"><ul><li><span>foo</span> <span class=\"badge-active\">[ACTIVE]</span></li></ul></div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "<line x1=\"6\" x2=\"6\" y1=\"3\" y2=\"15\"></line> <circle cx=\"18\" cy=\"6\" r=\"3\"></circle> <circle cx=\"6\" cy=\"18\" r=\"3\"></circle> <path d=\"M18 9a9 9 0 0 1-9 9\"></path>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = TerminalLayout(style, "/home/kyren/projects").Render(templ.WithChildren(ctx, templ_7745c5c3_Var64), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var90), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func IconGithub(color string) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var91 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var91 == nil {
+ templ_7745c5c3_Var91 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Var92 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<path d=\"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4\"></path> <path d=\"M9 18c-4.51 2-5-2-7-2\"></path>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var92), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func IconExternal(color string) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var93 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var93 == nil {
+ templ_7745c5c3_Var93 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Var94 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "<path d=\"M15 3h6v6\"></path> <path d=\"M10 14 21 3\"></path> <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var94), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func ProjectItem(project Project, extra string) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var95 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var95 == nil {
+ templ_7745c5c3_Var95 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "<div>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Var96 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "<div class=\"flex flex-col gap-[0.0625rem] w-full\"><div class=\"flex flex-wrap items-baseline gap-x-[1ch] gap-y-[0.4rem]\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = project.Icon.Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "<a href=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var97 templ.SafeURL
+ templ_7745c5c3_Var97, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("/projects/" + project.Slug))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 410, Col: 57}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var97))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "\" class=\"text-[130%] font-bold text-(--accent)\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var98 string
+ templ_7745c5c3_Var98, templ_7745c5c3_Err = templ.JoinStringErrs(project.Title)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 410, Col: 121}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var98))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 115, "</a> <span class=\"text-[80%] text-(--primary)\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var99 string
+ templ_7745c5c3_Var99, templ_7745c5c3_Err = templ.JoinStringErrs(project.Category)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 411, Col: 65}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var99))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 116, "</span> ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ for _, tag := range project.Tags {
+ var templ_7745c5c3_Var100 = []any{"text-[75%] px-[0.4rem] inline-block rounded-[0.3rem] border-[0.01rem] bg-(--alt)/25" + " " + tag.Color}
+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var100...)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 117, "<code class=\"")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var101 string
+ templ_7745c5c3_Var101, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var100).String())
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 1, Col: 0}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var101)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 118, "\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var102 string
+ templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 413, Col: 136}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 119, "</code>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 120, "<span class=\"ml-auto flex items-center self-center\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Var103 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Err = IconGit("text-(--primary)").Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = IconLink("https://git.example.com/foo", "git", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var103), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Var104 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Err = IconGithub("text-(--secondary)").Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = IconLink("https://github.com/foo", "github", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var104), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Var105 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Err = IconExternal("text-(--accent)").Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = IconLink("https://example.com", "website", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var105), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 121, "</span></div><p class=\"text-[95%]\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var106 string
+ templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.JoinStringErrs(project.Desc)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 430, Col: 40}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var106))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 122, "</p></div>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = TerminalBorder("", "", "[--border-py:0.25rem] py-2 text-[80%] bg-black/20 hover:bg-white/5 transition-colors duration-150"+" "+extra).Render(templ.WithChildren(ctx, templ_7745c5c3_Var96), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 123, "</div>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func DoubleProject(project Project) Project {
+ project.Desc += project.Desc
+ return project
+}
+
+func ProjectsPage(style Style, projects []Project) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var107 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var107 == nil {
+ templ_7745c5c3_Var107 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Var108 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Err = FlagshipProject(p).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 124, " ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Var109 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var110 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ for i := 0; i < 1; i++ {
+ for i, project := range projects {
+ if i%2 == 0 {
+ templ_7745c5c3_Err = ProjectItem(DoubleProject(project), "my-[-0.15rem]").Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ } else {
+ templ_7745c5c3_Err = ProjectItem(project, "my-[-0.15rem]").Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ }
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = TerminalStack(false, "mt-[0.5rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var110), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = ScrollBox("").Render(templ.WithChildren(ctx, templ_7745c5c3_Var109), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = TerminalLayout(style, "/home/kyren/projects").Render(templ.WithChildren(ctx, templ_7745c5c3_Var108), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1376,12 +2293,12 @@ func NotFoundPage(style Style, path string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var65 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var65 == nil {
- templ_7745c5c3_Var65 = templ.NopComponent
+ templ_7745c5c3_Var111 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var111 == nil {
+ templ_7745c5c3_Var111 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var66 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var112 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1393,7 +2310,7 @@ func NotFoundPage(style Style, path string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var67 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var113 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1405,7 +2322,7 @@ func NotFoundPage(style Style, path string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var68 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var114 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1417,43 +2334,43 @@ func NotFoundPage(style Style, path string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "<span><p>$ cd ~")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 125, "<span><p>$ cd ~")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var69 string
- templ_7745c5c3_Var69, templ_7745c5c3_Err = templ.JoinStringErrs(path)
+ var templ_7745c5c3_Var115 string
+ templ_7745c5c3_Var115, templ_7745c5c3_Err = templ.JoinStringErrs(path)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 256, Col: 20}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 467, Col: 20}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var69))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var115))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</p><p class=\"pt-3\">\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 126, "</p><p class=\"pt-3\">\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var70 string
- templ_7745c5c3_Var70, templ_7745c5c3_Err = templ.JoinStringErrs(path[1:])
+ var templ_7745c5c3_Var116 string
+ templ_7745c5c3_Var116, templ_7745c5c3_Err = templ.JoinStringErrs(path[1:])
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 257, Col: 32}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 468, Col: 32}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var70))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var116))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "\": No such file or directory (os error 2) </p></span>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 127, "\": No such file or directory (os error 2) </p></span>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = TerminalBorder("Shell", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var68), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = TerminalBorder("Shell", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var114), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Var71 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var117 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1465,24 +2382,68 @@ func NotFoundPage(style Style, path string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "<div class=\"gap-[1ch]\"><span>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 128, "<span><div class=\"gap-[1ch]\"><span>")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var118 string
+ templ_7745c5c3_Var118, templ_7745c5c3_Err = templ.JoinStringErrs(">")
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 474, Col: 17}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var118))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 129, "</span> <span class=\"text-(--secondary)\">")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Var119 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ var templ_7745c5c3_Var120 string
+ templ_7745c5c3_Var120, templ_7745c5c3_Err = templ.JoinStringErrs("cd -")
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 477, Col: 16}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var120))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+ templ_7745c5c3_Err = Link("javascript:history.back()", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var119), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var72 string
- templ_7745c5c3_Var72, templ_7745c5c3_Err = templ.JoinStringErrs(">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 130, "</span> <span class=\"text-(--alt)\"># Previous page</span></div><div class=\"gap-[1ch]\"><span>")
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 262, Col: 16}
+ return templ_7745c5c3_Err
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var72))
+ var templ_7745c5c3_Var121 string
+ templ_7745c5c3_Var121, templ_7745c5c3_Err = templ.JoinStringErrs(">")
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 485, Col: 17}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var121))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "</span> <span class=\"text-(--secondary)\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 131, "</span> <span class=\"text-(--secondary)\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Var73 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var122 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1494,40 +2455,40 @@ func NotFoundPage(style Style, path string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- var templ_7745c5c3_Var74 string
- templ_7745c5c3_Var74, templ_7745c5c3_Err = templ.JoinStringErrs("cd $HOME")
+ var templ_7745c5c3_Var123 string
+ templ_7745c5c3_Var123, templ_7745c5c3_Err = templ.JoinStringErrs("cd $HOME")
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 265, Col: 19}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 488, Col: 20}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var74))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var123))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = Link("/", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var73), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = Link("/", false).Render(templ.WithChildren(ctx, templ_7745c5c3_Var122), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</span></div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 132, "</span></div></span>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = TerminalBorder("", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var71), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = TerminalBorder("", "", "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var117), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = TerminalStack(true, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var67), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = TerminalStack(true, "").Render(templ.WithChildren(ctx, templ_7745c5c3_Var113), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = TerminalLayout(style, "404").Render(templ.WithChildren(ctx, templ_7745c5c3_Var66), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = TerminalLayout(style, "404").Render(templ.WithChildren(ctx, templ_7745c5c3_Var112), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1551,38 +2512,38 @@ func ScrollBox(extra string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var75 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var75 == nil {
- templ_7745c5c3_Var75 = templ.NopComponent
+ templ_7745c5c3_Var124 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var124 == nil {
+ templ_7745c5c3_Var124 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- var templ_7745c5c3_Var76 = []any{"flex flex-1 min-h-0", extra}
- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var76...)
+ var templ_7745c5c3_Var125 = []any{"flex flex-1 min-h-0", extra}
+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var125...)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "<div data-scrollbox class=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 133, "<div data-scrollbox class=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var77 string
- templ_7745c5c3_Var77, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var76).String())
+ var templ_7745c5c3_Var126 string
+ templ_7745c5c3_Var126, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var125).String())
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 1, Col: 0}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var77)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var126)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "\"><div data-scroll-area class=\"flex-1 min-w-0 overflow-y-auto border-[0.1rem] border-solid border-(--alt) p-[1rem] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 134, "\"><div data-scroll-area class=\"flex-1 min-w-0 overflow-y-auto border-[0.1rem] border-solid border-(--alt) p-[1rem] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templ_7745c5c3_Var75.Render(ctx, templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = templ_7745c5c3_Var124.Render(ctx, templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "</div><div data-scroll-track class=\"relative w-8 -ml-[0.1rem] border-[0.1rem] border-solid border-(--alt)\"><div data-scroll-thumb class=\"absolute inset-x-[0.3rem] bg-(--secondary) cursor-grab touch-none\"></div></div></div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 135, "</div><div data-scroll-track class=\"relative w-8 -ml-[0.1rem] border-[0.1rem] border-solid border-(--alt)\"><div data-scroll-thumb class=\"absolute inset-x-[0.3rem] bg-(--secondary) cursor-grab touch-none\"></div></div></div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1606,12 +2567,12 @@ func BlogsPage(style Style, blogs []Blog) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var78 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var78 == nil {
- templ_7745c5c3_Var78 = templ.NopComponent
+ templ_7745c5c3_Var127 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var127 == nil {
+ templ_7745c5c3_Var127 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var79 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var128 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1623,7 +2584,7 @@ func BlogsPage(style Style, blogs []Blog) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var80 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var129 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1635,17 +2596,17 @@ func BlogsPage(style Style, blogs []Blog) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "$ ls -lh ~/blogs")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 136, "$ ls -lh ~/blogs")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = TerminalBorder("Shell", "", "mb-[1rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var80), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = TerminalBorder("Shell", "", "mb-[1rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var129), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Var81 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var130 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1657,7 +2618,7 @@ func BlogsPage(style Style, blogs []Blog) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var82 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var131 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1679,19 +2640,19 @@ func BlogsPage(style Style, blogs []Blog) templ.Component {
}
return nil
})
- templ_7745c5c3_Err = TerminalStack(false, "mt-[0.5rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var82), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = TerminalStack(false, "mt-[0.5rem]").Render(templ.WithChildren(ctx, templ_7745c5c3_Var131), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = ScrollBox("").Render(templ.WithChildren(ctx, templ_7745c5c3_Var81), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = ScrollBox("").Render(templ.WithChildren(ctx, templ_7745c5c3_Var130), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = TerminalLayout(style, "blogs").Render(templ.WithChildren(ctx, templ_7745c5c3_Var79), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = TerminalLayout(style, "blogs").Render(templ.WithChildren(ctx, templ_7745c5c3_Var128), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1722,12 +2683,12 @@ func IconMonitor(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var83 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var83 == nil {
- templ_7745c5c3_Var83 = templ.NopComponent
+ templ_7745c5c3_Var132 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var132 == nil {
+ templ_7745c5c3_Var132 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var84 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var133 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1739,13 +2700,13 @@ func IconMonitor(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "<rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\"></rect> <line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\"></line> <line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\"></line>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 137, "<rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\"></rect> <line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\"></line> <line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\"></line>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var84), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var133), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1769,12 +2730,12 @@ func IconTerminal(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var85 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var85 == nil {
- templ_7745c5c3_Var85 = templ.NopComponent
+ templ_7745c5c3_Var134 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var134 == nil {
+ templ_7745c5c3_Var134 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var86 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var135 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1786,13 +2747,13 @@ func IconTerminal(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "<polyline points=\"4 17 10 11 4 5\"></polyline> <line x1=\"12\" x2=\"20\" y1=\"19\" y2=\"19\"></line>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 138, "<polyline points=\"4 17 10 11 4 5\"></polyline> <line x1=\"12\" x2=\"20\" y1=\"19\" y2=\"19\"></line>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var86), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var135), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1816,12 +2777,12 @@ func IconCode(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var87 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var87 == nil {
- templ_7745c5c3_Var87 = templ.NopComponent
+ templ_7745c5c3_Var136 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var136 == nil {
+ templ_7745c5c3_Var136 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var88 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var137 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1833,13 +2794,13 @@ func IconCode(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "<polyline points=\"16 18 22 12 16 6\"></polyline> <polyline points=\"8 6 2 12 8 18\"></polyline>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 139, "<polyline points=\"16 18 22 12 16 6\"></polyline> <polyline points=\"8 6 2 12 8 18\"></polyline>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var88), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var137), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1863,12 +2824,12 @@ func IconCpu(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var89 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var89 == nil {
- templ_7745c5c3_Var89 = templ.NopComponent
+ templ_7745c5c3_Var138 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var138 == nil {
+ templ_7745c5c3_Var138 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var90 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var139 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1880,13 +2841,13 @@ func IconCpu(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "<rect width=\"16\" height=\"16\" x=\"4\" y=\"4\" rx=\"2\"></rect> <rect width=\"6\" height=\"6\" x=\"9\" y=\"9\" rx=\"1\"></rect> <path d=\"M15 2v2M15 20v2M2 15h2M2 9h2M20 15h2M20 9h2M9 2v2M9 20v2\"></path>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 140, "<rect width=\"16\" height=\"16\" x=\"4\" y=\"4\" rx=\"2\"></rect> <rect width=\"6\" height=\"6\" x=\"9\" y=\"9\" rx=\"1\"></rect> <path d=\"M15 2v2M15 20v2M2 15h2M2 9h2M20 15h2M20 9h2M9 2v2M9 20v2\"></path>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var90), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var139), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1910,12 +2871,12 @@ func IconScriptLang(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var91 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var91 == nil {
- templ_7745c5c3_Var91 = templ.NopComponent
+ templ_7745c5c3_Var140 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var140 == nil {
+ templ_7745c5c3_Var140 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var92 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var141 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1927,13 +2888,13 @@ func IconScriptLang(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-file-terminal preview-icon\"><path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"></path><path d=\"M14 2v5a1 1 0 0 0 1 1h5\"></path><path d=\"m8 16 2-2-2-2\"></path><path d=\"M12 18h4\"></path></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 141, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-file-terminal preview-icon\"><path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"></path><path d=\"M14 2v5a1 1 0 0 0 1 1h5\"></path><path d=\"m8 16 2-2-2-2\"></path><path d=\"M12 18h4\"></path></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var92), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var141), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -1957,12 +2918,12 @@ func IconEditor(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var93 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var93 == nil {
- templ_7745c5c3_Var93 = templ.NopComponent
+ templ_7745c5c3_Var142 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var142 == nil {
+ templ_7745c5c3_Var142 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var94 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var143 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -1974,13 +2935,13 @@ func IconEditor(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-square-pen preview-icon\"><path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path><path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\"></path></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 142, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-square-pen preview-icon\"><path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path><path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\"></path></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var94), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var143), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2004,12 +2965,12 @@ func IconDebugger(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var95 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var95 == nil {
- templ_7745c5c3_Var95 = templ.NopComponent
+ templ_7745c5c3_Var144 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var144 == nil {
+ templ_7745c5c3_Var144 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var96 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var145 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -2021,13 +2982,13 @@ func IconDebugger(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-bug-off preview-icon\"><path d=\"M12 20v-8\"></path><path d=\"M12.656 7H14a4 4 0 0 1 4 4v1.344\"></path><path d=\"M14.12 3.88 16 2\"></path><path d=\"M17.123 17.123A6 6 0 0 1 6 14v-3a4 4 0 0 1 1.72-3.287\"></path><path d=\"m2 2 20 20\"></path><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"></path><path d=\"M22 13h-3.344\"></path><path d=\"M3 21a4 4 0 0 1 3.81-4\"></path><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"></path><path d=\"M6 13H2\"></path><path d=\"m8 2 1.88 1.88\"></path><path d=\"M9.712 4.06A3 3 0 0 1 15 6v1.13\"></path></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 143, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-bug-off preview-icon\"><path d=\"M12 20v-8\"></path><path d=\"M12.656 7H14a4 4 0 0 1 4 4v1.344\"></path><path d=\"M14.12 3.88 16 2\"></path><path d=\"M17.123 17.123A6 6 0 0 1 6 14v-3a4 4 0 0 1 1.72-3.287\"></path><path d=\"m2 2 20 20\"></path><path d=\"M21 5a4 4 0 0 1-3.55 3.97\"></path><path d=\"M22 13h-3.344\"></path><path d=\"M3 21a4 4 0 0 1 3.81-4\"></path><path d=\"M3 5a4 4 0 0 0 3.55 3.97\"></path><path d=\"M6 13H2\"></path><path d=\"m8 2 1.88 1.88\"></path><path d=\"M9.712 4.06A3 3 0 0 1 15 6v1.13\"></path></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var96), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var145), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2051,12 +3012,12 @@ func IconKeyboard(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var97 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var97 == nil {
- templ_7745c5c3_Var97 = templ.NopComponent
+ templ_7745c5c3_Var146 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var146 == nil {
+ templ_7745c5c3_Var146 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var98 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var147 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -2068,13 +3029,13 @@ func IconKeyboard(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-keyboard preview-icon\"><path d=\"M10 8h.01\"></path><path d=\"M12 12h.01\"></path><path d=\"M14 8h.01\"></path><path d=\"M16 12h.01\"></path><path d=\"M18 8h.01\"></path><path d=\"M6 8h.01\"></path><path d=\"M7 16h10\"></path><path d=\"M8 12h.01\"></path><rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"></rect></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 144, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-keyboard preview-icon\"><path d=\"M10 8h.01\"></path><path d=\"M12 12h.01\"></path><path d=\"M14 8h.01\"></path><path d=\"M16 12h.01\"></path><path d=\"M18 8h.01\"></path><path d=\"M6 8h.01\"></path><path d=\"M7 16h10\"></path><path d=\"M8 12h.01\"></path><rect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"></rect></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var98), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var147), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2098,12 +3059,12 @@ func IconUptime(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var99 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var99 == nil {
- templ_7745c5c3_Var99 = templ.NopComponent
+ templ_7745c5c3_Var148 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var148 == nil {
+ templ_7745c5c3_Var148 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var100 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Var149 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
if !templ_7745c5c3_IsBuffer {
@@ -2115,13 +3076,13 @@ func IconUptime(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-clock preview-icon\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M12 6v6l4 2\"></path></svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 145, "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-clock preview-icon\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><path d=\"M12 6v6l4 2\"></path></svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
})
- templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var100), templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = Icon(color).Render(templ.WithChildren(ctx, templ_7745c5c3_Var149), templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2135,13 +3096,13 @@ func row(icon func(color string) templ.Component, color, label, value string) Fe
var fetchRows = []FetchRow{
// row(IconTerminal, "text-(--secondary)", "Terminal", "Ghostty & Zsh"),
- row(IconCode, "text-(--accent)", "Main Language", "C"),
- row(IconScriptLang, "text-(--accent)", "Scripting Langs", "Go and Python"),
- row(IconDebugger, "text-[#F16265]", "Debugger", "Raddebugger"),
- row(IconMonitor, "text-[#54D7A9]", "Operating System", "Fedora KDE Linux"),
- row(IconEditor, "text-[#54D7A9]", "Text Editor", "Neovim"),
- row(IconUptime, "text-[#D8C44B]", "Uptime", GetMyUptime()),
- // row(IconCpu, "text-(--extra)", "Hardware", "..."),
+ row(IconCode, "--accent", "Main Language", "C"),
+ row(IconScriptLang, "--accent", "Scripting Langs", "Go and Python"),
+ row(IconDebugger, "#F16265", "Debugger", "Raddebugger"),
+ row(IconMonitor, "#54D7A9", "Operating System", "Fedora KDE Linux"),
+ row(IconEditor, "#54D7A9", "Text Editor", "Neovim"),
+ row(IconUptime, "#D8C44B", "Uptime", "Asleep"),
+ // row(IconCpu, "--extra", "Hardware", "..."),
}
func branch(i, n int) string {
@@ -2173,30 +3134,30 @@ func Fastfetch(rows []FetchRow) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var101 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var101 == nil {
- templ_7745c5c3_Var101 = templ.NopComponent
+ templ_7745c5c3_Var150 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var150 == nil {
+ templ_7745c5c3_Var150 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "<div style=\"\n\t\tdisplay: grid;\n\t\tgrid-template-columns: auto auto auto 1fr;\n\t\talign-items: center;\n\t\tcolumn-gap: 1ch;\n\t\tline-height: normal;\n\t\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 146, "<div style=\"\n\t\tdisplay: grid;\n\t\tgrid-template-columns: auto auto auto 1fr;\n\t\talign-items: center;\n\t\tcolumn-gap: 1ch;\n\t\tline-height: normal;\n\t\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
for i, row := range rows {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "<span class=\"text-(--alt)\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 147, "<span class=\"text-(--alt)\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var102 string
- templ_7745c5c3_Var102, templ_7745c5c3_Err = templ.JoinStringErrs(branch(i, len(rows)))
+ var templ_7745c5c3_Var151 string
+ templ_7745c5c3_Var151, templ_7745c5c3_Err = templ.JoinStringErrs(branch(i, len(rows)))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 408, Col: 52}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 632, Col: 52}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var102))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var151))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "</span>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 148, "</span>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2204,69 +3165,69 @@ func Fastfetch(rows []FetchRow) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var103 = []any{row.Color, "font-bold"}
- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var103...)
+ var templ_7745c5c3_Var152 = []any{row.Color, "font-bold"}
+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var152...)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "<span class=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 149, "<span class=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var104 string
- templ_7745c5c3_Var104, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var103).String())
+ var templ_7745c5c3_Var153 string
+ templ_7745c5c3_Var153, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var152).String())
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 1, Col: 0}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var104)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var153)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 150, "\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var105 string
- templ_7745c5c3_Var105, templ_7745c5c3_Err = templ.JoinStringErrs(row.Label)
+ var templ_7745c5c3_Var154 string
+ templ_7745c5c3_Var154, templ_7745c5c3_Err = templ.JoinStringErrs(row.Label)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 410, Col: 53}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 634, Col: 53}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var105))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var154))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "</span> <span id=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 151, "</span> <span id=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var106 string
- templ_7745c5c3_Var106, templ_7745c5c3_Err = templ.ResolveAttributeValue(row.Label)
+ var templ_7745c5c3_Var155 string
+ templ_7745c5c3_Var155, templ_7745c5c3_Err = templ.ResolveAttributeValue(row.Label)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 411, Col: 23}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 635, Col: 23}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var106)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var155)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 152, "\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var107 string
- templ_7745c5c3_Var107, templ_7745c5c3_Err = templ.JoinStringErrs(row.Value)
+ var templ_7745c5c3_Var156 string
+ templ_7745c5c3_Var156, templ_7745c5c3_Err = templ.JoinStringErrs(row.Value)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 411, Col: 37}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 635, Col: 37}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var107))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var156))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "</span>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 153, "</span>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "</div>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 154, "</div>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -2290,38 +3251,38 @@ func Icon(color string) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var108 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var108 == nil {
- templ_7745c5c3_Var108 = templ.NopComponent
+ templ_7745c5c3_Var157 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var157 == nil {
+ templ_7745c5c3_Var157 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- var templ_7745c5c3_Var109 = []any{"shrink-0", color}
- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var109...)
+ var templ_7745c5c3_Var158 = []any{"shrink-0", Color(color)}
+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var158...)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "<svg width=\"1.1em\" height=\"1.1em\" class=\"")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 155, "<svg width=\"1.1em\" height=\"1.1em\" class=\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var110 string
- templ_7745c5c3_Var110, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var109).String())
+ var templ_7745c5c3_Var159 string
+ templ_7745c5c3_Var159, templ_7745c5c3_Err = templ.ResolveAttributeValue(templ.CSSClasses(templ_7745c5c3_Var158).String())
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `website.templ`, Line: 1, Col: 0}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var110)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var159)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 156, "\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templ_7745c5c3_Var108.Render(ctx, templ_7745c5c3_Buffer)
+ templ_7745c5c3_Err = templ_7745c5c3_Var157.Render(ctx, templ_7745c5c3_Buffer)
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "</svg>")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 157, "</svg>")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}