added friends part

This commit is contained in:
Daniel Esteban 2026-04-04 20:19:56 +02:00
parent c5a4535a6a
commit 6f52c2a828
9 changed files with 266 additions and 1279 deletions

View file

@ -165,3 +165,38 @@ sections:
design:
spacing:
padding: ["2rem", "0", "5rem", "0"]
# ─────────────────────────────────────────────
# FRIENDS — Partner logos
# ─────────────────────────────────────────────
- block: markdown
id: friends
content:
title: "Our Friends"
subtitle: "Projects and communities we collaborate with"
text: |
<div class="flex flex-nowrap justify-center items-center gap-6 mt-8 overflow-x-auto">
<a href="https://hybridgroup.com" target="_blank" rel="noopener" title="Technology consultancy behind TinyGo and Gobot"
class="group p-4 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800 transition-all duration-300">
<img src="/media/partners/hybridgroup.svg" alt="theHybridGroup"
class="h-16 w-auto object-contain filter grayscale opacity-60 group-hover:grayscale-0 group-hover:opacity-100 group-hover:scale-110 transition-all duration-300">
</a>
<a href="https://tinygo.org" target="_blank" rel="noopener" title="Go compiler for small places — microcontrollers and WASM"
class="group p-4 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800 transition-all duration-300">
<img src="/media/partners/tinygo.svg" alt="TinyGo"
class="h-16 w-auto object-contain filter grayscale opacity-60 group-hover:grayscale-0 group-hover:opacity-100 group-hover:scale-110 transition-all duration-300">
</a>
<a href="https://mechanoid.io" target="_blank" rel="noopener" title="Framework for building IoT and robotics applications in Go"
class="group p-4 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800 transition-all duration-300">
<img src="/media/partners/mechanoid.svg" alt="Mechanoid"
class="h-16 w-auto object-contain filter grayscale opacity-60 group-hover:grayscale-0 group-hover:opacity-100 group-hover:scale-110 transition-all duration-300">
</a>
<a href="https://tinygokeeb.com" target="_blank" rel="noopener" title="Open source keyboard firmware written in TinyGo"
class="group p-4 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800 transition-all duration-300">
<img src="/media/partners/tinygo-keeb.svg" alt="TinyGo Keeb"
class="h-16 w-auto object-contain filter grayscale opacity-60 group-hover:grayscale-0 group-hover:opacity-100 group-hover:scale-110 transition-all duration-300">
</a>
</div>
design:
spacing:
padding: ["0", "0", "0.5rem", "0"]

View file

@ -20,6 +20,7 @@
"header",
"hr",
"html",
"img",
"input",
"kbd",
"label",
@ -46,6 +47,7 @@
"classes": [
"!mb-4",
"-mr-4",
"-translate-x-1/2",
"-translate-y-2",
"[&.active]:font-bold",
"[&.active]:text-primary-500",
@ -65,6 +67,7 @@
"bg-gradient-to-r",
"bg-gray-100",
"bg-gray-50",
"bg-gray-900",
"bg-green-100",
"bg-primary-100",
"bg-primary-400",
@ -86,9 +89,15 @@
"border-gray-300",
"border-l-2",
"border-l-4",
"border-l-transparent",
"border-neutral-300",
"border-primary-600",
"border-r-4",
"border-r-transparent",
"border-t",
"border-t-4",
"border-t-gray-900",
"bottom-full",
"break-words",
"container",
"content",
@ -97,6 +106,7 @@
"dark:bg-amber-900",
"dark:bg-black/80",
"dark:bg-blue-900",
"dark:bg-gray-700",
"dark:bg-gray-800",
"dark:bg-gray-900",
"dark:bg-gray-900/50",
@ -109,6 +119,7 @@
"dark:border-gray-700",
"dark:border-gray-800",
"dark:border-neutral-600",
"dark:border-t-gray-700",
"dark:border-white",
"dark:divide-gray-800",
"dark:from-primary-900/50",
@ -156,6 +167,7 @@
"ease-out",
"faq-item",
"fill-current",
"filter",
"first:mt-0",
"first:mt-2",
"fixed",
@ -184,16 +196,24 @@
"gap-5",
"gap-6",
"gap-8",
"grayscale",
"grid",
"grid-cols-1",
"grid-cols-2",
"grid-cols-3",
"group",
"group-hover:-translate-x-[2px]",
"group-hover:bg-primary-700",
"group-hover:decoration-primary-500",
"group-hover:grayscale-0",
"group-hover:opacity-100",
"group-hover:scale-110",
"group-hover:text-primary-600",
"group-hover:underline",
"h-0",
"h-12",
"h-14",
"h-16",
"h-2",
"h-3",
"h-4",
@ -250,8 +270,12 @@
"leading-6",
"leading-8",
"left-0",
"left-1/2",
"lg:flex",
"lg:gap-12",
"lg:grid-cols-3",
"lg:grid-cols-5",
"lg:h-16",
"lg:h-[calc(100vh-var(--navbar-height))]",
"lg:hidden",
"lg:inline-block",
@ -260,8 +284,10 @@
"lg:pb-0",
"lg:prose-xl",
"lg:px-8",
"lg:py-24",
"lg:space-x-2",
"lg:sticky",
"lg:text-5xl",
"lg:text-6xl",
"lg:w-auto",
"line-clamp-2",
@ -286,6 +312,7 @@
"mb-6",
"mb-8",
"md:flex-row",
"md:grid-cols-4",
"md:ml-4",
"md:order-2",
"md:px-12",
@ -325,9 +352,11 @@
"navbar-nav",
"no-prose",
"no-underline",
"object-contain",
"opacity-0",
"opacity-100",
"opacity-25",
"opacity-60",
"opacity-75",
"opacity-80",
"open",
@ -338,9 +367,11 @@
"origin-center",
"outline-none",
"overflow-hidden",
"overflow-x-auto",
"overflow-y-auto",
"p-0.5",
"p-1",
"p-4",
"p-6",
"page-body",
"page-footer",
@ -416,6 +447,10 @@
"sidebar-active-item",
"sm:block",
"sm:grid-cols-2",
"sm:grid-cols-3",
"sm:h-14",
"sm:px-6",
"sm:py-20",
"sm:text-4xl",
"sm:text-6xl",
"space-y-4",
@ -459,6 +494,7 @@
"top-0",
"top-16",
"top-20",
"top-full",
"tracking-tight",
"tracking-wider",
"tracking-widest",
@ -466,11 +502,13 @@
"transition",
"transition-all",
"transition-colors",
"transition-opacity",
"transition-transform",
"translate-y-0",
"translate-y-4",
"underline",
"uppercase",
"w-0",
"w-12",
"w-2",
"w-3",
@ -480,10 +518,12 @@
"w-6",
"w-64",
"w-8",
"w-auto",
"w-full",
"whitespace-nowrap",
"xl:block",
"xl:grid-cols-4",
"xl:grid-cols-6",
"xl:space-x-8",
"z-10",
"z-30",
@ -502,6 +542,7 @@
"faq",
"features",
"firmware",
"friends",
"get-involved",
"hb-notification-container",
"hero",

View file

@ -0,0 +1,114 @@
<footer class="container mx-auto flex flex-col justify-items-center text-sm leading-6 mt-6 mb-4 text-slate-700 dark:text-slate-200">
{{ partial "functions/get_hook" (dict "hook" "footer-start" "context" .) }}
{{/* Load footer block */}}
{{- $footer_config := site.Params.hugoblox.footer | default dict -}}
{{- $footer_section_name := partial "hbx/resolve-block-param" (dict "config" $footer_config "context" "footer") | default "minimal" -}}
{{ $footer_section_path := printf "components/footers/%s.html" $footer_section_name }}
{{ if not (templates.Exists (printf "_partials/%s" $footer_section_path)) }}
{{ errorf "Check your `params.yaml`. Cannot find footer block at `layouts/_partials/%s`" $footer_section_path }}
{{ end }}
{{ partial $footer_section_path . }}
{{/* Attribution - PLEASE DO NOT REMOVE THIS, SUPPORT OPEN SOURCE */}}
{{/* Check for Pro license key */}}
{{- $license_key := getenv "HUGO_BLOX_LICENSE" -}}
{{- $has_pro_license := false -}}
{{- if $license_key -}}
{{/* Validate UUID v4 format */}}
{{- $uuid_pattern := "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" -}}
{{- $is_valid_format := findRE $uuid_pattern (lower $license_key) -}}
{{- $has_pro_license = gt (len $is_valid_format) 0 -}}
{{- end -}}
{{/* Check user preference */}}
{{- $wants_to_hide := site.Params.hugoblox.pro.hide_attribution | default false -}}
{{/* Determine if we show attribution */}}
{{- $show_attribution := true -}}
{{- if $has_pro_license -}}
{{/* Pro user - respect their choice */}}
{{- $show_attribution = not $wants_to_hide -}}
{{- else if $wants_to_hide -}}
{{/* Free user trying to hide - show warning and attribution */}}
{{- warnf "Attribution removal requires HugoBlox Premium. Get Premium at https://hugoblox.com/premium \nAlready purchased Premium? Reach out in the Premium Discord channel for support." -}}
{{- $show_attribution = true -}}
{{- end -}}
{{- if $show_attribution -}}
{{- $base := "https://hugoblox.com" -}}
{{- $tid := "" -}}
{{- $ref := .Site.Params.hugoblox.pro.affiliate_code | default "" -}}
{{/* Detect Template */}}
{{ $hugoblox_file := "" }}
{{ if fileExists "hugoblox.yaml" }}
{{ $hugoblox_file = readFile "hugoblox.yaml" }}
{{ if $hugoblox_file }}
{{ $hugoblox_data := $hugoblox_file | transform.Unmarshal }}
{{ $tid = $hugoblox_data.template.id | default "" }}
{{ end }}
{{ end }}
{{/* Per-site variant selection */}}
{{- $brandOptions := slice "Hugo Blox" "Hugo Blox Kit" "Hugo Blox — Open Source" -}}
{{- $ctaWhenTemplate := slice "Duplicate this template →" "Clone this template →" "Build yours →" "Create yours →" "Build your site →" "Create your site →" -}}
{{- $ctaNoTemplate := slice "Start free →" "Build yours →" "Create yours →" "Build your site →" "Create your site →" -}}
{{- $seed := .Site.BaseURL -}}
{{- $h := md5 $seed -}}
{{- $digits := replaceRE "[^0-9]" "" $h -}}
{{- if lt (len $digits) 6 }}{{- $digits = printf "%s123456" $digits -}}{{- end -}}
{{- $first6 := substr $digits 0 6 -}}
{{/* Fix for Hugo's int() function treating leading zeros as octal numbers.
Strings like "095186" fail because 8 and 9 aren't valid octal digits.
Replace leading zero with 1 to ensure valid decimal parsing. */}}
{{- if eq (substr $first6 0 1) "0" -}}
{{- $first6 = printf "1%s" (substr $first6 1 5) -}}
{{- end -}}
{{- $n := int $first6 -}}
{{- $brandText := index $brandOptions (mod $n (len $brandOptions)) -}}
{{- $ctaText := cond (ne $tid "")
(index $ctaWhenTemplate (mod $n (len $ctaWhenTemplate)))
(index $ctaNoTemplate (mod $n (len $ctaNoTemplate))) -}}
{{- $target := cond (ne $tid "")
(printf "%s/templates/%s/start" $base $tid)
(printf "%s/start" $base) -}}
{{- $brandHref := printf "%s?utm_source=site_footer&utm_medium=referral&utm_campaign=poweredby_oss&utm_content=brand_%s"
$base (cond (ne $tid "") (printf "%s" $tid) "na") -}}
{{- $ctaHref := printf "%s?utm_source=site_footer&utm_medium=referral&utm_campaign=poweredby_oss&utm_content=cta_%s"
$target (cond (ne $tid "") (printf "%s" $tid) "na") -}}
{{- if ne $ref "" -}}
{{- $brandHref = printf "%s&ref=%s" $brandHref $ref -}}
{{- $ctaHref = printf "%s&ref=%s" $ctaHref $ref -}}
{{- end -}}
<p class="powered-by text-center text-sm opacity-80 py-1">
{{ $published_with := "Made with {hugoblox}." }}
{{ $i18n_published_with := i18n "published_with" | default $published_with }}
{{ $defaultEnText := "Build yours →" }}
{{ $i18n_ctaText := i18n "poweredby_button" | default $ctaText }}
{{ if eq $i18n_ctaText $defaultEnText }}
{{ $i18n_ctaText = $ctaText }}
{{ end }}
{{ if not (findRE "{hugoblox}" $i18n_published_with) }}
{{ warnf "Please attribute Hugo Blox using `{hugoblox}` in the i18n `published_with` text or sponsor with All Access to remove attribution." }}
{{ $i18n_published_with = $published_with }}
{{ end }}
{{ $i18n_published_with = replace $i18n_published_with "{hugoblox}" (printf "<a class=\"underline hover:opacity-100\" href=\"%s\" target=\"_blank\" rel=\"noopener\" data-hbx=\"poweredby_brand\">%s</a>" $brandHref $brandText) | safeHTML }}
{{ $i18n_published_with = replace $i18n_published_with "{repo_link}" "<a href=\"https://github.com/HugoBlox/kit\" target=\"_blank\" rel=\"noopener\">" | safeHTML }}
{{ $i18n_published_with = replace $i18n_published_with "{/repo_link}" "</a>" | safeHTML }}
{{ $i18n_published_with | safeHTML }}
<a class="inline-flex items-center rounded px-2 py-0.5 border border-current ms-2 text-xs hover:opacity-100"
href="{{ $ctaHref }}" target="_blank" rel="noopener" data-hbx="poweredby_cta">{{ $i18n_ctaText }}</a>
</p>
{{- end -}}{{/* end $show_attribution */}}
</footer>

1320
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -17,6 +17,7 @@
},
"dependencies": {
"@tailwindcss/cli": "^4.1.12",
"@tailwindcss/oxide-linux-x64-gnu": "^4.2.2",
"@tailwindcss/typography": "^0.5.10",
"pagefind": "^1.4.0",
"preact": "^10.27.2",

View file

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 260 50" fill="none">
<text x="10" y="20" font-family="ui-monospace, 'Courier New', monospace" font-size="11" font-weight="700" fill="#0d9488" letter-spacing="1">the</text>
<text x="36" y="20" font-family="ui-monospace, 'Courier New', monospace" font-size="11" font-weight="700" fill="#1e293b" letter-spacing="1">HybridGroup</text>
<line x1="10" y1="26" x2="210" y2="26" stroke="#0d9488" stroke-width="1" stroke-dasharray="3 2"/>
<text x="10" y="42" font-family="ui-sans-serif, sans-serif" font-size="9" fill="#94a3b8" letter-spacing="2.5">TECHNOLOGY CONSULTANCY</text>
</svg>

After

Width:  |  Height:  |  Size: 637 B

View file

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 230 50" fill="none">
<rect x="8" y="10" width="30" height="30" rx="4" stroke="#6366f1" stroke-width="2" fill="#6366f1" fill-opacity="0.1"/>
<circle cx="23" cy="25" r="7" stroke="#6366f1" stroke-width="2"/>
<circle cx="23" cy="25" r="3" fill="#6366f1"/>
<line x1="23" y1="10" x2="23" y2="6" stroke="#6366f1" stroke-width="2" stroke-linecap="round"/>
<line x1="23" y1="44" x2="23" y2="40" stroke="#6366f1" stroke-width="2" stroke-linecap="round"/>
<line x1="8" y1="25" x2="4" y2="25" stroke="#6366f1" stroke-width="2" stroke-linecap="round"/>
<line x1="42" y1="25" x2="38" y2="25" stroke="#6366f1" stroke-width="2" stroke-linecap="round"/>
<text x="50" y="31" font-family="ui-sans-serif, sans-serif" font-size="20" font-weight="700" fill="#1e293b" letter-spacing="-0.5">mechanoid</text>
</svg>

After

Width:  |  Height:  |  Size: 861 B

View file

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 50" fill="none">
<rect x="6" y="10" width="36" height="28" rx="4" stroke="#ec4899" stroke-width="2" fill="#ec4899" fill-opacity="0.08"/>
<rect x="11" y="15" width="6" height="5" rx="1" fill="#ec4899" opacity="0.6"/>
<rect x="19" y="15" width="6" height="5" rx="1" fill="#ec4899" opacity="0.6"/>
<rect x="27" y="15" width="6" height="5" rx="1" fill="#ec4899" opacity="0.6"/>
<rect x="11" y="23" width="6" height="5" rx="1" fill="#ec4899" opacity="0.6"/>
<rect x="19" y="23" width="14" height="5" rx="1" fill="#ec4899"/>
<rect x="35" y="23" width="4" height="5" rx="1" fill="#ec4899" opacity="0.6"/>
<text x="52" y="19" font-family="ui-monospace, 'Courier New', monospace" font-size="10" font-weight="600" fill="#64748b" letter-spacing="2">TinyGo</text>
<text x="50" y="37" font-family="ui-sans-serif, sans-serif" font-size="17" font-weight="800" fill="#1e293b" letter-spacing="-0.5">Keeb</text>
</svg>

After

Width:  |  Height:  |  Size: 976 B

View file

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 180 50" fill="none">
<circle cx="22" cy="25" r="16" fill="#00ACD7" opacity="0.12"/>
<circle cx="22" cy="25" r="16" stroke="#00ACD7" stroke-width="2"/>
<text x="22" y="30" text-anchor="middle" font-family="ui-sans-serif, sans-serif" font-size="13" font-weight="800" fill="#00ACD7">Go</text>
<text x="50" y="18" font-family="ui-sans-serif, sans-serif" font-size="10" font-weight="500" fill="#64748b" letter-spacing="3">TINY</text>
<text x="48" y="36" font-family="ui-sans-serif, sans-serif" font-size="17" font-weight="800" fill="#1e293b" letter-spacing="1">Go</text>
</svg>

After

Width:  |  Height:  |  Size: 636 B