diff --git a/src/index.html b/src/index.html index 3f596dd..0a16824 100644 --- a/src/index.html +++ b/src/index.html @@ -741,7 +741,8 @@ $ curl localhost:2019/config/ | jq
- +
+
diff --git a/src/resources/css/home.css b/src/resources/css/home.css index 33e893e..3e486da 100644 --- a/src/resources/css/home.css +++ b/src/resources/css/home.css @@ -269,6 +269,13 @@ h3 a { color: var(--text-color-muted); font-style: italic; } +.testimonial-role a { + color: inherit; +} +.testimonial-role a:not([href]) { + text-decoration: none; + color: inherit; +} diff --git a/src/resources/js/home.js b/src/resources/js/home.js index 3a75076..3a9aa6c 100644 --- a/src/resources/js/home.js +++ b/src/resources/js/home.js @@ -7,18 +7,22 @@ const resp = fetch("/resources/testimonials.json").then(async resp => { const tpl = cloneTemplate('#tpl-testimonial'); $_('.testimonial-picture', tpl).src = testimonial.picture || ""; $_('.testimonial-quote', tpl).innerText = `"${testimonial.quote}"`; - if (testimonial.username) { - $_('.testimonial-name', tpl).innerText = ` @${testimonial.username}`; - } else { + if (testimonial.name) { $_('.testimonial-name', tpl).innerText = testimonial.name || ""; + } else { + $_('.testimonial-name', tpl).innerText = ` @${testimonial.username}`; } if (testimonial.link) { $_('.testimonial-name', tpl).href = testimonial.link; } - $_('.testimonial-role', tpl).innerText = testimonial.role || ""; + $_('.testimonial-role-text', tpl).innerText = testimonial.role || ""; if (testimonial.org) { - $_('.testimonial-role', tpl).appendChild(document.createElement("br")); - $_('.testimonial-role', tpl).appendChild(document.createTextNode(testimonial.org)); + console.log($_('.testimonial-org', tpl), tpl); + // $_('.testimonial-role', tpl).prepend(document.createElement("br")); + $_('.testimonial-org', tpl).innerText = testimonial.org; + if (testimonial.org_link) { + $_('.testimonial-org', tpl).href = testimonial.org_link; + } } $_(`.testimonial-col:nth-child(${i%3 + 1})`).append(tpl); } diff --git a/src/resources/testimonials.json b/src/resources/testimonials.json index cd4fe16..252ff44 100644 --- a/src/resources/testimonials.json +++ b/src/resources/testimonials.json @@ -3,6 +3,7 @@ "name": "Brad Warren", "role": "Lead Engineer of Certbot", "org": "Electronic Frontier Foundation (EFF)", + "org_link": "https://eff.org", "picture": "https://sea1.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/bmw/144/7797_2.png", "quote": "I think we should consider making Caddy the default ACME client recommendation. … It allows for better integration between the TLS server and the ACME management of those certificates. … [ACME clients with] Apache and NGINX are inherently more error prone and brittle than having the TLS server manage its certificates itself. … Caddy is written in a memory-safe language. Adoption of memory-safe programming languages is something that both ISRG and the broader computer security community have been encouraging more and more lately.", "link": "https://community.letsencrypt.org/t/should-our-default-client-recommendation-be-caddy-if-not-why-not/199949?u=mholt" @@ -11,6 +12,7 @@ "name": "Josh Aas", "role": "Executive Director", "org": "Let's Encrypt", + "org_link": "https://letsencrypt.org", "picture": "https://sea1.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/josh/144/10641_2.png", "quote": "Caddy is impressive. This is what we want, setting up a secure website.", "link": "https://www.youtube.com/watch?v=OE5UhQGg_Fo" @@ -18,9 +20,19 @@ { "name": "Stripe", "role": "Global Leader of Fintech", + "link": "https://stripe.com", "picture": "https://pbs.twimg.com/profile_images/1618575477781807105/iDuRlqTe_400x400.jpg", "quote": "With its extensible architecture and on-line config API, Caddy powers many of Stripe's internal systems." }, + { + "name": "Helmut Januschka", + "username": "hjanuschka", + "role": "Head of Engineering", + "org": "Kronen Zeitung", + "org_link": "https://krone.at", + "picture": "https://pbs.twimg.com/profile_images/1445775240315879427/HvZitB1L_400x400.jpg", + "quote": "About 3-4 TB of traffic reaches our origin servers every day. NGINX did a great job, but we were never 100% happy with the config format; it mostly \"kind of\" worked. When we tried Caddy, we realized in a moment that we need to eliminate NGINX. We felt insecure by such a small config, 1/10th the size of our NGINX config. After deploying a single instance, it outperformed all other NGINX instances (4-10). Now we go all-in on Caddy: A legible config that more than 1 person understands; custom domain rollout is 100% automated; NO ONE (squid, nginx, varnish) can do what the replace-response plugin does -- truly a holy grail; we run our own plugins as well; and we spend 70% LESS on our CPU and memory resources. We are super happy with the product, with the mindset behind it, and the idea to make the web \"easy again\" on your own infrastructure." + }, { "name": "Robert M.", "role": "Software Developer", @@ -220,13 +232,6 @@ "quote": "First off, I want to say thanks so much for Caddy. It's so simple to get started and the performance is outstanding. Additionally, it's the only reverse proxy I could find which properly load balances across multiple IPs returned from a single A record (dynamic upstreams) while also supporting keepalives ⭐", "link": "https://github.com/caddyserver/caddy/issues/4211#issuecomment-1952694745" }, - { - "name": "Paul Frybarger", - "username": "pfrybar", - "picture": "https://avatars.githubusercontent.com/u/1022924?v=4", - "quote": "First off, I want to say thanks so much for Caddy. It's so simple to get started and the performance is outstanding. Additionally, it's the only reverse proxy I could find which properly load balances across multiple IPs returned from a single A record (dynamic upstreams) while also supporting keepalives ⭐", - "link": "https://github.com/caddyserver/caddy/issues/4211#issuecomment-1952694745" - }, { "name": "William Desportes", "username": "wdesportes",