Add dedicated /devops funnel, leave /contact as generic form
deploy / deploy (push) Successful in 7s

Homepage's Technical Help CTA now points to a qualifying page for
DevOps prospects instead of the bare contact form.
This commit is contained in:
2026-07-30 20:44:55 -04:00
parent 2f4c7eaeb6
commit 3a40244d7f
3 changed files with 90 additions and 2 deletions
+1 -2
View File
@@ -13,7 +13,6 @@ description: "DevOps consulting, ghostwriting, and helping fiction authors find
## Technical Help
- Enterprise-grade reliability for small
businesses, without the overhead. [Get in
touch](/contact/).
businesses, without the overhead. [See how](/devops/).
Will Estes lives outside Atlanta with his children and one very opinionated cat. He plays classical guitar and listens to country music. His favorite season is soup season. The mark by the site name is traced from a piece of petrified root wood he keeps on his desk.
+10
View File
@@ -0,0 +1,10 @@
---
title: "Enterprise-grade reliability, without the overhead"
layout: "devops"
description: "DevOps help for small businesses — a simple, secure setup that grows with you, without the enterprise price tag."
hero_subhead: "Tell me what's going on, and I'll tell you honestly what's worth fixing."
proof_bullets:
- "My approach is simple and secure by default, and grows easily as your traffic does — no unnecessary complexity, no vendor sprawl."
- "I run the funnels and mailing list behind it myself, so your site, forms, and list work as one system instead of a pile of disconnected tools."
fit_note: "Best fit for small businesses who want this handled as one thing, not managed piecemeal across a stack of vendors. Not a fit if you're specifically on WordPress or need someone to manage WordPress plugins."
---
+79
View File
@@ -0,0 +1,79 @@
{{ define "main" }}
<h1>{{ .Title }}</h1>
{{ with .Params.hero_subhead }}<p style="opacity:0.85;">{{ . }}</p>{{ end }}
{{ with .Params.proof_bullets }}
<ul class="course-bullets">
{{ range . }}<li>{{ . | markdownify }}</li>{{ end }}
</ul>
{{ end }}
{{ with .Params.fit_note }}<p style="opacity:0.7;font-size:0.9em;">{{ . }}</p>{{ end }}
<form id="devops-form" style="margin-top:2rem;">
<label for="name">Name</label>
<input type="text" id="name" name="name" required autocomplete="name">
<label for="email">Email</label>
<input type="email" id="email" name="email" required autocomplete="email">
<label for="company">Company / site</label>
<input type="text" id="company" name="company" autocomplete="organization">
<label for="message">What's going on right now?</label>
<textarea id="message" name="message" rows="6" required placeholder="Site keeps going down, hosting's gotten expensive, email's landing in spam, thinking about migrating off somewhere..."></textarea>
<div class="field-honeypot" aria-hidden="true">
<label for="website">Leave this field empty</label>
<input type="text" id="website" name="website" tabindex="-1" autocomplete="off">
</div>
<button type="submit" class="btn">Tell me what's going on</button>
</form>
<p id="devops-status" role="status" style="margin-top:1rem;"></p>
<p style="margin-top:2rem;">Prefer to just get on a call? <a href="/talk/">Book a time →</a></p>
<script>
(function () {
var form = document.getElementById("devops-form");
var status = document.getElementById("devops-status");
form.addEventListener("submit", function (e) {
e.preventDefault();
var messageParts = [];
if (form.company.value) {
messageParts.push("Company/site: " + form.company.value);
messageParts.push("");
}
messageParts.push(form.message.value);
var payload = {
name: form.name.value,
email: form.email.value,
message: messageParts.join("\n"),
website: form.website.value
};
var submitBtn = form.querySelector("button[type=submit]");
submitBtn.disabled = true;
status.textContent = "Sending…";
fetch("{{ .Site.Params.eec_base_url }}/contact", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload)
}).then(function (res) {
submitBtn.disabled = false;
if (res.ok) {
form.reset();
status.textContent = "Thanks — I'll get back to you soon.";
return;
}
return res.text().then(function (msg) {
status.textContent = msg || "Something went wrong sending that. Try again, or email hello@reground.org directly.";
});
}).catch(function () {
submitBtn.disabled = false;
status.textContent = "Something went wrong sending that. Try again, or email hello@reground.org directly.";
});
});
})();
</script>
{{ end }}