More work on marketing pages

This commit is contained in:
Matthew Holt 2023-12-05 20:55:44 -07:00 committed by Francis Lavoie
parent 12564261f4
commit f44e6af8ad
No known key found for this signature in database
GPG key ID: 0F66EE1687682239
16 changed files with 479 additions and 145 deletions

View file

@ -1701,7 +1701,7 @@
{{end}} {{end}}
</div> </div>
<p> <p>
Caddy is a living project with a TON of features. This page is not yet a comprehensive list of all the features and benefits provided by Caddy because there's so many. We welcome <a href="https://github.com/caddyserver/website">contributions</a> on GitHub! Caddy is a living project with a TON of features. This page is not yet a comprehensive list of all the features and benefits provided by Caddy because there's so many to mention. We welcome <a href="https://github.com/caddyserver/website">contributions</a> on GitHub!
</p> </p>
</div> </div>

View file

@ -44,19 +44,19 @@ file_server /downloads/* {
# Compress everything else that would benefit # Compress everything else that would benefit
encode zstd gzip encode zstd gzip
# Get files from a database # Static site using database as file system
file_server /database/* { file_server /database/* {
fs sqlite data.sql fs sqlite data.sql
} }
# Get files from within the Caddy binary # Static site embedded within the Caddy binary
file_server /embedded/* { file_server /embedded/* {
fs embedded fs embedded
} }
# (Range/Etag/etc. all work without extra config) # (Range/Etag/etc. all work without extra config)
# Serve static site with directory listings as needed # Serve static site with directory listings
file_server browse file_server browse
``` ```

View file

@ -1,6 +1,6 @@
<footer> <footer>
<div class="wrapper"> <div class="wrapper">
<div> <div class="logo-area">
<img src="/resources/images/logo-dark.svg" class="logo" alt="Caddy web server"> <img src="/resources/images/logo-dark.svg" class="logo" alt="Caddy web server">
<p> <p>
A free <a href="https://github.com/caddyserver/caddy">open source</a> project A free <a href="https://github.com/caddyserver/caddy">open source</a> project
@ -16,40 +16,34 @@
</div> </div>
<div class="link-col"> <div class="link-col">
<div class="col-header">Project</div> <div class="col-header">Project</div>
<a href="#">Features</a> <a href="/features">Features</a>
<a href="#">Download</a> <a href="/download">Download</a>
<a href="#">Documentation</a> <a href="/docs">Documentation</a>
<a href="#">Get involved</a>
</div> </div>
<div class="link-col"> <div class="link-col">
<div class="col-header">Business services</div> <div class="col-header">Business services</div>
<a href="#">Support</a> <a href="/support">Support</a>
<a href="#">Development</a> <a href="/sponsor">Sponsorships</a>
<a href="#">Training</a>
</div> </div>
<div class="link-col"> <div class="link-col">
<div class="col-header">Community</div> <div class="col-header">Community</div>
<a href="https://caddy.community">Forum</a> <a href="https://caddy.community">Forum</a>
<a href="https://github.com/caddyserver">GitHub</a> <a href="https://github.com/caddyserver">GitHub</a>
<a href="https://twitter.com/caddyserver">Twitter / X</a> <a href="https://twitter.com/caddyserver">Twitter / X</a>
<a href="/research">Research</a> <a href="https://scholar.google.com/scholar?q=caddy+web+server">Research</a>
</div>
<div class="link-col">
<div class="col-header">Contact</div>
<a href="https://caddy.community">Sales</a>
<a href="https://github.com/caddyserver">Email</a>
</div> </div>
</div> </div>
<div class="wrapper nostalgia"> <div class="wrapper nostalgia">
<p>Caddy supports an open Web that promotes privacy, preserves data ownership, fosters innovation, freely allows varieties of client software technologies, and safeguards human sanctity.</p> <p>Caddy supports an open Web that promotes privacy, preserves data ownership, fosters innovation, freely allows varieties of client software, and safeguards human sanctity.</p>
<div class="nostalgia-badges"> <div class="nostalgia-badges">
<img src="/resources/images/nostalgia/get.gif"> <img src="/resources/images/nostalgia/get.gif" title="Honoring early Web clients">
<img src="/resources/images/nostalgia/microsoft-ie.gif"> <img src="/resources/images/nostalgia/microsoft-ie.gif" title="Honoring early Web clients">
<img src="/resources/images/nostalgia/now_anim.gif"> <img src="/resources/images/nostalgia/now_anim.gif" title="Honoring early Web clients">
<div class="w3c"> <div class="w3c">
<img src="/resources/images/nostalgia/valid_html5_yellow.png" title="This site uses HTML 5"> <img src="/resources/images/nostalgia/valid_html5_yellow.png" title="This site uses HTML 5">
<img src="/resources/images/nostalgia/valid_css3_blue.png" title="This site uses CSS 3"> <img src="/resources/images/nostalgia/valid_css3_blue.png" title="This site uses CSS 3">
</div> </div>
<div title="Don't forget to sign our guestbook!">{{ maybe "hitCounter" .OriginalReq.URL.Path }}</div>
</div> </div>
</div> </div>
</footer> </footer>

View file

@ -4,6 +4,19 @@
<a href="https://zerossl.com"> <a href="https://zerossl.com">
A ZeroSSL Project A ZeroSSL Project
</a> </a>
<a href="https://store.caddyserver.com">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-building-store" width="24" height="24"
viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round"
stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M3 21l18 0" />
<path d="M3 7v1a3 3 0 0 0 6 0v-1m0 1a3 3 0 0 0 6 0v-1m0 1a3 3 0 0 0 6 0v-1h-18l2 -4h14l2 4" />
<path d="M5 21l0 -10.15" />
<path d="M19 21l0 -10.15" />
<path d="M9 21v-4a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v4" />
</svg>
Store
</a>
<a href="javascript:"> <a href="javascript:">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
@ -177,17 +190,17 @@
<a href="/features">Features</a> <a href="/features">Features</a>
</li> </li>
<li> <li>
<a href="https://store.caddyserver.com">Store</a> <a href="/account">Account</a>
</li> </li>
<li> <li>
<a href="/account">Account</a> <a href="/support">Support</a>
</li> </li>
</ul> </ul>
</nav> </nav>
<div class="actions"> <div class="actions">
<a href="/download" class="button">Download</a> <a href="/download" class="button primary">Download</a>
<a href="/sponsor" class="button primary">Sponsor</a> <a href="/sponsor" class="button purple">Sponsor</a>
</div> </div>
</div> </div>
</header> </header>

View file

@ -357,6 +357,44 @@
</div> </div>
</section> </section>
<section class="light feature">
<div class="wrapper">
<h2 id="experts-recommend">Recommended by experts</h2>
<p>
Academic and industry experts recommend Caddy, which has been cited in peer-reviewed journals for its security defaults, best practices, and its uniquely advanced feature set.
</p>
<div class="cols">
<div class="col">
<a href="https://doi.org/10.1145/3319535.3363192"><img src="/resources/images/cites/aas.png" class="cite"></a>
<p>
"Servers running Caddy exhibit nearly ubiquitous HTTPS deployment and use modern TLS configurations. ... We hope to see other popular server software follow Caddy's lead."
</p>
<p class="cite">
&mdash;<b>Josh Aas, Richard Barnes, Benton Case, Zakir Durumeric, Peter Eckersley, Alan Flores-López, J. Alex Halderman, Jacob Hoffman-Andrews, James Kasten, Eric Rescorla, Seth Schoen, and Brad Warren.</b> 2019. <i>Let's Encrypt: An Automated Certificate Authority to Encrypt the Entire Web.</i> In Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security (CCS '19). Association for Computing Machinery, New York, NY, USA, 24732487. <a href="https://doi.org/10.1145/3319535.3363192">https://doi.org/10.1145/3319535.3363192</a>
</p>
</div>
<div class="col">
<a href="https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/krombholz"><img src="/resources/images/cites/krombholz.png" class="cite"></a>
<p>
"TLS must be enabled by default ... and the Caddy web server is a good and usable example."
</p>
<p class="cite">
&mdash;<b>Katharina Krombholz, Wilfried Mayer, Martin Schmiedecker, and Edgar Weippl.</b> 2017. <i>"I Have No Idea What I'm Doing" - On the Usability of Deploying HTTPS.</i> In 26th USENIX Security Symposium (USENIX Security 17), USENIX Association, Vancouver, BC, 1339-1356. Retrieved from <a href="https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/krombholz">https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/krombholz</a>
</p>
</div>
<div class="col">
<a href="https://doi.org/10.1145/2987443.2987480"><img src="/resources/images/cites/springall.png" class="cite"></a>
<p>
"No popular server software does [session ticket key rotation], with the exception of Caddy."
</p>
<p class="cite">
&mdash;<b>Drew Springall, Zakir Durumeric, and J. Alex Halderman.</b> 2016. <i>Measuring the Security Harm of TLS Crypto Shortcuts.</i> In Proceedings of the 2016 Internet Measurement Conference (IMC '16), Association for Computing Machinery, Santa Monica, California, USA, 33-47. <a href="https://doi.org/10.1145/2987443.2987480">https://doi.org/10.1145/2987443.2987480</a>
</p>
</div>
</div>
</div>
</section>
<section class="diagonal down dark feature"> <section class="diagonal down dark feature">
<div class="wrapper"> <div class="wrapper">
<h2 id="reverse-proxy">A forward-thinking reverse proxy</h2> <h2 id="reverse-proxy">A forward-thinking reverse proxy</h2>
@ -523,7 +561,7 @@ $ curl localhost:2019/config/ | jq<div class="blinking"></div></code>
<div> <div>
<h3>Caddyfile</h3> <h3>Caddyfile</h3>
<p> <p>
Although JSON offers ultimate control, most people prefer to use a <a href="/docs/caddyfile">Caddyfile</a> because it lets you get a production-ready site up and running in just a few hand-written lines. It's not uncommon for Caddyfiles to be just <a href="https://twitter.com/yakczar/status/713712646147743744">~15% the size of a less-capable nginx config</a>. Although JSON offers ultimate control, most people prefer to use a <a href="/docs/caddyfile">Caddyfile</a> because it lets you get a production-ready site up and running in just a few hand-written lines. It's not uncommon for Caddyfiles to be <a href="https://twitter.com/bwesterb/status/1708903488426512668">just ~15-25% the size of a less-capable nginx config</a>.
</p> </p>
</div> </div>
<div> <div>
@ -536,55 +574,25 @@ $ curl localhost:2019/config/ | jq<div class="blinking"></div></code>
<div class="asides"> <div class="asides">
<div> <div>
<div class="display left"> <div class="display left">
<code class="dark">$ caddy run \ <code class="dark">$ caddy run \
--config nginx.conf \ --config nginx.conf \
--adapter nginx<div class="blinking"></div></code> --adapter nginx<div class="blinking"></div></code>
</div>
</div> </div>
</div> <div>
<div> <h3>Config adapters</h3>
<h3>Config adapters</h3>
<p>
Power Caddy with anything, even NGINX config files!
</p>
<p>
With first-class support for <a href="/docs/config-adapters">config adaptation</a>, you can configure your web server with your favorite format: YAML, TOML, CUE, NGINX, HCL, Dhall, JSON with comments, or even a MySQL database... or anything else. The Caddyfile is a built-in config adapter.
</p>
<!-- <p>
Fewer moving parts means fewer failures, lower costs, and less sunk time.
</p> -->
<!-- <a href="/docs/config-adapters" class="gray button">Config adapters</a> -->
</div>
</div>
<!-- <div class="cols">
<div class="col">
<h3 class="green">Config adapters</h3>
<p> <p>
Use whatever config format you like, such as NGINX config, YAML, TOML, CUE, HCL, Dhall, or even a MySQL database! Power Caddy with anything, even NGINX config files!
</p> </p>
</div>
<div class="col">
<h3 class="purple">Human-friendly Caddyfile</h3>
<p> <p>
The Caddyfile is most people's preferred format for hand-written configurations because it is simple to read and write. With first-class support for <a href="/docs/config-adapters">config adaptation</a>, you can configure your web server with your favorite format: YAML, TOML, CUE, NGINX, HCL, Dhall, JSON with comments, or even a MySQL database... or anything else. The Caddyfile is a built-in config adapter.
</p> </p>
</div> <!-- <p>
<div class="col"> Fewer moving parts means fewer failures, lower costs, and less sunk time.
<h3 class="blue">Admin API</h3> </p> -->
<p> <!-- <a href="/docs/config-adapters" class="gray button">Config adapters</a> -->
Caddy's config is managed through an administration API that is programmable and makes dynamic changes a breeze.
</p>
</div>
</div> -->
<div class="testimonials-container">
<div class="testimonials">
<div class="testimonial-col"></div>
<div class="testimonial-col"></div>
<div class="testimonial-col"></div>
</div> </div>
</div> </div>
</div> </div>
@ -603,7 +611,7 @@ $ curl localhost:2019/config/ | jq<div class="blinking"></div></code>
</p> </p>
<div class="cols"> <div class="cols">
<div class="col"> <div class="col">
<h3 class="green">Unlimited power</h3> <h3 class="green"><a href="https://i.giphy.com/media/xUA7ba9aksCuKR9dgA/giphy.webp" target="_blank" title="Important visualization">Unlimited power</a></h3>
<p> <p>
Nearly every part of the config that "does something" is pluggable. Caddy offers unlimited capabilities in such a lean package. Nearly every part of the config that "does something" is pluggable. Caddy offers unlimited capabilities in such a lean package.
</p> </p>
@ -625,7 +633,7 @@ $ curl localhost:2019/config/ | jq<div class="blinking"></div></code>
</section> </section>
<section class="light feature"> <section class="diagonal down light feature">
<div class="wrapper"> <div class="wrapper">
<h2 id="gold-standard">The <span class="gold">gold standard</span> web server</h2> <h2 id="gold-standard">The <span class="gold">gold standard</span> web server</h2>
<p> <p>
@ -659,37 +667,15 @@ $ curl localhost:2019/config/ | jq<div class="blinking"></div></code>
<section class="light gray feature"> <section class="light gray feature">
<div class="wrapper"> <div class="wrapper">
<h2 id="experts-recommend">Recommended by experts</h2> <h2>Take everyone's word for it</h2>
<p> <p>
Academic and industry experts recommend Caddy, which has been cited in peer-reviewed journals for its security defaults, best practices, and its uniquely advanced feature set. We're biased. But Caddy is widely relied upon and praised by a diverse global user base because of its ease of use, secure defaults, powerful feature set, and business-changing cost reductions.
</p> </p>
<div class="cols"> <div class="testimonials-container">
<div class="col"> <div class="testimonials">
<a href="https://doi.org/10.1145/3319535.3363192"><img src="/resources/images/cites/aas.png" class="cite"></a> <div class="testimonial-col"></div>
<p> <div class="testimonial-col"></div>
"Servers running Caddy exhibit nearly ubiquitous HTTPS deployment and use modern TLS configurations. ... We hope to see other popular server software follow Caddy's lead." <div class="testimonial-col"></div>
</p>
<p class="cite">
&mdash;<b>Josh Aas, Richard Barnes, Benton Case, Zakir Durumeric, Peter Eckersley, Alan Flores-López, J. Alex Halderman, Jacob Hoffman-Andrews, James Kasten, Eric Rescorla, Seth Schoen, and Brad Warren.</b> 2019. <i>Let's Encrypt: An Automated Certificate Authority to Encrypt the Entire Web.</i> In Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security (CCS '19). Association for Computing Machinery, New York, NY, USA, 24732487. <a href="https://doi.org/10.1145/3319535.3363192">https://doi.org/10.1145/3319535.3363192</a>
</p>
</div>
<div class="col">
<a href="https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/krombholz"><img src="/resources/images/cites/krombholz.png" class="cite"></a>
<p>
"TLS must be enabled by default ... and the Caddy web server is a good and usable example."
</p>
<p class="cite">
&mdash;<b>Katharina Krombholz, Wilfried Mayer, Martin Schmiedecker, and Edgar Weippl.</b> 2017. <i>"I Have No Idea What I'm Doing" - On the Usability of Deploying HTTPS.</i> In 26th USENIX Security Symposium (USENIX Security 17), USENIX Association, Vancouver, BC, 1339-1356. Retrieved from <a href="https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/krombholz">https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/krombholz</a>
</p>
</div>
<div class="col">
<a href="https://doi.org/10.1145/2987443.2987480"><img src="/resources/images/cites/springall.png" class="cite"></a>
<p>
"No popular server software does [session ticket key rotation], with the exception of Caddy."
</p>
<p class="cite">
&mdash;<b>Drew Springall, Zakir Durumeric, and J. Alex Halderman.</b> 2016. <i>Measuring the Security Harm of TLS Crypto Shortcuts.</i> In Proceedings of the 2016 Internet Measurement Conference (IMC '16), Association for Computing Machinery, Santa Monica, California, USA, 33-47. <a href="https://doi.org/10.1145/2987443.2987480">https://doi.org/10.1145/2987443.2987480</a>
</p>
</div> </div>
</div> </div>
</div> </div>
@ -708,9 +694,9 @@ $ curl localhost:2019/config/ | jq<div class="blinking"></div></code>
<div class="testimonial-quote"> <div class="testimonial-quote">
</div> </div>
<div class="testimonial-name"> <a class="testimonial-name" target="_blank">
</div> </a>
<div class="testimonial-role"> <div class="testimonial-role">
</div> </div>

View file

@ -307,7 +307,6 @@ button.purple,
background: linear-gradient(165deg, rgba(170,81,212,1) 20%, rgba(37,159,235,1) 100%); background: linear-gradient(165deg, rgba(170,81,212,1) 20%, rgba(37,159,235,1) 100%);
color: white !important; /* sigh... to prevent being stepped on by very specific link color rule on the sponsors page */ color: white !important; /* sigh... to prevent being stepped on by very specific link color rule on the sponsors page */
font-weight: bold; font-weight: bold;
font-size: 90%;
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.25) box-shadow: 0 2px 2px rgba(0, 0, 0, 0.25)
} }
@ -563,6 +562,10 @@ footer a:hover {
color: #76b8b8; color: #76b8b8;
} }
footer .logo-area {
margin-right: auto;
}
footer .wrapper { footer .wrapper {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
@ -572,7 +575,7 @@ footer .wrapper {
footer .nostalgia { footer .nostalgia {
display: block; display: block;
text-align: center; text-align: center;
margin-top: 50px; margin-top: 40px;
} }
footer .nostalgia-badges { footer .nostalgia-badges {
@ -582,6 +585,7 @@ footer .nostalgia-badges {
width: 100%; width: 100%;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
margin-top: 40px;
} }
footer .nostalgia p { footer .nostalgia p {

View file

@ -85,6 +85,9 @@ button.primary:hover,
.button.primary:hover { .button.primary:hover {
color: white; color: white;
} }
.button.purple:hover {
border: none;
}
main { main {

View file

@ -1,8 +1,3 @@
.hero-content {
margin-bottom: 0;
padding-bottom: 50px;
}
h3 { h3 {
margin-left: 0; margin-left: 0;
} }

View file

@ -18,6 +18,7 @@ h1 {
text-align: left; text-align: left;
text-transform: uppercase; text-transform: uppercase;
margin-bottom: 0; margin-bottom: 0;
line-height: .9;
background-image: unset; background-image: unset;
-webkit-background-clip: unset; -webkit-background-clip: unset;
@ -38,6 +39,9 @@ h1 .subheading {
margin-top: .75em; margin-top: .75em;
} }
h3 a {
color: inherit;
}
.sponsors-leaders { .sponsors-leaders {
@ -190,23 +194,27 @@ h1 .subheading {
.testimonials-container { .testimonials-container {
height: 100vh; height: 80vh;
position: relative; position: relative;
} }
.testimonials { .testimonials {
--testimonial-spacing: 25px; --testimonial-spacing: 25px;
display: grid;
grid-auto-columns: minmax(0, 1fr);
grid-auto-flow: column;
gap: var(--testimonial-spacing); gap: var(--testimonial-spacing);
padding-top: 150px; display: flex;
padding-bottom: 150px; flex-wrap: wrap;
padding-top: 75px;
padding-bottom: 75px;
height: 100%; height: 100%;
overflow-y: auto; overflow-y: auto;
margin-top: 50px;
}
.testimonial-col {
flex: 1;
min-width: 250px;
} }
.testimonials-container::before { .testimonials-container::before {
content: ""; content: "";
background: linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,0) 400px, rgba(255,255,255,0) 600px, rgba(255,255,255,1) 100%); background: linear-gradient(0deg, #f5f8f9 0%, rgba(255,255,255,0) 25%, rgba(255,255,255,0) 75%, #f5f8f9 100%);
position: absolute; position: absolute;
top: 0; top: 0;
bottom: 0; bottom: 0;
@ -227,6 +235,7 @@ h1 .subheading {
border-radius: 5px; border-radius: 5px;
padding: 1em; padding: 1em;
margin: var(--testimonial-spacing) 0; margin: var(--testimonial-spacing) 0;
background: white;
} }
.testimonial-quote { .testimonial-quote {
margin-bottom: 1em; margin-bottom: 1em;
@ -240,6 +249,14 @@ h1 .subheading {
.testimonial-name { .testimonial-name {
font-weight: bold; font-weight: bold;
margin-bottom: .5em; margin-bottom: .5em;
color: inherit;
text-decoration: none;
}
.testimonial-name:hover {
color: inherit;
}
.testimonial-name[href]:hover {
text-decoration: underline;
} }
.testimonial-name::before { .testimonial-name::before {
content: '—'; content: '—';

View file

@ -21,7 +21,6 @@ h1 {
font-weight: 800; font-weight: 800;
text-align: center; text-align: center;
color: #65D1C6; color: #65D1C6;
line-height: .9;
margin-bottom: 1em; margin-bottom: 1em;
background-image: linear-gradient(to right, #47E27C 25%, #4ED3FB 75%); background-image: linear-gradient(to right, #47E27C 25%, #4ED3FB 75%);
@ -31,8 +30,7 @@ h1 {
} }
h1 .subheading { h1 .subheading {
margin: 2em auto 0; margin: 1em auto 0;
margin-top: 2em;
text-transform: none; text-transform: none;
font-size: 42px; font-size: 42px;
font-weight: normal; font-weight: normal;
@ -80,8 +78,13 @@ h2 {
.hero-content { .hero-content {
padding-top: 100px; padding-top: 100px;
margin-bottom: 0;
padding-bottom: 50px;
} }
.email em {
display: none;
}
@ -174,7 +177,7 @@ section {
.hero section.transparent { .hero section.transparent {
background: none; background: none;
padding: 50px 0; padding: 0;
color: #cbe2e4; color: #cbe2e4;
} }
@ -643,6 +646,8 @@ div.ap-wrapper:fullscreen div.ap-player {
} }
.asides { .asides {
flex-direction: column; flex-direction: column;
margin-top: 25px;
margin-bottom: 25px;
} }
.display { .display {
margin-top: 50px; margin-top: 50px;

View file

@ -1,3 +1,7 @@
.hero-content {
padding-bottom: 0;
}
p.footnote { p.footnote {
margin-top: 2em; margin-top: 2em;
font-size: 12px; font-size: 12px;
@ -189,8 +193,10 @@ ul.check li.minus::before {
background-color: rgb(0 0 0 / .75); background-color: rgb(0 0 0 / .75);
} }
/* Keep the buttons above the glow effect for legibility */
.button.purple { .button.purple {
font-size: 90%;
/* Keep the buttons above the glow effect for legibility */
position: relative; position: relative;
z-index: 2; z-index: 2;
} }

View file

@ -0,0 +1,74 @@
h1 {
line-height: auto;
margin-bottom: 1em;
}
.plans {
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 150px;
}
.plan {
background: white;
padding: 2em;
color: #222;
border-radius: 15px;
width: 100%;
}
.plan.community {
max-width: calc(min(400px, 85%));
border-top-right-radius: 0;
border-bottom-right-radius: 0;
background: rgb(255 255 255 / .85)
}
.plan.sponsor {
max-width: 600px;
box-shadow: 0 0 25px rgb(0 0 0 / .5);
}
.plan-title {
font-size: 24px;
font-weight: bold;
color: black;
}
.plan.sponsor .plan-title {
color: #9227da;
}
.plan p,
.plan ul {
margin: 1.5em 0;
line-height: 1.4;
}
.plan ul {
margin: -1em 0 2em 2em;
}
.plan a {
color: #3465f6;
}
.plan a:hover {
color: #7134f6;
}
@media (max-width: 900px) {
.plans {
flex-direction: column-reverse;
}
.plan {
min-width: 300px;
}
.plan.community {
border-top-left-radius: 0;
border-bottom-right-radius: 15px;
}
}

View file

@ -13,6 +13,9 @@ const resp = fetch("/resources/testimonials.json").then(async resp => {
} else { } else {
$_('.testimonial-name', tpl).innerText = testimonial.name || ""; $_('.testimonial-name', tpl).innerText = testimonial.name || "";
} }
if (testimonial.link) {
$_('.testimonial-name', tpl).href = testimonial.link;
}
$_('.testimonial-role', tpl).innerText = testimonial.role || ""; $_('.testimonial-role', tpl).innerText = testimonial.role || "";
if (testimonial.org) { if (testimonial.org) {
$_('.testimonial-role', tpl).appendChild(document.createElement("br")); $_('.testimonial-role', tpl).appendChild(document.createElement("br"));

View file

@ -1,12 +1,4 @@
[ [
{
"name": "First last",
"role": "9999x developer",
"org": "Bigcorp",
"picture": "https://pbs.twimg.com/profile_images/1624497316366528512/fBMXDuiZ_400x400.jpg",
"quote": "Caddy is cool.",
"link": "https://..."
},
{ {
"name": "Brad Warren", "name": "Brad Warren",
"role": "Lead Engineer of Certbot", "role": "Lead Engineer of Certbot",
@ -26,10 +18,11 @@
{ {
"name": "Stripe", "name": "Stripe",
"role": "Global Leader of Fintech", "role": "Global Leader of Fintech",
"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." "quote": "With its extensible architecture and on-line config API, Caddy powers many of Stripe's internal systems."
}, },
{ {
"name": "Robert Melton", "name": "Robert M.",
"role": "Software Developer", "role": "Software Developer",
"quote": "Our client was in deep trouble: they were about to fail PCI compliance. We tossed Caddy in front hours before the deadline and went from 40 to 0 security errors in just minutes. … We have put over 1,000 domains on Caddy so far." "quote": "Our client was in deep trouble: they were about to fail PCI compliance. We tossed Caddy in front hours before the deadline and went from 40 to 0 security errors in just minutes. … We have put over 1,000 domains on Caddy so far."
}, },
@ -38,29 +31,186 @@
"quote": "Every time I have a problem, google directs me to a \"mature\" Traefik-based solution that barely works, if at all. Then I come here and there's a Caddy solution that blows it out of the water. New plan for today then. ... It's a simple addition to an already-simple config. Traefik is complexity on complexity and a nightmare to debug.", "quote": "Every time I have a problem, google directs me to a \"mature\" Traefik-based solution that barely works, if at all. Then I come here and there's a Caddy solution that blows it out of the water. New plan for today then. ... It's a simple addition to an already-simple config. Traefik is complexity on complexity and a nightmare to debug.",
"link": "https://discord.com/channels/569842713239879680/569842713239879682/1161874875053527081" "link": "https://discord.com/channels/569842713239879680/569842713239879682/1161874875053527081"
}, },
{
"name": "(Anonymous)",
"role": "Security engineer",
"org": "Subcontractor, UK government",
"quote": "This is a brilliant piece of software. ... Even on first install, the defaults are sane. Truly, great work. … Seriously: Caddy makes it possible for hundreds of thousands of very needy folk to get treatment. It's the backbone of vital systems used by local Doctors Without Borders and local government ministries."
},
{
"name": "John Resig",
"role": "Creator of jQuery",
"picture": "https://pbs.twimg.com/profile_images/1090714620275245056/HS9xcEDk_400x400.jpg",
"quote": "Caddy is pretty incredible. A 3-line config yields a fully A-rated SSL site. Trivial!",
"link": "https://twitter.com/jeresig/status/821768122017398785"
},
{ {
"name": "Karim Naufal", "name": "Karim Naufal",
"role": "Tech founder", "role": "Tech founder",
"quote": "After working for 12 hours straight, unable to make Traefik work and almost going nuts, I switched to Caddy and was able to make it work in 3 lines of code, HTTPS included. Thank you Caddy team for this magically simple and awesome project." "quote": "After working for 12 hours straight, unable to make Traefik work and almost going nuts, I switched to Caddy and was able to make it work in 3 lines of code, HTTPS included. Thank you Caddy team for this magically simple and awesome project."
}, },
{ {
"name": "Kenn White", "name": "owntag",
"role": "Security engineer", "username": "owntag",
"org": "Subcontractor, UK government", "picture": "https://pbs.twimg.com/profile_images/1587758883048759296/kPcjpewD_400x400.jpg",
"quote": "This is a brilliant piece of software. ... Even on first install, the defaults are sane. Truly, great work. … Seriously: Caddy makes it possible for hundreds of thousands of very needy folk to get treatment. Its the backbone of vital systems used by local Doctors Without Borders and local government ministries." "quote": "We also use @caddyserver to provision SSL certificates for the tracking subdomains of our clients. It's such as breeze to work with, the whole on-demand-tls feature is just amazing.",
"link": "https://twitter.com/owntag/status/1716452404680327358"
}, },
{ {
"name": "John Resig", "name": "Pirsch Analytics",
"role": "Creator of jQuery", "username": "PirschAnalytics",
"quote": "Caddy is pretty incredible. A 3-line config yields a fully A-rated SSL site. Trivial!", "picture": "https://pbs.twimg.com/profile_images/1514620310913486855/G3cLT-l4_400x400.png",
"link": "https://twitter.com/jeresig/status/821768122017398785" "quote": "Caddy (@caddyserver) is a fantastic web server, load balancer, and reverse proxy. 👍 We use it for http://pirsch.io to dynamically provision SSL certificates for our fully white-labeled customer domains. ... To reduce complexity and overhead, [we removed] Traefik from the server cluster and let Caddy handle everything.",
"link": "https://pirsch.io/blog/how-we-use-caddy-to-provide-custom-domains-for-our-clients/"
},
{
"name": "Wes Bos",
"role": "Full stack JS dev",
"picture": "https://pbs.twimg.com/profile_images/877525007185858562/7G9vGTca_400x400.jpg",
"quote": "Caddy with wildcard domains - I use it on a ton of my projects. [Easy local proxy:] `caddy reverse-proxy --to localhost:80 --from my-project.localhost`. You can also put this config in a Caddyfile. As a bonus you get proper local https without fussin' with certs.",
"link": "https://twitter.com/wesbos/status/1693624280565612982"
}, },
{ {
"name": "Zack Siri", "name": "Zack Siri",
"username": "zacksiri", "username": "zacksiri",
"picture": "https://pbs.twimg.com/profile_images/1638764493005287424/q3UB6-c1_400x400.jpg",
"role": "Founder", "role": "Founder",
"org": "Installar", "org": "Instellar.app",
"quote": "It's a good thing we bet on Caddy. It's been a pleasure working with Caddy.", "quote": "It's a good thing we bet on Caddy. It's been a pleasure working with Caddy.",
"link": "https://twitter.com/zacksiri/status/1722636053939654992" "link": "https://twitter.com/zacksiri/status/1722636053939654992"
},
{
"name": "Denys Konovalov",
"username": "denyskon",
"role": "Open source maintainer",
"org": "Gitea",
"picture": "https://pbs.twimg.com/profile_images/1606649780356227073/oCZpt3gs_400x400.jpg",
"quote": "Haven't been so excited about a small piece of server software for a long time now... @caddyserver is awesome! Easiest config ever (reverse proxy in three lines per site), everything up-and-running without any problems in less than an hour for a server with many services 🤩",
"link": "https://twitter.com/denyskon/status/1729217386975273121"
},
{
"name": "Hirvesh",
"username": "hirvesh",
"picture": "https://pbs.twimg.com/profile_images/1673927322309898240/w3b5-nrN_400x400.jpg",
"role": "Indie hacker",
"quote": "Some time back I heard about @caddyserver and decided to give it a go. Setup was fast and I can now support custom domains + .assistflare.com subdomains easily with HTTPS support! This allows me to move away from Cloudflare for SaaS which charges $0.50 per custom hostname once you reach the threshold of 100 free custom hostnames. Caddy also allows me simplify my setup and provide a more straightforward way for end users to setup their custom domains. I will also be migrating @StomodHQ to use Caddy server down the line.",
"link": "https://twitter.com/hirvesh/status/1727193979211718825"
},
{
"name": "Schlez",
"username": "galstar",
"picture": "https://pbs.twimg.com/profile_images/1200413867437936640/SnCiBgrR_400x400.jpg",
"role": "Developer",
"org": "Vercel",
"quote": "Caddy is so easy it should be considered illegal at this point.",
"link": "https://twitter.com/galstar/status/1726116980082548809"
},
{
"name": "Attila Kun",
"username": "kunattila",
"picture": "https://pbs.twimg.com/profile_images/938381307809234944/Ovw5o3Zb_400x400.jpg",
"quote": "I use Caddy for Shopify app development. It's miles better than their default ngrok based solution because with Caddy, I don't have to tunnel my dev traffic through a public IP. Makes iteration a lot quicker.",
"link": "https://pbs.twimg.com/profile_images/938381307809234944/Ovw5o3Zb_400x400.jpg"
},
{
"name": "Liz Lovelace",
"username": "liz_love_lace",
"picture": "https://pbs.twimg.com/profile_images/1673859861895950336/hIv5l05W_400x400.png",
"quote": "Listen to me: i will only repeat this once: Caddy is the best thing in the world, it's a general-use server that has automatic certificate renewal. Download it, make a config (it's very simple compared to apache/nginx), and it just works forever.",
"link": "https://twitter.com/liz_love_lace/status/1716095188559417566"
},
{
"name": "Alice Maz",
"username": "alicemazzy",
"picture": "https://pbs.twimg.com/profile_images/1355382480312938499/qsJJGS5Q_400x400.jpg",
"quote": "true story I migrated from nginx to caddy after accidentally nuking my webserver and a few months later while visiting my site thought, \"wait I forgot to set up certbot why does https still work... why is this cert more recent than my migration???\" and learned [that Caddy renews it for you].",
"link": "https://twitter.com/alicemazzy/status/1716095955383291949"
},
{
"name": "Leo",
"username": "LeoVasanko",
"picture": "https://pbs.twimg.com/profile_images/1619711322488193025/oPxL0zsG_400x400.jpg",
"role": "Wizard of Code",
"quote": "I've replaced all my Nginx with Caddy. So much easier!",
"link": "https://twitter.com/LeoVasanko/status/1724336627965649232"
},
{
"name": "Schlez",
"username": "last0x00",
"picture": "https://pbs.twimg.com/profile_images/1421150986974924804/R9Ig1fn3_400x400.jpg",
"quote": "Caddy is the best reverse proxy when setting up red team exercises.",
"link": "https://twitter.com/last0x00/status/1717545355993084009"
},
{
"name": "Tom Moor",
"username": "tommoor",
"picture": "https://pbs.twimg.com/profile_images/1512150177024561158/OkpD2gRS_400x400.jpg",
"role": "Developer",
"org": "Linear",
"quote": "I, too, use Caddy in production for exactly this and would recommend over Cloudflare. Enterprise plans used to start at around $40k/year if I remember correctly.",
"link": "https://twitter.com/tommoor/status/1719389293414687018"
},
{
"name": "Shayan",
"username": "ImSh4yy",
"picture": "https://pbs.twimg.com/profile_images/1697511202908188672/hfMoNTSw_400x400.jpg",
"role": "Founder, Developer",
"org": "LogSnag",
"quote": "I was using Cloudflare for SaaS as it made generating SSL certs for vanity subdomains easy. So, I looked into their system and noticed that, yes, most domains are failing. ... I decided to entirely ditch Cloudflare and build my own setup instead. After some research, it turned out Caddy was the perfect tool for this job. It has a neat little feature called On-Demand TLS, which generates SSL certs on the fly. It also lets you specify a callback URL to verify the domain name. ... I got a solid setup up by 7 in the morning, and it worked like a charm. After a quick powernap, I pushed the fix to production, and we finally had a working product 24 hours after launch. ... The verification process is much easier and faster now; things are more reliable and cost me nothing to run. Details: https://logsnag.com/blog/setting-up-vanity-subdomains-for-your-saas-using-caddy",
"link": "https://twitter.com/ImSh4yy/status/1680646609330118657"
},
{
"name": "Tejas Dinkar",
"username": "tdinkar",
"picture": "https://dgraph.io/blog/images/people/tejas.jpg",
"role": "Developer",
"org": "Dgraph",
"quote": "Using Caddy, we were able to build an Ingress controller for Slash GraphQL in about a week. ... Nginx was really problematic, as there was no way to figure out if Nginx had picked up a new ingress or not. It often took 2-5 seconds after our code picked up a new ingress for Nginx to be ready to serve it, meaning that we had to add a lot of time.Sleep() type code, which no one ever wants to read. We briefly tried writing an Nginx module, but C++ makes me want to tear my hair out. ... I found Caddy the easiest to work with. As an added bonus, the Caddy http middleware module is very close to Go's ServeHTTP interface, and as a result, is very easy to build around and test. ... I believe Caddy and it's extensibility are a great fit if you are trying to build a smart proxy or API gateway. ... Caddy's author Matt Holt wrote that Caddy is not just a proxy, it's a powerful, extensible platform for HTTP apps. I couldn't agree more.",
"link": "https://dgraph.io/blog/post/building-a-kubernetes-ingress-controller-with-caddy/"
},
{
"name": "Bas Westerbaan",
"username": "bwesterb",
"picture": "https://pbs.twimg.com/profile_images/1361242338702557184/kL8qHOYw_400x400.jpg",
"role": "Software engineer, mathematician, post-quantum cryptographer",
"org": "Cloudflare",
"quote": "Replaced 140 lines of dense nginx config with a single 33 line Caddyfile. Caddy is great!",
"link": "https://twitter.com/bwesterb/status/1708903488426512668"
},
{
"username": "SwiftOnSecurity",
"picture": "https://pbs.twimg.com/profile_images/1710842853134315521/LImt45Gv_400x400.jpg",
"role": "Computer security person",
"quote": "Next public server I put up, I'm just sticking Caddy on it.",
"link": "https://twitter.com/bwesterb/status/1708903488426512668"
},
{
"username": "Zestyclose_Car1088",
"quote": "Caddy seems too good to be true? I just set it up and it works perfect, straight out of the box.",
"link": "https://www.reddit.com/r/selfhosted/comments/17ulz9n/caddy_seems_to_good_to_be_true_i_just_set_it_up/"
},
{
"username": "adamshand",
"picture": "https://styles.redditmedia.com/t5_21nd5b/styles/profileIcon_cazmki08aleb1.jpeg?width=256&height=256&crop=256:256,smart&s=d79c19162ba945486d047329aaca398832a1f519",
"quote": "I switched from Traefik to Caddy a few years ago and have no ragrets.",
"link": "https://www.reddit.com/r/selfhosted/comments/17ulz9n/comment/k94wge6/?context=3"
},
{
"username": "wtfblubby",
"picture": "https://styles.redditmedia.com/t5_ky06i/styles/profileIcon_snoob431ae32-bfaa-4d7f-8625-2f9ad077fa31-headshot.png?width=256&height=256&crop=256:256,smart&s=e7f2513f3fb3e8bc33a7a4c46d00517d14b51197",
"quote": "It just runs... Two years straight. Some more services since start of caddy... No worries. Recently added auth with authelia... Still straight forward. Easy setup, always online. That's it. Period.",
"link": "https://www.reddit.com/r/selfhosted/comments/17ulz9n/comment/k94nizy/?context=3"
},
{
"username": "jax7778",
"picture": "https://styles.redditmedia.com/t5_cffyd/styles/profileIcon_snoo6c3d35f6-cd7a-4f46-9b32-adaa2e5856c5-headshot.png?width=256&height=256&crop=256:256,smart&s=49d1f3a914e7c91e184d415680a5efdf8c73defa",
"quote": "Caddy is a great, easy web server. It honestly has some pretty good performance too.",
"link": "https://www.reddit.com/r/selfhosted/comments/17ulz9n/comment/k98e5ld/?context=3"
},
{
"username": "allocx",
"picture": "https://www.redditstatic.com/avatars/avatar_default_02_24A0ED.png",
"quote": "I moved over in the past year from traefik and it was well worth it. Traefik is over-abstracted and I found it to break randomly and unpredictably when using docker labels. Debugging was a PITA too with the best solution being turning it off and on again (i.e. restarting it, or the service it was proxying). Caddy, on the other hand, just works. The documentation is also orders of magnitude better than traefik (full of confusing abstractions).",
"link": "https://www.reddit.com/r/selfhosted/comments/17ulz9n/comment/k95oss3/?utm_source=share&utm_medium=web2x&context=3"
} }
] ]

View file

@ -45,6 +45,12 @@
</p> </p>
</div> </div>
</div> </div>
<h1>
<div class="subheading">
Questions? <a href="mailto:%63%61%64%64%79%40%64%79%61%6e%69%6d%2e%63%6f%6d" class="email">caddy@dya<em>antispam</em>nim<em>.nospam</em>.com</a>
</div>
</h1>
</div> </div>
</div> </div>
@ -507,11 +513,6 @@
<p> <p>
Not likely! Our sponsorship subscriptions are managed by GitHub, which is often already an approved vendor for most businesses. Not likely! Our sponsorship subscriptions are managed by GitHub, which is often already an approved vendor for most businesses.
</p> </p>
<h3 class="purple">Can we do a one-time sponsorship?</h3>
<p>
Yes! We call those donations, and welcome them warmly with gratitude.
</p>
</div> </div>
<div class="col"> <div class="col">
<h3 class="purple">Why sponsorships?</h3> <h3 class="purple">Why sponsorships?</h3>
@ -532,6 +533,11 @@
<p> <p>
We would ask your product manager why they are deploying software without the means to support it. That said, a well-established business, for example, could sign up for a Startup-tier sponsorship if that is all the budget allows; it would be better than no safety net at all. However, your overall satisfaction will be higher with an appropriate sponsorship tier since we will be able to accommodate your situation better. We would ask your product manager why they are deploying software without the means to support it. That said, a well-established business, for example, could sign up for a Startup-tier sponsorship if that is all the budget allows; it would be better than no safety net at all. However, your overall satisfaction will be higher with an appropriate sponsorship tier since we will be able to accommodate your situation better.
</p> </p>
<h3 class="purple">Can we do a one-time sponsorship?</h3>
<p>
Yes! We call those donations, and welcome them warmly with gratitude.
</p>
</div> </div>
</div> </div>
@ -587,7 +593,7 @@
</p> </p>
</div> </div>
<div class="col"> <div class="col">
<h3 class="blue">Nothing</h3> <h3 class="purple">Nothing</h3>
<p> <p>
It should go without saying that having <a href="https://words.filippo.io/dispatches/reciprocal/">direct access to the maintainers</a> of the software you rely on is better than having no support, no safety net, and no influence over the project's priorities. It should go without saying that having <a href="https://words.filippo.io/dispatches/reciprocal/">direct access to the maintainers</a> of the software you rely on is better than having no support, no safety net, and no influence over the project's priorities.
</p> </p>

78
new/support.html Normal file
View file

@ -0,0 +1,78 @@
<!DOCTYPE html>
<html>
<head>
<title>Caddy help &amp; support</title>
{{import "/includes/head.html"}}
{{template "head"}}
<link rel="stylesheet" href="/resources/css/marketing.css{{template "cacheBust"}}">
<link rel="stylesheet" href="/resources/css/support.css{{template "cacheBust"}}">
</head>
<body>
<div class="hero">
{{include "/includes/header.html" "dark-header"}}
<div class="wrapper">
<div class="hero-content">
<h1>
Support
</h1>
<div class="plans">
<div class="plan community">
<div class="plan-title">Community help</div>
<p>
Participate as volunteers in our forum to exchange free help in our open source community.
</p>
<p>
We welcome your contributions to our community and look forward to meeting you!
</p>
<a href="https://caddy.community" class="button primary">Caddy forum</a>
</div>
<div class="plan sponsor">
<div class="plan-title">Business support</div>
<p>
We offer private and dedicated support for professionals and businesses through most <a href="/sponsor">sponsorship tiers</a>.
</p>
<p>
Sponsors can then email us for expert support: <b><a href="mailto:%63%61%64%64%79%40%64%79%61%6e%69%6d%2e%63%6f%6d" class="email">caddy@dya<em>antispam</em>nim<em>.nospam</em>.com</a></b>
</p>
<p>
Higher tiers enable other forms of support such as chats and phone/video calls.
</p>
<p>
Depending on tier, additional benefits and services include:
</p>
<ul>
<li>Onboarding</li>
<li>Training</li>
<li>Presentations</li>
<li>On-sites</li>
<li>Custom patches and branches</li>
<li>Prioritization</li>
<li>Publicity/marketing</li>
</ul>
<p>
We work with businesses and teams of all sizes, from startups to enterprises, non-profits and government agencies.
</p>
<a href="/sponsor" class="button purple">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-heart-handshake" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
<path d="M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572"></path>
<path d="M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25"></path>
<path d="M12.5 15.5l2 2"></path>
<path d="M15 13l2 2"></path>
</svg>
Sponsor Caddy
</a>
</div>
</div>
</h1>
</div>
</div>
</div>
{{include "/includes/footer.html"}}
</body>
</html>