diff --git a/docs/assets/brand/public.css b/docs/assets/brand/public.css index 0d773c6..c34c897 100644 --- a/docs/assets/brand/public.css +++ b/docs/assets/brand/public.css @@ -28,3 +28,50 @@ body { .md-typeset code { border-radius: 4px; } + +/* Floating "Buy me a coffee" — self-contained (docs do not load site.css) */ +.support-fab { + position: fixed; + right: 20px; + bottom: 20px; + z-index: 50; + display: inline-flex; + align-items: center; + gap: 9px; + padding: 12px 18px; + border-radius: 999px; + background: #f6b269; + border: 1px solid #f6b269; + color: #111; + font: 700 14px/1 Inter, Satoshi, "Helvetica Neue", Arial, sans-serif; + text-decoration: none; + box-shadow: 0 12px 34px rgba(246, 178, 105, .28); + transition: transform .15s ease, box-shadow .15s ease, background-color .15s ease; +} +.support-fab svg { + width: 20px; + height: 20px; + flex: 0 0 20px; + fill: none; + stroke: #111; + stroke-width: 1.9; + stroke-linejoin: round; + stroke-linecap: round; +} +.support-fab:hover { + transform: translateY(-2px); + background: #f8c184; + box-shadow: 0 16px 40px rgba(246, 178, 105, .4); +} +.support-fab:focus-visible { + outline: 3px solid #f8f8f8; + outline-offset: 3px; +} +@media (max-width: 600px) { + .support-fab span { display: none; } + .support-fab { right: 14px; bottom: 14px; padding: 11px; } +} +@media (prefers-reduced-motion: reduce) { + .support-fab { transition: none; } + .support-fab:hover { transform: none; } +} diff --git a/website/404.html b/website/404.html index 5b7553a..3dcbb8c 100644 --- a/website/404.html +++ b/website/404.html @@ -1 +1 @@ -Not found — SpawnWP
404

Nothing spawned here.

The requested page does not exist.

+Not found — SpawnWP
404

Nothing spawned here.

The requested page does not exist.

Buy me a coffee diff --git a/website/assets/screens/plugin.png b/website/assets/screens/plugin.png new file mode 100644 index 0000000..0e75a97 Binary files /dev/null and b/website/assets/screens/plugin.png differ diff --git a/website/assets/site.css b/website/assets/site.css index e83e3ab..bac256e 100644 --- a/website/assets/site.css +++ b/website/assets/site.css @@ -1,13 +1,40 @@ -:root{--apricot:#f6b26a;--off:#f8f8f8;--slate:#a1a1aa;--charcoal:#0d0d10;--muted:#2a2a2f;--line:#24242a;--black:#000;--max:1280px} -*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;overflow-x:hidden;background:var(--black);color:var(--off);font-family:Inter,Satoshi,"Helvetica Neue",Arial,sans-serif;line-height:1.5}img,picture,svg{max-width:100%}h1,h2,h3,p,figcaption{overflow-wrap:break-word}.skip{position:absolute;left:-9999px}.skip:focus{left:16px;top:16px;z-index:20;background:var(--apricot);color:#000;padding:10px 14px}.site-header,footer{max-width:var(--max);margin:auto;padding:24px 32px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:12px;color:var(--off);text-decoration:none;font-size:21px;font-weight:600;letter-spacing:-.02em}.brand strong{color:var(--apricot)}.brand-mark{display:grid;grid-template-columns:repeat(3,7px);gap:3px}.brand-mark i{width:7px;height:7px;border-radius:2px;background:#3a3a3f}.brand-mark i:nth-child(3){background:transparent;border:1px solid var(--apricot)}.brand-mark i:nth-child(5){background:var(--apricot)}nav{display:flex;gap:28px}nav a,footer a{color:var(--slate);text-decoration:none;font-size:14px}nav a:hover,footer a:hover{color:var(--off)}main{overflow:hidden}.hero-copy,.hero>*,.split>*,.install>*,.deploy-intro>*,.download-details>*,.steps li>div,footer>*{min-width:0} +:root{--apricot:#f6b269;--off:#f8f8f8;--slate:#a1a1aa;--charcoal:#0d0d10;--muted:#2a2a2f;--line:#24242a;--cell:#3a3a3f;--black:#000;--max:1280px} +*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;overflow-x:hidden;background:var(--black);color:var(--off);font-family:Inter,Satoshi,"Helvetica Neue",Arial,sans-serif;line-height:1.5}img,picture,svg{max-width:100%}h1,h2,h3,p,figcaption{overflow-wrap:break-word}.skip{position:absolute;left:-9999px}.skip:focus{left:16px;top:16px;z-index:20;background:var(--apricot);color:#000;padding:10px 14px}.site-header,footer{max-width:var(--max);margin:auto;padding:24px 32px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:12px;color:var(--off);text-decoration:none;font-size:21px;font-weight:600;letter-spacing:-.02em}.brand strong{color:var(--apricot)}.brand-mark{display:grid;grid-template-columns:repeat(3,7px);gap:3px}.brand-mark i{width:7px;height:7px;border-radius:2px;background:#3a3a3f}.brand-mark i:nth-child(3){background:transparent;border:1px solid var(--apricot)}.brand-mark i:nth-child(5){background:var(--apricot)}nav{display:flex;gap:28px}nav a,footer a{color:var(--slate);text-decoration:none;font-size:14px}nav a:hover,footer a:hover{color:var(--off)}main{overflow:hidden}.hero-copy,.hero>*,.split>*,.install>*,.plugin-intro>*,.download-details>*,.steps li>div,footer>*{min-width:0} .hero{max-width:var(--max);margin:auto;padding:96px 32px 80px;display:grid;grid-template-columns:minmax(0,.86fr) minmax(480px,1.14fr);gap:64px;align-items:center}.hero h1{font-size:clamp(50px,6.5vw,86px);line-height:.95;letter-spacing:-.055em;margin:0;font-weight:500}.hero h1 em{color:var(--apricot);font-style:normal}.eyebrow{text-transform:uppercase;letter-spacing:.22em;color:var(--apricot);font-size:12px;font-weight:700;margin-bottom:24px}.lede{max-width:650px;color:var(--slate);font-size:19px;margin:32px 0 26px}.actions{display:flex;gap:12px;flex-wrap:wrap;margin:26px 0}.button{display:inline-flex;padding:13px 18px;border-radius:4px;text-decoration:none;font-size:14px;font-weight:650;border:1px solid var(--line);transition:transform .15s}.button.primary{background:var(--apricot);color:#111;border-color:var(--apricot)}.button.secondary{color:var(--off);background:var(--charcoal)}.button:hover{transform:translateY(-1px)}.terminal{display:flex;gap:12px;align-items:center;width:100%;max-width:680px;min-width:0;background:var(--charcoal);border:1px solid var(--line);padding:14px 14px 14px 18px;border-radius:6px;overflow:hidden}.terminal>span{flex:0 0 auto;color:var(--apricot)}.terminal code{flex:1;min-width:0;white-space:normal;overflow-wrap:anywhere}.copy-command{display:grid;place-items:center;flex:0 0 36px;width:36px;height:36px;padding:8px;border:1px solid var(--line);border-radius:4px;background:#18181c;color:var(--slate);cursor:pointer}.copy-command:hover,.copy-command:focus-visible{border-color:var(--apricot);color:var(--apricot);outline:none}.copy-command.is-copied{border-color:#62c98b;color:#62c98b}.copy-command svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linejoin:round}code{font:13px/1.5 "SFMono-Regular",Consolas,monospace;white-space:nowrap} .product-slider{min-width:0;border:1px solid #34343b;border-radius:10px;background:#08080a;box-shadow:0 28px 90px rgba(246,178,106,.1);overflow:hidden}.slides{aspect-ratio:1.48;display:grid;place-items:center;background:#050505}.slide{margin:0;width:100%;height:100%;display:grid;grid-template-rows:1fr auto}.slide[hidden]{display:none}.slide img{display:block;width:100%;height:100%;min-height:0;object-fit:contain;background:#000}.slide figcaption{display:flex;align-items:baseline;gap:12px;padding:13px 16px;border-top:1px solid var(--line);font-size:13px}.slide figcaption span{color:var(--slate)}.slider-controls{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-top:1px solid var(--line)}.slider-controls button{appearance:none;border:1px solid var(--line);background:var(--charcoal);color:var(--off);cursor:pointer;border-radius:4px;width:34px;height:30px}.slider-controls button:hover,.slider-controls button:focus-visible{border-color:var(--apricot);outline:none}.slider-dots{display:flex;gap:8px}.slider-dots button{width:28px;height:4px;border:0;border-radius:3px;padding:0;background:#414148}.slider-dots button.is-active{background:var(--apricot)} .manifesto{border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.section-narrow{max-width:var(--max);margin:auto;padding:72px 32px}.manifesto p{font-size:clamp(27px,3.5vw,46px);line-height:1.15;letter-spacing:-.035em;max-width:1050px;margin:0 0 30px}.manifesto strong{color:var(--apricot);font-size:17px}.principles{display:grid;grid-template-columns:repeat(3,1fr);max-width:var(--max);margin:auto;border-bottom:1px solid var(--line)}.principles article{padding:40px 32px;border-right:1px solid var(--line)}.principles article:last-child{border:0}.principles span,.mini-mark{color:var(--apricot);font:11px monospace;letter-spacing:.16em}.principles h2,.feature-grid h3{font-size:20px;margin:22px 0 8px}.principles p,.feature-grid p,.section p{color:var(--slate);margin:0}.section{max-width:var(--max);margin:auto;padding:104px 32px;border-bottom:1px solid var(--line)}.section h2{font-size:clamp(36px,5vw,64px);line-height:1.05;letter-spacing:-.04em;margin:0;max-width:820px;font-weight:500}.split{display:grid;grid-template-columns:1fr 1fr;gap:80px}.steps{list-style:none;padding:0;margin:0}.steps li{display:flex;gap:20px;padding:0 0 28px;margin-bottom:28px;border-bottom:1px solid var(--line)}.steps li>span{display:grid;place-items:center;width:32px;height:32px;flex:0 0 auto;border:1px solid var(--apricot);color:var(--apricot);border-radius:4px}.steps h3{margin:2px 0 8px;font-size:18px}.feature-grid{display:grid;grid-template-columns:repeat(3,1fr);margin-top:56px;border-top:1px solid var(--line);border-left:1px solid var(--line)}.feature-grid article{padding:34px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);min-height:230px}.feature-grid .feature-wide{grid-column:1/-1;min-height:0}.feature-wide a{display:inline-block;color:var(--apricot);margin-top:20px;text-decoration:none}.install{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:end}.install .terminal{margin-top:0}.boundary{max-width:var(--max);margin:0 auto;padding:28px 32px;color:var(--slate);font-size:14px;border-bottom:1px solid var(--line)}.boundary strong{color:var(--off)} footer{border-bottom:0;border-top:1px solid var(--line);padding-top:48px;padding-bottom:48px;gap:24px}footer p{color:var(--slate);font-size:13px}footer div{display:flex;gap:20px} -.deploy-intro{display:grid;grid-template-columns:1.1fr .9fr;gap:70px;align-items:end}.deploy-intro h1{font-size:clamp(52px,7.5vw,100px);line-height:.95;letter-spacing:-.055em;margin:0;font-weight:500}.deploy-intro h1 em{font-style:normal;color:var(--apricot)}.preview-note{font-size:13px}.preview-note strong{color:var(--apricot)}.deploy-steps{list-style:none;padding:0;margin:56px 0 0;display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line);border-left:1px solid var(--line)}.deploy-steps li{padding:28px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.deploy-steps li>span{color:var(--apricot);font:12px monospace}.deploy-steps h3{margin:24px 0 8px}.deploy-steps p,.prose p{color:var(--slate)}.prose p{margin:0 0 22px}.prose strong{color:var(--off)}.download-details{display:grid;grid-template-columns:1fr 1fr;gap:64px}.terminal-list{display:grid;gap:12px}.terminal-list a{color:var(--apricot)}.terminal-list code{white-space:normal;overflow-wrap:anywhere;color:var(--slate);background:var(--charcoal);border:1px solid var(--line);padding:14px} +.plugin-intro{display:grid;grid-template-columns:1.1fr .9fr;gap:70px;align-items:start}.plugin-intro h1{font-size:clamp(52px,7.5vw,100px);line-height:.95;letter-spacing:-.055em;margin:0;font-weight:500}.plugin-intro h1 em{font-style:normal;color:var(--apricot)}.preview-note{font-size:13px}.preview-note strong{color:var(--apricot)}.plugin-shot{margin:0 0 26px;border:1px solid #34343b;border-radius:10px;background:#0b0b0d;box-shadow:0 28px 90px rgba(246,178,106,.1);overflow:hidden}.plugin-shot img{display:block;width:100%;height:auto}.plugin-shot figcaption{padding:13px 16px;border-top:1px solid var(--line);font-size:13px;color:var(--slate)}.plugin-steps{list-style:none;padding:0;margin:56px 0 0;display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line);border-left:1px solid var(--line)}.plugin-steps li{padding:28px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.plugin-steps li>span{color:var(--apricot);font:12px monospace}.plugin-steps h3{margin:24px 0 8px}.plugin-steps p,.prose p{color:var(--slate)}.prose p{margin:0 0 22px}.prose strong{color:var(--off)}.download-details{display:grid;grid-template-columns:1fr 1fr;gap:64px}.terminal-list{display:grid;gap:12px}.terminal-list a{color:var(--apricot)}.terminal-list code{white-space:normal;overflow-wrap:anywhere;color:var(--slate);background:var(--charcoal);border:1px solid var(--line);padding:14px} @media(max-width:1050px){.hero{grid-template-columns:1fr;padding-top:72px}.product-slider{max-width:850px}.hero h1{font-size:clamp(52px,10vw,90px)}} -@media(max-width:800px){.site-header{padding:20px}.site-header nav a:not(:last-child){display:none}.hero{padding:64px 20px}.lede{font-size:18px}.principles,.split,.install,.deploy-intro,.download-details{grid-template-columns:1fr}.principles article{border-right:0;border-bottom:1px solid var(--line)}.section,.section-narrow{padding:72px 20px}.split,.install,.deploy-intro,.download-details{gap:48px}.feature-grid,.deploy-steps{grid-template-columns:1fr}.feature-grid article{min-height:auto}.site-header .brand-mark{display:none}.slide figcaption{align-items:flex-start;flex-direction:column;gap:2px}.boundary{padding:24px 20px}footer{align-items:flex-start;flex-direction:column;padding:40px 20px}footer div{flex-wrap:wrap}} +@media(max-width:800px){.site-header{padding:20px}.site-header nav a:not(:last-child){display:none}.hero{padding:64px 20px}.lede{font-size:18px}.principles,.split,.install,.plugin-intro,.download-details{grid-template-columns:1fr}.principles article{border-right:0;border-bottom:1px solid var(--line)}.section,.section-narrow{padding:72px 20px}.split,.install,.plugin-intro,.download-details{gap:48px}.feature-grid,.plugin-steps{grid-template-columns:1fr}.feature-grid article{min-height:auto}.site-header .brand-mark{display:none}.slide figcaption{align-items:flex-start;flex-direction:column;gap:2px}.boundary{padding:24px 20px}footer{align-items:flex-start;flex-direction:column;padding:40px 20px}footer div{flex-wrap:wrap}} @media(max-width:520px){.hero h1{font-size:clamp(38px,13vw,45px)}.product-slider{margin-left:-12px;margin-right:-12px}.slides{aspect-ratio:1.15}.slider-controls{padding:9px}.terminal{align-items:flex-start;font-size:12px;padding:12px}.copy-command{width:34px;height:34px;flex-basis:34px}.section h2{font-size:clamp(32px,11vw,44px)}} @media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.button:hover{transform:none}} -footer>p{flex:1 1 240px}footer .support-link{display:inline-flex;align-items:center;justify-content:center;gap:9px;min-width:190px;min-height:48px;padding:10px 18px;border-radius:10px;background:#fd0;color:#000;font-size:17px;font-weight:700;line-height:1;text-decoration:none;white-space:nowrap;transition:transform .15s ease,background-color .15s ease}footer .support-link svg{width:25px;height:25px;flex:0 0 25px;fill:#fff;stroke:#000;stroke-width:.5px}footer .support-link:hover{background:#f6b26a;color:#000;transform:translateY(-1px)}footer .support-link:focus-visible{outline:3px solid #f8f8f8;outline-offset:3px}@media(max-width:1050px){footer{flex-wrap:wrap}}@media(max-width:800px){footer .support-link{min-width:190px}}@media(prefers-reduced-motion:reduce){footer .support-link:hover{transform:none}} +footer>p{flex:1 1 240px}@media(max-width:1050px){footer{flex-wrap:wrap}} +/* Signature — spawn grid (hero ambient) */ +.hero{position:relative} +.hero>*:not(.spawn-grid){position:relative;z-index:1} +.spawn-grid{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none} +.spawn-grid::before{content:"";position:absolute;inset:-2px;background-image:radial-gradient(circle,#1b1b21 1.4px,transparent 1.7px);background-size:30px 30px;-webkit-mask-image:radial-gradient(130% 95% at 82% 4%,#000,transparent 68%);mask-image:radial-gradient(130% 95% at 82% 4%,#000,transparent 68%)} +.spawn-grid i{position:absolute;width:9px;height:9px;border-radius:2px;background:var(--apricot);box-shadow:0 0 16px rgba(246,178,105,.45);opacity:0;transform:scale(.3);animation:spawn .6s cubic-bezier(.2,.8,.2,1) forwards} +.spawn-grid i.ghost{background:transparent;border:1.5px solid var(--apricot);box-shadow:none} +.spawn-grid i:nth-child(1){top:16px;right:120px;animation-delay:.10s} +.spawn-grid i:nth-child(2){top:16px;right:84px;animation-delay:.20s} +.spawn-grid i:nth-child(3){top:16px;right:48px;animation-delay:.30s} +.spawn-grid i:nth-child(4){top:52px;right:120px;animation-delay:.42s} +.spawn-grid i:nth-child(5){top:52px;right:84px;animation-delay:.54s;box-shadow:0 0 22px rgba(246,178,105,.65)} +.spawn-grid i:nth-child(6){top:52px;right:48px;animation-delay:.66s} +@keyframes spawn{0%{opacity:0;transform:scale(.3)}60%{opacity:1;transform:scale(1.15)}100%{opacity:.92;transform:scale(1)}} +/* Structural marker — a cell in the system, not a number */ +.cell-mark{display:grid;grid-template-columns:repeat(3,5px);gap:3px;width:max-content;transition:filter .15s ease} +.cell-mark i{width:5px;height:5px;border-radius:1px;background:var(--cell)} +.cell-mark[data-cell="1"] i:nth-child(1),.cell-mark[data-cell="2"] i:nth-child(2),.cell-mark[data-cell="3"] i:nth-child(3),.cell-mark[data-cell="4"] i:nth-child(4),.cell-mark[data-cell="5"] i:nth-child(5),.cell-mark[data-cell="6"] i:nth-child(6),.cell-mark[data-cell="7"] i:nth-child(7),.cell-mark[data-cell="8"] i:nth-child(8),.cell-mark[data-cell="9"] i:nth-child(9){background:var(--apricot)} +.principles article:hover .cell-mark,.feature-grid article:hover .cell-mark{filter:drop-shadow(0 0 7px rgba(246,178,105,.55))} +/* Support — floating */ +.support-fab{position:fixed;right:20px;bottom:20px;z-index:50;display:inline-flex;align-items:center;gap:9px;padding:12px 18px;border-radius:999px;background:var(--apricot);border:1px solid var(--apricot);color:#111;font-size:14px;font-weight:700;line-height:1;text-decoration:none;box-shadow:0 12px 34px rgba(246,178,105,.28);transition:transform .15s ease,box-shadow .15s ease,background-color .15s ease;animation:fab-in .5s .4s ease both} +.support-fab svg{width:20px;height:20px;flex:0 0 20px;fill:none;stroke:#111;stroke-width:1.9;stroke-linejoin:round;stroke-linecap:round} +.support-fab:hover{transform:translateY(-2px);background:#f8c184;box-shadow:0 16px 40px rgba(246,178,105,.4)} +.support-fab:focus-visible{outline:3px solid var(--off);outline-offset:3px} +@keyframes fab-in{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}} +@media(max-width:520px){.support-fab{right:14px;bottom:14px;padding:11px}.support-fab span{display:none}} +@media(prefers-reduced-motion:reduce){.spawn-grid i{animation:none;opacity:.9;transform:none}.support-fab{animation:none}.support-fab:hover{transform:none}} .slide picture{display:block;min-height:0} diff --git a/website/index.html b/website/index.html index 5a092b3..3eeba88 100644 --- a/website/index.html +++ b/website/index.html @@ -40,7 +40,7 @@ @@ -48,6 +48,7 @@
+
Free, self-hosted WordPress lab

Your WordPress lab.
Your server.
Your rules.

@@ -95,9 +96,9 @@

Your WordPress lab.
Your server.
Your rules.

-
01

Disposable by design

Create an environment for a task. Reset it, snapshot it or destroy it when the work is done.

-
02

Self-hosted first

Run on your own Debian or Ubuntu server without a hosted control plane or SaaS dependency.

-
03

Simple operations

Use the web cockpit for routine work and clear logs when you need to inspect the system.

+

Disposable by design

Create an environment for a task. Reset it, snapshot it or destroy it when the work is done.

+

Self-hosted first

Run on your own Debian or Ubuntu server without a hosted control plane or SaaS dependency.

+

Simple operations

Use the web cockpit for routine work and clear logs when you need to inspect the system.

@@ -116,13 +117,13 @@

From a fresh server to WordPress environments.

Built for development work

Everything needed for a focused WordPress lab.

-
01

Isolated stacks

Each environment gets its own Nginx, PHP-FPM, MariaDB, Mailpit and Adminer containers.

-
02

Web cockpit

Create, start, stop, restart, snapshot, restore and destroy environments from one focused interface.

-
03

WordPress QA

The development blueprint includes Plugin Check, Theme Check, PHPCS, PHPStan and Query Monitor.

-
04

Secure defaults

HTTPS, mandatory cockpit authentication, random secrets and loopback-only service ports.

-
05

Multiple PHP versions

Select a supported PHP runtime when creating an environment and keep project requirements explicit.

-
06

No SaaS lock-in

The runtime lives on your server and the project is distributed under the MIT License.

-
Optional WordPress plugin

Need to move a finished site out of your lab?

Use any backup, migration or publishing workflow you prefer. If the destination is a separate, fresh WordPress installation, the optional SpawnWP Deploy plugin can transfer the site once for you. The plugin is not required to use SpawnWP.

See the optional WordPress plugin →
+

Isolated stacks

Each environment gets its own Nginx, PHP-FPM, MariaDB, Mailpit and Adminer containers.

+

Web cockpit

Create, start, stop, restart, snapshot, restore and destroy environments from one focused interface.

+

WordPress QA

The development blueprint includes Plugin Check, Theme Check, PHPCS, PHPStan and Query Monitor.

+

Secure defaults

HTTPS, mandatory cockpit authentication, random secrets and loopback-only service ports.

+

Multiple PHP versions

Select a supported PHP runtime when creating an environment and keep project requirements explicit.

+

No SaaS lock-in

The runtime lives on your server and the project is distributed under the MIT License.

+
Optional WordPress plugin

Need to move a finished site out of your lab?

Use any backup, migration or publishing workflow you prefer. If the destination is a separate, fresh WordPress installation, the optional SpawnWP Deploy plugin can transfer the site once for you. The plugin is not required to use SpawnWP.

See the optional WordPress plugin →
@@ -144,8 +145,8 @@

Bring a fresh server. Spawn everything else.

+ Buy me a coffee diff --git a/website/mkdocs-overrides/main.html b/website/mkdocs-overrides/main.html index bc389a7..ac3de03 100644 --- a/website/mkdocs-overrides/main.html +++ b/website/mkdocs-overrides/main.html @@ -22,3 +22,11 @@ {% endblock %} + +{% block footer %} + {{ super() }} + + + Buy me a coffee + +{% endblock %} diff --git a/website/deploy/index.html b/website/plugin/index.html similarity index 58% rename from website/deploy/index.html rename to website/plugin/index.html index 4d25577..ab09dda 100644 --- a/website/deploy/index.html +++ b/website/plugin/index.html @@ -5,11 +5,11 @@ SpawnWP Deploy — Optional WordPress transfer plugin - + - + @@ -25,7 +25,7 @@ - + @@ -37,19 +37,20 @@
-
Optional WordPress plugin · Public preview

Transfer a finished WordPress site.
Only if you want to.

You do not need this plugin to use SpawnWP. When your work is finished, you can back up, export, migrate or publish the site with any workflow you choose. SpawnWP Deploy is one optional WordPress plugin that can copy a site once to a separate, fresh WordPress installation.

Public preview: use disposable test sites first and keep an independent backup.

-
Three different actions

This is not the SpawnWP installer.

Install SpawnWP sets up the lab and cockpit on your server.

Create environment in the cockpit's Deploy page creates a disposable WordPress site inside that lab.

Publish or export happens when you decide to move finished work elsewhere. You choose the method. The plugin on this page is simply one optional method for a fresh WordPress destination.

-
If you choose this plugin

One transfer between two WordPress sites.

  1. 1

    Install the WordPress plugin twice

    Upload and activate the same plugin ZIP on the source site inside SpawnWP and on the separate, fresh target site.

  2. 2

    Connect the target briefly

    Generate a 15-minute connection key on the target WordPress site and paste it into the source.

  3. 3

    Review before transfer

    Run the compatibility checks, review the result and explicitly confirm before any content is copied.

  4. 4

    Verify or roll back

    The target stages and verifies the package, preserves its URL and administrators, and rolls back automatically if activation fails.

-
Plugin compatibility

Designed for one specific case.

Use the plugin only when both source and target are WordPress single-site on the exact same core and PHP major/minor versions. PHP 8.1+, sodium, ZIP, trusted HTTPS, a reachable REST API, local uploads and direct filesystem writes are required.

The package limit is 2 GiB. WordPress core, users, wp-config.php, MU plugins, drop-ins and SpawnWP development tools are not copied.

Choose another migration method for: existing or live targets, repeated pushes, data merging, selective sync, Multisite or object-storage uploads.

+
Optional WordPress plugin · Public preview

Transfer a finished WordPress site.
Only if you want to.

SpawnWP Deploy plugin screen: paste a short-lived connection key to publish a finished site once to an empty WordPress destination
The SpawnWP Deploy plugin running inside the source WordPress site.

You do not need this plugin to use SpawnWP. When your work is finished, you can back up, export, migrate or publish the site with any workflow you choose. SpawnWP Deploy is one optional WordPress plugin that can copy a site once to a separate, fresh WordPress installation.

Public preview: use disposable test sites first and keep an independent backup.

+
Where this plugin fits

Three different jobs. This plugin does the last one.

Install SpawnWP sets up the lab and cockpit on your server — that is the one-line installer, not this page.

Create a site from the cockpit to spin up a disposable WordPress environment and work in it.

Move a finished site out is where this plugin helps: it copies a site once to a separate, fresh WordPress install. It stays optional — any backup or migration tool works just as well.

+
If you choose this plugin

One transfer between two WordPress sites.

  1. 1

    Install the WordPress plugin twice

    Upload and activate the same plugin ZIP on the source site inside SpawnWP and on the separate, fresh target site.

  2. 2

    Connect the target briefly

    Generate a 15-minute connection key on the target WordPress site and paste it into the source.

  3. 3

    Review before transfer

    Run the compatibility checks, review the result and explicitly confirm before any content is copied.

  4. 4

    Verify or roll back

    The target stages and verifies the package, preserves its URL and administrators, and rolls back automatically if activation fails.

+
Before you transfer

Check it fits your case first.

Use it when both the source and the destination are single-site WordPress, run the same core and PHP version (major.minor), and the destination is a brand-new, empty install.

Your server needs PHP 8.1+ with the sodium and ZIP extensions, trusted HTTPS, a reachable REST API, local uploads and direct file writes. A single transfer can be up to 2 GiB. WordPress core, users, wp-config.php, MU plugins, drop-ins and SpawnWP's own dev tools stay behind on purpose.

Reach for another tool when the destination already has content or is live, or when you need repeated pushes, content merging, selective sync, Multisite or object-storage uploads.

Verify the download

Signed release files.

SHA-256 checksumEd25519 signaturePublic key6fa5bd8e8ae669d4f8775279c8a05636f24162c62c011e1e7a7d274f0b4fee74
- + + Buy me a coffee diff --git a/website/privacy/telemetry/index.html b/website/privacy/telemetry/index.html index 21a4778..0931aa9 100644 --- a/website/privacy/telemetry/index.html +++ b/website/privacy/telemetry/index.html @@ -2,4 +2,4 @@ Telemetry privacy — SpawnWP
Privacy

Optional telemetry

Help us improve SpawnWP by sharing anonymous aggregate usage data. Telemetry is disabled by default, requires explicit consent and expires automatically after 90 days.

Collected

Operational metadata

A random installation identifier, event timestamp, SpawnWP version, operating system family and version, architecture, enabled feature flags and the aggregate number of current environments. Data is sent at activation and then weekly.

Excluded

No identity or project content

Payloads exclude domains, request IP addresses, email, usernames, site names, WordPress content, plugins, logs and credentials. The receiver access log is disabled.

Control

Enable, inspect or disable

Use the Updates page or sudo spawnwp telemetry enable. Inspect locally with spawnwp telemetry status and spawnwp telemetry payload. Disabling requests remote deletion and removes the local identifier and queue.

The receiver transforms the random ID with a server-side HMAC and stores only the latest state, not event history. Records not seen for 90 days are deleted. If a deletion request cannot reach the receiver, its record still expires within that period. Public submissions are not authenticated, so aggregate reports are directional rather than authoritative. Endpoint failures never block SpawnWP.

- +Buy me a coffee diff --git a/website/sitemap-pages.xml b/website/sitemap-pages.xml index e311470..7e9cdf2 100644 --- a/website/sitemap-pages.xml +++ b/website/sitemap-pages.xml @@ -1,6 +1,6 @@ https://spawnwp.com/ - https://spawnwp.com/deploy/ + https://spawnwp.com/plugin/ https://spawnwp.com/privacy/telemetry/