# Contact

Published August 24, 2026 · Updated September 14, 2026
## Contact

We read every message. If something is broken, outdated, or missing from the site, tell us. That is how the site gets better.

<div class="contact-form-wrap">
<form id="contact-form" class="contact-form" novalidate>
  <input type="text" name="website" class="hp-field" tabindex="-1" autocomplete="off" aria-hidden="true">
  <div class="form-row">
    <div class="form-field"><label for="cf-name">Name *</label><input type="text" id="cf-name" name="name" required maxlength="100" placeholder="Your name"></div>
    <div class="form-field"><label for="cf-email">Email *</label><input type="email" id="cf-email" name="email" required maxlength="150" placeholder="you@example.com"></div>
  </div>
  <div class="form-field"><label for="cf-subject">Subject</label><input type="text" id="cf-subject" name="subject" maxlength="200" placeholder="What is this about?"></div>
  <div class="form-field"><label for="cf-message">Message *</label><textarea id="cf-message" name="message" required rows="6" maxlength="3000" placeholder="Write your message"></textarea></div>
  <div class="cf-turnstile" data-sitekey="0x4AAAAAAE0tjS-502jUnKo5" data-action="contact" data-theme="light" data-callback="tsOk" data-error-callback="tsHata"></div>
  <button type="submit" class="btn btn-primary">Send message</button>
  <p class="form-status" id="cf-status" role="status"></p>
</form>
</div>

<script>
window.__ts = { durum: 'bekliyor', kod: '' };
function tsOk() { window.__ts.durum = 'ok'; }
function tsHata(kod) {
  window.__ts.durum = 'hata'; window.__ts.kod = kod || 'bilinmiyor';
  var s = document.getElementById('cf-status');
  if (s) {
    s.className = 'form-status err';
    s.textContent = 'Bot check did not load (' + window.__ts.kod + '). You can email contact@stacktrekker.com instead.';
  }
}
(function () {
  var k = document.querySelector('.cf-turnstile');
  if (k && document.documentElement.getAttribute('data-theme') === 'dark') { k.setAttribute('data-theme', 'dark'); }
})();
</script>
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

<script>
(function () {
  var form = document.getElementById('contact-form');
  var status = document.getElementById('cf-status');
  form.addEventListener('submit', function (e) {
    e.preventDefault();
    status.textContent = 'Sending...';
    status.className = 'form-status';
    var data = {
      site: 'st',
      name: document.getElementById('cf-name').value,
      email: document.getElementById('cf-email').value,
      subject: document.getElementById('cf-subject').value,
      message: document.getElementById('cf-message').value,
      website: form.querySelector('.hp-field').value
    };
    var tsToken = (typeof turnstile !== 'undefined') ? turnstile.getResponse() : '';
    if (!tsToken) {
      status.textContent = 'Please wait a moment for the verification to finish, then try again. If it keeps failing, email us instead.';
      status.className = 'form-status err';
      return;
    }
    data['cf-turnstile-response'] = tsToken;
    fetch('/api/contact', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(data)
    }).then(function (r) { return r.json(); }).then(function (j) {
      if (j.ok) {
        status.textContent = 'Thanks. Your message is on its way and we reply within 2-3 business days.';
        status.className = 'form-status ok';
        form.reset();
        if (typeof turnstile !== 'undefined') { turnstile.reset(); }
      } else {
        status.textContent = j.error || 'Something went wrong. Please try again.';
        status.className = 'form-status err';
      }
    }).catch(function () {
      status.textContent = 'Network error. Please try again, or email us instead.';
      status.className = 'form-status err';
    });
  });
})();
</script>

## Email us directly

**Email:** contact@stacktrekker.com

For corrections, include the article URL and what you found. For business inquiries, put "Business" in the subject line.

*We aim to reply within 2-3 business days.*

---

Source: https://stacktrekker.com/contact/
