mirror of
https://github.com/caddyserver/website.git
synced 2025-04-24 22:16:15 -04:00
Work on homepage more
This commit is contained in:
parent
94930e119c
commit
e25c900669
6 changed files with 365 additions and 90 deletions
|
@ -1700,7 +1700,7 @@
|
|||
{{end}}
|
||||
</div>
|
||||
<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 we're a bit behind with this page. 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. We welcome <a href="https://github.com/caddyserver/website">contributions</a> on GitHub!
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
284
new/index.html
284
new/index.html
|
@ -158,7 +158,14 @@
|
|||
Other web servers and scripted certificate tools fall over with hundreds of thousands of sites or thousands of instances. Caddy is designed to manage certificates reliably at this scale.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sponsorship-primer">
|
||||
<h3>sponsored by <b>users like you</b></h3>
|
||||
<p>
|
||||
Caddy is free software and relies on sponsorships to survive. Not just donations: sponsorships ensure ongoing development and provide your business with tangible benefits.
|
||||
</p>
|
||||
<a href="/sponsor" class="button purple">See sponsorships</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -232,9 +239,6 @@
|
|||
You'll notice how Caddy <b>provisions a certificate</b> for your domain <b>automatically.</b>
|
||||
</p>
|
||||
<div class="demo-help">
|
||||
<p>
|
||||
Caddy is capable of serving TLS for any domains and IPs. This demo is intentionally restricted.
|
||||
</p>
|
||||
<p>
|
||||
<b>Not working?</b> Make sure to use a subdomain of a registered domain, not a "sub-subdomain."
|
||||
Verify you have created the public DNS records shown above with the correct values.
|
||||
|
@ -243,15 +247,53 @@
|
|||
<p>
|
||||
<b>Example subdomains that could work:</b> <code>caddydemo.example.net</code>, <code>caddydemo.example.co.uk</code>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sponsorship-primer">
|
||||
<h3>sponsored by <b>users like you</b></h3>
|
||||
<p>
|
||||
Caddy is free software and relies on sponsorships to survive. They aren't just donations: they ensure ongoing development and provide your business with tangible benefits!
|
||||
Caddy is capable of serving TLS for any domains and IPs. This demo is intentionally restricted.
|
||||
</p>
|
||||
<a href="/sponsor" class="button purple">See sponsorships</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="diagonal up light gray feature">
|
||||
<div class="wrapper">
|
||||
|
||||
<h2>All you need for TLS and PKI</h2>
|
||||
<p>
|
||||
Caddy is not only the world leader in certificate automation, it is also a fully-featured certificate authority for your own internal PKI.
|
||||
</p>
|
||||
|
||||
<div class="asides">
|
||||
<div>
|
||||
<p>
|
||||
Caddy 2 is a <a href="/docs/extending-caddy">highly extensible</a>, self-hosted platform on which you can build, configure, and deploy long-running services ("apps").
|
||||
</p>
|
||||
<p>
|
||||
Caddy ships with apps for an <a href="/docs/modules/http">HTTPS server</a> (static files, reverse proxying, load balancing, etc.), <a href="/docs/modules/tls">TLS certificate manager</a>, and <a href="/docs/modules/pki">fully-managed internal PKI</a>. Caddy apps collaborate to make complex infrastructure just work with fewer moving parts.
|
||||
</p>
|
||||
<p>
|
||||
<b>For example, the config shown here keeps your TLS certificates renewed for other programs to use;</b> no external tools or HTTP daemon required!
|
||||
</p>
|
||||
<p>
|
||||
Providing a unified configuration, on-line <a href="/docs/api">config API</a>, and <a href="/docs/json/">automatic documentation</a> for all apps, Caddy is nearly infinitely extensible. Thanks to its unique <a href="/docs/architecture">modular architecture</a>, we can offer unlimited features without bloating the code base.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<div class="display right">
|
||||
<code class="light">{
|
||||
"apps": {
|
||||
"tls": {
|
||||
"certificates": {
|
||||
"automate": [
|
||||
"example.com",
|
||||
"sub.example.com",
|
||||
"example.net"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}</code></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
@ -259,26 +301,68 @@
|
|||
<section class="diagonal down dark feature">
|
||||
<div class="wrapper">
|
||||
<h2>
|
||||
A truly forward-thinking reverse proxy
|
||||
A forward-thinking reverse proxy
|
||||
</h2>
|
||||
<p>
|
||||
Caddy's proxy was designed to be as forward-compatible as possible and has major batteries included: load balancing, active and passive health checks, dynamic upstreams, retries, pluggable transports, and of course, best-in-class TLS security.
|
||||
</p>
|
||||
<div class="cols">
|
||||
<div class="col">
|
||||
|
||||
|
||||
<div class="asides asides-40-60">
|
||||
<div class="spacing">
|
||||
<div class="rollover" data-rollover="rollover-php">
|
||||
<h3 class="green">Proxy HTTP, FastCGI, WebSockets, and more</h3>
|
||||
<p>
|
||||
Capable of proxying HTTP and HTTPS, but also WebSockets, gRPC, FastCGI (usually PHP), and more! The underlying transport module is extensible for any custom way to generate an HTTP response.
|
||||
</p>
|
||||
</div>
|
||||
<div class="rollover" data-rollover="rollover-dynamic-backends">
|
||||
<h3 class="purple">Dynamic backends</h3>
|
||||
<p>
|
||||
Provide Caddy with a static list of backends or enable a module to retrieve backends dynamically during each request: ideal for rapidly changing environments. Caddy flows with your infrastructure!
|
||||
</p>
|
||||
</div>
|
||||
<div class="rollover" data-rollover="rollover-ha">
|
||||
<h3 class="blue">High availability</h3>
|
||||
<p>
|
||||
Caddy comes with a whole suite of high availability (HA) features: advanced health checking, graceful (hitless) config changes, circuit breaking, load limiting, on-line retries, and more. The best part? It's all free. No enterprise-level paywalls.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="display right">
|
||||
<code class="dark">example.com
|
||||
|
||||
<span class="comment"># Serve PHP sites</span>
|
||||
handle /blog/* {
|
||||
root * /var/www/wordpress
|
||||
<span class="rollover-php rollover-green">php_fastcgi localhost:9000</span>
|
||||
file_server
|
||||
}
|
||||
|
||||
<span class="comment"># Proxy an autoscaling API with dynamic backends</span>
|
||||
<span class="rollover-dynamic-backends rollover-purple">reverse_proxy /api/* {
|
||||
dynamic srv _api._tcp.example.com
|
||||
}</span>
|
||||
|
||||
<span class="comment"># Proxy a compute-heavy distributed service
|
||||
# with load balancing and health checks</span>
|
||||
<span class="rollover-ha rollover-blue">reverse_proxy /service/* {
|
||||
to 192.168.1.1 192.168.1.2 192.168.1.3
|
||||
lb_policy least_conn
|
||||
lb_try_duration 10s
|
||||
fail_duration 5s
|
||||
}</span>
|
||||
|
||||
<span class="comment"># Proxy everything else to an HTTPS upstream</span>
|
||||
reverse_proxy https://service.example.com {
|
||||
header_up Host {upstream_hostport}
|
||||
}<div class="blinking"></div></code>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cols">
|
||||
<div class="col">
|
||||
<div class="sponsorship-primer">
|
||||
<h3>software <b>assurance</b></h3>
|
||||
|
@ -289,7 +373,7 @@
|
|||
<a href="/sponsor" class="button purple">See sponsorships</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col">
|
||||
<div class="sponsor-experience stripe">
|
||||
<img src="/resources/images/sponsors/stripe.svg" class="experience-logo">
|
||||
<div class="experience-content">
|
||||
|
@ -306,6 +390,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<h2>
|
||||
|
@ -314,44 +399,177 @@
|
|||
<p>
|
||||
Serving static files is a tried-and-true method of delivering sites to numerous clients efficiently. Caddy has a robust file server that can be combined with other middleware features for the ultimate effortless website.
|
||||
</p>
|
||||
<div class="cols">
|
||||
<div class="col">
|
||||
|
||||
|
||||
<div class="asides asides-40-60">
|
||||
<div class="spacing">
|
||||
<div class="rollover" data-rollover="rollover-compress">
|
||||
<h3 class="blue">Compression</h3>
|
||||
<p>
|
||||
Caddy can compress files on-the-fly or serve precompressed files for extra performance. Caddy is also the first web server to support Zstandard encoding.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="rollover" data-rollover="rollover-vfs">
|
||||
<h3 class="green">Virtual file systems</h3>
|
||||
<p>
|
||||
Serve your static site from anything: the local file system, remote cloud storage, a database, or even embedded in the server binary!
|
||||
</p>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h3 class="purple">Range requests, Etags, and more</h3>
|
||||
<div class="rollover" data-rollover="rollover-range">
|
||||
<h3 class="yellow">Range requests, Etags, and more</h3>
|
||||
<p>
|
||||
Unlike many simpler file servers intended for temporary local development, Caddy fully supports Range requests, Etags, and a full production feature set.
|
||||
Unlike many ad-hoc file servers intended for temporary local development, Caddy fully supports Range requests, Etags, and a full production feature set.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h3 class="green">Directory file browser</h3>
|
||||
<div class="rollover" data-rollover="rollover-browse">
|
||||
<h3 class="purple">Directory file browser</h3>
|
||||
<p>
|
||||
If a directory without an index file is requested, Caddy can show an elegant file browser with breadcrumb nav, file size visualizations, filetype icons, and a grid view.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="display right">
|
||||
<code class="light">example.com
|
||||
|
||||
root * /var/www
|
||||
|
||||
<span class="comment"># Serve precompressed files if present</span>
|
||||
<span class="rollover-compress rollover-blue">file_server /downloads/* {
|
||||
precompressed gzip zstd br
|
||||
}</span>
|
||||
|
||||
<span class="comment"># Compress everything else that would benefit</span>
|
||||
<span class="rollover-compress rollover-blue">encode zstd gzip</span>
|
||||
|
||||
<span class="comment"># Get files from a database</span>
|
||||
<span class="rollover-vfs rollover-green">file_server /database/* {
|
||||
fs sqlite data.sql
|
||||
}</span>
|
||||
|
||||
<span class="comment"># Get files from within the Caddy binary</span>
|
||||
<span class="rollover-vfs rollover-green">file_server /embedded/* {
|
||||
fs embedded
|
||||
}</span>
|
||||
|
||||
<span class="comment rollover-range rollover-yellow"># (Range/Etag/etc. all work without extra config)</span>
|
||||
|
||||
<span class="comment"># Serve static site with directory listings as needed</span>
|
||||
<span class="rollover-browse rollover-purple">file_server browse</span></code>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="cols rollover" data-rollover="rollover-browse">
|
||||
<div class="col">
|
||||
<img src="/resources/images/file-browser/browse-themes.png" class="gallery">
|
||||
</div>
|
||||
<div class="col">
|
||||
<img src="/resources/images/file-browser/browse-gallery-light.png" class="gallery">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="light feature">
|
||||
<div class="wrapper">
|
||||
<h2>
|
||||
Flexible configuration for all workflows
|
||||
Flexible configuration compatible with any workflow
|
||||
</h2>
|
||||
<p>
|
||||
Configure your server your way. Caddy's native configuration format is JSON, but with Caddy's config adapters, you can use any config format you prefer. All configuration is posted through a RESTful admin API, and Caddy's CLI helps you work with config files easily.
|
||||
</p>
|
||||
<div class="cols">
|
||||
|
||||
|
||||
<div class="asides">
|
||||
<div>
|
||||
<div class="display left">
|
||||
<code class="dark">$ caddy start --config caddy.json
|
||||
|
||||
$ curl localhost:2019/id/my_handler \
|
||||
-X PATCH \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"handler": "static_response",
|
||||
"body": "Work smarter, not harder."
|
||||
}'
|
||||
|
||||
$ curl localhost:2019/config/ | jq<div class="blinking"></div></code>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>JSON config API</h3>
|
||||
<p>
|
||||
Caddy's native config format is JSON, giving you incredible power and flexibility for automated, large-scale deployments.
|
||||
<p>
|
||||
Make dynamic config changes through an <a href="/docs/api">intuitive, programmable REST API</a> that offers ACID guarantees. It is also <b>safely scoped</b>, meaning that the URI path restricts changes, making it impossible to accidentally alter other parts of your config.
|
||||
</p>
|
||||
<!-- <ul>
|
||||
<li><b>Atomic:</b> Multiple changes in a single request are treated as a single unit; any failed change aborts all the other changes.</li>
|
||||
<li><b>Consistent:</b> No invalid configurations can be loaded; your server will never break if a problem is detected at config load.</li>
|
||||
<li><b>Isolated:</b> No config changes rely on another. (It helps that HTTP is a stateless protocol!)</li>
|
||||
<li><b>Durable:</b> Caddy automatically persists the current, valid configuration to disk and can safely resume it after a power cycle if the <code>--resume</code> flag is used.</li>
|
||||
</ul> -->
|
||||
<!-- <a href="/docs/api-tutorial" class="cyan button">API <b>tutorial</b></a>
|
||||
|
||||
<a href="/docs/api" class="gray button">API <b>reference</b></a> -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="asides">
|
||||
<div>
|
||||
<h3>Caddyfile</h3>
|
||||
<p>
|
||||
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>!
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<div class="display right">
|
||||
<code class="light">caddyserver.com
|
||||
|
||||
root * src
|
||||
|
||||
file_server
|
||||
templates
|
||||
encode zstd gzip
|
||||
|
||||
redir /docs/json /docs/json/
|
||||
rewrite /docs/json/* /docs/json/index.html
|
||||
rewrite /docs/* /docs/index.html
|
||||
|
||||
reverse_proxy /api/* localhost:9002</code>
|
||||
<div class="caption">Actual config used by this site.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="asides">
|
||||
<div>
|
||||
<div class="display left">
|
||||
<code class="dark">$ caddy run \
|
||||
--config nginx.conf \
|
||||
--adapter nginx<div class="blinking"></div></code>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<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. 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>
|
||||
|
@ -370,7 +588,7 @@
|
|||
Caddy's config is managed through an administration API that is programmable and makes dynamic changes a breeze.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<div class="testimonials-container">
|
||||
<div class="testimonials">
|
||||
|
@ -390,28 +608,28 @@
|
|||
Unparalleled extensibility
|
||||
</h2>
|
||||
<p>
|
||||
Caddy is the only server in the world with such a novel modular architecture. At its core, Caddy is a configuration manager that runs apps like an HTTP server, internal certificate authority, TLS certificate manager, process supervisor, and more.
|
||||
Caddy is the only server in the world with its novel, modular architecture. At its core, Caddy is a configuration manager that runs apps like an HTTP server, internal certificate authority, TLS certificate manager, process supervisor, and more.
|
||||
</p>
|
||||
<p>
|
||||
And because of its unique design, all these features are freely available without bloating the software: only compile in what you need.
|
||||
And because of its unique design, all these features are freely available without bloating the software. Only compile in what you need.
|
||||
</p>
|
||||
<div class="cols">
|
||||
<div class="col">
|
||||
<h3 class="green">Dynamically provision certificates</h3>
|
||||
<h3 class="green">Unlimited power</h3>
|
||||
<p>
|
||||
With On-Demand TLS, only Caddy obtains, renews, and maintains certificates on-the-fly during TLS handshakes. Perfect for customer-owned domains.
|
||||
Nearly every part of the config that "does something" is pluggable. Caddy offers so much in such a lean package.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h3 class="purple">Dynamically provision certificates</h3>
|
||||
<h3 class="purple">Native CPU performance</h3>
|
||||
<p>
|
||||
With On-Demand TLS, only Caddy obtains, renews, and maintains certificates on-the-fly during TLS handshakes. Perfect for customer-owned domains.
|
||||
No RPC calls or flimsy dependency management. Plugins are compiled into the static binary, making successful deployments certain and runtimes blazing fast.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h3 class="blue">Dynamically provision certificates</h3>
|
||||
<h3 class="blue">Easy to develop</h3>
|
||||
<p>
|
||||
With On-Demand TLS, only Caddy obtains, renews, and maintains certificates on-the-fly during TLS handshakes. Perfect for customer-owned domains.
|
||||
Writing Caddy plugins is as easy as writing a Go package.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -45,10 +45,15 @@ h1 .subheading {
|
|||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
margin: 0 auto;
|
||||
margin: 100px auto 150px auto;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.hero-content .asides {
|
||||
margin-top: 0;
|
||||
margin-bottom: 75px;
|
||||
}
|
||||
|
||||
.asides.top {
|
||||
align-items: stretch;
|
||||
}
|
||||
|
@ -64,6 +69,11 @@ h1 .subheading {
|
|||
margin-right: 0;
|
||||
}
|
||||
|
||||
.asides-40-60 > :first-child { max-width: 40%; }
|
||||
.asides-40-60 > :last-child { max-width: 60%; }
|
||||
.asides-60-40 > :first-child { max-width: 60%; }
|
||||
.asides-60-40 > :last-child { max-width: 40%; }
|
||||
|
||||
.asides h2 {
|
||||
text-align: left;
|
||||
max-width: none;
|
||||
|
@ -87,6 +97,9 @@ h1 .subheading {
|
|||
margin-top: 10px;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.hero-content .caption {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
|
@ -140,6 +153,7 @@ div.ap-wrapper:fullscreen div.ap-player {
|
|||
|
||||
.display code.light {
|
||||
background: #fff linear-gradient(135deg, rgba(255,255,255,0) 0%,rgba(241,241,241,0.5) 46%,rgba(225,225,225,0.5) 46.25%,rgba(246,246,246,0) 100%);
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.display code.dark,
|
||||
|
@ -149,6 +163,14 @@ div.ap-wrapper:fullscreen div.ap-player {
|
|||
color: #fff;
|
||||
}
|
||||
|
||||
.light .display code.dark {
|
||||
background: #333 linear-gradient(135deg, rgba(0, 0, 0, 0) 0%,rgba(125, 125, 125, 0.3) 46%,rgba(45, 45, 45, 0.8) 46.8%,rgba(0, 0, 0, 0) 100%);
|
||||
}
|
||||
|
||||
.display .comment {
|
||||
color: gray;
|
||||
}
|
||||
|
||||
.blinking {
|
||||
animation: blinking 1s infinite;
|
||||
background-color: #fff;
|
||||
|
@ -168,6 +190,17 @@ div.ap-wrapper:fullscreen div.ap-player {
|
|||
}
|
||||
|
||||
|
||||
.rollover-green,
|
||||
.rollover-purple,
|
||||
.rollover-blue,
|
||||
.rollover-yellow {
|
||||
transition: background-color 250ms;
|
||||
}
|
||||
|
||||
.rollover-green.show { background-color: #41e68fc7; }
|
||||
.rollover-purple.show { background-color: #a52fa59d; }
|
||||
.rollover-blue.show { background-color: #0a62aaa3; }
|
||||
.rollover-yellow.show { background-color: #ffcb50; }
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -3,6 +3,12 @@ body {
|
|||
background-image: none;
|
||||
}
|
||||
|
||||
img.gallery {
|
||||
max-width: 100%;
|
||||
box-shadow: 0 6px 10px rgb(0 0 0 / .15);
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
|
@ -49,7 +55,7 @@ h1 .subheading b {
|
|||
|
||||
p,
|
||||
h2 {
|
||||
max-width: 800px;
|
||||
max-width: 850px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
|
@ -230,10 +236,16 @@ section.light.gray {
|
|||
}
|
||||
|
||||
|
||||
.cols, h3 {
|
||||
.cols, .spacing {
|
||||
--gap: 50px;
|
||||
}
|
||||
|
||||
.spacing {
|
||||
display: flex;
|
||||
gap: var(--gap);
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.cols {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
@ -263,7 +275,6 @@ h3 {
|
|||
border-left: 2px solid;
|
||||
padding-top: .15em;
|
||||
padding-bottom: .15em;
|
||||
margin-bottom: 10px;
|
||||
|
||||
/* shove the border over but leave space between border and content */
|
||||
margin-left: -1em;
|
||||
|
@ -271,7 +282,7 @@ h3 {
|
|||
}
|
||||
|
||||
p + h3 {
|
||||
margin-top: var(--gap);
|
||||
margin-top: 4em;
|
||||
}
|
||||
|
||||
h3.plain {
|
||||
|
@ -287,7 +298,6 @@ h3.plain {
|
|||
.cols .col p {
|
||||
font-family: Inter;
|
||||
font-size: 90%;
|
||||
font-weight: normal;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
|
@ -313,8 +323,9 @@ section.dark h3.purple {
|
|||
section.dark h3.blue {
|
||||
color: rgb(113, 191, 255); border-color: rgb(113, 191, 255);
|
||||
}
|
||||
|
||||
|
||||
section.dark h3.yellow {
|
||||
color: #ffcb50; border-color: #ffcb50;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -406,6 +417,10 @@ section.dark h3.blue {
|
|||
color: #ffcffb;
|
||||
}
|
||||
|
||||
.cols .sponsorship-primer:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.sponsorship-primer h3 {
|
||||
color: white;
|
||||
font-size: 150%;
|
||||
|
|
|
@ -20,5 +20,14 @@ const resp = fetch("/resources/testimonials.json").then(async resp => {
|
|||
}
|
||||
$(`.testimonial-col:nth-child(${i%3 + 1})`).append(tpl);
|
||||
}
|
||||
|
||||
on('mouseover', '.rollover', e => {
|
||||
const target = e.target.closest('.rollover') || e.target;
|
||||
$$(`.${target.dataset.rollover}`).forEach(elem => elem.classList.add('show'));
|
||||
});
|
||||
on('mouseout', '.rollover', e => {
|
||||
const target = e.target.closest('.rollover') || e.target;
|
||||
$$(`.${target.dataset.rollover}`).forEach(elem => elem.classList.remove('show'));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
<div class="col">
|
||||
<h3 class="plain">Sponsorships benefit businesses and the community</h3>
|
||||
<p>
|
||||
With sponsorships, we don't have to limit functionality. Your business meets—and exceeds—its product support requirements at lower costs. And the technology stays <b>truly</b> open source. Everyone wins.
|
||||
With sponsorships, we don't have to restrict functionality or instances. Your business exceeds its product support requirements at lower costs, and can scale indefinitely. And the technology stays <b>truly</b> open source. Everyone wins.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -79,7 +79,7 @@
|
|||
<li>Exclusive access to <a href="https://matt.life/expert-caddy/">Expert Caddy</a></li>
|
||||
</ul>
|
||||
<div class="plan-action">
|
||||
<a href="/sponsor" class="button purple">
|
||||
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=9382" 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>
|
||||
|
@ -112,7 +112,7 @@
|
|||
<li>Occasional email support</li>
|
||||
</ul>
|
||||
<div class="plan-action">
|
||||
<a href="/sponsor" class="button purple">
|
||||
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=21876" 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>
|
||||
|
@ -170,7 +170,7 @@
|
|||
<li class="check">Free onboarding call</li>
|
||||
</ul>
|
||||
<div class="plan-action">
|
||||
<a href="/sponsor" class="button purple">
|
||||
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=9399" 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>
|
||||
|
@ -210,7 +210,7 @@
|
|||
<li>Free onboarding call</li>
|
||||
</ul>
|
||||
<div class="plan-action">
|
||||
<a href="/sponsor" class="button purple">
|
||||
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=120792" 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>
|
||||
|
@ -269,7 +269,7 @@
|
|||
<li>Free onboarding call</li>
|
||||
</ul>
|
||||
<div class="plan-action">
|
||||
<a href="/sponsor" class="button purple">
|
||||
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=9401" 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>
|
||||
|
@ -314,7 +314,7 @@
|
|||
<li>Custom billing and invoicing</li>
|
||||
</ul>
|
||||
<div class="plan-action">
|
||||
<a href="/sponsor" class="button purple">
|
||||
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=120793" 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>
|
||||
|
@ -379,13 +379,13 @@
|
|||
</ul>
|
||||
<b>Professional services:</b>
|
||||
<ul class="check">
|
||||
<li>50% discount (with 6 mo. commitment)</li>
|
||||
<li>50-100% discount (with 6 mo. commitment)</li>
|
||||
<li>Free onboarding calls</li>
|
||||
<li>Custom legal (extra)</li>
|
||||
<li>Custom billing and invoicing</li>
|
||||
</ul>
|
||||
<div class="plan-action">
|
||||
<a href="/sponsor" class="button purple">
|
||||
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=120794" 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>
|
||||
|
@ -405,7 +405,7 @@
|
|||
Enterprise+
|
||||
</div>
|
||||
<div class="plan-price">
|
||||
$12,000<span class="plan-period">/mo.</span>
|
||||
$11,900<span class="plan-period">/mo.</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="plan-content">
|
||||
|
@ -438,7 +438,7 @@
|
|||
<li>Custom billing and invoicing</li>
|
||||
</ul>
|
||||
<div class="plan-action">
|
||||
<a href="/sponsor" class="button purple">
|
||||
<a href="https://github.com/sponsors/mholt/sponsorships?tier_id=334058" 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>
|
||||
|
@ -475,7 +475,7 @@
|
|||
Too often we see the catastrophic results of deploying a web server haphazardly in a commercial environment, only to appeal to the community too late with too little information for a problem that takes too long to solve at that point—an incident that could have been mitigated with proper training and support.
|
||||
</p>
|
||||
<p>
|
||||
Our take on sponsorships is that we expect all professional and business use of Caddy to keep an active sponsorship, just as we expect a tree trunk to keep its branches. Sponsorships are not just feel-good donations. They provide crucial value to companies while sustaining ongoing maintenance.
|
||||
Our take on sponsorships is that all professional and business users of Caddy are expected to invest in a sponsorship, just as we expect tree branches to provide nutrition to their trunk and roots. Our sponsorships are not just feel-good donations. They provide crucial value to companies while sustaining ongoing maintenance.
|
||||
</p>
|
||||
<p>
|
||||
The original author of Caddy, Matt Holt, operates Dyanim, LLC to maintain the project and direct development alongside a global community. Sponsorships are fulfilled by Dyanim, LLC under the auspices of the executive sponsor, ZeroSSL.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue